YAZ  4.2.57
Functions | Variables
zoom-c.c File Reference

Implements ZOOM C interface. More...

#include <assert.h>
#include <string.h>
#include <errno.h>
#include "zoom-p.h"
#include <yaz/yaz-util.h>
#include <yaz/xmalloc.h>
#include <yaz/otherinfo.h>
#include <yaz/log.h>
#include <yaz/diagbib1.h>
#include <yaz/charneg.h>
#include <yaz/query-charset.h>
#include <yaz/snprintf.h>
#include <yaz/facet.h>
#include <yaz/shptr.h>

Go to the source code of this file.

Functions

static void resultset_destroy (ZOOM_resultset r)
static zoom_ret do_write_ex (ZOOM_connection c, char *buf_out, int len_out)
static void initlog (void)
void ZOOM_connection_remove_tasks (ZOOM_connection c)
void ZOOM_set_dset_error (ZOOM_connection c, int error, const char *dset, const char *addinfo, const char *addinfo2)
int ZOOM_uri_to_code (const char *uri)
void ZOOM_set_error (ZOOM_connection c, int error, const char *addinfo)
static void clear_error (ZOOM_connection c)
void ZOOM_connection_show_task (ZOOM_task task)
void ZOOM_connection_show_tasks (ZOOM_connection c)
ZOOM_task ZOOM_connection_add_task (ZOOM_connection c, int which)
 ZOOM_API (int)
ZOOM_task ZOOM_connection_insert_task (ZOOM_connection c, int which)
void ZOOM_connection_remove_task (ZOOM_connection c)
static void odr_wrbuf_write (ODR o, void *handle, int type, const char *buf, int len)
 ZOOM_connection_create (ZOOM_options options)
 ZOOM_API (void)
char ** ZOOM_connection_get_databases (ZOOM_connection con, ZOOM_options options, int *num, ODR odr)
 ZOOM_connection_new (const char *host, int portnum)
static zoom_sru_mode get_sru_mode_from_string (const char *s)
 ZOOM_connection_connect (ZOOM_connection c, const char *host, int portnum)
 ZOOM_connection_destroy (ZOOM_connection c)
void ZOOM_resultset_addref (ZOOM_resultset r)
static int resultset_use (int delta)
int resultsets_count (void)
ZOOM_resultset ZOOM_resultset_create (void)
 ZOOM_connection_search_pqf (ZOOM_connection c, const char *q)
 ZOOM_connection_search (ZOOM_connection c, ZOOM_query q)
 ZOOM_resultset_sort (ZOOM_resultset r, const char *sort_type, const char *sort_spec)
 ZOOM_resultset_sort1 (ZOOM_resultset r, const char *sort_type, const char *sort_spec)
 ZOOM_resultset_destroy (ZOOM_resultset r)
 ZOOM_resultset_size (ZOOM_resultset r)
int ZOOM_test_reconnect (ZOOM_connection c)
static void ZOOM_resultset_retrieve (ZOOM_resultset r, int force_sync, int start, int count)
 ZOOM_resultset_records (ZOOM_resultset r, ZOOM_record *recs, size_t start, size_t count)
 ZOOM_resultset_facets_size (ZOOM_resultset r)
 ZOOM_resultset_get_facet_field (ZOOM_resultset r, const char *name)
 ZOOM_resultset_get_facet_field_by_index (ZOOM_resultset r, int index)
 ZOOM_resultset_facets (ZOOM_resultset r)
 ZOOM_resultset_facets_names (ZOOM_resultset r)
 ZOOM_facet_field_name (ZOOM_facet_field field)
 ZOOM_facet_field_term_count (ZOOM_facet_field field)
 ZOOM_facet_field_get_term (ZOOM_facet_field field, size_t idx, int *freq)
static void get_cert (ZOOM_connection c)
static zoom_ret do_connect_host (ZOOM_connection c, const char *logical_url)
static zoom_ret do_connect (ZOOM_connection c)
 ZOOM_resultset_record_immediate (ZOOM_resultset s, size_t pos)
 ZOOM_resultset_record (ZOOM_resultset r, size_t pos)
 ZOOM_connection_scan (ZOOM_connection c, const char *start)
 ZOOM_connection_scan1 (ZOOM_connection c, ZOOM_query q)
 ZOOM_scanset_destroy (ZOOM_scanset scan)
static zoom_ret send_package (ZOOM_connection c)
 ZOOM_scanset_size (ZOOM_scanset scan)
static void ZOOM_scanset_term_x (ZOOM_scanset scan, size_t pos, size_t *occ, const char **value_term, size_t *value_len, const char **disp_term, size_t *disp_len)
 ZOOM_scanset_term (ZOOM_scanset scan, size_t pos, size_t *occ, size_t *len)
 ZOOM_scanset_display_term (ZOOM_scanset scan, size_t pos, size_t *occ, size_t *len)
 ZOOM_scanset_option_get (ZOOM_scanset scan, const char *key)
 ZOOM_scanset_option_set (ZOOM_scanset scan, const char *key, const char *val)
 ZOOM_connection_package (ZOOM_connection c, ZOOM_options options)
 ZOOM_package_destroy (ZOOM_package p)
 ZOOM_package_option_get (ZOOM_package p, const char *key)
 ZOOM_package_option_getl (ZOOM_package p, const char *key, int *lenp)
 ZOOM_package_option_set (ZOOM_package p, const char *key, const char *val)
 ZOOM_package_option_setl (ZOOM_package p, const char *key, const char *val, int len)
 ZOOM_connection_exec_task (ZOOM_connection c)
 executes non-blocking tasks for connection
static zoom_ret send_HTTP_redirect (ZOOM_connection c, const char *uri, Z_HTTP_Response *cookie_hres)
zoom_ret ZOOM_send_GDU (ZOOM_connection c, Z_GDU *gdu)
void ZOOM_set_HTTP_error (ZOOM_connection c, int error, const char *addinfo, const char *addinfo2)
static void handle_http (ZOOM_connection c, Z_HTTP_Response *hres)
static int do_read (ZOOM_connection c)
zoom_ret ZOOM_send_buf (ZOOM_connection c)
 ZOOM_connection_option_get (ZOOM_connection c, const char *key)
 ZOOM_connection_option_getl (ZOOM_connection c, const char *key, int *lenp)
 ZOOM_connection_option_set (ZOOM_connection c, const char *key, const char *val)
 ZOOM_connection_option_setl (ZOOM_connection c, const char *key, const char *val, int len)
 ZOOM_resultset_option_get (ZOOM_resultset r, const char *key)
 ZOOM_resultset_option_set (ZOOM_resultset r, const char *key, const char *val)
 ZOOM_connection_errcode (ZOOM_connection c)
 ZOOM_connection_errmsg (ZOOM_connection c)
 ZOOM_connection_addinfo (ZOOM_connection c)
 ZOOM_connection_diagset (ZOOM_connection c)
 ZOOM_diag_str (int error)
 ZOOM_connection_error_x (ZOOM_connection c, const char **cp, const char **addinfo, const char **diagset)
 ZOOM_connection_error (ZOOM_connection c, const char **cp, const char **addinfo)
static void ZOOM_connection_do_io (ZOOM_connection c, int mask)
 ZOOM_connection_last_event (ZOOM_connection cs)
 ZOOM_connection_process (ZOOM_connection c)
 process one event for connection
 ZOOM_event_nonblock (int no, ZOOM_connection *cs)
 process one event for one of connections given

Variables

static int log_api0 = 0
static int log_details0 = 0
static int g_resultsets = 0
static YAZ_MUTEX g_resultset_mutex = 0

Detailed Description

Implements ZOOM C interface.

Definition in file zoom-c.c.

Function Documentation

static void clear_error ( ZOOM_connection  c)
static
static zoom_ret do_connect ( ZOOM_connection  c)
static

Definition at line 1076 of file zoom-c.c.

References do_connect_host(), and ZOOM_connection_p::host_port.

Referenced by ZOOM_connection_exec_task().

static zoom_ret do_connect_host ( ZOOM_connection  c,
const char *  logical_url 
)
static
static int do_read ( ZOOM_connection  c)
static
static zoom_ret do_write_ex ( ZOOM_connection  c,
char *  buf_out,
int  len_out 
)
static
static void get_cert ( ZOOM_connection  c)
static
static zoom_sru_mode get_sru_mode_from_string ( const char *  s)
static
static void handle_http ( ZOOM_connection  c,
Z_HTTP_Response hres 
)
static
static void initlog ( void  )
static
static void odr_wrbuf_write ( ODR  o,
void *  handle,
int  type,
const char *  buf,
int  len 
)
static

Definition at line 239 of file zoom-c.c.

References wrbuf_write().

Referenced by ZOOM_API().

static void resultset_destroy ( ZOOM_resultset  r)
static
static int resultset_use ( int  delta)
static
int resultsets_count ( void  )

Definition at line 665 of file zoom-c.c.

References resultset_use().

static zoom_ret send_HTTP_redirect ( ZOOM_connection  c,
const char *  uri,
Z_HTTP_Response cookie_hres 
)
static
static zoom_ret send_package ( ZOOM_connection  c)
static
ZOOM_API ( int  )

Definition at line 172 of file zoom-c.c.

ZOOM_API ( void  )

Definition at line 310 of file zoom-c.c.

References odr_createmem(), odr_destroy(), ODR_PRINT, odr_set_stream(), and odr_wrbuf_write().

ZOOM_task ZOOM_connection_add_task ( ZOOM_connection  c,
int  which 
)
ZOOM_connection_addinfo ( ZOOM_connection  c)

Definition at line 1887 of file zoom-c.c.

References ZOOM_connection_error().

ZOOM_connection_connect ( ZOOM_connection  c,
const char *  host,
int  portnum 
)
ZOOM_connection_create ( ZOOM_options  options)

Definition at line 247 of file zoom-c.c.

References ZOOM_connection_p::addinfo, ZOOM_connection_p::async, ZOOM_connection_p::buf_in, ZOOM_connection_p::buf_out, ZOOM_connection_p::charset, ZOOM_connection_p::client_IP, ZOOM_connection_p::cookie_in, ZOOM_connection_p::cookie_out, ZOOM_connection_p::cs, ZOOM_connection_p::diagset, ZOOM_connection_p::group, ZOOM_connection_p::host_port, initlog(), ZOOM_connection_p::lang, ZOOM_connection_p::last_event, ZOOM_connection_p::len_in, ZOOM_connection_p::len_out, ZOOM_connection_p::log_api, log_api0, ZOOM_connection_p::log_details, log_details0, ZOOM_connection_p::m_queue_back, ZOOM_connection_p::m_queue_front, ZOOM_connection_p::maximum_record_size, ZOOM_connection_p::no_redirects, odr_createmem(), ODR_DECODE, ODR_ENCODE, ZOOM_connection_p::odr_in, ZOOM_connection_p::odr_out, ZOOM_connection_p::odr_print, ZOOM_connection_p::odr_save, ZOOM_connection_p::options, ZOOM_connection_p::password, ZOOM_connection_p::preferred_message_size, ZOOM_connection_p::proto, PROTO_Z3950, ZOOM_connection_p::proxy, ZOOM_connection_p::reconnect_ok, ZOOM_connection_p::resultsets, ZOOM_connection_p::saveAPDU_wrbuf, ZOOM_connection_p::sru_version, ZOOM_connection_p::state, STATE_IDLE, ZOOM_connection_p::support_named_resultsets, ZOOM_connection_p::tasks, ZOOM_connection_p::tproxy, ZOOM_connection_p::user, xmalloc, yaz_log(), ZOOM_connection_set_mask(), ZOOM_ERROR_NONE, ZOOM_EVENT_NONE, ZOOM_options_create_with_parent(), and ZOOM_set_error().

Referenced by ZOOM_connection_new(), and ZOOM_query_cql2rpn().

ZOOM_connection_destroy ( ZOOM_connection  c)
ZOOM_connection_diagset ( ZOOM_connection  c)

Definition at line 1895 of file zoom-c.c.

References ZOOM_connection_error_x().

static void ZOOM_connection_do_io ( ZOOM_connection  c,
int  mask 
)
static
ZOOM_connection_errcode ( ZOOM_connection  c)

Definition at line 1873 of file zoom-c.c.

References ZOOM_connection_error().

ZOOM_connection_errmsg ( ZOOM_connection  c)

Definition at line 1879 of file zoom-c.c.

References ZOOM_connection_error().

ZOOM_connection_error ( ZOOM_connection  c,
const char **  cp,
const char **  addinfo 
)
ZOOM_connection_error_x ( ZOOM_connection  c,
const char **  cp,
const char **  addinfo,
const char **  diagset 
)

Definition at line 1951 of file zoom-c.c.

References yaz_diag_srw_str(), z_HTTP_errmsg(), and ZOOM_diag_str().

Referenced by ZOOM_connection_diagset(), and ZOOM_connection_error().

ZOOM_connection_exec_task ( ZOOM_connection  c)

executes non-blocking tasks for connection

Parameters
cconnection
Return values
0no task was executed
1task was executed (but probably not completed)

This function, unlike, ZOOM_connection_process, does not try to return any events (and remove them). But events may be generated from it. These are saved and may later be retrieved with ZOOM_connection_process and ZOOM_connection_last_event .

Definition at line 1433 of file zoom-c.c.

References do_connect(), PROTO_HTTP, ZOOM_task_p::running, send_package(), send_Z3950_present(), send_Z3950_sort(), ZOOM_task_p::which, yaz_log(), zoom_complete, ZOOM_connection_remove_task(), ZOOM_connection_remove_tasks(), ZOOM_connection_srw_send_scan(), ZOOM_connection_srw_send_search(), ZOOM_connection_Z3950_send_scan(), ZOOM_connection_Z3950_send_search(), ZOOM_ERROR_NONE, ZOOM_query_get_sortspec(), ZOOM_TASK_CONNECT, ZOOM_TASK_PACKAGE, ZOOM_TASK_RETRIEVE, ZOOM_TASK_SCAN, ZOOM_TASK_SEARCH, and ZOOM_TASK_SORT.

Referenced by do_connect_host(), ZOOM_connection_do_io(), ZOOM_connection_process(), and ZOOM_handle_Z3950_apdu().

char** ZOOM_connection_get_databases ( ZOOM_connection  con,
ZOOM_options  options,
int *  num,
ODR  odr 
)
ZOOM_task ZOOM_connection_insert_task ( ZOOM_connection  c,
int  which 
)
ZOOM_connection_last_event ( ZOOM_connection  cs)

Definition at line 2054 of file zoom-c.c.

References ZOOM_EVENT_NONE.

ZOOM_connection_new ( const char *  host,
int  portnum 
)

Definition at line 341 of file zoom-c.c.

References ZOOM_connection_connect(), and ZOOM_connection_create().

ZOOM_connection_option_get ( ZOOM_connection  c,
const char *  key 
)

Definition at line 1797 of file zoom-c.c.

References wrbuf_cstr(), and ZOOM_options_get().

Referenced by cql2pqf().

ZOOM_connection_option_getl ( ZOOM_connection  c,
const char *  key,
int *  lenp 
)

Definition at line 1808 of file zoom-c.c.

References wrbuf_cstr(), wrbuf_len, and ZOOM_options_getl().

ZOOM_connection_option_set ( ZOOM_connection  c,
const char *  key,
const char *  val 
)
ZOOM_connection_option_setl ( ZOOM_connection  c,
const char *  key,
const char *  val,
int  len 
)

Definition at line 1852 of file zoom-c.c.

References ZOOM_options_setl().

Referenced by get_cert().

ZOOM_connection_package ( ZOOM_connection  c,
ZOOM_options  options 
)
ZOOM_connection_process ( ZOOM_connection  c)

process one event for connection

Parameters
cconnection
Return values
0no event was processed
1event was processed for connection

This function attemps to deal with outstandings events in a non-blocking fashion. If no event was processed (return value of 0), then the system should attempt to deal with sockets in blocking mode using socket select/poll which means calling the following functions: ZOOM_connection_get_socket, ZOOM_connection_get_mask, ZOOM_connection_get_timeout. If an event was processed call this function again.

Definition at line 2076 of file zoom-c.c.

References ZOOM_connection_exec_task(), ZOOM_connection_get_event(), and ZOOM_Event_destroy().

Referenced by ZOOM_event_nonblock().

void ZOOM_connection_remove_task ( ZOOM_connection  c)
void ZOOM_connection_remove_tasks ( ZOOM_connection  c)
ZOOM_connection_scan ( ZOOM_connection  c,
const char *  start 
)
ZOOM_connection_scan1 ( ZOOM_connection  c,
ZOOM_query  q 
)
ZOOM_connection_search ( ZOOM_connection  c,
ZOOM_query  q 
)
ZOOM_connection_search_pqf ( ZOOM_connection  c,
const char *  q 
)
void ZOOM_connection_show_task ( ZOOM_task  task)
void ZOOM_connection_show_tasks ( ZOOM_connection  c)
ZOOM_diag_str ( int  error)
ZOOM_event_nonblock ( int  no,
ZOOM_connection cs 
)

process one event for one of connections given

Parameters
nonumber of connections (size of cs)
csconnection array
Return values
0no event was processed
>0event was processed for connection at (retval-1)

This function attemps to deal with outstandings events in a non-blocking mode. If no events was processed (return value of 0), then the system should attempt to deal with sockets in blocking mode using socket select/poll which means calling the following functions: ZOOM_connection_get_socket, ZOOM_connection_get_mask, ZOOM_connection_get_timeout.

Definition at line 2099 of file zoom-c.c.

References yaz_log(), and ZOOM_connection_process().

Referenced by ZOOM_event().

ZOOM_facet_field_get_term ( ZOOM_facet_field  field,
size_t  idx,
int *  freq 
)

Definition at line 1054 of file zoom-c.c.

ZOOM_facet_field_name ( ZOOM_facet_field  field)

Definition at line 1042 of file zoom-c.c.

Referenced by ZOOM_handle_facet_list().

ZOOM_facet_field_term_count ( ZOOM_facet_field  field)

Definition at line 1048 of file zoom-c.c.

ZOOM_package_destroy ( ZOOM_package  p)

Definition at line 1391 of file zoom-c.c.

References odr_destroy(), xfree, and ZOOM_options_destroy().

Referenced by ZOOM_connection_remove_task().

ZOOM_package_option_get ( ZOOM_package  p,
const char *  key 
)

Definition at line 1407 of file zoom-c.c.

References ZOOM_options_get().

ZOOM_package_option_getl ( ZOOM_package  p,
const char *  key,
int *  lenp 
)

Definition at line 1413 of file zoom-c.c.

References ZOOM_options_getl().

ZOOM_package_option_set ( ZOOM_package  p,
const char *  key,
const char *  val 
)

Definition at line 1419 of file zoom-c.c.

References ZOOM_options_set().

ZOOM_package_option_setl ( ZOOM_package  p,
const char *  key,
const char *  val,
int  len 
)

Definition at line 1426 of file zoom-c.c.

References ZOOM_options_setl().

void ZOOM_resultset_addref ( ZOOM_resultset  r)
ZOOM_resultset ZOOM_resultset_create ( void  )
ZOOM_resultset_destroy ( ZOOM_resultset  r)

Definition at line 863 of file zoom-c.c.

References resultset_destroy().

Referenced by ZOOM_connection_destroy().

ZOOM_resultset_facets ( ZOOM_resultset  r)

Definition at line 1030 of file zoom-c.c.

ZOOM_resultset_facets_names ( ZOOM_resultset  r)

Definition at line 1036 of file zoom-c.c.

ZOOM_resultset_facets_size ( ZOOM_resultset  r)

Definition at line 1002 of file zoom-c.c.

ZOOM_resultset_get_facet_field ( ZOOM_resultset  r,
const char *  name 
)

Definition at line 1007 of file zoom-c.c.

ZOOM_resultset_get_facet_field_by_index ( ZOOM_resultset  r,
int  index 
)

Definition at line 1020 of file zoom-c.c.

ZOOM_resultset_option_get ( ZOOM_resultset  r,
const char *  key 
)

Definition at line 1859 of file zoom-c.c.

References ZOOM_options_get().

Referenced by ZOOM_connection_srw_send_search().

ZOOM_resultset_option_set ( ZOOM_resultset  r,
const char *  key,
const char *  val 
)

Definition at line 1865 of file zoom-c.c.

References ZOOM_options_set().

Referenced by handle_srw_response().

ZOOM_resultset_record ( ZOOM_resultset  r,
size_t  pos 
)

Definition at line 1154 of file zoom-c.c.

References ZOOM_resultset_record_immediate(), and ZOOM_resultset_retrieve().

ZOOM_resultset_record_immediate ( ZOOM_resultset  s,
size_t  pos 
)

Definition at line 1143 of file zoom-c.c.

References ZOOM_options_get(), and ZOOM_record_cache_lookup().

Referenced by ZOOM_resultset_record(), and ZOOM_resultset_records().

ZOOM_resultset_records ( ZOOM_resultset  r,
ZOOM_record recs,
size_t  start,
size_t  count 
)

Definition at line 981 of file zoom-c.c.

References yaz_log(), ZOOM_resultset_record_immediate(), and ZOOM_resultset_retrieve().

static void ZOOM_resultset_retrieve ( ZOOM_resultset  r,
int  force_sync,
int  start,
int  count 
)
static
ZOOM_resultset_size ( ZOOM_resultset  r)

Definition at line 900 of file zoom-c.c.

ZOOM_resultset_sort ( ZOOM_resultset  r,
const char *  sort_type,
const char *  sort_spec 
)

Definition at line 808 of file zoom-c.c.

References ZOOM_resultset_sort1().

ZOOM_resultset_sort1 ( ZOOM_resultset  r,
const char *  sort_type,
const char *  sort_spec 
)
ZOOM_scanset_destroy ( ZOOM_scanset  scan)

Definition at line 1226 of file zoom-c.c.

References odr_destroy(), xfree, ZOOM_options_destroy(), and ZOOM_query_destroy().

Referenced by ZOOM_connection_remove_task().

ZOOM_scanset_display_term ( ZOOM_scanset  scan,
size_t  pos,
size_t *  occ,
size_t *  len 
)

Definition at line 1347 of file zoom-c.c.

References ZOOM_scanset_term_x().

ZOOM_scanset_option_get ( ZOOM_scanset  scan,
const char *  key 
)

Definition at line 1363 of file zoom-c.c.

References ZOOM_options_get().

ZOOM_scanset_option_set ( ZOOM_scanset  scan,
const char *  key,
const char *  val 
)

Definition at line 1369 of file zoom-c.c.

References ZOOM_options_set().

ZOOM_scanset_size ( ZOOM_scanset  scan)

Definition at line 1261 of file zoom-c.c.

Referenced by ZOOM_scanset_term_x().

ZOOM_scanset_term ( ZOOM_scanset  scan,
size_t  pos,
size_t *  occ,
size_t *  len 
)

Definition at line 1331 of file zoom-c.c.

References ZOOM_scanset_term_x().

static void ZOOM_scanset_term_x ( ZOOM_scanset  scan,
size_t  pos,
size_t *  occ,
const char **  value_term,
size_t *  value_len,
const char **  disp_term,
size_t *  disp_len 
)
static
zoom_ret ZOOM_send_buf ( ZOOM_connection  c)
zoom_ret ZOOM_send_GDU ( ZOOM_connection  c,
Z_GDU gdu 
)
void ZOOM_set_dset_error ( ZOOM_connection  c,
int  error,
const char *  dset,
const char *  addinfo,
const char *  addinfo2 
)
void ZOOM_set_error ( ZOOM_connection  c,
int  error,
const char *  addinfo 
)
void ZOOM_set_HTTP_error ( ZOOM_connection  c,
int  error,
const char *  addinfo,
const char *  addinfo2 
)

Definition at line 1578 of file zoom-c.c.

References ZOOM_set_dset_error().

Referenced by handle_http(), and ZOOM_handle_sru().

int ZOOM_test_reconnect ( ZOOM_connection  c)
int ZOOM_uri_to_code ( const char *  uri)

Definition at line 90 of file zoom-c.c.

Referenced by set_SRU_error(), and ZOOM_record_error().

Variable Documentation

YAZ_MUTEX g_resultset_mutex = 0
static

Definition at line 649 of file zoom-c.c.

int g_resultsets = 0
static

Definition at line 648 of file zoom-c.c.

Referenced by resultset_use().

int log_api0 = 0
static

Definition at line 34 of file zoom-c.c.

Referenced by ZOOM_connection_create().

int log_details0 = 0
static

Definition at line 35 of file zoom-c.c.

Referenced by ZOOM_connection_create().