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.

Reply via email to