#include "vcl_returns.h"
#include "common.h"
-#define VCA_ADDRBUFSIZE 64 /* Sizeof ascii network address */
-
struct event_base;
struct cli;
struct sbuf;
unsigned xid;
/* formatted ascii client address */
- char addr[VCA_ADDRBUFSIZE];
+ char addr[TCP_ADDRBUFFSIZE];
/* HTTP request */
struct http *http;
accept_f(int fd, short event __unused, void *arg __unused)
{
socklen_t l;
- struct sockaddr addr[2];
+ struct sockaddr addr[2]; /* XXX: IPv6 hack */
struct sess *sp;
- char port[NI_MAXSERV];
int i;
struct linger linger;
AZ(setsockopt(sp->fd, SOL_SOCKET, SO_LINGER, &linger, sizeof linger));
#endif
- i = getnameinfo(addr, l,
- sp->addr, VCA_ADDRBUFSIZE,
- port, sizeof port, NI_NUMERICHOST | NI_NUMERICSERV);
- if (i) {
- printf("getnameinfo = %d %s\n", i,
- gai_strerror(i));
- }
- strlcat(sp->addr, " ", VCA_ADDRBUFSIZE);
- strlcat(sp->addr, port, VCA_ADDRBUFSIZE);
+ TCP_name(addr, l, sp->addr);
VSL(SLT_SessionOpen, sp->fd, "%s", sp->addr);
time(&sp->t_resp);
TAILQ_INSERT_TAIL(&sesshead, sp, list);
{
struct addrinfo *res, *res0, hint;
int error, s;
+ char buf[TCP_ADDRBUFFSIZE * 2 + 1], *p;
assert(bp != NULL);
assert(bp->hostname != NULL);
continue;
}
error = connect(s, res0->ai_addr, res0->ai_addrlen);
- if (!error)
+ if (!error)
break;
VSL(SLT_Debug, 0, "Connect errno=%d", errno);
close(s);
s = -1;
} while ((res0 = res0->ai_next) != NULL);
- freeaddrinfo(res);
vc->fd = s;
- VSL(SLT_BackendOpen, vc->fd, "");
+ if (s >= 0) {
+ TCP_myname(s, buf);
+ p = strchr(buf, '\0');
+ assert(p != NULL);
+ *p++ = ' ';
+ TCP_name(res0->ai_addr, res0->ai_addrlen, p);
+ VSL(SLT_BackendOpen, vc->fd, buf);
+ }
+ freeaddrinfo(res);
return;
}
* $Id$
*/
+struct sockaddr;
+
+/* shmlog.c */
void VSL_MgtInit(const char *fn, unsigned size);
extern struct varnish_stats *VSL_stats;
+
+/* tcp.c */
+#define TCP_ADDRBUFFSIZE 64 /* Sizeof ascii representation */
+
+void TCP_name(struct sockaddr *addr, unsigned l, char *buf);
+void TCP_myname(int sock, char *buf);
+
+
#include "mgt.h"
#include "libvarnish.h"
+/*--------------------------------------------------------------------*/
+
+void
+TCP_name(struct sockaddr *addr, unsigned l, char *buf)
+{
+ int i;
+ char port[NI_MAXSERV];
+
+ i = getnameinfo(addr, l, buf, TCP_ADDRBUFFSIZE,
+ port, sizeof port, NI_NUMERICHOST | NI_NUMERICSERV);
+ if (i) {
+ printf("getnameinfo = %d %s\n", i, gai_strerror(i));
+ strcpy(buf, "Conversion:Failed");
+ return;
+ }
+ strlcat(buf, " ", TCP_ADDRBUFFSIZE);
+ strlcat(buf, port, TCP_ADDRBUFFSIZE);
+}
+
+/*--------------------------------------------------------------------*/
+
+void
+TCP_myname(int sock, char *buf)
+{
+ struct sockaddr addr[2]; /* XXX: IPv6 hack */
+ socklen_t l;
+
+ l = sizeof addr;
+ AZ(getsockname(sock, addr, &l));
+ TCP_name(addr, l, buf);
+}
+
+/*--------------------------------------------------------------------*/
+
static void
accept_filter(int fd)
{