00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00031 #ifndef SESSION_H
00032 #define SESSION_H
00033
00034 #include <yaz/comstack.h>
00035 #include <yaz/cql.h>
00036 #include <yaz/ccl.h>
00037 #include <yaz/odr.h>
00038 #include <yaz/proto.h>
00039 #include <yaz/backend.h>
00040 #include <yaz/retrieval.h>
00041 #include "eventl.h"
00042
00043 struct gfs_server {
00044 statserv_options_block cb;
00045 char *host;
00046 int listen_ref;
00047 cql_transform_t cql_transform;
00048 CCL_bibset ccl_transform;
00049 void *server_node_ptr;
00050 char *directory;
00051 char *docpath;
00052 char *stylesheet;
00053 yaz_retrieval_t retrieval;
00054 struct gfs_server *next;
00055 };
00056
00057 struct gfs_listen {
00058 char *id;
00059 char *address;
00060 struct gfs_listen *next;
00061 };
00062
00063 typedef enum {
00064 REQUEST_IDLE,
00065 REQUEST_PENDING
00066
00067 } request_state;
00068
00069 typedef struct request
00070 {
00071 request_state state;
00072
00073 Z_GDU *gdu_request;
00074 Z_APDU *apdu_request;
00075 NMEM request_mem;
00076
00077 int size_response;
00078 int len_response;
00079 char *response;
00080
00081 void *clientData;
00082 struct request *next;
00083 struct request_q *q;
00084 } request;
00085
00086 typedef struct request_q
00087 {
00088 request *head;
00089 request *tail;
00090 request *list;
00091 int num;
00092 } request_q;
00093
00094
00095
00096
00097 typedef enum
00098 {
00099 ASSOC_NEW,
00100 ASSOC_UP,
00101 ASSOC_DEAD
00102 } association_state;
00103
00104 typedef struct association
00105 {
00106 IOCHAN client_chan;
00107 COMSTACK client_link;
00108 ODR decode;
00109 ODR encode;
00110 ODR print;
00111 char *encode_buffer;
00112 int encoded_len;
00113 char *input_buffer;
00114 int input_buffer_len;
00115 int input_apdu_len;
00116 oid_proto proto;
00117 void *backend;
00118 request_q incoming;
00119 request_q outgoing;
00120 association_state state;
00121
00122
00123 int preferredMessageSize;
00124 int maximumRecordSize;
00125 int version;
00126
00127 int cs_get_mask;
00128 int cs_put_mask;
00129 int cs_accept_mask;
00130
00131 struct bend_initrequest *init;
00132 statserv_options_block *last_control;
00133
00134 struct gfs_server *server;
00135 } association;
00136
00137 association *create_association(IOCHAN channel, COMSTACK link,
00138 const char *apdufile);
00139 void destroy_association(association *h);
00140 void ir_session(IOCHAN h, int event);
00141
00142 void request_enq(request_q *q, request *r);
00143 request *request_head(request_q *q);
00144 request *request_deq(request_q *q);
00145 request *request_deq_x(request_q *q, request *r);
00146 void request_initq(request_q *q);
00147 void request_delq(request_q *q);
00148 request *request_get(request_q *q);
00149 void request_release(request *r);
00150
00151 int statserv_must_terminate(void);
00152
00153 int control_association(association *assoc, const char *host, int force);
00154
00155 int ir_read(IOCHAN h, int event);
00156
00157 #endif
00158
00159
00160
00161
00162
00163
00164
00165
00166