X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=server%2Fseshigh.c;h=e3555582bd5708a31e3ef028a11efbf2f124d566;hp=3edeba7461e52b3ca6676c82ddb19891e158c64e;hb=7148f4238bd2ea22c60008fc3062626b42456ae4;hpb=aa82967af8f06004b567ad1ed40c67b056c44e7b diff --git a/server/seshigh.c b/server/seshigh.c index 3edeba7..e355558 100644 --- a/server/seshigh.c +++ b/server/seshigh.c @@ -4,7 +4,13 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: seshigh.c,v $ - * Revision 1.19 1995-04-18 08:15:34 quinn + * Revision 1.21 1995-05-02 08:53:19 quinn + * Trying in vain to fix comm with ISODE + * + * Revision 1.20 1995/04/20 15:13:00 quinn + * Cosmetic + * + * Revision 1.19 1995/04/18 08:15:34 quinn * Added dynamic memory allocation on encoding (whew). Code is now somewhat * neater. We'll make the same change for decoding one day. * @@ -79,7 +85,7 @@ #include -#define MAXRECORDSIZE 1024*1024 +#define MAXRECORDSIZE 1024*1024*5 /* should be configurable, of course */ static int process_apdu(IOCHAN chan); static int process_initRequest(IOCHAN client, Z_InitRequest *req); @@ -92,6 +98,12 @@ extern char *apdufile; static FILE *apduf = 0; /* for use in static mode */ +/* + * Create a new association-handle. + * channel : iochannel for the current line. + * link : communications channel. + * Returns: 0 or a new association handle. + */ association *create_association(IOCHAN channel, COMSTACK link) { association *new; @@ -141,7 +153,6 @@ association *create_association(IOCHAN channel, COMSTACK link) } else new->print = 0; - new->state = ASSOC_UNINIT; new->input_buffer = 0; new->input_buffer_len = 0; new->backend = 0; @@ -152,6 +163,9 @@ association *create_association(IOCHAN channel, COMSTACK link) return new; } +/* + * Free association and release resources. + */ void destroy_association(association *h) { odr_destroy(h->decode); @@ -166,7 +180,10 @@ void destroy_association(association *h) } /* - * process events on the association + * process events on the association. Called when the event loop detects an + * event. + * h : the I/O channel that has an outstanding event. + * event : the current outstanding event. */ void ir_session(IOCHAN h, int event) { @@ -225,6 +242,9 @@ void ir_session(IOCHAN h, int event) } } +/* + * Process the current outstanding APDU. + */ static int process_apdu(IOCHAN chan) { Z_APDU *apdu; @@ -314,10 +334,6 @@ static int process_initRequest(IOCHAN client, Z_InitRequest *req) ODR_MASK_SET(&protocolVersion, Z_ProtocolVersion_2); resp.protocolVersion = &protocolVersion; assoc->maximumRecordSize = *req->maximumRecordSize; - /* - * This is not so hot. The big todo for ODR is dynamic memory allocation - * on encoding. - */ if (assoc->maximumRecordSize > MAXRECORDSIZE) assoc->maximumRecordSize = MAXRECORDSIZE; assoc->preferredMessageSize = *req->preferredMessageSize; @@ -327,8 +343,11 @@ static int process_initRequest(IOCHAN client, Z_InitRequest *req) resp.maximumRecordSize = &assoc->maximumRecordSize; resp.result = &result; resp.implementationId = "YAZ"; +#if 0 resp.implementationName = "Index Data/YAZ Generic Frontend Server"; - resp.implementationVersion = "$Revision: 1.19 $"; +#endif + resp.implementationName = "High Level API Server aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddduuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; + resp.implementationVersion = "$Revision: 1.21 $"; resp.userInformationField = 0; if (!z_APDU(assoc->encode, &apdup, 0)) { @@ -774,10 +793,19 @@ static int process_scanRequest(IOCHAN client, Z_ScanRequest *req) } if (!z_APDU(assoc->encode, &apdup, 0)) { - logf(LOG_FATAL, "ODR error encoding initres: %s", + logf(LOG_FATAL, "ODR error encoding scanres: %s", + odr_errlist[odr_geterror(assoc->encode)]); + return -1; + } +#if 0 + odr_reset(assoc->print); + if (!z_APDU(assoc->print, &apdup, 0)) + { + logf(LOG_FATAL, "ODR error priniting scanres: %s", odr_errlist[odr_geterror(assoc->encode)]); return -1; } +#endif assoc->encode_buffer = odr_getbuf(assoc->encode, &assoc->encoded_len); odr_reset(assoc->encode); iochan_setflags(client, EVENT_OUTPUT | EVENT_EXCEPT);