Use VSA_getsockname() - avoid sockaddr_storage

avoids an second getsockname() in vbp_write_proxy_v1()
avoids a memcpy() in VTCP_my_suckaddr()
parent 32ea9c59
......@@ -251,20 +251,22 @@ vbp_write_proxy_v1(struct vbp_target *vt, int *sock)
char buf[105]; /* maximum size for a TCP6 PROXY line with null char */
char addr[VTCP_ADDRBUFSIZE];
char port[VTCP_PORTBUFSIZE];
struct sockaddr_storage ss;
char vsabuf[vsa_suckaddr_len];
struct suckaddr *sua;
int proto;
struct vsb vsb;
socklen_t l;
VTCP_myname(*sock, addr, sizeof addr, port, sizeof port);
sua = VSA_getsockname(*sock, vsabuf, sizeof vsabuf);
AN(sua);
VTCP_name(sua, addr, sizeof addr, port, sizeof port);
AN(VSB_init(&vsb, buf, sizeof buf));
l = sizeof ss;
AZ(getsockname(*sock, (void *)&ss, &l));
if (ss.ss_family == AF_INET || ss.ss_family == AF_INET6) {
proto = VSA_Get_Proto(sua);
if (proto == AF_INET || proto == AF_INET6)
VSB_printf(&vsb, "PROXY %s %s %s %s %s\r\n",
ss.ss_family == AF_INET ? "TCP4" : "TCP6",
proto == AF_INET ? "TCP4" : "TCP6",
addr, addr, port, port);
} else
else
VSB_cat(&vsb, "PROXY UNKNOWN\r\n");
AZ(VSB_finish(&vsb));
......
......@@ -48,6 +48,7 @@
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include "vdef.h"
#include "vas.h"
......@@ -105,12 +106,8 @@ VTCP_name(const struct suckaddr *addr, char *abuf, unsigned alen,
struct suckaddr *
VTCP_my_suckaddr(int sock)
{
struct sockaddr_storage addr_s;
socklen_t l;
l = sizeof addr_s;
AZ(getsockname(sock, (void *)&addr_s, &l));
return (VSA_Malloc(&addr_s, l));
return (VSA_getsockname(sock,
malloc(vsa_suckaddr_len), vsa_suckaddr_len));
}
/*--------------------------------------------------------------------*/
......@@ -118,12 +115,10 @@ VTCP_my_suckaddr(int sock)
void
VTCP_myname(int sock, char *abuf, unsigned alen, char *pbuf, unsigned plen)
{
struct sockaddr_storage addr_s;
socklen_t l;
char buf[vsa_suckaddr_len];
l = sizeof addr_s;
AZ(getsockname(sock, (void *)&addr_s, &l));
vtcp_sa_to_ascii(&addr_s, l, abuf, alen, pbuf, plen);
VTCP_name(VSA_getsockname(sock, buf, sizeof buf),
abuf, alen, pbuf, plen);
}
/*--------------------------------------------------------------------*/
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment