400 bp->m_close_package =
401 new mp::Package(bp->m_session, frontend_package.origin());
402 bp->m_close_package->copy_filter(frontend_package);
404 Package init_package(bp->m_session, frontend_package.origin());
406 init_package.copy_filter(frontend_package);
409 Z_GDU *init_pdu = actual_init_request.get();
411 assert(init_pdu->which == Z_GDU_Z3950);
412 assert(init_pdu->u.z3950->which == Z_APDU_initRequest);
414 Z_InitRequest *req = init_pdu->u.z3950->u.initRequest;
415 ODR_MASK_ZERO(req->options);
417 ODR_MASK_SET(req->options, Z_Options_search);
418 ODR_MASK_SET(req->options, Z_Options_present);
419 ODR_MASK_SET(req->options, Z_Options_namedResultSets);
420 ODR_MASK_SET(req->options, Z_Options_scan);
422 ODR_MASK_SET(req->protocolVersion, Z_ProtocolVersion_1);
423 ODR_MASK_SET(req->protocolVersion, Z_ProtocolVersion_2);
424 ODR_MASK_SET(req->protocolVersion, Z_ProtocolVersion_3);
431 init_package.request() = init_pdu;
445 Z_GDU *gdu = init_package.response().get();
447 if (gdu && gdu->which == Z_GDU_Z3950
448 && gdu->u.z3950->which == Z_APDU_initResponse)
450 Z_InitResponse *res = gdu->u.z3950->u.initResponse;
452 if (ODR_MASK_GET(res->options, Z_Options_namedResultSets))
459 if (*gdu->u.z3950->u.initResponse->result
460 && !init_package.session().is_closed())
463 time(&bp->m_time_last_use);
464 bp->m_sequence_this = 0;
465 bp->m_result_set_sequence = 0;
473 gdu->u.z3950->u.initResponse->userInformationField;
474 if (uif && uif->which == Z_External_userInfo1)
476 Z_OtherInformation *ui = uif->u.userInfo1;
477 if (ui && ui->num_elements >= 1)
479 Z_OtherInformationUnit *unit = ui->list[0];
480 if (unit->which == Z_OtherInfo_externallyDefinedInfo &&
481 unit->information.externallyDefinedInfo &&
482 unit->information.externallyDefinedInfo->which ==
485 Z_DiagnosticFormat *diag =
486 unit->information.externallyDefinedInfo->u.diag1;
489 Z_DiagnosticFormat_s *ds = diag->elements[0];
491 Z_DiagnosticFormat_s_defaultDiagRec)
493 Z_DefaultDiagFormat *e =
494 ds->u.defaultDiagRec;
495 code = *e->condition;
496 if (e->which == Z_DefaultDiagFormat_v2Addinfo
499 addinfo = e->u.v2Addinfo;
502 e->which == Z_DefaultDiagFormat_v3Addinfo
505 addinfo = e->u.v3Addinfo;
514 if (!init_package.session().is_closed())
516 init_package.copy_filter(frontend_package);
517 init_package.session().close();