X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=server%2Fseshigh.c;h=277050ab5825a62193748b153aecf4643fc31fe3;hb=eaf27c9dc97e048dcd9a90dc05aa8133b3020c5b;hp=1beb9702d3bc632d4e56d12c86cb8e7c3747b43f;hpb=7acd51b7cdffca5ad92a777d2c6e8e9bae1f9fd3;p=yaz-moved-to-github.git diff --git a/server/seshigh.c b/server/seshigh.c index 1beb970..277050a 100644 --- a/server/seshigh.c +++ b/server/seshigh.c @@ -3,7 +3,26 @@ * See the file LICENSE for details. * * $Log: seshigh.c,v $ - * Revision 1.104 2000-04-05 07:39:55 adam + * Revision 1.110 2000-10-02 13:05:32 adam + * Fixed bug introduced by previous commit. + * + * Revision 1.109 2000/10/02 11:07:44 adam + * Added peer_name member for bend_init handler. Changed the YAZ + * client so that tcp: can be avoided in target spec. + * + * Revision 1.108 2000/09/04 08:58:15 adam + * Added prefix yaz_ for most logging utility functions. + * + * Revision 1.107 2000/08/31 10:20:12 adam + * Added member request_format and output_format for backend fetch method. + * + * Revision 1.106 2000/08/31 09:51:25 adam + * Added record_syntax member for fetch method (raw OID). + * + * Revision 1.105 2000/07/06 10:38:47 adam + * Enhanced option --enable-tcpd. + * + * Revision 1.104 2000/04/05 07:39:55 adam * Added shared library support (libtool). * * Revision 1.103 2000/03/20 19:06:25 adam @@ -599,7 +618,7 @@ void ir_session(IOCHAN h, int event) odr_errmsg(odr_geterror(assoc->decode)), odr_offset(assoc->decode)); yaz_log(LOG_LOG, "PDU dump:"); - odr_dumpBER(log_file(), assoc->input_buffer, res); + odr_dumpBER(yaz_log_file(), assoc->input_buffer, res); do_close(assoc, Z_Close_protocolError, "Malformed package"); return; } @@ -668,6 +687,11 @@ static int process_request(association *assoc, request *req, char **msg) *msg = "Unknown Error"; assert(req && req->state == REQUEST_IDLE); + if (req->request->which != Z_APDU_initRequest && !assoc->init) + { + *msg = "Missing InitRequest"; + return -1; + } switch (req->request->which) { case Z_APDU_initRequest: @@ -876,6 +900,9 @@ static Z_APDU *process_initRequest(association *assoc, request *reqb) assoc->init->bend_scan = NULL; assoc->init->bend_segment = NULL; assoc->init->bend_fetch = NULL; + + assoc->init->peer_name = + odr_strdup (assoc->encode, cs_addrstr(assoc->client_link)); if (!(binitres = (*cb->bend_init)(assoc->init))) { yaz_log(LOG_WARN, "Bad response from backend."); @@ -1130,9 +1157,10 @@ static Z_DiagRecs *diagrecs(association *assoc, int error, char *addinfo) } static Z_Records *pack_records(association *a, char *setname, int start, - int *num, Z_RecordComposition *comp, - int *next, int *pres, oid_value format, - Z_ReferenceId *referenceId) + int *num, Z_RecordComposition *comp, + int *next, int *pres, oid_value format, + Z_ReferenceId *referenceId, + int *oid) { int recno, total_length = 0, toget = *num, dumped_records = 0; Z_Records *records = @@ -1175,7 +1203,9 @@ static Z_Records *pack_records(association *a, char *setname, int start, freq.number = recno; freq.comp = comp; freq.request_format = format; - freq.output_format = 0; + freq.request_format_raw = oid; + freq.output_format = format; + freq.output_format_raw = 0; freq.stream = a->encode; freq.print = a->print; freq.surrogate_flag = 0; @@ -1247,6 +1277,12 @@ static Z_Records *pack_records(association *a, char *setname, int start, return 0; strcpy(thisrec->databaseName, freq.basename); thisrec->which = Z_NamePlusRecord_databaseRecord; + + if (freq.output_format_raw) + { + struct oident *ident = oid_getentbyoid(freq.output_format_raw); + freq.output_format = ident->value; + } thisrec->u.databaseRecord = z_ext_record(a->encode, freq.output_format, freq.record, freq.len); if (!thisrec->u.databaseRecord) @@ -1415,7 +1451,8 @@ static Z_APDU *response_searchRequest(association *assoc, request *reqb, else form = prefformat->value; resp->records = pack_records(assoc, req->resultSetName, 1, - toget, compp, next, presst, form, req->referenceId); + toget, compp, next, presst, form, req->referenceId, + req->preferredRecordSyntax); if (!resp->records) return 0; resp->numberOfRecordsReturned = toget; @@ -1454,7 +1491,7 @@ static Z_APDU *response_searchRequest(association *assoc, request *reqb, * speed - which is normally more true for search than for present. */ static Z_APDU *process_presentRequest(association *assoc, request *reqb, - int *fd) + int *fd) { Z_PresentRequest *req = reqb->request->u.presentRequest; oident *prefformat; @@ -1510,7 +1547,7 @@ static Z_APDU *process_presentRequest(association *assoc, request *reqb, resp->records = pack_records(assoc, req->resultSetId, *req->resultSetStartPoint, num, req->recordComposition, next, presst, form, - req->referenceId); + req->referenceId, req->preferredRecordSyntax); if (!resp->records) return 0; resp->numberOfRecordsReturned = num;