YAZ 5.38.1
zoom-p.h
Go to the documentation of this file.
1/* This file is part of the YAZ toolkit.
2 * Copyright (C) Index Data.
3 * All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met:
6 *
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of Index Data nor the names of its contributors
13 * may be used to endorse or promote products derived from this
14 * software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
31#include <yaz/proto.h>
32#include <yaz/oid_db.h>
33#include <yaz/comstack.h>
34#include <yaz/wrbuf.h>
35#include <yaz/zoom.h>
36#include <yaz/srw.h>
37#include <yaz/cookie.h>
38#include <yaz/mutex.h>
39#if HAVE_LIBMEMCACHED
40#include <libmemcached/memcached.h>
41#endif
42#if HAVE_HIREDIS
43#include <hiredis/hiredis.h>
44#endif
45
46#define SHPTR 1
47
48typedef struct ZOOM_Event_p *ZOOM_Event;
49
57
58
59typedef struct ZOOM_task_p *ZOOM_task;
60
61#define STATE_IDLE 0
62#define STATE_CONNECTING 1
63#define STATE_ESTABLISHED 2
64
68 char *host_port;
69 int error;
70 char *addinfo;
71 char *diagset;
72 int state;
73 int mask;
79
80 char *buf_in;
81 int len_in;
82 char *buf_out;
84 char *proxy;
85 char *tproxy;
88 char *charset;
89 char *lang;
91 char *cookie_in;
92 char *client_IP;
94
95 char *user;
96 char *group;
97 char *password;
99
100 int async;
103
106
113 int no_redirects; /* 0 for no redirects. >0 for number of redirects */
115 char *location;
116
120#if HAVE_LIBMEMCACHED
121 memcached_st *mc_st;
122#endif
123#if HAVE_HIREDIS
124 redisContext *redis_c;
125#endif
128};
129
131
132#define RECORD_HASH_SIZE 131
133
139 int step;
141 char *setname;
149#if SHPTR
150 struct WRBUF_shptr *record_wrbuf;
151#endif
156 char **facets_names; /* redundant. For ZOOM_resultset_facets_names only */
158 int live_set; /* 0=no hit count, 1=cached hit, 2=hits + real set */
159};
160
162 char *term;
164};
165
171
184
193
196 int which;
197 union {
198#define ZOOM_TASK_SEARCH 1
199 struct {
200 int count;
201 int start;
203 char *syntax;
204 char *elementSetName;
205 char *schema;
206 } search;
207#define ZOOM_TASK_CONNECT 3
208#define ZOOM_TASK_SCAN 4
209 struct {
211 } scan;
212#define ZOOM_TASK_PACKAGE 5
213 ZOOM_package package;
214#define ZOOM_TASK_SORT 6
215 struct {
218 } sort;
219 } u;
221};
222
227
229
231
232void ZOOM_set_dset_error(ZOOM_connection c, int error,
233 const char *dset,
234 const char *addinfo, const char *addinfo2);
235
236void ZOOM_set_error(ZOOM_connection c, int error, const char *addinfo);
237
240
246 int *num, ODR odr);
248
253
255 const char *syntax,
256 const char *elementSetName,
257 const char *schema);
259 int pos,
260 const char *syntax, const char *elementSetName,
261 const char *schema,
262 Z_SRW_diagnostic *diag);
263
267const char *ZOOM_query_get_sru11(ZOOM_query s);
269
270int ZOOM_uri_to_code(const char *uri);
271
274
276 zoom_ret *cret, char **addinfo);
277
278void ZOOM_set_HTTP_error(ZOOM_connection c, int error,
279 const char *addinfo, const char *addinfo2);
280
286
293 Z_OtherInformation *oi, const char *precision);
295 int pos,
296 const char *syntax, const char *elementSetName,
297 const char *schema,
298 Z_SRW_diagnostic *diag);
300 const char *syntax,
301 const char *elementSetName,
302 const char *schema);
304 const char *syntax,
305 const char *elementSetName,
306 const char *schema);
311
312/*
313 * Local variables:
314 * c-basic-offset: 4
315 * c-file-style: "Stroustrup"
316 * indent-tabs-mode: nil
317 * End:
318 * vim: shiftwidth=4 tabstop=8 expandtab
319 */
320
Transport-independent communication endpoints for BER and HTTP.
struct comstack * COMSTACK
Communication endpoint; release with cs_close.
Definition comstack.h:48
HTTP cookie handling.
struct yaz_cookies_s * yaz_cookies_t
Definition cookie.h:40
Header for Mutex functions.
struct yaz_mutex * YAZ_MUTEX
YAZ MUTEX opaque pointer.
Definition mutex.h:42
struct odr * ODR
Definition odr.h:121
nmem_int_t Odr_int
Definition odr.h:47
Header for OID database.
oid_proto
Definition oid_util.h:45
int options(const char *desc, char **argv, int argc, char **arg)
command-line options parsing for main
Definition options.c:21
Header for Z39.50 Protocol.
Header for SRW/SRU.
char * diagset
Definition zoom-p.h:71
char * tproxy
Definition zoom-p.h:85
int preferred_message_size
Definition zoom-p.h:105
char * charset
Definition zoom-p.h:88
char * buf_out
Definition zoom-p.h:82
char * sru_version
Definition zoom-p.h:93
char * client_IP
Definition zoom-p.h:92
ZOOM_Event m_queue_back
Definition zoom-p.h:111
ZOOM_Event m_queue_front
Definition zoom-p.h:110
char * password
Definition zoom-p.h:97
ZOOM_resultset resultsets
Definition zoom-p.h:109
char * cookie_out
Definition zoom-p.h:90
char * cookie_in
Definition zoom-p.h:91
ZOOM_options options
Definition zoom-p.h:108
enum oid_proto proto
Definition zoom-p.h:66
zoom_sru_mode sru_mode
Definition zoom-p.h:112
COMSTACK cs
Definition zoom-p.h:67
ZOOM_task tasks
Definition zoom-p.h:107
int support_named_resultsets
Definition zoom-p.h:101
int maximum_record_size
Definition zoom-p.h:104
char * host_port
Definition zoom-p.h:68
WRBUF saveAPDU_wrbuf
Definition zoom-p.h:119
char * addinfo
Definition zoom-p.h:70
int url_authentication
Definition zoom-p.h:98
yaz_cookies_t cookies
Definition zoom-p.h:114
char * location
Definition zoom-p.h:115
char * buf_in
Definition zoom-p.h:80
struct facet_term_p * facet_terms
Definition zoom-p.h:169
char * facet_name
Definition zoom-p.h:167
ZOOM_options options
Definition zoom-p.h:188
char * buf_out
Definition zoom-p.h:190
ZOOM_connection connection
Definition zoom-p.h:189
int num_databaseNames
Definition zoom-p.h:147
char ** facets_names
Definition zoom-p.h:156
ZOOM_query query
Definition zoom-p.h:136
ZOOM_options options
Definition zoom-p.h:144
char * req_facets
Definition zoom-p.h:153
ZOOM_resultset next
Definition zoom-p.h:152
ZOOM_facet_field * res_facets
Definition zoom-p.h:154
Odr_int size
Definition zoom-p.h:138
char * setname
Definition zoom-p.h:141
YAZ_MUTEX mutex
Definition zoom-p.h:148
Z_SortKeySpecList * r_sort_spec
Definition zoom-p.h:135
char ** databaseNames
Definition zoom-p.h:146
ZOOM_record_cache record_hash[RECORD_HASH_SIZE]
Definition zoom-p.h:143
ZOOM_connection connection
Definition zoom-p.h:145
int num_databaseNames
Definition zoom-p.h:182
ZOOM_query query
Definition zoom-p.h:177
Z_SRW_scanResponse * srw_scan_response
Definition zoom-p.h:179
char ** databaseNames
Definition zoom-p.h:181
ZOOM_connection connection
Definition zoom-p.h:176
ZOOM_options options
Definition zoom-p.h:175
Z_ScanResponse * scan_response
Definition zoom-p.h:178
int running
Definition zoom-p.h:195
union ZOOM_task_p::@010047006325342334307205147377254122376223002123 u
ZOOM_task next
Definition zoom-p.h:220
int which
Definition zoom-p.h:196
Definition zgdu.h:68
int frequency
Definition zoom-p.h:163
char * term
Definition zoom-p.h:162
Definition odr.h:125
struct ZOOM_task_p::@010047006325342334307205147377254122376223002123::@335004313164315273362321066327043044343152001154 search
struct ZOOM_task_p::@010047006325342334307205147377254122376223002123::@214003005045034134213265332155007172324325115255 scan
struct ZOOM_task_p::@010047006325342334307205147377254122376223002123::@367053017047123021240065112132356063051214026242 sort
Header for WRBUF (growing buffer).
struct wrbuf * WRBUF
char ** ZOOM_connection_get_databases(ZOOM_connection con, ZOOM_options options, int *num, ODR odr)
Definition zoom-c.c:323
zoom_ret ZOOM_send_GDU(ZOOM_connection c, Z_GDU *gdu)
Definition zoom-c.c:1538
zoom_ret ZOOM_send_buf(ZOOM_connection c)
Definition zoom-c.c:1782
int ZOOM_uri_to_code(const char *uri)
Definition zoom-c.c:89
int ZOOM_test_reconnect(ZOOM_connection c)
Definition zoom-c.c:906
void ZOOM_set_error(ZOOM_connection c, int error, const char *addinfo)
Definition zoom-c.c:98
void ZOOM_connection_remove_task(ZOOM_connection c)
Definition zoom-c.c:183
ZOOM_task ZOOM_connection_add_task(ZOOM_connection c, int which)
Definition zoom-c.c:153
void ZOOM_set_HTTP_error(ZOOM_connection c, int error, const char *addinfo, const char *addinfo2)
Definition zoom-c.c:1558
void ZOOM_connection_remove_tasks(ZOOM_connection c)
Definition zoom-c.c:223
void ZOOM_set_dset_error(ZOOM_connection c, int error, const char *dset, const char *addinfo, const char *addinfo2)
Definition zoom-c.c:54
ZOOM_Event ZOOM_Event_create(int kind)
Definition zoom-event.c:42
ZOOM_Event ZOOM_connection_get_event(ZOOM_connection c)
Definition zoom-event.c:52
void ZOOM_connection_put_event(ZOOM_connection c, ZOOM_Event event)
Definition zoom-event.c:73
void ZOOM_Event_destroy(ZOOM_Event event)
Definition zoom-event.c:90
void ZOOM_connection_remove_events(ZOOM_connection c)
Definition zoom-event.c:95
void ZOOM_memcached_destroy(ZOOM_connection c)
int ZOOM_memcached_configure(ZOOM_connection c)
Z_NamePlusRecord * ZOOM_memcached_lookup(ZOOM_resultset r, int pos, const char *syntax, const char *elementSetName, const char *schema)
void ZOOM_memcached_hitcount(ZOOM_connection c, ZOOM_resultset resultset, Z_OtherInformation *oi, const char *precision)
void ZOOM_memcached_add(ZOOM_resultset r, Z_NamePlusRecord *npr, int pos, const char *syntax, const char *elementSetName, const char *schema, Z_SRW_diagnostic *diag)
void ZOOM_memcached_resultset(ZOOM_resultset r, ZOOM_query q)
void ZOOM_memcached_init(ZOOM_connection c)
void ZOOM_memcached_search(ZOOM_connection c, ZOOM_resultset resultset)
void ZOOM_options_addref(ZOOM_options opt)
Definition zoom-opt.c:114
struct ZOOM_record_cache_p * ZOOM_record_cache
Definition zoom-p.h:130
struct ZOOM_Event_p * ZOOM_Event
Definition zoom-p.h:48
struct ZOOM_task_p * ZOOM_task
Definition zoom-p.h:59
void ZOOM_handle_search_result(ZOOM_connection c, ZOOM_resultset resultset, Z_OtherInformation *o)
const char * ZOOM_query_get_sru11(ZOOM_query s)
Definition zoom-query.c:123
Z_SortKeySpecList * ZOOM_query_get_sortspec(ZOOM_query s)
Definition zoom-query.c:135
void ZOOM_handle_facet_result(ZOOM_connection c, ZOOM_resultset r, Z_OtherInformation *o)
ZOOM_record ZOOM_record_cache_lookup(ZOOM_resultset r, int pos, const char *syntax, const char *elementSetName, const char *schema)
int ZOOM_handle_sru(ZOOM_connection c, Z_HTTP_Response *hres, zoom_ret *cret, char **addinfo)
Definition zoom-sru.c:417
zoom_sru_mode
Definition zoom-p.h:50
@ zoom_sru_get
Definition zoom-p.h:53
@ zoom_sru_soap
Definition zoom-p.h:52
@ zoom_sru_error
Definition zoom-p.h:51
@ zoom_sru_post
Definition zoom-p.h:54
@ zoom_sru_solr
Definition zoom-p.h:55
zoom_ret ZOOM_connection_srw_send_search(ZOOM_connection c)
Definition zoom-sru.c:145
void ZOOM_handle_Z3950_apdu(ZOOM_connection c, Z_APDU *apdu)
zoom_ret ZOOM_connection_Z3950_send_scan(ZOOM_connection c)
Definition zoom-z3950.c:819
zoom_ret send_Z3950_sort(ZOOM_connection c, ZOOM_resultset resultset)
void ZOOM_handle_facet_list(ZOOM_resultset r, Z_FacetList *fl)
void ZOOM_record_cache_add(ZOOM_resultset r, Z_NamePlusRecord *npr, int pos, const char *syntax, const char *elementSetName, const char *schema, Z_SRW_diagnostic *diag)
zoom_ret ZOOM_connection_Z3950_send_init(ZOOM_connection c)
Definition zoom-z3950.c:570
#define RECORD_HASH_SIZE
Definition zoom-p.h:132
void ZOOM_query_get_hash(ZOOM_query s, WRBUF w)
Definition zoom-query.c:145
zoom_ret ZOOM_connection_srw_send_scan(ZOOM_connection c)
Definition zoom-sru.c:92
zoom_ret
Definition zoom-p.h:223
@ zoom_pending
Definition zoom-p.h:224
@ zoom_complete
Definition zoom-p.h:225
zoom_ret ZOOM_connection_Z3950_search(ZOOM_connection c)
const char * ZOOM_query_get_query_string(ZOOM_query s)
Definition zoom-query.c:140
ZOOM_record ZOOM_record_cache_lookup_i(ZOOM_resultset r, int pos, const char *syntax, const char *elementSetName, const char *schema)
Z_Query * ZOOM_query_get_Z_Query(ZOOM_query s)
Definition zoom-query.c:130
Header for ZOOM.
struct ZOOM_scanset_p * ZOOM_scanset
Definition zoom.h:56
struct ZOOM_facet_field_p * ZOOM_facet_field
Definition zoom.h:55
struct ZOOM_package_p * ZOOM_package
Definition zoom.h:57
struct ZOOM_record_p * ZOOM_record
Definition zoom.h:54
typedefZOOM_BEGIN_CDECL struct ZOOM_options_p * ZOOM_options
Definition zoom.h:50
struct ZOOM_query_p * ZOOM_query
Definition zoom.h:51
struct ZOOM_connection_p * ZOOM_connection
Definition zoom.h:52
struct ZOOM_resultset_p * ZOOM_resultset
Definition zoom.h:53