X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fzoom-c.c;h=a37e14a925d39076ab471df54267b1543556cf86;hb=552f5f29bd93694954609b4669bca00752b92653;hp=7e3203a203cf6b9f0fd6b5a2c77055966c0a3b67;hpb=06eb0818f902a5d6805b656e0ba2e39ac2ed7817;p=yaz-moved-to-github.git diff --git a/src/zoom-c.c b/src/zoom-c.c index 7e3203a..a37e14a 100644 --- a/src/zoom-c.c +++ b/src/zoom-c.c @@ -1,8 +1,8 @@ /* - * Copyright (c) 2000-2003, Index Data + * Copyright (c) 2000-2004, Index Data * See the file LICENSE for details. * - * $Id: zoom-c.c,v 1.12 2003-12-20 00:51:19 adam Exp $ + * $Id: zoom-c.c,v 1.20 2004-01-22 11:20:54 adam Exp $ * * ZOOM layer for C, connections, result sets, queries. */ @@ -895,9 +895,13 @@ static zoom_ret ZOOM_connection_send_init (ZOOM_connection c) odr_malloc(c->odr_out, sizeof(*auth)); const char *auth_groupId = ZOOM_options_get (c->options, "group"); const char *auth_userId = ZOOM_options_get (c->options, "user"); - const char *auth_password = ZOOM_options_get (c->options, "pass"); + const char *auth_password = ZOOM_options_get (c->options, "password"); char *version; + /* support the pass for backwards compatibility */ + if (!auth_password) + auth_password = ZOOM_options_get (c->options, "pass"); + ODR_MASK_SET(ireq->options, Z_Options_search); ODR_MASK_SET(ireq->options, Z_Options_present); ODR_MASK_SET(ireq->options, Z_Options_scan); @@ -918,7 +922,7 @@ static zoom_ret ZOOM_connection_send_init (ZOOM_connection c) ZOOM_options_get(c->options, "implementationName"), odr_prepend(c->odr_out, "ZOOM-C", ireq->implementationName)); - version = odr_strdup(c->odr_out, "$Revision: 1.12 $"); + version = odr_strdup(c->odr_out, "$Revision: 1.20 $"); if (strlen(version) > 10) /* check for unexpanded CVS strings */ version[strlen(version)-2] = '\0'; ireq->implementationVersion = odr_prepend(c->odr_out, @@ -1485,6 +1489,7 @@ ZOOM_record_get (ZOOM_record rec, const char *type_spec, int *len) { char type[40]; char charset[40]; + char xpath[512]; const char *cp; int i; Z_NamePlusRecord *npr; @@ -1507,7 +1512,7 @@ ZOOM_record_get (ZOOM_record rec, const char *type_spec, int *len) } type[i] = '\0'; charset[0] = '\0'; - if (type_spec[i] == ';') + while (type_spec[i] == ';') { i++; while (type_spec[i] == ' ') @@ -1523,8 +1528,16 @@ ZOOM_record_get (ZOOM_record rec, const char *type_spec, int *len) } charset[i] = '\0'; } - } - + else if (!strncmp(type_spec+i, "xpath=", 6)) + { + cp = type_spec+i+6; + for (i = 0; cp[i] && i < sizeof(xpath)-1; i++) + xpath[i] = cp[i]; + xpath[i] = '\0'; + } + while (type_spec[i] == ' ') + i++; + } if (!strcmp (type, "database")) { if (len) @@ -1570,7 +1583,6 @@ ZOOM_record_get (ZOOM_record rec, const char *type_spec, int *len) charset); else if (r->which == Z_External_octet) { - yaz_marc_t mt; const char *ret_buf; switch (ent->value) { @@ -1630,7 +1642,6 @@ ZOOM_record_get (ZOOM_record rec, const char *type_spec, int *len) else if (r->which == Z_External_octet) { const char *ret_buf; - yaz_marc_t mt; int marc_decode_type = YAZ_MARC_MARCXML; if (!strcmp(type, "oai")) @@ -2213,7 +2224,7 @@ ZOOM_scanset_display_term (ZOOM_scanset scan, size_t pos, if (t->displayTerm) { - term = (const char *) t->term->u.general->buf; + term = t->displayTerm; *len = strlen(term); } else if (t->term->which == Z_Term_general) @@ -2442,7 +2453,8 @@ static Z_APDU *create_update_package(ZOOM_package p) int num_db; char **db = set_DatabaseNames(p->connection, p->options, &num_db); const char *action = ZOOM_options_get(p->options, "action"); - const char *recordId = ZOOM_options_get(p->options, "recordId"); + const char *recordIdOpaque = ZOOM_options_get(p->options, "recordIdOpaque"); + const char *recordIdNumber = ZOOM_options_get(p->options, "recordIdNumber"); const char *record_buf = ZOOM_options_get(p->options, "record"); const char *syntax_str = ZOOM_options_get(p->options, "syntax"); int syntax_oid = VAL_NONE; @@ -2518,14 +2530,21 @@ static Z_APDU *create_update_package(ZOOM_package p) notToKeep->elements[0] = (Z_IUSuppliedRecords_elem *) odr_malloc(p->odr_out, sizeof(**notToKeep->elements)); notToKeep->elements[0]->which = Z_IUSuppliedRecords_elem_opaque; - if (recordId) + if (recordIdOpaque) { notToKeep->elements[0]->u.opaque = (Odr_oct *) odr_malloc (p->odr_out, sizeof(Odr_oct)); - notToKeep->elements[0]->u.opaque->size = strlen(recordId); - notToKeep->elements[0]->u.opaque->len = strlen(recordId); + notToKeep->elements[0]->u.opaque->size = + notToKeep->elements[0]->u.opaque->len = strlen(recordIdOpaque); notToKeep->elements[0]->u.opaque->buf = - odr_strdup(p->odr_out, recordId); + odr_strdup(p->odr_out, recordIdOpaque); + } + else if (recordIdNumber) + { + notToKeep->elements[0]->which = Z_IUSuppliedRecords_elem_number; + + notToKeep->elements[0]->u.number = + odr_intdup(p->odr_out, atoi(recordIdNumber)); } else notToKeep->elements[0]->u.opaque = 0; @@ -2953,9 +2972,9 @@ static void handle_http(ZOOM_connection c, Z_HTTP_Response *hres) if (content_type && !yaz_strcmp_del("text/xml", content_type, "; ")) { Z_SOAP *soap_package = 0; - ODR o = odr_createmem(ODR_DECODE); + ODR o = c->odr_in; Z_SOAP_Handler soap_handlers[2] = { - {"http://www.loc.gov/zing/srw/v1.0/", 0, + {"http://www.loc.gov/zing/srw/", 0, (Z_SOAP_fun) yaz_srw_codec}, {0, 0, 0} }; @@ -2980,7 +2999,6 @@ static void handle_http(ZOOM_connection c, Z_HTTP_Response *hres) } else ret = -1; - odr_destroy(o); } if (ret) {