44 if (!log_level_initialized)
48 log_level_initialized = 1;
56 const char *addinfo,
const char *addinfo2)
68 if ((cp = strrchr(c->
diagset,
'/')))
71 if (addinfo && addinfo2)
73 c->
addinfo = (
char*)
xmalloc(strlen(addinfo) + strlen(addinfo2) + 3);
84 addinfo ? addinfo :
"",
85 addinfo2 ? addinfo2 :
"");
94 if ((cp = strrchr(uri,
'/')))
155 for (task = c->
tasks; task; task = task->
next)
163 taskp = &(*taskp)->
next;
165 (*taskp)->running = 0;
166 (*taskp)->which = which;
174 return c->tasks ? 0 : 1;
240 const char *buf,
int len)
329 char **databaseNames;
337 return databaseNames;
366 const
char *host,
int portnum)
372 yaz_log(c->log_api,
"%p ZOOM_connection_connect host=%s portnum=%d",
373 c, host ? host :
"null", portnum);
393 yaz_log(c->log_details,
"%p ZOOM_connection_connect reconnect ok", c);
397 yaz_log(c->log_details,
"%p ZOOM_connection_connect connect", c);
403 yaz_log(c->log_details,
"%p ZOOM_connection_connect proxy=%s", c, val);
412 yaz_log(c->log_details,
"%p ZOOM_connection_connect tproxy=%s", c, val);
421 yaz_log(c->log_details,
"%p ZOOM_connection_connect charset=%s", c, val);
429 yaz_log(c->log_details,
"%p ZOOM_connection_connect lang=%s", c, val);
441 sprintf(hostn,
"%.80s:%d", host, portnum);
457 char *remainder = c->host_port;
458 char *pcolon = strchr(remainder,
':');
461 while ((pcomma = strchr(remainder,
',')) != 0 &&
462 (pcolon == 0 || pcomma < pcolon))
465 if ((pequals = strchr(remainder,
'=')) != 0)
470 remainder = pcomma+1;
473 if (remainder != c->host_port)
475 remainder =
xstrdup(remainder);
477 c->host_port = remainder;
484 xfree(c->sru_version);
486 c->sru_version =
xstrdup(val ? val :
"1.2");
490 xfree(c->cookie_out);
495 yaz_log(c->log_details,
"%p ZOOM_connection_connect cookie=%s", c, val);
504 yaz_log(c->log_details,
"%p ZOOM_connection_connect clientIP=%s",
530 c->maximum_record_size =
532 c->preferred_message_size =
544 yaz_log(c->log_details,
"%p ZOOM_connection_connect async=%d", c, c->async);
556 #if ZOOM_RESULT_LISTS
580 #if ZOOM_RESULT_LISTS
581 ZOOM_resultsets list;
587 yaz_log(c->log_api,
"%p ZOOM_connection_destroy", c);
591 #if ZOOM_RESULT_LISTS
593 list = c->resultsets;
595 ZOOM_resultsets removed = list;
601 for (r = c->resultsets; r; r = r->
next)
625 xfree(c->cookie_out);
631 xfree(c->sru_version);
642 yaz_log(log_details0,
"%p ZOOM_resultset_addref count=%d",
656 if (g_resultset_mutex == 0)
659 g_resultsets += delta;
662 return resultset_count;
676 yaz_log(log_details0,
"%p ZOOM_resultset_create", r);
726 const char *syntax, *elementSetName;
727 #if ZOOM_RESULT_LISTS
731 yaz_log(c->log_api,
"%p ZOOM_connection_search set %p query %p", c, r, q);
743 (cp != 0 ?
"presentChunk":
"step"), 0);
758 #if ZOOM_RESULT_LISTS
759 yaz_log(log_details,
"%p ZOOM_connection_search: Adding new resultset (%p) to resultsets (%p) ", c, r, c->resultsets);
763 set->
next = c->resultsets;
766 r->
next = c->resultsets;
773 yaz_log(c->log_details,
"ZOOM_connection_search: no comstack");
778 yaz_log(c->log_details,
"ZOOM_connection_search: reconnect");
787 task->
u.
search.recv_search_fired = 0;
792 task->
u.
search.elementSetName = elementSetName
809 const
char *sort_type, const
char *sort_spec)
816 const
char *sort_type, const
char *sort_spec)
826 yaz_log(c->
log_api,
"%p ZOOM_resultset_sort r=%p sort_type=%s sort_spec=%s",
827 r, r, sort_type, sort_spec);
848 task->
u.
sort.resultset = r;
849 task->
u.
sort.q = newq;
874 yaz_log(log_details0,
"%p ZOOM_resultset_destroy r=%p count=%d",
880 yaz_log(log_details0,
"%p ZOOM_connection resultset_destroy: Deleting resultset (%p) ", r->
connection, r);
923 int force_sync,
int start,
int count)
928 const char *syntax, *elementSetName;
932 yaz_log(log_details0,
"%p ZOOM_resultset_retrieve force_sync=%d start=%d"
933 " count=%d", r, force_sync, start, count);
942 yaz_log(log_details0,
"%p ZOOM_resultset_retrieve: no comstack", r);
947 yaz_log(log_details0,
"%p ZOOM_resultset_retrieve: prepare "
960 task->
u.
retrieve.elementSetName = elementSetName
982 size_t start,
size_t count)
984 int force_present = 0;
988 yaz_log(log_api0,
"%p ZOOM_resultset_records r=%p start=%ld count=%ld",
989 r, r, (
long) start, (
long) count);
996 for (i = 0; i< count; i++)
1003 return r->num_facets;
1008 int num = r->num_facets;
1011 for (index = 0; index < num; index++) {
1012 if (!strcmp(facets[index]->facet_name, name)) {
1013 return facets[index];
1021 int num = r->num_facets;
1023 if (index >= 0 && index < num) {
1024 return facets[index];
1038 return (
const char **) r->facets_names;
1044 return field->facet_name;
1050 return field->num_terms;
1055 *freq = field->facet_terms[idx].frequency;
1056 return field->facet_terms[idx].term;
1068 cert_buf, cert_len);
1074 const char *logical_url);
1145 const char *syntax =
1147 const char *elementSetName =
1167 if (getenv(
"ZOOM_RECORD_NO_FORCE_SYNC")) force_sync = 0;
1213 task->
u.
scan.scan = scan;
1231 if (scan->refcount == 0)
1266 if (scan->scan_response && scan->scan_response->entries)
1267 return scan->scan_response->entries->num_entries;
1268 else if (scan->srw_scan_response)
1269 return scan->srw_scan_response->num_terms;
1275 const char **value_term,
size_t *value_len,
1276 const char **disp_term,
size_t *disp_len)
1301 *disp_len = strlen(*disp_term);
1317 *value_term = t->
value;
1318 *value_len = strlen(*value_term);
1323 *disp_term = t->
value;
1324 *disp_len = strlen(*disp_term);
1332 size_t *occ,
size_t *len)
1334 const char *value_term = 0;
1335 size_t value_len = 0;
1336 const char *disp_term = 0;
1337 size_t disp_len = 0;
1340 &disp_term, &disp_len);
1348 size_t *occ,
size_t *len)
1350 const char *value_term = 0;
1351 size_t value_len = 0;
1352 const char *disp_term = 0;
1353 size_t disp_len = 0;
1356 &disp_term, &disp_len);
1396 if (p->refcount == 0)
1427 const
char *val,
int len)
1440 yaz_log(c->log_details,
"%p ZOOM_connection_exec_task type=%d run=%d",
1444 yaz_log(c->log_details,
"%p ZOOM_connection_exec_task "
1445 "removing tasks because of error = %d", c, c->error);
1451 yaz_log(c->log_details,
"%p ZOOM_connection_exec_task "
1452 "task already running", c);
1459 switch (task->
which)
1486 c->tasks->u.sort.resultset->r_sort_spec =
1494 yaz_log(c->log_details,
"%p ZOOM_connection_exec_task "
1495 "remove tasks because no connection exist", c);
1500 yaz_log(c->log_details,
"%p ZOOM_connection_exec_task "
1501 "task removed (complete)", c);
1505 yaz_log(c->log_details,
"%p ZOOM_connection_exec_task "
1516 char *combined_cookies = 0;
1517 int combined_cookies_len = 0;
1526 if (!strcmp(h->
name,
"Set-Cookie"))
1530 if (!(cp = strchr(h->
value,
';')))
1532 if (cp - h->
value >= 1) {
1533 combined_cookies =
xrealloc(combined_cookies, combined_cookies_len + cp - h->
value + 3);
1534 memcpy(combined_cookies+combined_cookies_len, h->
value, cp - h->
value);
1535 combined_cookies[combined_cookies_len + cp - h->
value] =
'\0';
1536 strcat(combined_cookies,
"; ");
1537 combined_cookies_len = strlen(combined_cookies);
1542 if (combined_cookies_len)
1545 "Cookie", combined_cookies);
1546 xfree(combined_cookies);
1579 const char *addinfo,
const char *addinfo2)
1593 const char *location;
1630 if (hres->
code != 200)
1647 if (!strcmp(hres->
version,
"1.0"))
1650 if (!connection_head || strcmp(connection_head,
"Keep-Alive"))
1656 if (connection_head && !strcmp(connection_head,
"close"))
1713 "ODR code %d:%d element=%s offset=%d",
1714 err, x, element ? element :
"<unknown>",
1756 if ((r =
cs_put(c->
cs, buf_out, len_out)) < 0)
1799 if (!strcmp(key,
"APDU"))
1801 return c->saveAPDU_wrbuf ?
wrbuf_cstr(c->saveAPDU_wrbuf) :
"";
1810 if (!strcmp(key,
"APDU"))
1812 if (c->saveAPDU_wrbuf)
1831 if (!strcmp(key,
"saveAPDU"))
1833 if (val && strcmp(val,
"0"))
1835 if (!c->saveAPDU_wrbuf)
1843 c->saveAPDU_wrbuf = 0;
1845 ZOOM_connection_save_apdu_wrbuf(c, c->saveAPDU_wrbuf);
1853 const
char *val,
int len)
1889 const char *addinfo;
1897 const char *diagset;
1910 return "Connect failed";
1912 return "Out of memory";
1914 return "Encoding failed";
1916 return "Decoding failed";
1918 return "Connection lost";
1920 return "Init rejected";
1922 return "Internal failure";
1926 return "Unsupported protocol";
1928 return "Unsupported query type";
1930 return "Invalid query";
1932 return "CQL parsing error";
1934 return "CQL transformation error";
1936 return "CCL configuration error";
1938 return "CCL parsing error";
1940 return "Extended Service. invalid action";
1942 return "Extended Service. invalid version";
1944 return "Extended Service. invalid syntax";
1952 const
char **addinfo, const
char **diagset)
1954 int error = c->error;
1957 if (!c->diagset || !strcmp(c->diagset,
"ZOOM"))
1959 else if (!strcmp(c->diagset,
"HTTP"))
1961 else if (!strcmp(c->diagset,
"Bib-1"))
1963 else if (!strcmp(c->diagset,
"info:srw/diagnostic/1"))
1966 *cp =
"Unknown error and diagnostic set";
1969 *addinfo = c->addinfo ? c->addinfo :
"";
1971 *diagset = c->diagset ? c->diagset :
"";
1977 const
char **addinfo)
2000 "cs_rcvconnect returned %d", c, ret);
2058 return cs->last_event;
2103 yaz_log(log_details0,
"ZOOM_process_event(no=%d,cs=%p)", no, cs);
2105 for (i = 0; i<no; i++)
2117 if (c->mask && mask)