MAJOR: connection: remove the addr field

Now addresses are dynamically allocated when needed. Each connection is
created with src=dst=NULL, these entries are allocated on the fly, and
released when the connection is released.
diff --git a/include/proto/connection.h b/include/proto/connection.h
index 6d2e784..bbb9759 100644
--- a/include/proto/connection.h
+++ b/include/proto/connection.h
@@ -469,8 +469,8 @@
 	conn->send_wait = NULL;
 	conn->recv_wait = NULL;
 	conn->idle_time = 0;
-	conn->src = &conn->addr.from;
-	conn->dst = &conn->addr.to;
+	conn->src = NULL;
+	conn->dst = NULL;
 }
 
 /* sets <owner> as the connection's owner */
@@ -614,6 +614,9 @@
 		session_unown_conn(sess, conn);
 	}
 
+	sockaddr_free(&conn->src);
+	sockaddr_free(&conn->dst);
+
 	/* By convention we always place a NULL where the ctx points to if the
 	 * mux is null. It may have been used to store the connection as a
 	 * stream_interface's end point for example.
diff --git a/include/types/connection.h b/include/types/connection.h
index 816e06d..f8e4c07 100644
--- a/include/types/connection.h
+++ b/include/types/connection.h
@@ -461,10 +461,6 @@
 	void (*destroy_cb)(struct connection *conn);  /* callback to notify of imminent death of the connection */
 	struct sockaddr_storage *src; /* source address (pool), when known, otherwise NULL */
 	struct sockaddr_storage *dst; /* destination address (pool), when known, otherwise NULL */
-	struct {
-		struct sockaddr_storage from;	/* client address, or address to spoof when connecting to the server */
-		struct sockaddr_storage to;	/* address reached by the client, or address to connect to */
-	} addr; /* addresses of the remote side, client for producer and server for consumer */
 	unsigned int idle_time;                 /* Time the connection was added to the idle list, or 0 if not in the idle list */
 };