Function ccl_rpn_query sets attributeSet to Bib-1.
[yaz-moved-to-github.git] / server / seshigh.c
index 1beb970..277050a 100644 (file)
@@ -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;