* 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
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;
}
*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:
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.");
}
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 =
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;
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)
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;
* 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;
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;