From: Adam Dickmeiss Date: Thu, 16 Oct 2003 16:10:43 +0000 (+0000) Subject: Logging options may be configured in config file X-Git-Tag: YAZPP.0.7.2~23 X-Git-Url: http://git.indexdata.com/?p=yazpp-moved-to-github.git;a=commitdiff_plain;h=50fbcf20ab48480e819ec5aef312a72c684bf213 Logging options may be configured in config file --- diff --git a/doc/proxy.xml b/doc/proxy.xml index 051e0fb..dfac254 100644 --- a/doc/proxy.xml +++ b/doc/proxy.xml @@ -58,7 +58,7 @@ start it up. It will work exactly as usual, but all the packets will be sent via the proxy, which will generate a log like this: - + @@ -309,7 +310,6 @@ <?xml version="1.0"?> - <!-- $Id --> <proxy> <target name="server1" default="1"> <!-- description of server1 .. --> @@ -478,9 +478,9 @@ <proxy> <target name="mytarget"> - <syntax type="usmarc"/> - <syntax type="xml" marcxml="1"/> - <syntax type="*" error="238"/> + <syntax type="usmarc"/> + <syntax type="xml" marcxml="1"/> + <syntax type="*" error="238"/> </target> </proxy> @@ -552,7 +552,77 @@ - + +
+ Configuration: log + + The element log is the child of element + proxy and specifies what to be logged by the + proxy. + + + Specify the log file with command-line option -l. + + + The text of the log element is a sequence of + options separated by white space. See the table below: + Logging options + + + + + + Option + Description + + + + + client-apdu + + Log APDUs as reported by YAZ for the + communication between the client and the proxy + + + + server-apdu + + Log APDUs as reported by YAZ for the + communication between the proxy and the server (backend). + + + + clients-requests + + Log a brief description about requests transferred between + the client and the proxy. The name of the request and the size + of the APDU is logged. + + + + server-requests + + Log a brief description about requests transferred between + the proxy and the server (backend). The name of the request + and the size of the APDU is logged. + + + + +
+
+ + To log communication in details between the proxy and the backend, th + following configuration could be used: + + server-apdu server-requests + +]]> + + +
+
Proxy Usage diff --git a/doc/yaz++.xml.in b/doc/yaz++.xml.in index 4cc9a67..320b466 100644 --- a/doc/yaz++.xml.in +++ b/doc/yaz++.xml.in @@ -9,7 +9,7 @@ ]> - + YAZ++ User's Guide and Reference @@ -39,6 +39,9 @@ This manual covers version @VERSION@. + + CVS ID: $Id: yaz++.xml.in,v 1.10 2003-10-16 16:10:43 adam Exp $ + diff --git a/include/yaz++/proxy.h b/include/yaz++/proxy.h index cb96fc1..be82f31 100644 --- a/include/yaz++/proxy.h +++ b/include/yaz++/proxy.h @@ -2,7 +2,7 @@ * Copyright (c) 1998-2003, Index Data. * See the file LICENSE for details. * - * $Id: proxy.h,v 1.18 2003-10-16 13:40:41 adam Exp $ + * $Id: proxy.h,v 1.19 2003-10-16 16:10:43 adam Exp $ */ #include @@ -18,8 +18,10 @@ class Yaz_Proxy; #define MAX_ZURL_PLEX 10 -#define PROXY_LOG_APDU 1 -#define PROXY_LOG_REQ 1 +#define PROXY_LOG_APDU_CLIENT 1 +#define PROXY_LOG_APDU_SERVER 2 +#define PROXY_LOG_REQ_CLIENT 4 +#define PROXY_LOG_REQ_SERVER 8 struct Yaz_RecordCache_Entry; @@ -40,15 +42,16 @@ public: int *max_clients, int *keepalive_limit_bw, int *keepalive_limit_pdu, - int *pre_init, - int *log_mask); + int *pre_init); + + void get_generic_info(int *log_mask, int *max_clients); void get_target_info(const char *name, const char **url, int *limit_bw, int *limit_pdu, int *limit_req, int *target_idletime, int *client_idletime, int *max_clients, int *keepalive_limit_bw, int *keepalive_limit_pdu, - int *pre_init, int *log_mask); + int *pre_init); int check_query(ODR odr, const char *name, Z_Query *query, char **addinfo); int check_syntax(ODR odr, const char *name, @@ -56,13 +59,14 @@ public: private: void operator=(const Yaz_ProxyConfig &conf); #if HAVE_XML2 + int mycmp(const char *hay, const char *item, int len); xmlDocPtr m_docPtr; xmlNodePtr m_proxyPtr; void return_target_info(xmlNodePtr ptr, const char **url, int *limit_bw, int *limit_pdu, int *limit_req, int *target_idletime, int *client_idletime, int *keepalive_limit_bw, int *keepalive_limit_pdu, - int *pre_init, int *log_mask); + int *pre_init); void return_limit(xmlNodePtr ptr, int *limit_bw, int *limit_pdu, int *limit_req); int check_type_1(ODR odr, xmlNodePtr ptr, Z_RPNQuery *query, @@ -173,6 +177,7 @@ class YAZ_EXPORT Yaz_Proxy : public Yaz_Z_Assoc { Yaz_Proxy *m_parent; int m_seqno; int m_max_clients; + int m_log_mask; int m_keepalive_limit_bw; int m_keepalive_limit_pdu; int m_client_idletime; @@ -233,5 +238,6 @@ class YAZ_EXPORT Yaz_Proxy : public Yaz_Z_Assoc { int send_to_client(Z_APDU *apdu); void server(const char *addr); void pre_init(); + int get_log_mask() { return m_log_mask; }; }; diff --git a/include/yaz++/z-assoc.h b/include/yaz++/z-assoc.h index 13f57fe..4a2b4d4 100644 --- a/include/yaz++/z-assoc.h +++ b/include/yaz++/z-assoc.h @@ -2,7 +2,7 @@ * Copyright (c) 1998-2000, Index Data. * See the file LICENSE for details. * - * $Id: z-assoc.h,v 1.3 2003-10-10 12:37:26 adam Exp $ + * $Id: z-assoc.h,v 1.4 2003-10-16 16:10:43 adam Exp $ */ #ifndef YAZ_Z_ASSOC_INCLUDED @@ -80,6 +80,8 @@ class YAZ_EXPORT Yaz_Z_Assoc : public IYaz_PDU_Observer { const char *get_hostname(); + int set_APDU_yazlog(int v); + private: static int yaz_init_flag; static int yaz_init_func(); @@ -91,6 +93,7 @@ class YAZ_EXPORT Yaz_Z_Assoc : public IYaz_PDU_Observer { FILE *m_APDU_file; char *m_APDU_fname; char *m_hostname; + int m_APDU_yazlog; }; #endif diff --git a/src/config.xml b/src/config.xml index 38dbf36..4d4b08e 100644 --- a/src/config.xml +++ b/src/config.xml @@ -1,5 +1,5 @@ - + @@ -21,7 +21,7 @@ - 2 + 0 localhost:9999 @@ -44,4 +44,5 @@ 500 + client-apdu server-apdu diff --git a/src/yaz-pdu-assoc.cpp b/src/yaz-pdu-assoc.cpp index 50ebbe7..2eec370 100644 --- a/src/yaz-pdu-assoc.cpp +++ b/src/yaz-pdu-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-pdu-assoc.cpp,v 1.33 2003-10-10 12:37:26 adam Exp $ + * $Id: yaz-pdu-assoc.cpp,v 1.34 2003-10-16 16:10:43 adam Exp $ */ #include diff --git a/src/yaz-proxy-config.cpp b/src/yaz-proxy-config.cpp index 2d5d22e..9306899 100644 --- a/src/yaz-proxy-config.cpp +++ b/src/yaz-proxy-config.cpp @@ -2,7 +2,7 @@ * Copyright (c) 1998-2003, Index Data. * See the file LICENSE for details. * - * $Id: yaz-proxy-config.cpp,v 1.10 2003-10-16 13:40:41 adam Exp $ + * $Id: yaz-proxy-config.cpp,v 1.11 2003-10-16 16:10:43 adam Exp $ */ #include @@ -117,8 +117,7 @@ void Yaz_ProxyConfig::return_target_info(xmlNodePtr ptr, int *client_idletime, int *keepalive_limit_bw, int *keepalive_limit_pdu, - int *pre_init, - int *log_mask) + int *pre_init) { *pre_init = 0; int no_url = 0; @@ -126,30 +125,6 @@ void Yaz_ProxyConfig::return_target_info(xmlNodePtr ptr, for (; ptr; ptr = ptr->next) { if (ptr->type == XML_ELEMENT_NODE - && !strcmp((const char *) ptr->name, "log")) - { - const char *v = get_text(ptr); - *log_mask = 0; - while (v && *v) - { - const char *cp = v; - while (*cp && *cp != ',' && !isspace(*cp)) - cp++; - size_t len = cp - v; - if (len == 4 && !memcmp(v, "apdu", 4)) - *log_mask |= PROXY_LOG_APDU; - if (len == 3 && !memcmp(v, "req", 3)) - *log_mask |= PROXY_LOG_REQ; - if (isdigit(*v)) - *log_mask |= atoi(v); - if (*cp == ',') - cp++; - while (*cp && isspace(*cp)) - cp++; - v = cp; - } - } - if (ptr->type == XML_ELEMENT_NODE && !strcmp((const char *) ptr->name, "preinit")) { const char *v = get_text(ptr); @@ -488,8 +463,7 @@ int Yaz_ProxyConfig::get_target_no(int no, int *max_clients, int *keepalive_limit_bw, int *keepalive_limit_pdu, - int *pre_init, - int *log_mask) + int *pre_init) { #if HAVE_XML2 xmlNodePtr ptr; @@ -514,7 +488,7 @@ int Yaz_ProxyConfig::get_target_no(int no, return_target_info(ptr, url, limit_bw, limit_pdu, limit_req, target_idletime, client_idletime, keepalive_limit_bw, keepalive_limit_pdu, - pre_init, log_mask); + pre_init); return 1; } i++; @@ -523,6 +497,65 @@ int Yaz_ProxyConfig::get_target_no(int no, return 0; } +int Yaz_ProxyConfig::mycmp(const char *hay, const char *item, int len) +{ + if (len == strlen(item) && memcmp(hay, item, len) == 0) + return 1; + return 0; +} + +void Yaz_ProxyConfig::get_generic_info(int *log_mask, + int *max_clients) +{ +#if HAVE_XML2 + xmlNodePtr ptr; + if (!m_proxyPtr) + return; + for (ptr = m_proxyPtr->children; ptr; ptr = ptr->next) + { + if (ptr->type == XML_ELEMENT_NODE + && !strcmp((const char *) ptr->name, "log")) + { + const char *v = get_text(ptr); + *log_mask = 0; + while (v && *v) + { + const char *cp = v; + while (*cp && *cp != ',' && !isspace(*cp)) + cp++; + size_t len = cp - v; + if (mycmp(v, "client-apdu", len)) + *log_mask |= PROXY_LOG_APDU_CLIENT; + if (mycmp(v, "server-apdu", len)) + *log_mask |= PROXY_LOG_APDU_SERVER; + if (mycmp(v, "client-requests", len)) + *log_mask |= PROXY_LOG_REQ_CLIENT; + if (mycmp(v, "server-requests", len)) + *log_mask |= PROXY_LOG_REQ_SERVER; + if (isdigit(*v)) + *log_mask |= atoi(v); + if (*cp == ',') + cp++; + while (*cp && isspace(*cp)) + cp++; + v = cp; + } + } + if (ptr->type == XML_ELEMENT_NODE && + !strcmp((const char *) ptr->name, "max-clients")) + { + const char *t = get_text(ptr); + if (t) + { + *max_clients = atoi(t); + if (*max_clients < 1) + *max_clients = 1; + } + } + } +#endif +} + void Yaz_ProxyConfig::get_target_info(const char *name, const char **url, int *limit_bw, @@ -533,8 +566,7 @@ void Yaz_ProxyConfig::get_target_info(const char *name, int *max_clients, int *keepalive_limit_bw, int *keepalive_limit_pdu, - int *pre_init, - int *log_mask) + int *pre_init) { #if HAVE_XML2 xmlNodePtr ptr; @@ -570,7 +602,7 @@ void Yaz_ProxyConfig::get_target_info(const char *name, return_target_info(ptr, url, limit_bw, limit_pdu, limit_req, target_idletime, client_idletime, keepalive_limit_bw, keepalive_limit_pdu, - pre_init, log_mask); + pre_init); } #else *url = name; diff --git a/src/yaz-proxy.cpp b/src/yaz-proxy.cpp index 921d8e5..5f323b7 100644 --- a/src/yaz-proxy.cpp +++ b/src/yaz-proxy.cpp @@ -2,7 +2,7 @@ * Copyright (c) 1998-2003, Index Data. * See the file LICENSE for details. * - * $Id: yaz-proxy.cpp,v 1.61 2003-10-16 13:40:41 adam Exp $ + * $Id: yaz-proxy.cpp,v 1.62 2003-10-16 16:10:43 adam Exp $ */ #include @@ -67,11 +67,12 @@ Yaz_Proxy::Yaz_Proxy(IYaz_PDU_Observable *the_PDU_Observable, m_default_target = 0; m_proxy_authentication = 0; m_max_clients = 150; + m_log_mask = 0; m_seed = time(0); m_client_idletime = 600; m_target_idletime = 600; m_optimize = xstrdup ("1"); - strcpy(m_session_str, "x"); + strcpy(m_session_str, "0"); m_session_no=0; m_bytes_sent = m_bytes_recv = 0; m_bw_hold_PDU = 0; @@ -104,6 +105,8 @@ int Yaz_Proxy::set_config(const char *config) xfree(m_config_fname); m_config_fname = xstrdup(config); int r = m_config->read_xml(config); + if (!r) + m_config->get_generic_info(&m_log_mask, &m_max_clients); return r; } @@ -139,6 +142,11 @@ Yaz_ProxyConfig *Yaz_Proxy::check_reconfigure() int r = cfg->read_xml(m_config_fname); if (r) yaz_log(LOG_WARN, "reconfigure failed"); + else + { + m_log_mask = 0; + cfg->get_generic_info(&m_log_mask, &m_max_clients); + } } else yaz_log(LOG_LOG, "reconfigure"); @@ -157,7 +165,13 @@ IYaz_PDU_Observer *Yaz_Proxy::sessionNotify(IYaz_PDU_Observable new_proxy->timeout(m_client_idletime); new_proxy->m_target_idletime = m_target_idletime; new_proxy->set_default_target(m_default_target); + new_proxy->m_max_clients = m_max_clients; + new_proxy->m_log_mask = m_log_mask; new_proxy->set_APDU_log(get_APDU_log()); + if (m_log_mask & PROXY_LOG_APDU_CLIENT) + new_proxy->set_APDU_yazlog(1); + else + new_proxy->set_APDU_yazlog(0); new_proxy->set_proxy_authentication(m_proxy_authentication); sprintf(new_proxy->m_session_str, "%ld:%d ", (long) time(0), m_session_no); m_session_no++; @@ -254,14 +268,13 @@ Yaz_ProxyClient *Yaz_Proxy::get_client(Z_APDU *apdu) if (cfg) { int pre_init = 0; - int log_mask = 0; cfg->get_target_info(proxy_host, url, &m_bw_max, &m_pdu_max, &m_max_record_retrieve, &m_target_idletime, &client_idletime, &parent->m_max_clients, &m_keepalive_limit_bw, &m_keepalive_limit_pdu, - &pre_init, &log_mask); + &pre_init); } if (client_idletime != -1) { @@ -282,9 +295,7 @@ Yaz_ProxyClient *Yaz_Proxy::get_client(Z_APDU *apdu) m_proxyTarget = (char*) xstrdup(load_balance(url)); } if (cookie && *cookie) - { - Yaz_ProxyClient *cc = 0; - + { // search in sessions with a cookie for (c = parent->m_clientPool; c; c = c->m_next) { assert (c->m_prev); @@ -292,50 +303,44 @@ Yaz_ProxyClient *Yaz_Proxy::get_client(Z_APDU *apdu) if (c->m_cookie && !strcmp(cookie,c->m_cookie) && !strcmp(m_proxyTarget, c->get_hostname())) { - cc = c; - } - } - if (cc) - { - // found it in cache - c = cc; - // The following handles "cancel" - // If connection is busy (waiting for PDU) and - // we have an initRequest we can safely do re-open - if (c->m_waiting && apdu->which == Z_APDU_initRequest) - { - yaz_log (LOG_LOG, "%s REOPEN target=%s", m_session_str, - c->get_hostname()); - c->close(); - c->m_init_flag = 0; - - c->m_last_ok = 0; - c->m_cache.clear(); - c->m_last_resultCount = 0; - c->m_sr_transform = 0; - c->m_waiting = 0; - c->m_resultSetStartPoint = 0; - c->m_target_idletime = m_target_idletime; - if (c->client(m_proxyTarget)) + // Found it in cache + // The following handles "cancel" + // If connection is busy (waiting for PDU) and + // we have an initRequest we can safely do re-open + if (c->m_waiting && apdu->which == Z_APDU_initRequest) { - delete c; - return 0; + yaz_log (LOG_LOG, "%s REOPEN target=%s", m_session_str, + c->get_hostname()); + c->close(); + c->m_init_flag = 0; + + c->m_last_ok = 0; + c->m_cache.clear(); + c->m_last_resultCount = 0; + c->m_sr_transform = 0; + c->m_waiting = 0; + c->m_resultSetStartPoint = 0; + c->m_target_idletime = m_target_idletime; + if (c->client(m_proxyTarget)) + { + delete c; + return 0; + } + c->timeout(30); } - c->timeout(30); + c->m_seqno = parent->m_seqno; + if (c->m_server && c->m_server != this) + c->m_server->m_client = 0; + c->m_server = this; + (parent->m_seqno)++; + yaz_log (LOG_DEBUG, "get_client 1 %p %p", this, c); + return c; } - c->m_seqno = parent->m_seqno; - if (c->m_server && c->m_server != this) - c->m_server->m_client = 0; - c->m_server = this; - (parent->m_seqno)++; - yaz_log (LOG_DEBUG, "get_client 1 %p %p", this, c); - return c; } } else if (!c) { - Yaz_ProxyClient *cc = 0; - + // don't have a client session yet. Search in session w/o cookie for (c = parent->m_clientPool; c; c = c->m_next) { assert (c->m_prev); @@ -344,27 +349,26 @@ Yaz_ProxyClient *Yaz_Proxy::get_client(Z_APDU *apdu) c->m_waiting == 0 && !strcmp(m_proxyTarget, c->get_hostname())) { - cc = c; - } - } - if (cc) - { - // found it in cache - c = cc; - - yaz_log (LOG_LOG, "%sREUSE %d %d %s", - m_session_str, - c->m_seqno, parent->m_seqno, c->get_hostname()); - - c->m_seqno = parent->m_seqno; - assert(c->m_server == 0); - c->m_server = this; - - (parent->m_seqno)++; + // found it in cache + yaz_log (LOG_LOG, "%sREUSE %d %d %s", + m_session_str, + c->m_seqno, parent->m_seqno, c->get_hostname()); + + c->m_seqno = parent->m_seqno; + assert(c->m_server == 0); + c->m_server = this; - parent->pre_init(); + if (parent->m_log_mask & PROXY_LOG_APDU_SERVER) + c->set_APDU_yazlog(1); + else + c->set_APDU_yazlog(0); - return c; + (parent->m_seqno)++; + + parent->pre_init(); + + return c; + } } } if (!m_client) @@ -438,6 +442,12 @@ Yaz_ProxyClient *Yaz_Proxy::get_client(Z_APDU *apdu) (parent->m_seqno)++; c->m_target_idletime = m_target_idletime; c->timeout(m_target_idletime); + + if (parent->m_log_mask & PROXY_LOG_APDU_SERVER) + c->set_APDU_yazlog(1); + else + c->set_APDU_yazlog(0); + return c; } } @@ -475,6 +485,10 @@ Yaz_ProxyClient *Yaz_Proxy::get_client(Z_APDU *apdu) c->m_target_idletime = m_target_idletime; c->timeout(30); + if (parent->m_log_mask & PROXY_LOG_APDU_SERVER) + c->set_APDU_yazlog(1); + else + c->set_APDU_yazlog(0); } yaz_log (LOG_DEBUG, "get_client 3 %p %p", this, c); return c; @@ -621,8 +635,9 @@ int Yaz_Proxy::send_to_client(Z_APDU *apdu) convert_to_marcxml(p->u.databaseOrSurDiagnostics); } int r = send_Z_PDU(apdu, &len); - yaz_log (LOG_DEBUG, "%sSending %s to client %d bytes", m_session_str, - apdu_name(apdu), len); + if (m_log_mask & PROXY_LOG_APDU_CLIENT) + yaz_log (LOG_DEBUG, "%sSending %s to client %d bytes", m_session_str, + apdu_name(apdu), len); m_bytes_sent += len; m_bw_stat.add_bytes(len); return r; @@ -632,9 +647,10 @@ int Yaz_ProxyClient::send_to_target(Z_APDU *apdu) { int len = 0; int r = send_Z_PDU(apdu, &len); - yaz_log (LOG_LOG, "%sSending %s to %s %d bytes", - get_session_str(), - apdu_name(apdu), get_hostname(), len); + if (m_root->get_log_mask() & PROXY_LOG_REQ_SERVER) + yaz_log (LOG_LOG, "%sSending %s to %s %d bytes", + get_session_str(), + apdu_name(apdu), get_hostname(), len); m_bytes_sent += len; return r; } @@ -877,8 +893,9 @@ void Yaz_Proxy::recv_Z_PDU(Z_APDU *apdu, int len) int reduce = 0; m_bytes_recv += len; - yaz_log (LOG_DEBUG, "%sReceiving %s from client %d bytes", m_session_str, - apdu_name(apdu), len); + if (m_log_mask & PROXY_LOG_APDU_CLIENT) + yaz_log (LOG_DEBUG, "%sReceiving %s from client %d bytes", + m_session_str, apdu_name(apdu), len); if (m_bw_hold_PDU) // double incoming PDU. shutdown now. shutdown(); @@ -1279,19 +1296,23 @@ void Yaz_Proxy::pre_init() int max_clients; int keepalive_limit_bw, keepalive_limit_pdu; int pre_init; - int log_mask = 0; Yaz_ProxyConfig *cfg = check_reconfigure(); - yaz_log(LOG_LOG, "pre_init"); zurl_in_use[0] = 0; + + if (m_log_mask & PROXY_LOG_APDU_CLIENT) + set_APDU_yazlog(1); + else + set_APDU_yazlog(0); + for (i = 0; cfg && cfg->get_target_no(i, &name, zurl_in_use, &limit_bw, &limit_pdu, &limit_req, &target_idletime, &client_idletime, &max_clients, &keepalive_limit_bw, &keepalive_limit_pdu, - &pre_init, &log_mask) ; i++) + &pre_init) ; i++) { if (pre_init) { @@ -1306,7 +1327,8 @@ void Yaz_Proxy::pre_init() && c->m_server == 0 && c->m_cookie == 0) spare++; } - yaz_log(LOG_LOG, "pre_init %s %s spare=%d pre_init=%d", + yaz_log(LOG_LOG, "%s pre-init %s %s spare=%d pre_init=%d", + m_session_str, name, zurl_in_use[j], spare, pre_init); if (spare < pre_init) { @@ -1317,6 +1339,11 @@ void Yaz_Proxy::pre_init() m_clientPool = c; c->m_prev = &m_clientPool; + if (m_log_mask & PROXY_LOG_APDU_SERVER) + c->set_APDU_yazlog(1); + else + c->set_APDU_yazlog(0); + if (c->client(zurl_in_use[j])) { timeout(60); @@ -1326,8 +1353,6 @@ void Yaz_Proxy::pre_init() c->timeout(30); c->m_waiting = 1; c->m_target_idletime = target_idletime; - yaz_log(LOG_LOG, "pre_init name=%s zurl=%s timeout=%d", name, - zurl_in_use[j], target_idletime); c->m_seqno = m_seqno++; } } @@ -1410,8 +1435,9 @@ void Yaz_ProxyClient::recv_Z_PDU(Z_APDU *apdu, int len) m_bytes_recv += len; m_pdu_recv++; m_waiting = 0; - yaz_log (LOG_LOG, "%sReceiving %s from %s %d bytes", get_session_str(), - apdu_name(apdu), get_hostname(), len); + if (m_root->get_log_mask() & PROXY_LOG_REQ_SERVER) + yaz_log (LOG_LOG, "%sReceiving %s from %s %d bytes", get_session_str(), + apdu_name(apdu), get_hostname(), len); if (apdu->which == Z_APDU_initResponse) { if (!m_server) // if this is a pre init session , check for more diff --git a/src/yaz-z-assoc.cpp b/src/yaz-z-assoc.cpp index 1990698..08e1976 100644 --- a/src/yaz-z-assoc.cpp +++ b/src/yaz-z-assoc.cpp @@ -2,7 +2,7 @@ * Copyright (c) 1998-2001, Index Data. * See the file LICENSE for details. * - * $Id: yaz-z-assoc.cpp,v 1.27 2003-10-10 12:37:26 adam Exp $ + * $Id: yaz-z-assoc.cpp,v 1.28 2003-10-16 16:10:43 adam Exp $ */ #include @@ -32,6 +32,7 @@ Yaz_Z_Assoc::Yaz_Z_Assoc(IYaz_PDU_Observable *the_PDU_Observable) m_APDU_file = 0; m_APDU_fname = 0; m_hostname = 0; + m_APDU_yazlog = 0; } void Yaz_Z_Assoc::set_APDU_log(const char *fname) @@ -48,14 +49,22 @@ void Yaz_Z_Assoc::set_APDU_log(const char *fname) { m_APDU_fname = new char[strlen(fname)+1]; strcpy (m_APDU_fname, fname); - if (*fname && strcmp(fname, "-")) - m_APDU_file = fopen (fname, "a"); - else + if (!strcmp(fname, "-")) m_APDU_file = stderr; + else if (*fname == '\0') + m_APDU_file = 0; + else + m_APDU_file = fopen (fname, "a"); odr_setprint(m_odr_print, m_APDU_file); } } +int Yaz_Z_Assoc::set_APDU_yazlog(int v) +{ + int old = m_APDU_yazlog; + m_APDU_yazlog = v; +} + const char *Yaz_Z_Assoc::get_APDU_log() { return m_APDU_fname; @@ -200,6 +209,14 @@ Z_APDU *Yaz_Z_Assoc::decode_Z_PDU(const char *buf, int len) } else { + if (m_APDU_yazlog) + { // use YAZ log FILE + FILE *save = m_APDU_file; + + odr_setprint(m_odr_print, yaz_log_file()); + z_APDU(m_odr_print, &apdu, 0, "decode"); + m_APDU_file = save; + } if (m_APDU_file) { z_APDU(m_odr_print, &apdu, 0, "decode"); @@ -211,6 +228,13 @@ Z_APDU *Yaz_Z_Assoc::decode_Z_PDU(const char *buf, int len) int Yaz_Z_Assoc::encode_Z_PDU(Z_APDU *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"); + m_APDU_file = save; + } if (m_APDU_file) { z_APDU(m_odr_print, &apdu, 0, "encode");