41 #ifdef STRCASECMP_IN_STRINGS_H
64 static int haproxy_srvr_parse_lit(
const char *str,...)
71 msg_info(
"haproxy_srvr_parse: %s", str);
75 while (result < 0 && (cp = va_arg(ap,
const char *)) != 0)
76 if (strcmp(str, cp) == 0)
85 static int haproxy_srvr_parse_proto(
const char *str,
int *addr_family)
88 msg_info(
"haproxy_srvr_parse: proto=%s", str);
93 *addr_family = AF_INET6;
100 *addr_family = AF_INET;
113 msg_info(
"haproxy_srvr_parse: addr=%s proto=%d", str, addr_family);
118 switch (addr_family) {
125 memcpy(addr->
buf, str + 7, strlen(str) + 1 - 7);
128 memcpy(addr->
buf, str, strlen(str) + 1);
135 memcpy(addr->
buf, str, strlen(str) + 1);
138 msg_panic(
"haproxy_srvr_parse: unexpected address family: %d",
148 msg_info(
"haproxy_srvr_parse: port=%s", str);
153 memcpy(port->
buf, str, strlen(str) + 1);
167 char *cp = saved_str;
178 #define NEXT_TOKEN mystrtok(&cp, " \r\n")
179 if (haproxy_srvr_parse_lit(
NEXT_TOKEN,
"PROXY", (
char *) 0) < 0)
180 err =
"unexpected protocol header";
181 else if (haproxy_srvr_parse_proto(
NEXT_TOKEN, &addr_family) < 0)
182 err =
"unsupported protocol type";
183 else if (haproxy_srvr_parse_addr(
NEXT_TOKEN, smtp_client_addr,
185 err =
"unexpected client address syntax";
186 else if (haproxy_srvr_parse_addr(
NEXT_TOKEN, smtp_server_addr,
188 err =
"unexpected server address syntax";
189 else if (haproxy_srvr_parse_port(
NEXT_TOKEN, smtp_client_port) < 0)
190 err =
"unexpected client port syntax";
191 else if (haproxy_srvr_parse_port(
NEXT_TOKEN, smtp_server_port) < 0)
192 err =
"unexpected server port syntax";
int valid_ipv6_hostaddr(const char *addr, int gripe)
char * mystrdup(const char *str)
NORETURN msg_panic(const char *fmt,...)
#define inet_proto_info()
int valid_hostport(const char *str, int gripe)
const char * haproxy_srvr_parse(const char *str, MAI_HOSTADDR_STR *smtp_client_addr, MAI_SERVPORT_STR *smtp_client_port, MAI_HOSTADDR_STR *smtp_server_addr, MAI_SERVPORT_STR *smtp_server_port)
int strncasecmp(const char *s1, const char *s2, size_t n)
int valid_ipv4_hostaddr(const char *addr, int gripe)
char buf[MAI_HOSTADDR_STRSIZE]
unsigned char * sa_family_list
int strcasecmp(const char *s1, const char *s2)
char buf[MAI_SERVPORT_STRSIZE]
void msg_info(const char *fmt,...)