[REORG] session: move client and server address to the stream interface

This will be needed very soon for the keep-alive.
diff --git a/src/backend.c b/src/backend.c
index f3d9f09..870947a 100644
--- a/src/backend.c
+++ b/src/backend.c
@@ -530,9 +530,9 @@
 
 			switch (s->be->lbprm.algo & BE_LB_PARM) {
 			case BE_LB_HASH_SRC:
-				if (s->cli_addr.ss_family == AF_INET)
+				if (s->req->prod->addr.c.from.ss_family == AF_INET)
 					len = 4;
-				else if (s->cli_addr.ss_family == AF_INET6)
+				else if (s->req->prod->addr.c.from.ss_family == AF_INET6)
 					len = 16;
 				else {
 					/* unknown IP family */
@@ -541,7 +541,7 @@
 				}
 		
 				s->srv = get_server_sh(s->be,
-						       (void *)&((struct sockaddr_in *)&s->cli_addr)->sin_addr,
+						       (void *)&((struct sockaddr_in *)&s->req->prod->addr.c.from)->sin_addr,
 						       len);
 				break;
 
@@ -614,7 +614,7 @@
 		}
 	}
 	else if (s->be->options & PR_O_HTTP_PROXY) {
-		if (!s->srv_addr.sin_addr.s_addr) {
+		if (!s->req->cons->addr.s.to.sin_addr.s_addr) {
 			err = SRV_STATUS_NOSRV;
 			goto out;
 		}
@@ -670,9 +670,9 @@
 		if (!(s->flags & SN_ASSIGNED))
 			return SRV_STATUS_INTERNAL;
 
-		s->srv_addr = s->srv->addr;
+		s->req->cons->addr.s.to = s->srv->addr;
 
-		if (!s->srv_addr.sin_addr.s_addr) {
+		if (!s->req->cons->addr.s.to.sin_addr.s_addr) {
 			/* if the server has no address, we use the same address
 			 * the client asked, which is handy for remapping ports
 			 * locally on multiple addresses at once.
@@ -680,8 +680,8 @@
 			if (!(s->be->options & PR_O_TRANSP) && !(s->flags & SN_FRT_ADDR_SET))
 				get_frt_addr(s);
 
-			if (s->frt_addr.ss_family == AF_INET) {
-				s->srv_addr.sin_addr = ((struct sockaddr_in *)&s->frt_addr)->sin_addr;
+			if (s->req->prod->addr.c.to.ss_family == AF_INET) {
+				s->req->cons->addr.s.to.sin_addr = ((struct sockaddr_in *)&s->req->prod->addr.c.to)->sin_addr;
 			}
 		}
 
@@ -690,27 +690,27 @@
 		if (s->srv->state & SRV_MAPPORTS) {
 			if (!(s->be->options & PR_O_TRANSP) && !(s->flags & SN_FRT_ADDR_SET))
 				get_frt_addr(s);
-			if (s->frt_addr.ss_family == AF_INET) {
-				s->srv_addr.sin_port = htons(ntohs(s->srv_addr.sin_port) +
-							     ntohs(((struct sockaddr_in *)&s->frt_addr)->sin_port));
+			if (s->req->prod->addr.c.to.ss_family == AF_INET) {
+				s->req->cons->addr.s.to.sin_port = htons(ntohs(s->req->cons->addr.s.to.sin_port) +
+							     ntohs(((struct sockaddr_in *)&s->req->prod->addr.c.to)->sin_port));
 			}
-			else if (s->frt_addr.ss_family == AF_INET6) {
-				s->srv_addr.sin_port = htons(ntohs(s->srv_addr.sin_port) +
-							     ntohs(((struct sockaddr_in6 *)&s->frt_addr)->sin6_port));
+			else if (s->req->prod->addr.c.to.ss_family == AF_INET6) {
+				s->req->cons->addr.s.to.sin_port = htons(ntohs(s->req->cons->addr.s.to.sin_port) +
+							     ntohs(((struct sockaddr_in6 *)&s->req->prod->addr.c.to)->sin6_port));
 			}
 		}
 	}
 	else if (*(int *)&s->be->dispatch_addr.sin_addr) {
 		/* connect to the defined dispatch addr */
-		s->srv_addr = s->be->dispatch_addr;
+		s->req->cons->addr.s.to = s->be->dispatch_addr;
 	}
 	else if (s->be->options & PR_O_TRANSP) {
 		/* in transparent mode, use the original dest addr if no dispatch specified */
 		if (!(s->flags & SN_FRT_ADDR_SET))
 			get_frt_addr(s);
 
-		if (s->frt_addr.ss_family == AF_INET) {
-			memcpy(&s->srv_addr, &s->frt_addr, MIN(sizeof(s->srv_addr), sizeof(s->frt_addr)));
+		if (s->req->prod->addr.c.to.ss_family == AF_INET) {
+			memcpy(&s->req->cons->addr.s.to, &s->req->prod->addr.c.to, MIN(sizeof(s->req->cons->addr.s.to), sizeof(s->req->prod->addr.c.to)));
 		}
 		/* when we support IPv6 on the backend, we may add other tests */
 		//qfprintf(stderr, "Cannot get original server address.\n");
@@ -850,7 +850,7 @@
 
 /* If an explicit source binding is specified on the server and/or backend, and
  * this source makes use of the transparent proxy, then it is extracted now and
- * assigned to the session's from_addr entry.
+ * assigned to the session's req->cons->addr.s.from entry.
  */
 static void assign_tproxy_address(struct session *s)
 {
@@ -858,18 +858,18 @@
 	if (s->srv != NULL && s->srv->state & SRV_BIND_SRC) {
 		switch (s->srv->state & SRV_TPROXY_MASK) {
 		case SRV_TPROXY_ADDR:
-			s->from_addr = *(struct sockaddr_in *)&s->srv->tproxy_addr;
+			s->req->cons->addr.s.from = *(struct sockaddr_in *)&s->srv->tproxy_addr;
 			break;
 		case SRV_TPROXY_CLI:
 		case SRV_TPROXY_CIP:
 			/* FIXME: what can we do if the client connects in IPv6 or unix socket ? */
-			s->from_addr = *(struct sockaddr_in *)&s->cli_addr;
+			s->req->cons->addr.s.from = *(struct sockaddr_in *)&s->req->prod->addr.c.from;
 			break;
 		case SRV_TPROXY_DYN:
 			if (s->srv->bind_hdr_occ) {
 				/* bind to the IP in a header */
-				s->from_addr.sin_port = 0;
-				s->from_addr.sin_addr.s_addr = htonl(get_ip_from_hdr2(&s->txn.req,
+				s->req->cons->addr.s.from.sin_port = 0;
+				s->req->cons->addr.s.from.sin_addr.s_addr = htonl(get_ip_from_hdr2(&s->txn.req,
 										s->srv->bind_hdr_name,
 										s->srv->bind_hdr_len,
 										&s->txn.hdr_idx,
@@ -877,24 +877,24 @@
 			}
 			break;
 		default:
-			memset(&s->from_addr, 0, sizeof(s->from_addr));
+			memset(&s->req->cons->addr.s.from, 0, sizeof(s->req->cons->addr.s.from));
 		}
 	}
 	else if (s->be->options & PR_O_BIND_SRC) {
 		switch (s->be->options & PR_O_TPXY_MASK) {
 		case PR_O_TPXY_ADDR:
-			s->from_addr = *(struct sockaddr_in *)&s->be->tproxy_addr;
+			s->req->cons->addr.s.from = *(struct sockaddr_in *)&s->be->tproxy_addr;
 			break;
 		case PR_O_TPXY_CLI:
 		case PR_O_TPXY_CIP:
 			/* FIXME: what can we do if the client connects in IPv6 or socket unix? */
-			s->from_addr = *(struct sockaddr_in *)&s->cli_addr;
+			s->req->cons->addr.s.from = *(struct sockaddr_in *)&s->req->prod->addr.c.from;
 			break;
 		case PR_O_TPXY_DYN:
 			if (s->be->bind_hdr_occ) {
 				/* bind to the IP in a header */
-				s->from_addr.sin_port = 0;
-				s->from_addr.sin_addr.s_addr = htonl(get_ip_from_hdr2(&s->txn.req,
+				s->req->cons->addr.s.from.sin_port = 0;
+				s->req->cons->addr.s.from.sin_addr.s_addr = htonl(get_ip_from_hdr2(&s->txn.req,
 										s->be->bind_hdr_name,
 										s->be->bind_hdr_len,
 										&s->txn.hdr_idx,
@@ -902,7 +902,7 @@
 			}
 			break;
 		default:
-			memset(&s->from_addr, 0, sizeof(s->from_addr));
+			memset(&s->req->cons->addr.s.from, 0, sizeof(s->req->cons->addr.s.from));
 		}
 	}
 #endif
@@ -911,7 +911,7 @@
 
 /*
  * This function initiates a connection to the server assigned to this session
- * (s->srv, s->srv_addr). It will assign a server if none is assigned yet.
+ * (s->srv, s->req->cons->addr.s.to). It will assign a server if none is assigned yet.
  * It can return one of :
  *  - SN_ERR_NONE if everything's OK
  *  - SN_ERR_SRVTO if there are no more servers
@@ -940,8 +940,8 @@
 	assign_tproxy_address(s);
 
 	err = s->req->cons->connect(s->req->cons, s->be, s->srv,
-				    (struct sockaddr *)&s->srv_addr,
-				    (struct sockaddr *)&s->from_addr);
+				    (struct sockaddr *)&s->req->cons->addr.s.to,
+				    (struct sockaddr *)&s->req->cons->addr.s.from);
 
 	if (err != SN_ERR_NONE)
 		return err;