X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fyaz-z-assoc.cpp;h=72a3d412b1cdd61570d6fa7c3078bdc4fdc4f86e;hb=277e55dae549f6fa6b9ad22d8ebd89af53bcd71b;hp=08e197652fe4709826be6393c5778ed3f1d73cdf;hpb=50fbcf20ab48480e819ec5aef312a72c684bf213;p=yazpp-moved-to-github.git diff --git a/src/yaz-z-assoc.cpp b/src/yaz-z-assoc.cpp index 08e1976..72a3d41 100644 --- a/src/yaz-z-assoc.cpp +++ b/src/yaz-z-assoc.cpp @@ -1,8 +1,8 @@ /* - * Copyright (c) 1998-2001, Index Data. + * Copyright (c) 1998-2003, Index Data. * See the file LICENSE for details. * - * $Id: yaz-z-assoc.cpp,v 1.28 2003-10-16 16:10:43 adam Exp $ + * $Id: yaz-z-assoc.cpp,v 1.32 2003-12-16 14:17:01 adam Exp $ */ #include @@ -63,6 +63,7 @@ int Yaz_Z_Assoc::set_APDU_yazlog(int v) { int old = m_APDU_yazlog; m_APDU_yazlog = v; + return old; } const char *Yaz_Z_Assoc::get_APDU_log() @@ -84,14 +85,15 @@ Yaz_Z_Assoc::~Yaz_Z_Assoc() void Yaz_Z_Assoc::recv_PDU(const char *buf, int len) { yaz_log (m_log, "recv_PDU len=%d", len); - Z_APDU *apdu = decode_Z_PDU (buf, len); + Z_GDU *apdu = decode_GDU (buf, len); if (apdu) { - recv_Z_PDU (apdu, len); + recv_GDU (apdu, len); } else { close(); + failNotify(); } } @@ -180,9 +182,17 @@ void Yaz_Z_Assoc::transfer_referenceId(Z_APDU *from, Z_APDU *to) int Yaz_Z_Assoc::send_Z_PDU(Z_APDU *apdu, int *plen) { + Z_GDU *gdu = (Z_GDU*) odr_malloc(odr_encode(), sizeof(*gdu)); + gdu->which = Z_GDU_Z3950; + gdu->u.z3950 = apdu; + return send_GDU(gdu, plen); +} + +int Yaz_Z_Assoc::send_GDU(Z_GDU *apdu, int *plen) +{ char *buf; int len; - if (encode_Z_PDU(apdu, &buf, &len) > 0) + if (encode_GDU(apdu, &buf, &len) > 0) { if (plen) *plen = len; @@ -191,14 +201,14 @@ int Yaz_Z_Assoc::send_Z_PDU(Z_APDU *apdu, int *plen) return -1; } -Z_APDU *Yaz_Z_Assoc::decode_Z_PDU(const char *buf, int len) +Z_GDU *Yaz_Z_Assoc::decode_GDU(const char *buf, int len) { - Z_APDU *apdu; + Z_GDU *apdu; odr_reset (m_odr_in); odr_setbuf (m_odr_in, (char*) buf, len, 0); - if (!z_APDU(m_odr_in, &apdu, 0, 0)) + if (!z_GDU(m_odr_in, &apdu, 0, 0)) { yaz_log(LOG_LOG, "ODR error on incoming PDU: %s [near byte %d] ", odr_errmsg(odr_geterror(m_odr_in)), @@ -214,37 +224,39 @@ Z_APDU *Yaz_Z_Assoc::decode_Z_PDU(const char *buf, int len) FILE *save = m_APDU_file; odr_setprint(m_odr_print, yaz_log_file()); - z_APDU(m_odr_print, &apdu, 0, "decode"); + z_GDU(m_odr_print, &apdu, 0, "decode"); m_APDU_file = save; + odr_setprint(m_odr_print, save); } if (m_APDU_file) { - z_APDU(m_odr_print, &apdu, 0, "decode"); + z_GDU(m_odr_print, &apdu, 0, "decode"); fflush(m_APDU_file); } return apdu; } } -int Yaz_Z_Assoc::encode_Z_PDU(Z_APDU *apdu, char **buf, int *len) +int Yaz_Z_Assoc::encode_GDU(Z_GDU *apdu, char **buf, int *len) { if (m_APDU_yazlog) { FILE *save = m_APDU_file; odr_setprint(m_odr_print, yaz_log_file()); // use YAZ log FILE - z_APDU(m_odr_print, &apdu, 0, "encode"); + z_GDU(m_odr_print, &apdu, 0, "encode"); m_APDU_file = save; + odr_setprint(m_odr_print, save); } if (m_APDU_file) { - z_APDU(m_odr_print, &apdu, 0, "encode"); + z_GDU(m_odr_print, &apdu, 0, "encode"); fflush(m_APDU_file); } - if (!z_APDU(m_odr_out, &apdu, 0, 0)) + if (!z_GDU(m_odr_out, &apdu, 0, 0)) { if (m_APDU_file) fprintf (m_APDU_file, "PDU encode failed (above)"); - yaz_log (LOG_LOG, "yaz_Z_Assoc::encode_Z_PDU failed"); + yaz_log (LOG_LOG, "yaz_Z_Assoc::encode_Z_GDU failed"); return -1; } *buf = odr_getbuf (m_odr_out, len, 0); @@ -270,12 +282,12 @@ void Yaz_Z_Assoc::close() m_PDU_Observable->close (); } -void Yaz_Z_Assoc::server(const char *addr) +int Yaz_Z_Assoc::server(const char *addr) { delete [] m_hostname; m_hostname = new char[strlen(addr)+1]; strcpy (m_hostname, addr); - m_PDU_Observable->listen (this, addr); + return m_PDU_Observable->listen (this, addr); } ODR Yaz_Z_Assoc::odr_encode()