-/* $Id: yaz-proxy.cpp,v 1.61 2006-04-22 07:03:34 adam Exp $
+/* $Id: yaz-proxy.cpp,v 1.66 2006-05-01 09:15:52 adam Exp $
Copyright (c) 1998-2006, Index Data.
This file is part of the yazproxy.
void Auth_Msg::result()
{
- if (m_proxy->dec_ref(false))
+ if (m_proxy->dec_ref())
{
yaz_log(YLOG_LOG, "Auth_Msg::proxy deleted meanwhile");
}
Z_APDU *apdu_reject = zget_APDU(odr_encode(), Z_APDU_initResponse);
*apdu_reject->u.initResponse->result = 0;
send_to_client(apdu_reject);
- dec_ref(false);
+ dec_ref();
}
else
{
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->m_session_no = m_session_no;
+#if 0
+ // in case we want to watch a particular client..
if (!strcmp(peername, "tcp:163.121.19.82")) // NIS GROUP
new_proxy->m_log_mask = 255;
+#endif
new_proxy->set_APDU_log(get_APDU_log());
if (new_proxy->m_log_mask & PROXY_LOG_APDU_CLIENT)
m_client_idletime = client_idletime;
timeout(m_client_idletime);
}
+
+ // get those FILE descriptors available
+ m_parent->low_socket_close();
if (cql2rpn_fname)
m_cql2rpn.set_pqf_file(cql2rpn_fname);
+ // reserve them again
+ m_parent->low_socket_open();
+
if (negotiation_charset || negotiation_lang || default_client_query_charset)
{
set_proxy_negotiation(negotiation_charset,
yaz_log (YLOG_LOG, "%sMAXCLIENTS %d Destroy %d",
m_session_str, parent->m_max_clients, c->m_seqno);
if (c->m_server && c->m_server != this)
- c->m_server->dec_ref(true);
+ c->m_server->dec_ref();
}
else
{
if (c->m_server && c->m_server != this)
{
c->m_server->m_client = 0;
- c->m_server->dec_ref(true);
+ c->m_server->dec_ref();
}
(parent->m_seqno)++;
c->m_target_idletime = m_target_idletime;
delete gdu;
yaz_log(YLOG_LOG, "%sUnable to encode package", m_session_str);
m_in_queue.clear();
- dec_ref(true);
+ dec_ref();
return;
}
m_in_queue.enqueue(gdu);
m_timeout_mode = timeout_busy;
inc_ref();
recv_GDU_reduce(g);
- if (dec_ref(false))
+ if (dec_ref())
break;
}
}
handle_charset_lang_negotiation(apdu2);
+ if (m_timeout_mode == timeout_busy)
+ m_timeout_mode = timeout_normal;
send_to_client(apdu2);
- m_timeout_mode = timeout_normal;
return;
}
}
m_parent->pre_init();
}
-bool Yaz_Proxy::dec_ref(bool main_ptr)
+bool Yaz_Proxy::dec_ref()
{
- main_ptr = false;
- assert(m_ref_count > 0);
- if (main_ptr)
- {
- if (m_main_ptr_dec)
- return false;
- m_main_ptr_dec = true;
- }
-
m_http_keepalive = 0;
--m_ref_count;
if (m_server)
{
m_waiting = 1; // ensure it's released from Yaz_Proxy::releaseClient
- m_server->dec_ref(true);
+ m_server->dec_ref();
}
else
delete this;
{
inc_request_no();
yaz_log (YLOG_LOG, "%sConnection closed by client", get_session_str());
- dec_ref(true);
+ dec_ref();
}
void Yaz_Proxy::send_response_fail_client(const char *addr)
inc_request_no();
m_in_queue.clear();
yaz_log (YLOG_LOG, "%sTimeout (client to proxy)", m_session_str);
- dec_ref(true);
+ dec_ref();
break;
case timeout_reduce:
timeout(m_client_idletime);
*imv1 = '\0';
if (imv0)
strcat(imv1, imv0);
+#ifdef VERSION
strcat(imv1, "/" VERSION);
+#endif
ir->implementationVersion = imv1;
// apply YAZ Proxy implementation name