46#define S_ISREG(x) (x & _S_IFREG)
55#include <libxml/parser.h>
56#include <libxml/tree.h>
89 const char *errstring);
137 else if (v <= INT_MIN)
150 const char *apdufile)
169 if (apdufile && *apdufile)
175 if (*apdufile ==
'@')
179 else if (*apdufile !=
'-')
182 yaz_snprintf(filename,
sizeof filename,
"%s.%ld", apdufile,
184 if (!(f = fopen(filename,
"w")))
189 setvbuf(f, 0, _IONBF, 0);
245 reason, message ? message :
"none");
374 assert(h && conn && assoc);
518 (peer_name1 ? strlen(peer_name1) : 0)
519 + 4 + strlen(peer_name2));
537 const char *encoding =
"UTF-8";
561 strcat(auth->
u.open,
"/");
598 const char *match_schema = 0;
607 const char *backend_schema = 0;
628 else if (r == 1 || r == 3)
630 const char *details = input_schema;
640 if (input_syntax_raw)
660 const char *details = 0;
675 if (r == 0 && match_syntax &&
691 rr->
record = (
char *) opac;
695 details =
"XML to OPAC conversion failed";
728 const char **addinfo,
int *last_in_set)
743 rr.
comp->
u.complex->selectAlternativeSyntax = (
bool_t *)
745 *rr.
comp->
u.complex->selectAlternativeSyntax = 0;
746 rr.
comp->
u.complex->num_dbSpecific = 0;
747 rr.
comp->
u.complex->dbSpecific = 0;
748 rr.
comp->
u.complex->num_recordSyntax = 0;
749 rr.
comp->
u.complex->recordSyntax = 0;
759 rr.
comp->
u.complex->generic->elementSpec = 0;
762 rr.
comp->
u.complex->generic->elementSpec =
764 rr.
comp->
u.complex->generic->elementSpec->
which =
766 rr.
comp->
u.complex->generic->elementSpec->
u.elementSetName =
795 else if (rr.
len >= 0)
812 Z_Query *query_result,
char **sortkeys_p)
871 query_result->
u.type_1 = rpnquery;
886 int srw_error =
cql2pqf(
odr, cql, ct, &query, &sortkeys);
891 rpn = query.
u.type_1;
912 if ((node =
ccl_find_str(bibset, ccl0, &errcode, &pos)) == 0)
980 "1.2.840.10003.16.2");
984 ext->
u.cql = srw_req->
query;
987 rr.
query->
u.type_104 = ext;
990 else if (!strcmp(srw_req->
queryType,
"pqf"))
1000 const char *pqf_msg;
1004 code, pqf_msg, (
long) off);
1009 rr.
query->
u.type_1 = RPNquery;
1024 if (srw_req->
sort.sortKeys)
1026 srw_req->
sort.sortKeys);
1065 start, number, rr.
hits);
1077 if (start > rr.
hits || start < 1)
1086 else if (number > 0)
1090 if (start + number > rr.
hits)
1099 bprr->
start = start;
1104 sizeof(*bprr->
comp));
1147 number *
sizeof(*srw_res->
records));
1153 for (i = 0; i<number; i++)
1156 int last_in_set = 0;
1157 const char *addinfo = 0;
1165 &addinfo, &last_in_set);
1222 else if (*http_code != 200)
1246 xmlNodePtr next = ptr->next;
1247 if (ptr->type == XML_COMMENT_NODE)
1265 for (ptr = ptr->children; ptr; ptr = ptr->next)
1267 if (ptr->type != XML_ELEMENT_NODE)
1269 if (!strcmp((
const char *) ptr->name,
"explain"))
1272 xmlDocPtr doc = xmlNewDoc(BAD_CAST
"1.0");
1276 ptr = xmlCopyNode(ptr, 1);
1280 xmlDocSetRootElement(doc, ptr);
1282 xmlDocDumpMemory(doc, &buf_out, &len);
1284 memcpy(content, buf_out, len);
1285 content[len] =
'\0';
1322 rr.
schema =
"http://explain.z3950.org/dtd/2.0/";
1489 if (save_entries == bsrr->
entries &&
1604 else if (!strcmp(rr.
operation,
"replace"))
1616 "recordIdentifier");
1654 else if (!strcmp(rr.
operation,
"insert"))
1689 const char *pack_str =
1715 "No Update backend handler");
1769 if (strstr(path,
".."))
1776 struct stat stat_buf;
1780 if (stat(fname, &stat_buf) == -1)
1785 if (!S_ISREG(stat_buf.st_mode))
1790 inf = fopen(fname,
"rb");
1796 if (fseek(inf, 0L, SEEK_END) < 0)
1798 else if ((*sz = ftell(inf)) == -1L)
1804 if (fread(buf, 1, *sz, inf) != *sz)
1817 Z_SOAP *soap_package = 0;
1822 const char *stylesheet = 0;
1824 int num_diagnostic = 0;
1834 && hreq->
path[0] ==
'/'
1848 long content_size = 0;
1849 char *content_buf =
read_file(hreq->
path+1, o, &content_size);
1856 const char *ctype = 0;
1881 hres = p->
u.HTTP_Response;
1900 &diagnostic, &num_diagnostic);
1905 int http_code = 200;
1911 stylesheet = sr->
u.request->stylesheet;
1914 res->
u.response->diagnostics = diagnostic;
1915 res->
u.response->num_diagnostics = num_diagnostic;
1921 if (http_code == 200)
1922 soap_package->
u.generic->p = res;
1927 stylesheet = sr->
u.explain_request->stylesheet;
1930 res->
u.explain_response->diagnostics = diagnostic;
1931 res->
u.explain_response->num_diagnostics = num_diagnostic;
1934 sr, res->
u.explain_response, &http_code);
1935 if (http_code == 200)
1936 soap_package->
u.generic->p = res;
1941 stylesheet = sr->
u.scan_request->stylesheet;
1944 res->
u.scan_response->diagnostics = diagnostic;
1945 res->
u.scan_response->num_diagnostics = num_diagnostic;
1948 if (http_code == 200)
1949 soap_package->
u.generic->p = res;
1958 res->
u.update_response->diagnostics = diagnostic;
1959 res->
u.update_response->num_diagnostics = num_diagnostic;
1963 sr, res->
u.update_response, &http_code);
1964 if (http_code == 200)
1965 soap_package->
u.generic->p = res;
1973 "SOAP-ENV:Client",
"Bad method", 0);
1975 if (http_code == 200 || http_code == 500)
1987 hres = p->
u.HTTP_Response;
1989 if (!stylesheet && assoc->
server)
1993 if (stylesheet && *stylesheet ==
'\0')
1998 soap_handlers, charset, stylesheet);
1999 hres->
code = http_code;
2001 strcpy(ctype,
"text/xml");
2010 hres = p->
u.HTTP_Response;
2011 if (!strcmp(hreq->
version,
"1.0"))
2014 if (v && !strcmp(v,
"Keep-Alive"))
2023 if (v && !strcmp(v,
"close"))
2040 if (alive &&
yaz_isdigit(*(
const unsigned char *) alive))
2044 if (t < 0 || t > 3600)
2056 const char *msg = 0;
2077 *msg =
"Unknown Error";
2081 *msg =
"Missing InitRequest";
2097 *msg =
"Cannot handle Scan APDU";
2106 *msg =
"Cannot handle Extended Services APDU";
2115 *msg =
"Cannot handle Sort APDU";
2127 *msg =
"Cannot handle Delete APDU";
2138 *msg =
"Cannot handle Segment APDU";
2145 *msg =
"Bad APDU received";
2213 gres->
u.z3950 = res;
2339 strcat(
options,
" extendedServices");
2345 strcat(
options,
" namedresults");
2355 strcat(
options,
" concurrop");
2387 strcat(
options,
" negotiation");
2452 const char *slash = strchr(open,
'/');
2465 user ? user :
"-", group ? group :
"-");
2507 addinfo ?
" -- " :
"", addinfo ? addinfo :
"");
2519 addinfo ?
" -- " :
"", addinfo ? addinfo :
"");
2532 int error,
const char *addinfo)
2535 addinfo ?
" -- " :
"", addinfo ? addinfo :
"");
2554 records->
u.databaseOrSurDiagnostics = reclist;
2559 else if (toget == 0)
2635 this_length = freq.
len;
2640 this_length, total_length, dumped_records);
2645 if (this_length <= a->preferredMessageSize && recno > start)
2654 if (this_length < a->maximumRecordSize)
2665 dumped_records += this_length;
2679 dumped_records += this_length;
2697 if (!thisrec->
u.databaseRecord)
2823 apdu->
u.searchResponse = resp;
2859 *toget = bsrt->
hits;
2866 if (*toget > bsrt->
hits)
2867 *toget = bsrt->
hits;
2910 returnedrecs = *toget;
3021 apdu->
u.presentResponse = resp;
3085 apdu->
u.scanResponse = res;
3191 if (save_entries == bsrr->
entries &&
3208 t->
term->
u.general =
3223 e->
u.surrogateDiagnostic = drecs->
diagRecs[0];
3324 apdu->
u.sortResponse = res;
3415 apdu->
u.deleteResultSetResponse = res;
3435 static char *reasons[] =
3442 "securityViolation",
3455 "Association terminated by client", reqb);
3478 const char *ext_name =
"unknown";
3483 reqb->
apdu_request->
u.extendedServicesRequest->taskSpecificParameters;
3516 else if (esrequest.
errcode == 0)
3522 else if (esrequest.
errcode == -2)
struct association * bend_association
struct ccl_qualifiers * CCL_bibset
CCL bibset, AKA profile.
const char * ccl_err_msg(int ccl_errno)
struct ccl_rpn_node * ccl_find_str(CCL_bibset bibset, const char *str, int *error, int *pos)
parse CCL find string using CCL profile return RPN tree
Z_External * yaz_set_proposal_charneg(ODR o, const char **charsets, int num_charsets, const char **langs, int num_langs, int selected)
Z_External * yaz_set_response_charneg(ODR o, const char *charset, const char *lang, int selected)
Z_CharSetandLanguageNegotiation * yaz_get_charneg_record(Z_OtherInformation *p)
Header for Z39.50 Charset negotiation utilities.
const char * cs_errmsg(int n)
Returns a static message for a COMSTACK error code.
Transport-independent communication endpoints for BER and HTTP.
#define cs_addrstr(handle)
Formats the peer address as text.
#define cs_close(handle)
Closes the socket and frees the endpoint and its transport state.
#define cs_accept(handle)
Creates an endpoint for a connection received by cs_listen.
#define cs_errno(handle)
Returns the last COMSTACK error code.
#define cs_put(handle, buf, size)
Sends a complete message.
#define cs_more(handle)
Tests whether buffered input can be processed without another read.
#define cs_get(handle, buf, size)
Receives a BER or HTTP message.
#define cs_getproto(handle)
Returns the application protocol (enum oid_proto).
struct comstack * COMSTACK
Communication endpoint; release with cs_close.
struct cql_node * cql_parser_result(CQL_parser cp)
returns the parse tree of the most recently parsed CQL query.
void cql_parser_destroy(CQL_parser cp)
destroys a CQL parser.
CQL_parser cql_parser_create(void)
creates a CQL parser.
struct cql_transform_t_ * cql_transform_t
CQL transform handle. The transform describes how to convert from CQL to PQF (Type-1 AKA RPN).
struct cql_parser * CQL_parser
CQL parser handle (opaque pointer).
int cql_sortby_to_sortkeys_buf(struct cql_node *cn, char *out, int max)
converts CQL sortby to sortkeys ..
int cql_parser_string(CQL_parser cp, const char *str)
parses a CQL query (string)
int yaz_diag_bib1_to_srw(int code)
int yaz_diag_srw_to_bib1(int code)
const char * diagbib1_str(int code)
Diagnostics: Generated by csvtodiag.tcl from ./bib1.csv.
#define YAZ_BIB1_DATABASE_UNAVAILABLE
#define YAZ_BIB1_PERMANENT_SYSTEM_ERROR
#define YAZ_BIB1_SPECIFIED_ELEMENT_SET_NAME_NOT_VALID_FOR_SPECIFIED_
#define YAZ_BIB1_PRESENT_REQUEST_OUT_OF_RANGE
#define YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS
#define YAZ_BIB1_RECORD_EXCEEDS_PREFERRED_MESSAGE_SIZE
#define YAZ_BIB1_RECORD_SYNTAX_UNSUPP
#define YAZ_BIB1_RECORD_EXCEEDS_MAXIMUM_RECORD_SIZE
#define YAZ_SRU_UPDATE_MISSING_MANDATORY_ELEMENT_RECORD_REJECTED
#define YAZ_SRU_UPDATE_UNSPECIFIED_DATABASE_ERROR
#define YAZ_SRU_UPDATE_INVALID_ACTION
#define YAZ_SRW_FIRST_RECORD_POSITION_OUT_OF_RANGE
#define YAZ_SRW_UNSUPP_SORT_TYPE
#define YAZ_SRW_UNSUPP_OPERATION
#define YAZ_SRW_UNSUPP_QUERY_TYPE
#define YAZ_SRW_AUTHENTICATION_ERROR
#define YAZ_SRW_QUERY_SYNTAX_ERROR
#define YAZ_SRW_RESULT_SET_CREATED_WITH_VALID_PARTIAL_RESULTS_AVAILABLE
int odr_dumpBER(FILE *f, const char *buf, int len)
const char * yaz_get_esn(Z_RecordComposition *comp)
get element set name from RecordComposition
void yaz_set_esn(Z_RecordComposition **comp_p, const char *esn, NMEM nmem)
set element set name in RecordComposition struct
int iochan_is_alive(IOCHAN chan)
Definitions for event loop handling for GFS.
#define iochan_settimeout(i, t)
#define iochan_getdata(i)
#define iochan_setevent(i, e)
#define iochan_destroy(i)
#define iochan_setflag(i, d)
#define iochan_clearflag(i, d)
Z_FacetList * yaz_oi_get_facetlist(Z_OtherInformation **otherInformation)
void yaz_oi_set_facetlist(Z_OtherInformation **otherInformation, ODR odr, Z_FacetList *facet_list)
Header for the facet utilities.
Z_GDU * z_get_HTTP_Response(ODR o, int code)
const char * z_HTTP_header_lookup(const Z_HTTP_Header *hp, const char *n)
void z_HTTP_header_add(ODR o, Z_HTTP_Header **hp, const char *n, const char *v)
void yaz_log(int level, const char *fmt,...)
Writes log message.
int yaz_log_module_level(const char *name)
returns level for module
FILE * yaz_log_file(void)
returns FILE handle for log or NULL if no file is in use
#define YLOG_WARN
log level: warning
#define YLOG_FATAL
log level: fatal
#define YLOG_ERRNO
log level: append system error message
#define YLOG_DEBUG
log level: debugging
#define YLOG_LOG
log level: log (regular)
void log_scan_term_level(int loglevel, Z_AttributesPlusTerm *zapt, const Odr_oid *ast)
void yaz_log_zquery_level(int loglevel, Z_Query *q)
Header for Z39.50 Query Printing.
yaz_marc_t yaz_marc_create(void)
construct yaz_marc_t handle
void yaz_marc_destroy(yaz_marc_t mt)
destroy yaz_marc_t handle
struct yaz_marc_t_ * yaz_marc_t
a yaz_marc_t handle (private content)
yaz_mime_types yaz_mime_types_create()
const char * yaz_mime_lookup_fname(yaz_mime_types t, const char *fname)
void yaz_mime_types_destroy(yaz_mime_types t)
void yaz_mime_types_add(yaz_mime_types t, const char *suffix, const char *mime_type)
Small utility to manage MIME types.
struct yaz_mime_info * yaz_mime_types
void nmem_transfer(NMEM dst, NMEM src)
transfers memory from one NMEM handle to another
void * nmem_malloc(NMEM n, size_t size)
allocates memory block on NMEM handle
const char * odr_getelement(ODR o)
char * odr_getbuf(ODR o, int *len, int *size)
ODR odr_createmem(int direction)
void odr_setbuf(ODR o, char *buf, int len, int can_grow)
void odr_setprint(ODR o, FILE *file)
Odr_null * odr_nullval(void)
#define ODR_MASK_SET(mask, num)
#define ODR_MASK_GET(mask, num)
Odr_oct * odr_create_Odr_oct(ODR o, const char *buf, int sz)
Odr_int * odr_intdup(ODR o, Odr_int v)
NMEM odr_extract_mem(ODR o)
void * odr_malloc(ODR o, size_t size)
char * odr_strdupn(ODR o, const char *str, size_t n)
Odr_bool * odr_booldup(ODR o, Odr_bool v)
char * odr_strdup(ODR o, const char *str)
char * odr_strdup_null(ODR o, const char *str)
Odr_oid * odr_oiddup(ODR odr, const Odr_oid *o)
Odr_oid * odr_getoidbystr(ODR o, const char *str)
char * odr_prepend(ODR o, const char *prefix, const char *old)
const char * yaz_oid_to_string_buf(const Odr_oid *oid, oid_class *oclass, char *buf)
maps any OID to string (named or dot-notation)
const Odr_oid yaz_oid_userinfo_client_ip[]
const Odr_oid yaz_oid_userinfo_proxy[]
const Odr_oid yaz_oid_recsyn_xml[]
const Odr_oid yaz_oid_userinfo_scan_set[]
const Odr_oid yaz_oid_recsyn_extended[]
const Odr_oid yaz_oid_recsyn_opac[]
char * oid_oid_to_dotstring(const Odr_oid *oid, char *oidbuf)
converts OID to string (dot notation)
int oid_oidcmp(const Odr_oid *o1, const Odr_oid *o2)
compares OIDs
int options(const char *desc, char **argv, int argc, char **arg)
command-line options parsing for main
Z_OtherInformationUnit * yaz_oi_update(Z_OtherInformation **otherInformationP, ODR odr, const Odr_oid *oid, int categoryValue, int delete_flag)
char * yaz_oi_get_string_oid(Z_OtherInformation **otherInformation, const Odr_oid *oid, int categoryValue, int delete_flag)
Header for Z39.50 OtherInfo utilities.
void yaz_pqf_destroy(YAZ_PQF_Parser p)
Z_AttributesPlusTerm * yaz_pqf_scan(YAZ_PQF_Parser p, ODR o, Odr_oid **attributeSetP, const char *qbuf)
YAZ_PQF_Parser yaz_pqf_create(void)
Z_RPNQuery * yaz_pqf_parse(YAZ_PQF_Parser p, ODR o, const char *qbuf)
int yaz_pqf_error(YAZ_PQF_Parser p, const char **msg, size_t *off)
struct yaz_pqf_parser * YAZ_PQF_Parser
Header for Z39.50 Protocol.
Z_NamePlusRecord * zget_surrogateDiagRec(ODR o, const char *dbname, int error, const char *addinfo)
Creates Surrogate Diagnostic Records.
Z_DiagRecs * zget_DiagRecs(ODR o, int error, const char *addinfo)
Creates Diagnostic record - Z_DiagRecs type.
Z_APDU * zget_APDU(ODR o, int which)
Z_External * zget_init_diagnostics(ODR odr, int error, const char *addinfo)
Creates Initialize Response diagnostics.
Z_DefaultDiagFormat * zget_DefaultDiagFormat(ODR o, int error, const char *addinfo)
Creates Default Diag Format Diagnostic.
Z_External * z_ext_record_oid(ODR o, const Odr_oid *oid, const char *buf, int len)
encodes EXTERNAL record based on OID (NULL if not known)
void yaz_query_charset_convert_rpnquery(Z_RPNQuery *q, ODR o, yaz_iconv_t cd)
Query to WRBUF (to strings).
void yaz_query_to_wrbuf(WRBUF b, const Z_Query *q)
void yaz_scan_to_wrbuf(WRBUF b, const Z_AttributesPlusTerm *zapt, const Odr_oid *attrbute_set)
void wrbuf_diags(WRBUF b, int num_diagnostics, Z_DiagRec **diags)
Query to WRBUF (to strings).
const char * yaz_record_conv_get_error(yaz_record_conv_t p)
const char * yaz_record_get_output_charset(yaz_record_conv_t p)
int yaz_record_conv_record(yaz_record_conv_t p, const char *input_record_buf, size_t input_record_len, WRBUF output_record)
int yaz_record_conv_opac_record(yaz_record_conv_t p, Z_OPACRecord *input_record, WRBUF output_record)
struct yaz_record_conv_struct * yaz_record_conv_t
request * request_deq(request_q *q)
request * request_head(request_q *q)
request * request_get(request_q *q)
void request_release(request *r)
void request_enq(request_q *q, request *r)
void request_initq(request_q *q)
void request_delq(request_q *q)
const char * yaz_retrieval_get_error(yaz_retrieval_t p)
int yaz_retrieval_request(yaz_retrieval_t p, const char *schema, const Odr_oid *syntax, const char **match_schema, Odr_oid **match_syntax, yaz_record_conv_t *rc, const char **backend_schema, Odr_oid **backend_syntax)
static Z_Records * diagrec(association *assoc, int error, char *addinfo)
static char * srw_bend_explain_default(bend_explain_rr *rr)
static Z_APDU * process_ESRequest(association *assoc, request *reqb)
static Z_APDU * process_presentRequest(association *assoc, request *reqb)
static void srw_bend_search(association *assoc, Z_HTTP_Header *headers, Z_SRW_PDU *sr, Z_SRW_PDU *res, int *http_code)
static void wr_diag(WRBUF w, int error, const char *addinfo)
static int process_gdu_response(association *assoc, request *req, Z_GDU *res)
static Z_APDU * process_segmentRequest(association *assoc, request *reqb)
static int cql2pqf_scan(ODR odr, const char *cql, cql_transform_t ct, Z_AttributesPlusTerm *result)
int bend_assoc_is_alive(bend_association assoc)
static char * get_vhost(Z_OtherInformation *otherInfo)
void destroy_association(association *h)
static Z_APDU * process_deleteRequest(association *assoc, request *reqb)
static int log_requestdetail
static int retrieve_fetch(association *assoc, bend_fetch_rr *rr)
static Z_APDU * process_searchRequest(association *assoc, request *reqb)
static void process_http_request(association *assoc, request *req)
static void process_gdu_request(association *assoc, request *req)
static int check_path(const char *path)
static Z_APDU * process_initRequest(association *assoc, request *reqb)
static int cql2pqf(ODR odr, const char *cql, cql_transform_t ct, Z_Query *query_result, char **sortkeys_p)
int ir_read(IOCHAN h, int event)
static void srw_bend_explain(association *assoc, Z_HTTP_Header *headers, Z_SRW_PDU *sr, Z_SRW_explainResponse *srw_res, int *http_code)
static void assoc_init_reset(association *assoc, const char *peer_name1)
static Z_APDU * response_searchRequest(association *assoc, request *reqb, bend_search_rr *bsrr)
association * create_association(IOCHAN channel, COMSTACK link, const char *apdufile)
static void do_close_req(association *a, int reason, const char *message, request *req)
static int process_z_response(association *assoc, request *req, Z_APDU *res)
static Z_NamePlusRecord * surrogatediagrec(association *assoc, const char *dbname, int error, const char *addinfo)
static Z_Records * pack_records(association *a, char *setname, Odr_int start, Odr_int *num, Z_RecordComposition *comp, Odr_int *next, Odr_int *pres, Z_ReferenceId *referenceId, Odr_oid *oid, int *errcode)
static int srw_bend_fetch(association *assoc, int pos, Z_SRW_searchRetrieveRequest *srw_req, Z_SRW_record *record, const char **addinfo, int *last_in_set)
static void process_close(association *assoc, request *reqb)
static void get_logbits(void)
static int srw_bend_init(association *assoc, Z_HTTP_Header *headers, Z_SRW_diagnostic **d, int *num, Z_SRW_PDU *sr)
static Z_APDU * process_sortRequest(association *assoc, request *reqb)
static void srw_bend_scan(association *assoc, Z_HTTP_Header *headers, Z_SRW_PDU *sr, Z_SRW_PDU *res, int *http_code)
static Z_APDU * process_scanRequest(association *assoc, request *reqb)
static char * read_file(const char *fname, ODR o, long *sz)
void ir_session(IOCHAN h, int event)
static int ccl2pqf(ODR odr, const Odr_oct *ccl, CCL_bibset bibset, bend_search_rr *bsrr)
static void srw_bend_update(association *assoc, Z_HTTP_Header *headers, Z_SRW_PDU *sr, Z_SRW_updateResponse *srw_res, int *http_code)
static void do_close(association *a, int reason, const char *message)
static void explain_remove_comments(xmlNodePtr ptr)
static Z_External * init_diagnostics(ODR odr, int errcode, const char *errstring)
static int process_z_request(association *assoc, request *req, const char **msg)
static int odr_int_to_int(Odr_int v)
static int log_sessiondetail
int control_association(association *assoc, const char *host, int force)
int yaz_iconv_close(yaz_iconv_t cd)
just like iconv_close(3)
yaz_iconv_t yaz_iconv_open(const char *tocode, const char *fromcode)
just like iconv_open(3)
void yaz_snprintf(char *buf, size_t size, const char *fmt,...)
Header for config file reading utilities.
int z_soap_codec_enc_xsl(ODR o, Z_SOAP **pp, char **content_buf, int *content_len, Z_SOAP_Handler *handlers, const char *encoding, const char *stylesheet)
int z_soap_error(ODR o, Z_SOAP *p, const char *fault_code, const char *fault_string, const char *details)
int(*) Z_SOAP_fun(ODR o, void *ptr, void **handler_data, void *client_data, const char *ns)
int yaz_ucp_codec(ODR o, void *vptr, Z_SRW_PDU **handler_data, void *client_data, const char *ns_ucp_str)
int yaz_srw_codec(ODR o, void *vptr, Z_SRW_PDU **handler_data, void *client_data, const char *ns)
#define Z_SRW_searchRetrieve_response
#define Z_SRW_explain_request
#define Z_SRW_update_request
#define Z_SRW_scan_request
#define YAZ_XMLNS_SRU_v1_1
#define Z_SRW_recordPacking_string
#define Z_SRW_update_response
#define Z_SRW_explain_response
#define YAZ_XMLNS_SRU_v1_0
#define Z_SRW_scan_response
#define Z_SRW_searchRetrieve_request
#define YAZ_XMLNS_UPDATE_v0_9
int yaz_sru_decode(Z_HTTP_Request *hreq, Z_SRW_PDU **srw_pdu, Z_SOAP **soap_package, ODR decode, char **charset, Z_SRW_diagnostic **diag, int *num_diag)
Z_SRW_PDU * yaz_srw_get_pdu_e(ODR o, int which, Z_SRW_PDU *req)
Z_SRW_PDU * yaz_srw_get_pdu(ODR o, int which, const char *version)
void yaz_add_sru_update_diagnostic(ODR o, Z_SRW_diagnostic **d, int *num, int code, const char *addinfo)
int yaz_srw_str_to_pack(const char *str)
void yaz_add_srw_diagnostic_uri(ODR o, Z_SRW_diagnostic **d, int *num, const char *uri, const char *message, const char *details)
void yaz_mk_sru_surrogate(ODR o, Z_SRW_record *record, int pos, int code, const char *details)
int yaz_srw_decode(Z_HTTP_Request *hreq, Z_SRW_PDU **srw_pdu, Z_SOAP **soap_package, ODR decode, char **charset)
Z_SRW_record * yaz_srw_get_record(ODR o)
const char * yaz_srw_pack_to_str(int pack)
void yaz_add_srw_diagnostic(ODR o, Z_SRW_diagnostic **d, int *num, int code, const char *addinfo)
Z_SRW_extra_record * yaz_srw_get_extra_record(ODR o)
statserv_options_block * statserv_getcontrol(void)
Header for GFS (Obsolete. Use yaz/backend.h).
union Z_APDU::@242330271034040234371206353022055242311263114206 u
Z_InternationalString * diagnosticInformation
Z_CloseReason * closeReason
Z_ReferenceId * referenceId
Z_ResultSetId ** resultSetList
Z_ListStatuses * bulkStatuses
Z_InternationalString * deleteMessage
Z_OtherInformation * otherInfo
Z_ReferenceId * referenceId
Z_ListStatuses * deleteListStatuses
Z_DeleteStatus * deleteOperationStatus
Odr_int * numberNotDeleted
union Z_Entry::@047162227127265375175266224304035330122207254241 u
Z_ReferenceId * referenceId
Odr_int * operationStatus
Z_ReferenceId * referenceId
structure for all known EXTERNALs
Odr_int * indirect_reference
union Z_External::@173112132151266201036013025012152147264102163302 u
Odr_oid * direct_reference
union Z_GDU::@057307356220171136236350364324260103365227025100 u
union Z_IdAuthentication::@275165356047211032235125010306157131150276322230 u
Z_InternationalString * implementationVersion
Odr_int * maximumRecordSize
Z_IdAuthentication * idAuthentication
Z_InternationalString * implementationId
Z_ProtocolVersion * protocolVersion
Z_InternationalString * implementationName
Z_ReferenceId * referenceId
Odr_int * preferredMessageSize
Z_OtherInformation * otherInfo
Z_InternationalString * implementationId
Z_InternationalString * implementationVersion
Z_External * userInformationField
Z_OtherInformation * otherInfo
Z_ReferenceId * referenceId
Z_InternationalString * implementationName
Odr_int * preferredMessageSize
Z_ProtocolVersion * protocolVersion
Odr_int * maximumRecordSize
Z_DiagRec ** nonsurrogateDiagnostics
int num_nonsurrogateDiagnostics
Z_NamePlusRecord ** records
union Z_NamePlusRecord::@020143046330210324125140137007320020107113017265 u
Z_DatabaseName * databaseName
Z_ResultSetId * resultSetId
Odr_int * resultSetStartPoint
Z_ReferenceId * referenceId
Odr_oid * preferredRecordSyntax
Z_RecordComposition * recordComposition
Odr_int * numberOfRecordsRequested
Z_OtherInformation * otherInfo
Odr_int * nextResultSetPosition
Z_PresentStatus * presentStatus
Odr_int * numberOfRecordsReturned
Z_ReferenceId * referenceId
union Z_Query::@270220245041066023256025363242165325012357336235 u
Z_RPNStructure * RPNStructure
union Z_RPNStructure::@272042053041255367154306203353273370010236313243 u
union Z_RecordComposition::@041267357203341021326274076105054233174157004046 u
union Z_Records::@051366375200045051276240300056035160227042036306 u
union Z_SOAP::@376262347373245141365154145051227323112037301017 u
union Z_SRW_PDU::@153265143164032275136020372035363167301151223027 u
Z_SRW_extra_arg * extra_args
char * extraResponseData_buf
int extraResponseData_len
Z_SRW_diagnostic * diagnostics
Odr_int * responsePosition
Z_SRW_diagnostic * diagnostics
Odr_int * numberOfRecords
union Z_SRW_searchRetrieveRequest::@240121103265220276224106134266143351075177324020 sort
Odr_int * numberOfRecords
Z_SRW_diagnostic * diagnostics
char * resultCountPrecision
Odr_int * resultSetIdleTime
Z_SRW_extra_record ** extra_records
Z_SRW_extra_record * extra_record
Z_SRW_recordVersion * recordVersions
char * extraRequestData_buf
Z_SRW_diagnostic * diagnostics
int extraResponseData_len
Z_SRW_recordVersion * recordVersions
char * extraResponseData_buf
Z_SRW_extra_record * extra_record
Z_AttributeSetId * attributeSet
Odr_int * preferredPositionInResponse
Z_ReferenceId * referenceId
Z_DatabaseName ** databaseNames
Z_AttributesPlusTerm * termListAndStartPoint
Odr_int * numberOfTermsRequested
Z_OtherInformation * otherInfo
Z_AttributeSetId * attributeSet
Z_ReferenceId * referenceId
Odr_int * numberOfEntriesReturned
Z_OtherInformation * otherInfo
Odr_bool * replaceIndicator
Z_InternationalString * resultSetName
Z_ElementSetNames * smallSetElementSetNames
Z_OtherInformation * additionalSearchInfo
Z_OtherInformation * otherInfo
Z_DatabaseName ** databaseNames
Odr_int * largeSetLowerBound
Z_ReferenceId * referenceId
Z_ElementSetNames * mediumSetElementSetNames
Odr_int * mediumSetPresentNumber
Odr_oid * preferredRecordSyntax
Odr_int * smallSetUpperBound
Odr_int * numberOfRecordsReturned
Z_PresentStatus * presentStatus
Odr_int * resultSetStatus
Odr_int * nextResultSetPosition
Z_OtherInformation * otherInfo
Z_OtherInformation * additionalSearchInfo
Z_ReferenceId * referenceId
int num_inputResultSetNames
Z_InternationalString * sortedResultSetName
Z_SortKeySpecList * sortSequence
Z_InternationalString ** inputResultSetNames
Z_ReferenceId * referenceId
Z_ReferenceId * referenceId
Odr_int * resultSetStatus
Z_OtherInformation * otherInfo
Odr_int * globalOccurrences
Z_AttributeList * suggestedAttributes
Z_OtherInformation * otherTermInfo
Z_AttributesPlusTerm ** alternativeTerm
Z_OccurrenceByAttributes * byAttributes
Z_InternationalString * displayTerm
union Z_Term::@023217361022206241314262227377164117366363003164 u
struct bend_initrequest * init
struct gfs_server * server
statserv_options_block * last_control
Information for Z39.50 delete result set handler.
Z_ReferenceId * referenceId
Information for Z39.50 extended services handler.
bend_association association
Z_External * taskPackageExt
Z_ExtendedServicesRequest * esr
Z_ReferenceId * referenceId
Z_TaskPackage * taskPackage
Information for SRU Explain handler.
Information for fetch record handler.
Z_RecordComposition * comp
Z_ReferenceId * referenceId
Information for the Init handler.
int(*) bend_scan(void *handle, bend_scan_rr *rr)
Z39.50 scan handler.
int records_in_same_charset
whether query_charset also applies to records
ODR decode
decoding stream (use stream for results)
Z_CharSetandLanguageNegotiation * charneg_request
character set and language negotiation
int named_result_sets
whether named result sets are supported (0=disable, 1=enable)
int(*) bend_delete(void *handle, bend_delete_rr *rr)
Z39.50 delete result set handler.
int(*) bend_sort(void *handle, bend_sort_rr *rr)
Z39.50 sort handler.
Z_External * charneg_response
character negotiation response
char * implementation_name
Z_ReferenceId * referenceId
reference ID
Z_IdAuthentication * auth
user/name/password to be read
int(*) bend_esrequest(void *handle, bend_esrequest_rr *rr)
Z39.50 extended services handler.
int(*) bend_explain(void *handle, bend_explain_rr *rr)
SRU explain handler.
int(*) bend_srw_scan(void *handle, bend_scan_rr *rr)
SRU scan handler.
char * implementation_version
int(*) bend_search(void *handle, bend_search_rr *rr)
SRU/Z39.50 search handler.
int(*) bend_srw_update(void *handle, bend_update_rr *rr)
SRU record update handler.
int(*) bend_fetch(void *handle, bend_fetch_rr *rr)
SRU/Z39.50 fetch handler.
ODR stream
encoding stream (for results)
int(*) bend_segment(void *handle, bend_segment_rr *rr)
Z39.50 segment facility handler.
char * peer_name
peer address of client
char * query_charset
character set (encoding) for query terms
int(*) bend_present(void *handle, bend_present_rr *rr)
SRU/Z39.50 present handler.
result for init handler (must be filled by handler)
Information for present handler. Does not replace bend_fetch.
Z_RecordComposition * comp
bend_association association
Z_ReferenceId * referenceId
Information for SRU / Z39.50 scan handler.
Z_SRW_extra_arg * extra_args
Z_ReferenceId * referenceId
Z_AttributesPlusTerm * term
struct scan_entry * entries
char * extra_response_data
Information for Z39.50/SRU search handler.
Z_ReferenceId * referenceId
int * srw_setnameIdleTime
Z_OtherInformation * search_input
Z_SRW_extra_arg * extra_args
Z_OtherInformation * search_info
char * extra_response_data
bend_association association
Information for Z39.50 segment handler.
bend_association association
Information for Z39.50 sort handler.
Z_ReferenceId * referenceId
Z_SortKeySpecList * sort_sequence
Information for SRU record update handler.
char * extra_response_data
char * extra_request_data
Z_SRW_recordVersion * record_versions
yaz_retrieval_t retrieval
cql_transform_t cql_transform
char * client_query_charset
Information for scan entry.
bend_initresult *(*) bend_init(bend_initrequest *r)
void(*) bend_close(void *handle)
char configname[BEND_NAME_MAX]
void wrbuf_destroy(WRBUF b)
destroy WRBUF and its buffer
const char * wrbuf_cstr(WRBUF b)
returns WRBUF content as C-string
WRBUF wrbuf_alloc(void)
construct WRBUF
void wrbuf_printf(WRBUF b, const char *fmt,...)
writes printf result to WRBUF
void wrbuf_puts_replace_char(WRBUF b, const char *buf, const char from, const char to)
puts buf to WRBUF and replaces a single char
void wrbuf_vp_puts(const char *buf, void *client_data)
appends C-string to WRBUF - void pointer variant
void wrbuf_puts(WRBUF b, const char *buf)
appends C-string to WRBUF
Header for memory handling functions.
#define xfree(x)
utility macro which calls xfree_f
#define xmalloc_trav(s)
utility macro which calls malloc_trav_f
#define xmalloc(x)
utility macro which calls malloc_f
int yaz_xml_to_opac(yaz_marc_t mt, const char *buf_in, size_t size_in, Z_OPACRecord **dst, yaz_iconv_t cd, NMEM nmem, const Odr_oid *syntax)
Converts XML to OPAC.
Z_RPNQuery * ccl_rpn_query(ODR o, struct ccl_rpn_node *p)
Header for CCL node tree to RPN converson utilities.
struct yaz_iconv_struct * yaz_iconv_t
yaz_iconv handle (similar to iconv_t)
Header for common YAZ utilities.
#define Z_CharSetandLanguageNegotiation_proposal
#define Z_ProtocolVersion_1
#define Z_Options_extendedServices
#define Z_ProtocolVersion_2
#define Z_APDU_initRequest
#define Z_ElementSetNames_generic
#define Z_IdAuthentication_anonymous
#define Z_Options_triggerResourceCtrl
#define Z_RecordComp_complex
#define Z_Options_present
#define Z_ExtendedServicesResponse_accepted
#define Z_Close_systemProblem
#define Z_APDU_scanRequest
#define Z_Entry_surrogateDiagnostic
#define Z_APDU_presentResponse
#define Z_SearchResponse_none
#define Z_APDU_triggerResourceControlRequest
#define Z_NamePlusRecord_databaseRecord
#define Z_APDU_sortResponse
#define Z_ElementSpec_elementSetName
#define Z_APDU_presentRequest
#define Z_ExtendedServicesResponse_failure
#define Z_PresentStatus_success
#define Z_IdAuthentication_open
#define Z_APDU_extendedServicesResponse
#define Z_PresentStatus_failure
#define Z_APDU_searchRequest
#define Z_APDU_deleteResultSetResponse
#define Z_APDU_initResponse
#define Z_RecordComp_simple
#define Z_Options_negotiationModel
#define Z_OtherInfo_externallyDefinedInfo
#define Z_IdAuthentication_idPass
#define Z_Options_concurrentOperations
#define Z_SearchResponse_estimate
#define Z_Close_protocolError
#define Z_PresentStatus_partial_2
#define Z_APDU_segmentRequest
#define Z_APDU_scanResponse
#define Z_RPNStructure_simple
#define Z_SearchResponse_subset
#define Z_ExtendedServicesResponse_done
#define Z_PresentStatus_partial_4
#define Z_ProtocolVersion_3
#define Z_SortResponse_failure
#define Z_APDU_sortRequest
#define Z_Close_lackOfActivity
#define Z_APDU_deleteResultSetRequest
#define Z_Options_namedResultSets
#define Z_APDU_searchResponse
#define Z_APDU_extendedServicesRequest
#define Z_GDU_HTTP_Request
int z_GDU(ODR o, Z_GDU **p, int opt, const char *name)