X-Git-Url: http://git.indexdata.com/?p=yazpp-moved-to-github.git;a=blobdiff_plain;f=src%2Fyaz-z-server.cpp;h=ae7e94ad3c08b4004b4f5cbc447da2f196457657;hp=a2812f9161e49bcd3aea28412bbdf0a7d088f2ec;hb=ffc71f400dd4cdb8e631186f8e31a93fc641abd7;hpb=67260891a47e8b76c5a38b7f418e5daea31fbab7 diff --git a/src/yaz-z-server.cpp b/src/yaz-z-server.cpp index a2812f9..ae7e94a 100644 --- a/src/yaz-z-server.cpp +++ b/src/yaz-z-server.cpp @@ -3,7 +3,16 @@ * See the file LICENSE for details. * * $Log: yaz-z-server.cpp,v $ - * Revision 1.9 2001-03-29 15:14:26 adam + * Revision 1.12 2001-04-25 19:40:18 adam + * Added refernceId handling for other services. + * + * Revision 1.11 2001/04/12 15:12:10 heikki + * minor ursula stuff + * + * Revision 1.10 2001/04/04 14:02:49 adam + * URSULA / Z-ruth service. + * + * Revision 1.9 2001/03/29 15:14:26 adam * Minor updates. * * Revision 1.8 2001/03/27 14:47:45 adam @@ -105,6 +114,7 @@ void Yaz_Z_Server::recv_Z_PDU (Z_APDU *apdu_request) f->m_facility->init(this, req, resp); f = f->m_next; } + transfer_referenceId(apdu_request, apdu_response); send_Z_PDU(apdu_response); } else @@ -120,8 +130,82 @@ void Yaz_Z_Server::recv_Z_PDU (Z_APDU *apdu_request) } if (!taken) { - yaz_log (LOG_LOG, "got request = %d", apdu_request->which); + yaz_log (LOG_LOG, "unhandled request = %d", apdu_request->which); delete this; } } } + +/* + * database record. + */ +void Yaz_Z_ServerUtility::create_databaseRecord ( + ODR odr, Z_NamePlusRecord *rec, const char *dbname, int format, + const void *buf, int len) +{ + rec->databaseName = dbname ? odr_strdup (odr, dbname) : 0; + rec->which = Z_NamePlusRecord_databaseRecord; + rec->u.databaseRecord = z_ext_record (odr, format, + (const char *) buf, len); +} + +/* + * surrogate diagnostic. + */ +void Yaz_Z_ServerUtility::create_surrogateDiagnostics( + ODR odr, Z_NamePlusRecord *rec, const char *dbname, + int error, char *const addinfo) +{ + int oid[OID_SIZE]; + int *err = (int *)odr_malloc (odr, sizeof(*err)); + oident bib1; + Z_DiagRec *drec = (Z_DiagRec *)odr_malloc (odr, sizeof(*drec)); + Z_DefaultDiagFormat *dr = (Z_DefaultDiagFormat *) + odr_malloc (odr, sizeof(*dr)); + + bib1.proto = PROTO_Z3950; + bib1.oclass = CLASS_DIAGSET; + bib1.value = VAL_BIB1; + + yaz_log(LOG_DEBUG, "SurrogateDiagnotic: %d -- %s", error, addinfo); + *err = error; + rec->databaseName = dbname ? odr_strdup (odr, dbname) : 0; + rec->which = Z_NamePlusRecord_surrogateDiagnostic; + rec->u.surrogateDiagnostic = drec; + drec->which = Z_DiagRec_defaultFormat; + drec->u.defaultFormat = dr; + dr->diagnosticSetId = odr_oiddup (odr, + oid_ent_to_oid(&bib1, oid)); + dr->condition = err; + dr->which = Z_DefaultDiagFormat_v2Addinfo; + dr->u.v2Addinfo = odr_strdup (odr, addinfo ? addinfo : ""); +} + +Z_Records *Yaz_Z_ServerUtility::create_nonSurrogateDiagnostics ( + ODR odr, int error, const char *addinfo) +{ + int oid[OID_SIZE]; + Z_Records *rec = (Z_Records *) + odr_malloc (odr, sizeof(*rec)); + oident bib1; + 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)); + + bib1.proto = PROTO_Z3950; + bib1.oclass = CLASS_DIAGSET; + bib1.value = VAL_BIB1; + + *err = error; + rec->which = Z_Records_NSD; + rec->u.nonSurrogateDiagnostic = dr; + dr->diagnosticSetId = + odr_oiddup (odr, oid_ent_to_oid(&bib1, oid)); + dr->condition = err; + dr->which = Z_DefaultDiagFormat_v2Addinfo; + dr->u.v2Addinfo = odr_strdup (odr, addinfo ? addinfo : ""); + return rec; +}