projects
/
yazproxy-moved-to-github.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fixed a problem with HTTP 1.1 hanging connections that occurred
[yazproxy-moved-to-github.git]
/
src
/
yaz-proxy.cpp
diff --git
a/src/yaz-proxy.cpp
b/src/yaz-proxy.cpp
index
93aab1c
..
f296d79
100644
(file)
--- a/
src/yaz-proxy.cpp
+++ b/
src/yaz-proxy.cpp
@@
-1,4
+1,4
@@
-/* $Id: yaz-proxy.cpp,v 1.35 2005-08-15 12:53:08 adam Exp $
+/* $Id: yaz-proxy.cpp,v 1.39 2005-11-25 19:37:28 adam Exp $
Copyright (c) 1998-2005, Index Data.
This file is part of the yaz-proxy.
Copyright (c) 1998-2005, Index Data.
This file is part of the yaz-proxy.
@@
-219,9
+219,10
@@
Yaz_Proxy::Yaz_Proxy(IPDU_Observable *the_PDU_Observable,
m_session_no = 0;
m_bytes_sent = 0;
m_bytes_recv = 0;
m_session_no = 0;
m_bytes_sent = 0;
m_bytes_recv = 0;
- m_bw_hold_PDU = 0;
m_bw_max = 0;
m_pdu_max = 0;
m_bw_max = 0;
m_pdu_max = 0;
+ m_search_max = 0;
+ m_connect_max = 0;
m_timeout_mode = timeout_normal;
m_timeout_gdu = 0;
m_max_record_retrieve = 0;
m_timeout_mode = timeout_normal;
m_timeout_gdu = 0;
m_max_record_retrieve = 0;
@@
-421,7
+422,7
@@
IPDU_Observer *Yaz_Proxy::sessionNotify(IPDU_Observable
m_proxy_negotiation_lang);
// create thread object the first time we get an incoming connection
if (!m_my_thread)
m_proxy_negotiation_lang);
// create thread object the first time we get an incoming connection
if (!m_my_thread)
- m_my_thread = new Msg_Thread(m_socket_observable);
+ m_my_thread = new Msg_Thread(m_socket_observable, 1);
new_proxy->m_my_thread = m_my_thread;
return new_proxy;
}
new_proxy->m_my_thread = m_my_thread;
return new_proxy;
}
@@
-537,6
+538,7
@@
Yaz_ProxyClient *Yaz_Proxy::get_client(Z_APDU *apdu, const char *cookie,
int pre_init = 0;
cfg->get_target_info(proxy_host, url, &m_bw_max,
&m_pdu_max, &m_max_record_retrieve,
int pre_init = 0;
cfg->get_target_info(proxy_host, url, &m_bw_max,
&m_pdu_max, &m_max_record_retrieve,
+ &m_search_max, &m_connect_max,
&m_target_idletime, &client_idletime,
&parent->m_max_clients,
&m_keepalive_limit_bw,
&m_target_idletime, &client_idletime,
&parent->m_max_clients,
&m_keepalive_limit_bw,
@@
-1105,6
+1107,9
@@
int Yaz_Proxy::send_http_response(int code)
m_bytes_sent += len;
m_bw_stat.add_bytes(len);
logtime();
m_bytes_sent += len;
m_bw_stat.add_bytes(len);
logtime();
+
+ recv_GDU_more(true);
+
return r;
}
return r;
}
@@
-1151,6
+1156,9
@@
int Yaz_Proxy::send_srw_response(Z_SRW_PDU *srw_pdu)
m_bytes_sent += len;
m_bw_stat.add_bytes(len);
logtime();
m_bytes_sent += len;
m_bw_stat.add_bytes(len);
logtime();
+
+ recv_GDU_more(true);
+
return r;
}
return r;
}
@@
-1797,7
+1805,6
@@
void Yaz_Proxy::recv_GDU_reduce(GDU *gdu)
/* uncomment to force a big reduce */
m_timeout_mode = timeout_reduce;
m_timeout_gdu = gdu;
/* uncomment to force a big reduce */
m_timeout_mode = timeout_reduce;
m_timeout_gdu = gdu;
- // m_bw_hold_PDU = apdu; // save PDU and signal "on hold"
timeout(3); // call us reduce seconds later
return;
#endif
timeout(3); // call us reduce seconds later
return;
#endif
@@
-1809,7
+1816,6
@@
void Yaz_Proxy::recv_GDU_reduce(GDU *gdu)
m_timeout_mode = timeout_reduce;
m_timeout_gdu = gdu;
m_timeout_mode = timeout_reduce;
m_timeout_gdu = gdu;
- // m_bw_hold_PDU = apdu; // save PDU and signal "on hold"
timeout(reduce); // call us reduce seconds later
}
else
timeout(reduce); // call us reduce seconds later
}
else
@@
-1830,8
+1836,8
@@
void Yaz_Proxy::recv_GDU_more(bool normal)
void Yaz_Proxy::recv_GDU_normal(GDU *gdu)
{
void Yaz_Proxy::recv_GDU_normal(GDU *gdu)
{
- Z_GDU *apdu = gdu->get();
- gdu->extract_odr_to(odr_decode());
+ Z_GDU *apdu = 0;
+ gdu->move_away_gdu(odr_decode(), &apdu);
delete gdu;
if (apdu->which == Z_GDU_Z3950)
delete gdu;
if (apdu->which == Z_GDU_Z3950)
@@
-2453,6
+2459,7
@@
int Yaz_Proxy::file_access(Z_HTTP_Request *hreq)
}
int len;
send_GDU(gdu, &len);
}
int len;
send_GDU(gdu, &len);
+ recv_GDU_more(true);
return 1;
}
return 1;
}
@@
-2606,7
+2613,8
@@
void Yaz_Proxy::handle_incoming_HTTP(Z_HTTP_Request *hreq)
const char *pqf_msg;
size_t off;
int code = yaz_pqf_error (pqf_parser, &pqf_msg, &off);
const char *pqf_msg;
size_t off;
int code = yaz_pqf_error (pqf_parser, &pqf_msg, &off);
- yaz_log(YLOG_LOG, "%*s^\n", off+4, "");
+ int ioff = off;
+ yaz_log(YLOG_LOG, "%*s^\n", ioff+4, "");
yaz_log(YLOG_LOG, "Bad PQF: %s (code %d)\n", pqf_msg, code);
send_to_srw_client_error(10, 0);
yaz_log(YLOG_LOG, "Bad PQF: %s (code %d)\n", pqf_msg, code);
send_to_srw_client_error(10, 0);
@@
-3164,7
+3172,7
@@
void Yaz_Proxy::pre_init()
int i;
const char *name = 0;
const char *zurl_in_use[MAX_ZURL_PLEX];
int i;
const char *name = 0;
const char *zurl_in_use[MAX_ZURL_PLEX];
- int limit_bw, limit_pdu, limit_req;
+ int limit_bw, limit_pdu, limit_req, limit_search, limit_connect;
int target_idletime, client_idletime;
int max_clients;
int keepalive_limit_bw, keepalive_limit_pdu;
int target_idletime, client_idletime;
int max_clients;
int keepalive_limit_bw, keepalive_limit_pdu;
@@
-3185,6
+3193,7
@@
void Yaz_Proxy::pre_init()
for (i = 0; cfg && cfg->get_target_no(i, &name, zurl_in_use,
&limit_bw, &limit_pdu, &limit_req,
for (i = 0; cfg && cfg->get_target_no(i, &name, zurl_in_use,
&limit_bw, &limit_pdu, &limit_req,
+ &limit_search, &limit_connect,
&target_idletime, &client_idletime,
&max_clients,
&keepalive_limit_bw,
&target_idletime, &client_idletime,
&max_clients,
&keepalive_limit_bw,