X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fzoom-c.c;h=6e0a88363dd7439846c15112ada66be73afdada6;hp=f2363b6a8640d0ec7d6cd81cdde7796b89b9d113;hb=22c19c698f72ce5328ea6d5d685c019be92d24d3;hpb=32790840d73b1f4a4bde1478e6b14699aac00e94 diff --git a/src/zoom-c.c b/src/zoom-c.c index f2363b6..6e0a883 100644 --- a/src/zoom-c.c +++ b/src/zoom-c.c @@ -136,9 +136,6 @@ void ZOOM_connection_show_task(ZOOM_task task) case ZOOM_TASK_SEARCH: yaz_log(YLOG_LOG, "search p=%p", task); break; - case ZOOM_TASK_RETRIEVE: - yaz_log(YLOG_LOG, "retrieve p=%p", task); - break; case ZOOM_TASK_CONNECT: yaz_log(YLOG_LOG, "connect p=%p", task); break; @@ -201,12 +198,6 @@ void ZOOM_connection_remove_task(ZOOM_connection c) 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; case ZOOM_TASK_SCAN: @@ -374,6 +365,7 @@ ZOOM_API(void) const char *host, int portnum) { const char *val; + const char *http_lead; initlog(); @@ -440,17 +432,25 @@ ZOOM_API(void) else c->lang = 0; + val = ZOOM_options_get(c->options, "sru"); + if (val && *val && !strstr(host, "://")) + http_lead = "http://"; + else + http_lead = ""; + c->sru_mode = get_sru_mode_from_string(val); + if (host) { + char hostn[128]; xfree(c->host_port); if (portnum) { - char hostn[128]; sprintf(hostn, "%.80s:%d", host, portnum); - c->host_port = xstrdup(hostn); + host = hostn; } - else - c->host_port = xstrdup(host); + c->host_port = xmalloc(strlen(host) + strlen(http_lead) + 1); + strcpy(c->host_port, http_lead); + strcat(c->host_port, host); } { @@ -486,9 +486,6 @@ ZOOM_API(void) } } - val = ZOOM_options_get(c->options, "sru"); - c->sru_mode = get_sru_mode_from_string(val); - xfree(c->sru_version); val = ZOOM_options_get(c->options, "sru_version"); c->sru_version = xstrdup(val ? val : "1.2"); @@ -727,6 +724,7 @@ ZOOM_resultset ZOOM_resultset_create(void) #endif resultset_use(1); r->mc_key = 0; + r->live_set = 0; return r; } @@ -754,6 +752,7 @@ ZOOM_API(ZOOM_resultset) yaz_log(c->log_api, "%p ZOOM_connection_search set %p query %p", c, r, q); r->r_sort_spec = ZOOM_query_get_sortspec(q); r->query = q; + ZOOM_query_addref(q); r->options = ZOOM_options_create_with_parent(c->options); @@ -791,8 +790,20 @@ ZOOM_API(ZOOM_resultset) wrbuf_len(r->mc_key), &v_len, &flags, &rc); if (v) { - yaz_log(YLOG_LOG, "For key %s got value %.*s", - wrbuf_cstr(r->mc_key), (int) v_len, v); + ZOOM_Event event; + WRBUF w = wrbuf_alloc(); + + wrbuf_write(w, v, v_len); + free(v); + r->size = odr_atoi(wrbuf_cstr(w)); + + yaz_log(YLOG_LOG, "For key %s got value %s", + wrbuf_cstr(r->mc_key), wrbuf_cstr(w)); + + wrbuf_destroy(w); + event = ZOOM_Event_create(ZOOM_EVENT_RECV_SEARCH); + ZOOM_connection_put_event(c, event); + return r; } else { @@ -831,8 +842,6 @@ ZOOM_API(ZOOM_resultset) ZOOM_resultset_addref(r); - ZOOM_query_addref(q); - if (!c->async) { while (ZOOM_event(1, &c)) @@ -986,19 +995,19 @@ static void ZOOM_resultset_retrieve(ZOOM_resultset r, c->reconnect_ok = 1; } } - task = ZOOM_connection_add_task(c, ZOOM_TASK_RETRIEVE); - task->u.retrieve.resultset = r; - task->u.retrieve.start = start; - task->u.retrieve.count = count; + task = ZOOM_connection_add_task(c, ZOOM_TASK_SEARCH); + task->u.search.resultset = r; + task->u.search.start = start; + task->u.search.count = count; syntax = ZOOM_options_get(r->options, "preferredRecordSyntax"); - task->u.retrieve.syntax = syntax ? xstrdup(syntax) : 0; + task->u.search.syntax = syntax ? xstrdup(syntax) : 0; elementSetName = ZOOM_options_get(r->options, "elementSetName"); - task->u.retrieve.elementSetName = elementSetName + task->u.search.elementSetName = elementSetName ? xstrdup(elementSetName) : 0; cp = ZOOM_options_get(r->options, "schema"); - task->u.retrieve.schema = cp ? xstrdup(cp) : 0; + task->u.search.schema = cp ? xstrdup(cp) : 0; ZOOM_resultset_addref(r); @@ -1496,12 +1505,6 @@ ZOOM_API(int) else ret = ZOOM_connection_Z3950_send_search(c); break; - case ZOOM_TASK_RETRIEVE: - if (c->proto == PROTO_HTTP) - ret = ZOOM_connection_srw_send_search(c); - else - ret = send_Z3950_present(c); - break; case ZOOM_TASK_CONNECT: ret = do_connect(c); break;