- Z_APDU *apdu = create_Z_PDU(Z_APDU_initRequest);
- Z_InitRequest *init = apdu->u.initRequest;
- int len;
- Z_OtherInformation **oi;
-
- timeout(m_timeout_init);
-
- switch(m_tst_no)
- {
- case 0:
- /* check if target properly negotiates to v3 .. */
- ODR_MASK_ZERO(init->protocolVersion);
- ODR_MASK_SET(init->protocolVersion, Z_ProtocolVersion_1);
- ODR_MASK_SET(init->protocolVersion, Z_ProtocolVersion_2);
- ODR_MASK_SET(init->protocolVersion, Z_ProtocolVersion_3);
- break;
- case 1:
- /* check if target properly negotiates to v2 .. */
- ODR_MASK_ZERO(init->protocolVersion);
- ODR_MASK_SET(init->protocolVersion, Z_ProtocolVersion_1);
- ODR_MASK_SET(init->protocolVersion, Z_ProtocolVersion_2);
- break;
- case 2:
- /* check latest version of target - up to v9 */
- ODR_MASK_ZERO(init->protocolVersion);
- int i;
- for (i = 0; i< 9; i++)
- ODR_MASK_SET(init->protocolVersion, i);
- break;
- case 3:
- /* send refID in init request */
- ODR_MASK_SET(init->protocolVersion, Z_ProtocolVersion_3);
- init->referenceId = mk_refid(REFID_BUF1, REFID_LEN1);
- break;
- case 4:
- /* send double init with differnet refID's */
- ODR_MASK_SET(init->protocolVersion, Z_ProtocolVersion_3);
- ODR_MASK_SET(init->options, Z_Options_concurrentOperations);
- init->referenceId = mk_refid(REFID_BUF1, REFID_LEN1);
- send_Z_PDU(apdu, &len);
-
- apdu = create_Z_PDU(Z_APDU_initRequest);
- init = apdu->u.initRequest;
-
- ODR_MASK_SET(init->protocolVersion, Z_ProtocolVersion_3);
- ODR_MASK_SET(init->options, Z_Options_concurrentOperations);
-
- init->referenceId = mk_refid(REFID_BUF2, REFID_LEN2);
- break;
- case 5:
- /* set all options.. see what target really supports .. */
- ODR_MASK_SET(init->protocolVersion, Z_ProtocolVersion_3);
- ODR_MASK_ZERO(init->options);
- for (i = 0; i <= 24; i++)
- ODR_MASK_SET(init->options, i);
- break;
- case 6:
- ODR_MASK_SET(init->protocolVersion, Z_ProtocolVersion_3);
- yaz_oi_APDU(apdu, &oi);
- if (oi)
- {
- Z_OtherInformationUnit *p0;
- const char *negotiationCharset[] = {
- "UTF-8",
- "UTF-16",
- "UCS-2",
- "UCS-4",
- "ISO-8859-1"
- };
- char *yazLang = 0;
-
- if ((p0=yaz_oi_update(oi, odr_encode(), NULL, 0, 0))) {
- ODR_MASK_SET(init->options, Z_Options_negotiationModel);
-
- p0->which = Z_OtherInfo_externallyDefinedInfo;
- p0->information.externallyDefinedInfo =
-
- yaz_set_proposal_charneg(
- odr_encode(),
- negotiationCharset, 5,
- (const char**)&yazLang, yazLang ? 1 : 0, 1);
- }
- }
- break;
- case 7:
- *init->maximumRecordSize = m_subtst_no * m_subtst_no* 100000 + 2000;
- *init->preferredMessageSize = m_subtst_no * m_subtst_no *100000 + 2000;
- break;
- case 8:
- /* search */
- ODR_MASK_SET(init->protocolVersion, Z_ProtocolVersion_3);
- ODR_MASK_SET(init->options, Z_Options_namedResultSets);
- break;
- case 9:
- /* scan */
- ODR_MASK_SET(init->protocolVersion, Z_ProtocolVersion_3);
- ODR_MASK_SET(init->options, Z_Options_namedResultSets);
- ODR_MASK_SET(init->options, Z_Options_scan);
- break;
- case 10:
- /* sort */
- ODR_MASK_SET(init->protocolVersion, Z_ProtocolVersion_3);
- ODR_MASK_SET(init->options, Z_Options_namedResultSets);
- ODR_MASK_SET(init->options, Z_Options_sort);
- break;
- }
- int r = send_Z_PDU(apdu, &len);