-void Yaz_Z_Server::recv_Z_PDU (Z_APDU *apdu_request)
-{
- Z_APDU *apdu_response;
- switch (apdu_request->which)
- {
- case Z_APDU_initRequest:
- logf (LOG_LOG, "got InitRequest");
- apdu_response = create_Z_PDU(Z_APDU_initResponse);
- recv_Z_init (apdu_request->u.initRequest,
- apdu_response->u.initResponse);
- send_Z_PDU(apdu_response);
- break;
- case Z_APDU_searchRequest:
- logf (LOG_LOG, "got SearchRequest");
- apdu_response = create_Z_PDU(Z_APDU_searchResponse);
- recv_Z_search (apdu_request->u.searchRequest,
- apdu_response->u.searchResponse);
- if (!apdu_response->u.searchResponse->records)
- {
- piggyback(apdu_request->u.searchRequest,
- apdu_response->u.searchResponse);
- }
- send_Z_PDU(apdu_response);
- break;
- case Z_APDU_presentRequest:
- logf (LOG_LOG, "got PresentRequest");
- apdu_response = create_Z_PDU(Z_APDU_presentResponse);
- recv_Z_present (apdu_request->u.presentRequest,
- apdu_response->u.presentResponse);
- send_Z_PDU(apdu_response);
- break;
- }
+Z_Records *Z_ServerUtility::create_nonSurrogateDiagnostics (
+ ODR odr, int error, const char *addinfo)
+{
+ Z_Records *rec = (Z_Records *)
+ odr_malloc (odr, sizeof(*rec));
+ int *err = (int *)
+ odr_malloc (odr, sizeof(*err));
+ Z_DiagRec *drec = (Z_DiagRec *)
+ odr_malloc (odr, sizeof(*drec));
+ Z_DefaultDiagFormat *dr = (Z_DefaultDiagFormat *)
+ odr_malloc (odr, sizeof(*dr));
+
+ *err = error;
+ rec->which = Z_Records_NSD;
+ rec->u.nonSurrogateDiagnostic = dr;
+ dr->diagnosticSetId =
+ yaz_oidval_to_z3950oid (odr, CLASS_DIAGSET, VAL_BIB1);
+
+ dr->condition = err;
+ dr->which = Z_DefaultDiagFormat_v2Addinfo;
+ dr->u.v2Addinfo = odr_strdup (odr, addinfo ? addinfo : "");
+ return rec;