X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fzoom-c.c;h=03e6fe3c4efed98ec641c1afeed61973d4510c70;hb=a7585fd1220c684189091e7fba2c5d6cf436031e;hp=2b6b80f49d6a98104b56a2c480e6d3c51c362ec2;hpb=79f02618682f616509d80665126918a07d1f9e80;p=yaz-moved-to-github.git diff --git a/src/zoom-c.c b/src/zoom-c.c index 2b6b80f..03e6fe3 100644 --- a/src/zoom-c.c +++ b/src/zoom-c.c @@ -1,5 +1,5 @@ /* This file is part of the YAZ toolkit. - * Copyright (C) 1995-2012 Index Data + * Copyright (C) 1995-2013 Index Data * See the file LICENSE for details. */ /** @@ -199,11 +199,13 @@ void ZOOM_connection_remove_task(ZOOM_connection c) resultset_destroy(task->u.search.resultset); xfree(task->u.search.syntax); xfree(task->u.search.elementSetName); + xfree(task->u.search.schema); break; case ZOOM_TASK_RETRIEVE: resultset_destroy(task->u.retrieve.resultset); xfree(task->u.retrieve.syntax); xfree(task->u.retrieve.elementSetName); + xfree(task->u.retrieve.schema); break; case ZOOM_TASK_CONNECT: break; @@ -303,6 +305,7 @@ ZOOM_API(ZOOM_connection) c->sru_version = 0; c->no_redirects = 0; + c->saveAPDU_wrbuf = 0; return c; } @@ -628,6 +631,7 @@ ZOOM_API(void) xfree(c->group); xfree(c->password); xfree(c->sru_version); + wrbuf_destroy(c->saveAPDU_wrbuf); xfree(c); } @@ -677,7 +681,6 @@ ZOOM_resultset ZOOM_resultset_create(void) r->odr = odr_createmem(ODR_ENCODE); r->piggyback = 1; r->setname = 0; - r->schema = 0; r->step = 0; for (i = 0; irecord_hash[i] = 0; @@ -721,7 +724,7 @@ ZOOM_API(ZOOM_resultset) ZOOM_task task; const char *cp; int start, count; - const char *syntax, *elementSetName; + const char *syntax, *elementSetName, *schema; #if ZOOM_RESULT_LISTS ZOOM_resultsets set; #endif @@ -744,9 +747,6 @@ ZOOM_API(ZOOM_resultset) cp = ZOOM_options_get(r->options, "setname"); if (cp) r->setname = xstrdup(cp); - cp = ZOOM_options_get(r->options, "schema"); - if (cp) - r->schema = xstrdup(cp); r->databaseNames = ZOOM_connection_get_databases(c, c->options, &r->num_databaseNames, r->odr); @@ -787,8 +787,10 @@ ZOOM_API(ZOOM_resultset) syntax = ZOOM_options_get(r->options, "preferredRecordSyntax"); task->u.search.syntax = syntax ? xstrdup(syntax) : 0; elementSetName = ZOOM_options_get(r->options, "elementSetName"); - task->u.search.elementSetName = elementSetName - ? xstrdup(elementSetName) : 0; + task->u.search.elementSetName = elementSetName ? + xstrdup(elementSetName) : 0; + schema = ZOOM_options_get(r->options, "schema"); + task->u.search.schema = schema ? xstrdup(schema) : 0; ZOOM_resultset_addref(r); @@ -882,7 +884,6 @@ static void resultset_destroy(ZOOM_resultset r) ZOOM_options_destroy(r->options); odr_destroy(r->odr); xfree(r->setname); - xfree(r->schema); yaz_mutex_destroy(&r->mutex); #if SHPTR YAZ_SHPTR_DEC(r->record_wrbuf, wrbuf_destroy); @@ -959,14 +960,7 @@ static void ZOOM_resultset_retrieve(ZOOM_resultset r, ? xstrdup(elementSetName) : 0; cp = ZOOM_options_get(r->options, "schema"); - if (cp) - { - if (!r->schema || strcmp(r->schema, cp)) - { - xfree(r->schema); - r->schema = xstrdup(cp); - } - } + task->u.retrieve.schema = cp ? xstrdup(cp) : 0; ZOOM_resultset_addref(r); @@ -1144,8 +1138,10 @@ ZOOM_API(ZOOM_record) ZOOM_options_get(s->options, "preferredRecordSyntax"); const char *elementSetName = ZOOM_options_get(s->options, "elementSetName"); + const char *schema = + ZOOM_options_get(s->options, "schema"); - return ZOOM_record_cache_lookup(s, pos, syntax, elementSetName); + return ZOOM_record_cache_lookup(s, pos, syntax, elementSetName, schema); } ZOOM_API(ZOOM_record) @@ -1794,20 +1790,56 @@ zoom_ret ZOOM_send_buf(ZOOM_connection c) ZOOM_API(const char *) ZOOM_connection_option_get(ZOOM_connection c, const char *key) { - return ZOOM_options_get(c->options, key); + if (!strcmp(key, "APDU")) + { + return c->saveAPDU_wrbuf ? wrbuf_cstr(c->saveAPDU_wrbuf) : ""; + } + else + return ZOOM_options_get(c->options, key); } ZOOM_API(const char *) ZOOM_connection_option_getl(ZOOM_connection c, const char *key, int *lenp) { - return ZOOM_options_getl(c->options, key, lenp); + if (!strcmp(key, "APDU")) + { + if (c->saveAPDU_wrbuf) + { + *lenp = wrbuf_len(c->saveAPDU_wrbuf); + return wrbuf_cstr(c->saveAPDU_wrbuf); + } + else + { + *lenp = 0; + return ""; + } + } + else + return ZOOM_options_getl(c->options, key, lenp); } ZOOM_API(void) ZOOM_connection_option_set(ZOOM_connection c, const char *key, const char *val) { - ZOOM_options_set(c->options, key, val); + if (!strcmp(key, "saveAPDU")) + { + if (val && strcmp(val, "0")) + { + if (!c->saveAPDU_wrbuf) + c->saveAPDU_wrbuf = wrbuf_alloc(); + else + wrbuf_rewind(c->saveAPDU_wrbuf); + } + else + { + wrbuf_destroy(c->saveAPDU_wrbuf); + c->saveAPDU_wrbuf = 0; + } + ZOOM_connection_save_apdu_wrbuf(c, c->saveAPDU_wrbuf); + } + else + ZOOM_options_set(c->options, key, val); } ZOOM_API(void)