MAJOR: connection: move the addr field from the stream_interface

We need to have the source and destination addresses in the connection.
They were lying in the stream interface so let's move them. The flags
SI_FL_FROM_SET and SI_FL_TO_SET have been moved as well.

It's worth noting that tcp_connect_server() almost does not use the
stream interface anymore except for a few flags.

It has been identified that once we detach the connection from the SI,
it will probably be needed to keep a copy of the server-side addresses
in the SI just for logging purposes. This has not been implemented right
now though.
diff --git a/src/frontend.c b/src/frontend.c
index 8b16836..415960a 100644
--- a/src/frontend.c
+++ b/src/frontend.c
@@ -139,16 +139,16 @@
 		else {
 			char pn[INET6_ADDRSTRLEN], sn[INET6_ADDRSTRLEN];
 
-			si_get_from_addr(s->req->prod);
-			si_get_to_addr(s->req->prod);
+			conn_get_from_addr(&s->req->prod->conn);
+			conn_get_to_addr(&s->req->prod->conn);
 
-			switch (addr_to_str(&s->req->prod->addr.from, pn, sizeof(pn))) {
+			switch (addr_to_str(&s->req->prod->conn.addr.from, pn, sizeof(pn))) {
 			case AF_INET:
 			case AF_INET6:
-				addr_to_str(&s->req->prod->addr.to, sn, sizeof(sn));
+				addr_to_str(&s->req->prod->conn.addr.to, sn, sizeof(sn));
 				send_log(s->fe, LOG_INFO, "Connect from %s:%d to %s:%d (%s/%s)\n",
-					 pn, get_host_port(&s->req->prod->addr.from),
-					 sn, get_host_port(&s->req->prod->addr.to),
+					 pn, get_host_port(&s->req->prod->conn.addr.from),
+					 sn, get_host_port(&s->req->prod->conn.addr.to),
 					 s->fe->id, (s->fe->mode == PR_MODE_HTTP) ? "HTTP" : "TCP");
 				break;
 			case AF_UNIX:
@@ -165,14 +165,14 @@
 		char pn[INET6_ADDRSTRLEN];
 		int len = 0;
 
-		si_get_from_addr(s->req->prod);
+		conn_get_from_addr(&s->req->prod->conn);
 
-		switch (addr_to_str(&s->req->prod->addr.from, pn, sizeof(pn))) {
+		switch (addr_to_str(&s->req->prod->conn.addr.from, pn, sizeof(pn))) {
 		case AF_INET:
 		case AF_INET6:
 			len = sprintf(trash, "%08x:%s.accept(%04x)=%04x from [%s:%d]\n",
 				      s->uniq_id, s->fe->id, (unsigned short)s->listener->fd, (unsigned short)cfd,
-				      pn, get_host_port(&s->req->prod->addr.from));
+				      pn, get_host_port(&s->req->prod->conn.addr.from));
 			break;
 		case AF_UNIX:
 			/* UNIX socket, only the destination is known */
@@ -313,14 +313,14 @@
 			goto fail;
 
 		/* update the session's addresses and mark them set */
-		((struct sockaddr_in *)&s->si[0].addr.from)->sin_family      = AF_INET;
-		((struct sockaddr_in *)&s->si[0].addr.from)->sin_addr.s_addr = htonl(src3);
-		((struct sockaddr_in *)&s->si[0].addr.from)->sin_port        = htons(sport);
+		((struct sockaddr_in *)&s->si[0].conn.addr.from)->sin_family      = AF_INET;
+		((struct sockaddr_in *)&s->si[0].conn.addr.from)->sin_addr.s_addr = htonl(src3);
+		((struct sockaddr_in *)&s->si[0].conn.addr.from)->sin_port        = htons(sport);
 
-		((struct sockaddr_in *)&s->si[0].addr.to)->sin_family      = AF_INET;
-		((struct sockaddr_in *)&s->si[0].addr.to)->sin_addr.s_addr = htonl(dst3);
-		((struct sockaddr_in *)&s->si[0].addr.to)->sin_port        = htons(dport);
-		s->si[0].flags |= SI_FL_FROM_SET | SI_FL_TO_SET;
+		((struct sockaddr_in *)&s->si[0].conn.addr.to)->sin_family      = AF_INET;
+		((struct sockaddr_in *)&s->si[0].conn.addr.to)->sin_addr.s_addr = htonl(dst3);
+		((struct sockaddr_in *)&s->si[0].conn.addr.to)->sin_port        = htons(dport);
+		s->si[0].conn.flags |= CO_FL_ADDR_FROM_SET | CO_FL_ADDR_TO_SET;
 	}
 	else if (!memcmp(line, "TCP6 ", 5) != 0) {
 		u32 sport, dport;
@@ -374,14 +374,14 @@
 			goto fail;
 
 		/* update the session's addresses and mark them set */
-		((struct sockaddr_in6 *)&s->si[0].addr.from)->sin6_family      = AF_INET6;
-		memcpy(&((struct sockaddr_in6 *)&s->si[0].addr.from)->sin6_addr, &src3, sizeof(struct in6_addr));
-		((struct sockaddr_in6 *)&s->si[0].addr.from)->sin6_port        = htons(sport);
+		((struct sockaddr_in6 *)&s->si[0].conn.addr.from)->sin6_family      = AF_INET6;
+		memcpy(&((struct sockaddr_in6 *)&s->si[0].conn.addr.from)->sin6_addr, &src3, sizeof(struct in6_addr));
+		((struct sockaddr_in6 *)&s->si[0].conn.addr.from)->sin6_port        = htons(sport);
 
-		((struct sockaddr_in6 *)&s->si[0].addr.to)->sin6_family      = AF_INET6;
-		memcpy(&((struct sockaddr_in6 *)&s->si[0].addr.to)->sin6_addr, &dst3, sizeof(struct in6_addr));
-		((struct sockaddr_in6 *)&s->si[0].addr.to)->sin6_port        = htons(dport);
-		s->si[0].flags |= SI_FL_FROM_SET | SI_FL_TO_SET;
+		((struct sockaddr_in6 *)&s->si[0].conn.addr.to)->sin6_family      = AF_INET6;
+		memcpy(&((struct sockaddr_in6 *)&s->si[0].conn.addr.to)->sin6_addr, &dst3, sizeof(struct in6_addr));
+		((struct sockaddr_in6 *)&s->si[0].conn.addr.to)->sin6_port        = htons(dport);
+		s->si[0].conn.flags |= CO_FL_ADDR_FROM_SET | CO_FL_ADDR_TO_SET;
 	}
 	else {
 		goto fail;