Revision: 14396
Author: adrian.chadd
Date: Thu Feb 11 01:39:39 2010
Log: * Refactor out the common code which creates ConnStateData objects from
httpAccept() / httpsAccept() .
* Break out the basic conn management related routines into
client_side_conn.c .
http://code.google.com/p/lusca-cache/source/detail?r=14396
Added:
/branches/LUSCA_HEAD/src/client_side_conn.h
Modified:
/branches/LUSCA_HEAD/src/client_side.c
/branches/LUSCA_HEAD/src/client_side_conn.c
/branches/LUSCA_HEAD/src/protos.h
=======================================
--- /dev/null
+++ /branches/LUSCA_HEAD/src/client_side_conn.h Thu Feb 11 01:39:39 2010
@@ -0,0 +1,7 @@
+#ifndef __CLIENT_SIDE_CONN_H__
+#define __CLIENT_SIDE_CONN_H__
+
+extern ConnStateData * connStateCreate(int fd, sqaddr_t *peer, sqaddr_t
*me);
+extern int connStateGetCount(void);
+
+#endif
=======================================
--- /branches/LUSCA_HEAD/src/client_side.c Wed Feb 10 23:17:59 2010
+++ /branches/LUSCA_HEAD/src/client_side.c Thu Feb 11 01:39:39 2010
@@ -96,6 +96,7 @@
#include <linux/netfilter_ipv4.h>
#endif
+#include "client_side_conn.h"
#include "client_side_request.h"
#include "client_side_ranges.h"
#include "client_side_async_refresh.h"
@@ -114,7 +115,6 @@
static CWCB clientWriteComplete;
static CWCB clientWriteBodyComplete;
static PF clientReadRequest;
-static PF connStateFree;
static PF requestTimeout;
static PF clientLifetimeTimeout;
static int clientCheckTransferDone(clientHttpRequest *);
@@ -159,8 +159,6 @@
static int modifiedSince(StoreEntry *, request_t *);
static int clientCheckBeginForwarding(clientHttpRequest * http);
-static int clientside_num_conns = 0;
-
#if USE_IDENT
static void
clientIdentDone(const char *ident, void *data)
@@ -821,7 +819,7 @@
}
}
-static void
+void
httpRequestFree(void *data)
{
clientHttpRequest *http = data;
@@ -943,42 +941,6 @@
dlinkDelete(&http->active, &ClientActiveRequests);
cbdataFree(http);
}
-
-/* This is a handler normally called by comm_close() */
-static void
-connStateFree(int fd, void *data)
-{
- ConnStateData *connState = data;
- dlink_node *n;
- clientHttpRequest *http;
- debug(33, 3) ("connStateFree: FD %d\n", fd);
- assert(connState != NULL);
- clientdbEstablished(connState->peer.sin_addr, -1); /* decrement */
- n = connState->reqs.head;
- while (n != NULL) {
- http = n->data;
- n = n->next;
- assert(http->conn == connState);
- httpRequestFree(http);
- }
- if (connState->auth_user_request)
- authenticateAuthUserRequestUnlock(connState->auth_user_request);
- connState->auth_user_request = NULL;
- authenticateOnCloseConnection(connState);
- memFreeBuf(connState->in.size, connState->in.buf);
- pconnHistCount(0, connState->nrequests);
- if (connState->pinning.fd >= 0)
- comm_close(connState->pinning.fd);
- cbdataFree(connState);
- clientside_num_conns--;
-#ifdef _SQUID_LINUX_
- /* prevent those nasty RST packets */
- {
- char buf[SQUID_TCP_SO_RCVBUF];
- while (FD_READ_METHOD(fd, buf, SQUID_TCP_SO_RCVBUF) > 0);
- }
-#endif
-}
void
clientInterpretRequestHeaders(clientHttpRequest * http)
@@ -3897,8 +3859,6 @@
commDeferFD(fd);
return 1;
}
-
-CBDATA_TYPE(ConnStateData);
/* Handle a new connection on HTTP socket. */
void
@@ -3937,19 +3897,9 @@
F = &fd_table[fd];
debug(33, 4) ("httpAccept: FD %d: accepted port %d client %s:%d\n", fd,
F->local_port, F->ipaddrstr, F->remote_port);
fd_note_static(fd, "client http connect");
- CBDATA_INIT_TYPE(ConnStateData);
- connState = cbdataAlloc(ConnStateData);
- clientside_num_conns++;
- connState->port = s;
- cbdataLock(connState->port);
- sqinet_get_v4_sockaddr_ptr(&peer, &connState->peer,
SQADDR_ASSERT_IS_V4);
- connState->log_addr = connState->peer.sin_addr;
- connState->log_addr.s_addr &= Config.Addrs.client_netmask.s_addr;
- sqinet_get_v4_sockaddr_ptr(&me, &connState->me, SQADDR_ASSERT_IS_V4);
- connState->fd = fd;
- connState->pinning.fd = -1;
- connState->in.buf = memAllocBuf(CLIENT_REQ_BUF_SZ, &connState->in.size);
- comm_add_close_handler(fd, connStateFree, connState);
+ connState = connStateCreate(fd, &peer, &me);
+ connState->port = s;
+ cbdataLock(connState->port);
if (Config.onoff.log_fqdn)
fqdncache_gethostbyaddr(sqinet_get_v4_inaddr(&peer,
SQADDR_ASSERT_IS_V4), FQDN_LOOKUP_IF_MISS);
commSetTimeout(fd, Config.Timeout.request, requestTimeout, connState);
@@ -4116,18 +4066,9 @@
F = &fd_table[fd];
debug(33, 4) ("httpsAccept: FD %d: accepted port %d client %s:%d\n", fd,
F->local_port, F->ipaddrstr, F->remote_port);
- connState = cbdataAlloc(ConnStateData);
- clientside_num_conns ++;
+ connState = connStateCreate(fd, &peer, &me);
connState->port = (http_port_list *) s;
cbdataLock(connState->port);
- sqinet_get_v4_sockaddr_ptr(&peer, &connState->peer,
SQADDR_ASSERT_IS_V4);
- connState->log_addr = connState->peer.sin_addr;
- connState->log_addr.s_addr &= Config.Addrs.client_netmask.s_addr;
- sqinet_get_v4_sockaddr_ptr(&me, &connState->me, SQADDR_ASSERT_IS_V4);
- connState->fd = fd;
- connState->pinning.fd = -1;
- connState->in.buf = memAllocBuf(CLIENT_REQ_BUF_SZ, &connState->in.size);
- comm_add_close_handler(fd, connStateFree, connState);
if (Config.onoff.log_fqdn)
fqdncache_gethostbyaddr(connState->peer.sin_addr,
FQDN_LOOKUP_IF_MISS);
commSetTimeout(fd, Config.Timeout.request, requestTimeout, connState);
@@ -4558,9 +4499,3 @@
}
}
#endif
-
-int
-connStateGetCount(void)
-{
- return clientside_num_conns;
-}
=======================================
--- /branches/LUSCA_HEAD/src/client_side_conn.c Wed Feb 10 19:18:31 2010
+++ /branches/LUSCA_HEAD/src/client_side_conn.c Thu Feb 11 01:39:39 2010
@@ -0,0 +1,69 @@
+#include "squid.h"
+
+#include "client_side_conn.h"
+
+static int clientside_num_conns = 0;
+
+CBDATA_TYPE(ConnStateData);
+
+/* This is a handler normally called by comm_close() */
+static void
+connStateFree(int fd, void *data)
+{
+ ConnStateData *connState = data;
+ dlink_node *n;
+ clientHttpRequest *http;
+ debug(33, 3) ("connStateFree: FD %d\n", fd);
+ assert(connState != NULL);
+ clientdbEstablished(connState->peer.sin_addr, -1); /* decrement */
+ n = connState->reqs.head;
+ while (n != NULL) {
+ http = n->data;
+ n = n->next;
+ assert(http->conn == connState);
+ httpRequestFree(http);
+ }
+ if (connState->auth_user_request)
+ authenticateAuthUserRequestUnlock(connState->auth_user_request);
+ connState->auth_user_request = NULL;
+ authenticateOnCloseConnection(connState);
+ memFreeBuf(connState->in.size, connState->in.buf);
+ pconnHistCount(0, connState->nrequests);
+ if (connState->pinning.fd >= 0)
+ comm_close(connState->pinning.fd);
+ cbdataFree(connState);
+ clientside_num_conns--;
+#ifdef _SQUID_LINUX_
+ /* prevent those nasty RST packets */
+ {
+ char buf[SQUID_TCP_SO_RCVBUF];
+ while (FD_READ_METHOD(fd, buf, SQUID_TCP_SO_RCVBUF) > 0);
+ }
+#endif
+}
+
+ConnStateData *
+connStateCreate(int fd, sqaddr_t *peer, sqaddr_t *me)
+{
+ ConnStateData *connState = NULL;
+
+ CBDATA_INIT_TYPE(ConnStateData);
+ connState = cbdataAlloc(ConnStateData);
+ clientside_num_conns++;
+ sqinet_get_v4_sockaddr_ptr(peer, &connState->peer,
SQADDR_ASSERT_IS_V4);
+ connState->log_addr = connState->peer.sin_addr;
+ connState->log_addr.s_addr &= Config.Addrs.client_netmask.s_addr;
+ sqinet_get_v4_sockaddr_ptr(me, &connState->me,
SQADDR_ASSERT_IS_V4);
+ connState->fd = fd;
+ connState->pinning.fd = -1;
+ connState->in.buf = memAllocBuf(CLIENT_REQ_BUF_SZ,
&connState->in.size);
+ comm_add_close_handler(fd, connStateFree, connState);
+
+ return connState;
+}
+
+int
+connStateGetCount(void)
+{
+ return clientside_num_conns;
+}
=======================================
--- /branches/LUSCA_HEAD/src/protos.h Wed Feb 10 15:53:21 2010
+++ /branches/LUSCA_HEAD/src/protos.h Thu Feb 11 01:39:39 2010
@@ -1076,6 +1076,7 @@
extern int connStateGetCount(void);
extern StoreEntry *clientCreateStoreEntry(clientHttpRequest *, method_t *,
request_flags);
extern void clientProcessRequest(clientHttpRequest *);
+extern void httpRequestFree(void *data);
/* client_side_nat.c */
extern int clientNatLookup(ConnStateData * conn);
--
You received this message because you are subscribed to the Google Groups
"lusca-commit" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/lusca-commit?hl=en.