mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-11 22:15:14 +00:00
MEDIUM: Add port_to_str helper
This helper is similar to addr_to_str but tries to convert the port rather than the address of a struct sockaddr_storage. This is in preparation for supporting an external agent check. Signed-off-by: Simon Horman <horms@verge.net.au>
This commit is contained in:
parent
7799267f43
commit
75ab8bdb83
@ -291,6 +291,14 @@ int url2sa(const char *url, int ulen, struct sockaddr_storage *addr, struct spli
|
|||||||
*/
|
*/
|
||||||
int addr_to_str(struct sockaddr_storage *addr, char *str, int size);
|
int addr_to_str(struct sockaddr_storage *addr, char *str, int size);
|
||||||
|
|
||||||
|
/* Tries to convert a sockaddr_storage port to text form. Upon success, the
|
||||||
|
* address family is returned so that it's easy for the caller to adapt to the
|
||||||
|
* output format. Zero is returned if the address family is not supported. -1
|
||||||
|
* is returned upon error, with errno set. AF_INET, AF_INET6 and AF_UNIX are
|
||||||
|
* supported.
|
||||||
|
*/
|
||||||
|
int port_to_str(struct sockaddr_storage *addr, char *str, int size);
|
||||||
|
|
||||||
/* will try to encode the string <string> replacing all characters tagged in
|
/* will try to encode the string <string> replacing all characters tagged in
|
||||||
* <map> with the hexadecimal representation of their ASCII-code (2 digits)
|
* <map> with the hexadecimal representation of their ASCII-code (2 digits)
|
||||||
* prefixed by <escape>, and will store the result between <start> (included)
|
* prefixed by <escape>, and will store the result between <start> (included)
|
||||||
|
@ -1156,6 +1156,40 @@ int addr_to_str(struct sockaddr_storage *addr, char *str, int size)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Tries to convert a sockaddr_storage port to text form. Upon success, the
|
||||||
|
* address family is returned so that it's easy for the caller to adapt to the
|
||||||
|
* output format. Zero is returned if the address family is not supported. -1
|
||||||
|
* is returned upon error, with errno set. AF_INET, AF_INET6 and AF_UNIX are
|
||||||
|
* supported.
|
||||||
|
*/
|
||||||
|
int port_to_str(struct sockaddr_storage *addr, char *str, int size)
|
||||||
|
{
|
||||||
|
|
||||||
|
uint16_t port;
|
||||||
|
|
||||||
|
|
||||||
|
if (size < 5)
|
||||||
|
return 0;
|
||||||
|
*str = '\0';
|
||||||
|
|
||||||
|
switch (addr->ss_family) {
|
||||||
|
case AF_INET:
|
||||||
|
port = ((struct sockaddr_in *)addr)->sin_port;
|
||||||
|
break;
|
||||||
|
case AF_INET6:
|
||||||
|
port = ((struct sockaddr_in6 *)addr)->sin6_port;
|
||||||
|
break;
|
||||||
|
case AF_UNIX:
|
||||||
|
memcpy(str, "unix", 5);
|
||||||
|
return addr->ss_family;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
snprintf(str, size, "%u", ntohs(port));
|
||||||
|
return addr->ss_family;
|
||||||
|
}
|
||||||
|
|
||||||
/* will try to encode the string <string> replacing all characters tagged in
|
/* will try to encode the string <string> replacing all characters tagged in
|
||||||
* <map> with the hexadecimal representation of their ASCII-code (2 digits)
|
* <map> with the hexadecimal representation of their ASCII-code (2 digits)
|
||||||
* prefixed by <escape>, and will store the result between <start> (included)
|
* prefixed by <escape>, and will store the result between <start> (included)
|
||||||
|
Loading…
Reference in New Issue
Block a user