X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=zlint%2Ftest-init-07.cpp;fp=zlint%2Ftest-init-07.cpp;h=fb55cd211be51fe4284232b7f4d6300b4643f159;hb=40213edfa0408f88b008c3d1ee4a4f90dcdf2fb9;hp=0000000000000000000000000000000000000000;hpb=b1f8a12e7743258d4f9654157d212ffcd83ae241;p=yazpp-moved-to-github.git diff --git a/zlint/test-init-07.cpp b/zlint/test-init-07.cpp new file mode 100644 index 0000000..fb55cd2 --- /dev/null +++ b/zlint/test-init-07.cpp @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2004, Index Data. + * See the file LICENSE for details. + * + * $Id: test-init-07.cpp,v 1.1 2004-03-25 23:14:07 adam Exp $ + */ + +#include +#include +#include + +#include + +Zlint_test_init_07::Zlint_test_init_07() +{ +} + +Zlint_test_init_07::~Zlint_test_init_07() +{ +} + +Zlint_code Zlint_test_init_07::init(Zlint *z) +{ + int len; + Z_APDU *apdu = z->create_Z_PDU(Z_APDU_initRequest); + Z_InitRequest *init = apdu->u.initRequest; + Z_OtherInformation **oi; + + z->msg_check_for("for character set negotiation"); + + /* set all options.. see what target really supports .. */ + ODR_MASK_SET(init->protocolVersion, Z_ProtocolVersion_3); + yaz_oi_APDU(apdu, &oi); + if (!oi) + { + z->msg_check_fail("encoding failure"); + return TEST_FINISHED; + } + else + { + 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, z->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( + z->odr_encode(), + negotiationCharset, 5, + (const char**)&yazLang, yazLang ? 1 : 0, 1); + } + } + int r = z->send_Z_PDU(apdu, &len); + if (r < 0) + { + z->msg_check_fail("unable to send init request"); + return TEST_FINISHED; + } + return TEST_CONTINUE; +} + +Zlint_code Zlint_test_init_07::recv_gdu(Zlint *z, Z_GDU *gdu) +{ + if (gdu->which == Z_GDU_Z3950 && + gdu->u.z3950 && gdu->u.z3950->which == Z_APDU_initResponse) + { + Z_InitResponse *init = gdu->u.z3950->u.initResponse; + int ver = z->initResponseGetVersion(init); + int result = init->result ? *init->result : 0; + + if (ODR_MASK_GET(init->options, Z_Options_negotiationModel)) + { + Z_CharSetandLanguageNegotiation *p = + yaz_get_charneg_record(init->otherInfo); + + if (p) { + + char *charset=NULL, *lang=NULL; + int selected; + NMEM m = nmem_create(); + + yaz_get_response_charneg(m, p, &charset, &lang, + &selected); + z->msg_check_ok(); + z->msg_check_info("Accepted character set : %s", charset); + z->msg_check_info("Accepted code language : %s", lang ? lang : "none"); + z->msg_check_info("Accepted records in ...: %d", selected ); + nmem_destroy(m); + return TEST_FINISHED; + } + } + z->msg_check_notapp(); + } + else + z->msg_check_fail("did not receive init response as expected"); + return TEST_FINISHED; +} + +