[MEDIUM] use tproxy address as source of health checks

If a tproxy address is defined, then use it for health checks too.
diff --git a/src/checks.c b/src/checks.c
index 9643a2b..99b8435 100644
--- a/src/checks.c
+++ b/src/checks.c
@@ -36,6 +36,10 @@
 #include <proto/server.h>
 #include <proto/task.h>
 
+#ifdef CONFIG_HAP_CTTPROXY
+#include <import/ip_tproxy.h>
+#endif
+
 
 /* Sets server <s> down, notifies by all available means, recounts the
  * remaining servers on the proxy and transfers queued sessions whenever
@@ -260,6 +264,27 @@
 						      s->proxy->id, s->id);
 						s->result = -1;
 					}
+#ifdef CONFIG_HAP_CTTPROXY
+					if ((s->state & SRV_TPROXY_MASK) == SRV_TPROXY_ADDR) {
+						struct in_tproxy itp1, itp2;
+						memset(&itp1, 0, sizeof(itp1));
+						
+						itp1.op = TPROXY_ASSIGN;
+						itp1.v.addr.faddr = s->tproxy_addr.sin_addr;
+						itp1.v.addr.fport = s->tproxy_addr.sin_port;
+
+						/* set connect flag on socket */
+						itp2.op = TPROXY_FLAGS;
+						itp2.v.flags = ITP_CONNECT | ITP_ONCE;
+
+						if (setsockopt(fd, SOL_IP, IP_TPROXY, &itp1, sizeof(itp1)) == -1 ||
+						    setsockopt(fd, SOL_IP, IP_TPROXY, &itp2, sizeof(itp2)) == -1) {
+							Alert("Cannot bind to tproxy source address before connect() for server %s/%s. Aborting.\n",
+							      s->proxy->id, s->id);
+							s->result = -1;
+						}
+					}
+#endif
 				}
 				else if (s->proxy->options & PR_O_BIND_SRC) {
 					setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *) &one, sizeof(one));
@@ -268,6 +293,27 @@
 						      s->proxy->id);
 						s->result = -1;
 					}
+#ifdef CONFIG_HAP_CTTPROXY
+					if ((s->proxy->options & PR_O_TPXY_MASK) == PR_O_TPXY_ADDR) {
+						struct in_tproxy itp1, itp2;
+						memset(&itp1, 0, sizeof(itp1));
+						
+						itp1.op = TPROXY_ASSIGN;
+						itp1.v.addr.faddr = s->tproxy_addr.sin_addr;
+						itp1.v.addr.fport = s->tproxy_addr.sin_port;
+						
+						/* set connect flag on socket */
+						itp2.op = TPROXY_FLAGS;
+						itp2.v.flags = ITP_CONNECT | ITP_ONCE;
+						
+						if (setsockopt(fd, SOL_IP, IP_TPROXY, &itp1, sizeof(itp1)) == -1 ||
+						    setsockopt(fd, SOL_IP, IP_TPROXY, &itp2, sizeof(itp2)) == -1) {
+							Alert("Cannot bind to tproxy source address before connect() for proxy %s. Aborting.\n",
+							      s->proxy->id);
+							s->result = -1;
+						}
+					}
+#endif
 				}
 
 				if (!s->result) {