MEDIUM: Move proto and addr fields struct check

The motivation for this is to make checks more independent of each
other to allow further reuse of their infrastructure.

For nowserver->check and server->agent still always use the same values
for the addr and proto fields so this patch should not introduce any
behavioural changes.

Signed-off-by: Simon Horman <horms@verge.net.au>
diff --git a/include/types/checks.h b/include/types/checks.h
index 831166e..04d79c4 100644
--- a/include/types/checks.h
+++ b/include/types/checks.h
@@ -179,6 +179,8 @@
 	char **argv;				/* the arguments to use if running a process-based check */
 	char **envp;				/* the environment to use if running a process-based check */
 	struct pid_list *curpid;		/* entry in pid_list used for current process-based test, or -1 if not in test */
+	struct protocol *proto;	        	/* server address protocol for health checks */
+	struct sockaddr_storage addr;   	/* the address to check, if different from <addr> */
 };
 
 struct check_status {
diff --git a/include/types/server.h b/include/types/server.h
index 1cabb83..4f97e17 100644
--- a/include/types/server.h
+++ b/include/types/server.h
@@ -202,11 +202,6 @@
 
 	int puid;				/* proxy-unique server ID, used for SNMP, and "first" LB algo */
 
-	struct {                                /* configuration  used by health-check and agent-check */
-		struct protocol *proto;	        /* server address protocol for health checks */
-		struct sockaddr_storage addr;   /* the address to check, if different from <addr> */
-	} check_common;
-
 	struct check check;                     /* health-check specific configuration */
 	struct check agent;                     /* agent specific configuration */
 
diff --git a/src/checks.c b/src/checks.c
index b2f89a5..6624714 100644
--- a/src/checks.c
+++ b/src/checks.c
@@ -1437,18 +1437,18 @@
 
 	/* prepare a new connection */
 	conn_init(conn);
-	conn_prepare(conn, s->check_common.proto, check->xprt);
+	conn_prepare(conn, check->proto, check->xprt);
 	conn_attach(conn, check, &check_conn_cb);
 	conn->target = &s->obj_type;
 
 	/* no client address */
 	clear_addr(&conn->addr.from);
 
-	if (is_addr(&s->check_common.addr)) {
+	if (is_addr(&check->addr)) {
 
 		/* we'll connect to the check addr specified on the server */
-		conn->addr.to = s->check_common.addr;
-		proto = s->check_common.proto;
+		conn->addr.to = check->addr;
+		proto = check->proto;
 	}
 	else {
 		/* we'll connect to the addr on the server */
@@ -2498,10 +2498,10 @@
 			/* no client address */
 			clear_addr(&conn->addr.from);
 
-			if (is_addr(&s->check_common.addr)) {
+			if (is_addr(&check->addr)) {
 				/* we'll connect to the check addr specified on the server */
-				conn->addr.to = s->check_common.addr;
-				proto = s->check_common.proto;
+				conn->addr.to = check->addr;
+				proto = check->proto;
 			}
 			else {
 				/* we'll connect to the addr on the server */
diff --git a/src/server.c b/src/server.c
index 8554e75..31f319b 100644
--- a/src/server.c
+++ b/src/server.c
@@ -901,7 +901,7 @@
 			}
 
 			newsrv->addr = *sk;
-			newsrv->proto = newsrv->check_common.proto = protocol_by_family(newsrv->addr.ss_family);
+			newsrv->proto = newsrv->check.proto = newsrv->agent.proto = protocol_by_family(newsrv->addr.ss_family);
 			newsrv->xprt  = newsrv->check.xprt = newsrv->agent.xprt = &raw_sock;
 
 			if (!newsrv->proto) {
@@ -1109,8 +1109,8 @@
 					goto out;
 				}
 
-				newsrv->check_common.addr = *sk;
-				newsrv->check_common.proto = protocol_by_family(sk->ss_family);
+				newsrv->check.addr = newsrv->agent.addr = *sk;
+				newsrv->check.proto = newsrv->agent.proto = protocol_by_family(sk->ss_family);
 				cur_arg += 2;
 			}
 			else if (!strcmp(args[cur_arg], "port")) {
@@ -1578,7 +1578,7 @@
 			 * same as for the production traffic. Otherwise we use raw_sock by
 			 * default, unless one is specified.
 			 */
-			if (!newsrv->check.port && !is_addr(&newsrv->check_common.addr)) {
+			if (!newsrv->check.port && !is_addr(&newsrv->check.addr)) {
 #ifdef USE_OPENSSL
 				newsrv->check.use_ssl |= (newsrv->use_ssl || (newsrv->proxy->options & PR_O_TCPCHK_SSL));
 #endif
@@ -1586,7 +1586,7 @@
 			}
 			/* try to get the port from check_core.addr if check.port not set */
 			if (!newsrv->check.port)
-				newsrv->check.port = get_host_port(&newsrv->check_common.addr);
+				newsrv->check.port = get_host_port(&newsrv->check.addr);
 
 			if (!newsrv->check.port)
 				newsrv->check.port = realport; /* by default */
@@ -1609,8 +1609,8 @@
 			 * be a 'connect' one when checking an IPv4/IPv6 server.
 			 */
 			if (!newsrv->check.port &&
-			    (is_inet_addr(&newsrv->check_common.addr) ||
-			     (!is_addr(&newsrv->check_common.addr) && is_inet_addr(&newsrv->addr)))) {
+			    (is_inet_addr(&newsrv->check.addr) ||
+			     (!is_addr(&newsrv->check.addr) && is_inet_addr(&newsrv->addr)))) {
 				struct tcpcheck_rule *n = NULL, *r = NULL;
 				struct list *l;