1 /* This file is part of the YAZ toolkit.
2 * Copyright (C) 1995-2010 Index Data.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met:
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.
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.
29 * \brief Internal header for ZOOM implementation
31 #include <yaz/proto.h>
32 #include <yaz/oid_db.h>
33 #include <yaz/comstack.h>
34 #include <yaz/wrbuf.h>
36 #include <yaz/sortspec.h>
38 #include <yaz/mutex.h>
41 #define ZOOM_RESULT_LISTS 0
43 typedef struct ZOOM_Event_p *ZOOM_Event;
47 Z_SortKeySpecList *sort_spec;
61 typedef struct ZOOM_task_p *ZOOM_task;
64 #define STATE_CONNECTING 1
65 #define STATE_ESTABLISHED 2
68 typedef struct ZOOM_resultsets_p *ZOOM_resultsets;
71 struct ZOOM_connection_p {
102 int support_named_resultsets;
105 int maximum_record_size;
106 int preferred_message_size;
109 ZOOM_options options;
110 #if ZOOM_RESULT_LISTS
111 ZOOM_resultsets resultsets;
113 ZOOM_resultset resultsets;
115 ZOOM_Event m_queue_front;
116 ZOOM_Event m_queue_back;
117 zoom_sru_mode sru_mode;
118 int no_redirects; /* 0 for no redirects. >0 for number of redirects */
124 #if ZOOM_RESULT_LISTS
125 struct ZOOM_resultsets_p {
126 ZOOM_resultset resultset;
127 ZOOM_resultsets next;
131 struct ZOOM_options_entry {
134 int len; /* of `value', which may contain NULs */
135 struct ZOOM_options_entry *next;
138 struct ZOOM_options_p {
140 void *callback_handle;
141 ZOOM_options_callback callback_func;
142 struct ZOOM_options_entry *entries;
143 ZOOM_options parent1;
144 ZOOM_options parent2;
148 typedef struct ZOOM_record_cache_p *ZOOM_record_cache;
150 #define RECORD_HASH_SIZE 131
152 struct ZOOM_resultset_p {
153 Z_SortKeySpecList *r_sort_spec;
162 ZOOM_record_cache record_hash[RECORD_HASH_SIZE];
163 ZOOM_options options;
164 ZOOM_connection connection;
165 char **databaseNames;
166 int num_databaseNames;
169 struct WRBUF_shptr *record_wrbuf;
171 #if ZOOM_RESULT_LISTS
175 ZOOM_facet_field *facets;
180 struct ZOOM_record_p {
183 struct WRBUF_shptr *record_wrbuf;
188 Z_NamePlusRecord *npr;
191 const char *diag_uri;
192 const char *diag_message;
193 const char *diag_details;
194 const char *diag_set;
197 struct facet_term_p {
202 struct ZOOM_facet_field_p {
205 struct facet_term_p *facet_terms;
209 struct ZOOM_record_cache_p {
210 struct ZOOM_record_p rec;
211 char *elementSetName;
215 ZOOM_record_cache next;
218 struct ZOOM_scanset_p {
221 ZOOM_options options;
222 ZOOM_connection connection;
224 Z_ScanResponse *scan_response;
225 Z_SRW_scanResponse *srw_scan_response;
227 char **databaseNames;
228 int num_databaseNames;
231 struct ZOOM_package_p {
234 ZOOM_options options;
235 ZOOM_connection connection;
244 #define ZOOM_TASK_SEARCH 1
248 ZOOM_resultset resultset;
250 char *elementSetName;
251 int recv_search_fired;
253 #define ZOOM_TASK_RETRIEVE 2
256 ZOOM_resultset resultset;
259 char *elementSetName;
261 #define ZOOM_TASK_CONNECT 3
262 #define ZOOM_TASK_SCAN 4
266 #define ZOOM_TASK_PACKAGE 5
267 ZOOM_package package;
268 #define ZOOM_TASK_SORT 6
270 ZOOM_resultset resultset;
277 struct ZOOM_Event_p {
288 void ZOOM_options_addref (ZOOM_options opt);
290 void ZOOM_handle_Z3950_apdu(ZOOM_connection c, Z_APDU *apdu);
292 void ZOOM_set_dset_error(ZOOM_connection c, int error,
294 const char *addinfo, const char *addinfo2);
296 void ZOOM_set_error(ZOOM_connection c, int error, const char *addinfo);
298 ZOOM_Event ZOOM_Event_create(int kind);
299 void ZOOM_connection_put_event(ZOOM_connection c, ZOOM_Event event);
301 zoom_ret ZOOM_connection_Z3950_send_search(ZOOM_connection c);
302 zoom_ret send_Z3950_present(ZOOM_connection c);
303 zoom_ret ZOOM_connection_Z3950_send_scan(ZOOM_connection c);
304 zoom_ret ZOOM_send_buf(ZOOM_connection c);
305 zoom_ret send_Z3950_sort(ZOOM_connection c, ZOOM_resultset resultset);
306 char **ZOOM_connection_get_databases(ZOOM_connection con, ZOOM_options options,
308 zoom_ret ZOOM_connection_Z3950_send_init(ZOOM_connection c);
310 ZOOM_task ZOOM_connection_add_task(ZOOM_connection c, int which);
311 void ZOOM_connection_remove_task(ZOOM_connection c);
312 int ZOOM_test_reconnect(ZOOM_connection c);
314 ZOOM_record ZOOM_record_cache_lookup(ZOOM_resultset r, int pos,
316 const char *elementSetName);
317 void ZOOM_record_cache_add(ZOOM_resultset r, Z_NamePlusRecord *npr,
319 const char *syntax, const char *elementSetName,
321 Z_SRW_diagnostic *diag);
327 * c-file-style: "Stroustrup"
328 * indent-tabs-mode: nil
330 * vim: shiftwidth=4 tabstop=8 expandtab