mirror of
https://github.com/cesanta/mongoose.git
synced 2026-11-03 13:28:44 +00:00
Introduce local address
This commit is contained in:
1 parent
4012a86bd8
commit
e99973d4b7
8 files changed
+53
-50
No files matched your search
+15
-14
@@ -121,10 +121,10 @@ static void iolog(struct mg_connection *c, char *buf, long n, bool r) {
|
||||
memset(&usa, 0, sizeof(usa));
|
||||
memset(&a, 0, sizeof(a));
|
||||
getsockname(FD(c), &usa.sa, &slen);
|
||||
tomgaddr(&usa, &a, c->peer.is_ip6);
|
||||
tomgaddr(&usa, &a, c->rem.is_ip6);
|
||||
MG_INFO(("\n-- %lu %s %s %s %s %ld\n%s", c->id,
|
||||
mg_straddr(&a, t1, sizeof(t1)), r ? "<-" : "->",
|
||||
mg_straddr(&c->peer, t2, sizeof(t2)), c->label, n, s));
|
||||
mg_straddr(&c->rem, t2, sizeof(t2)), c->label, n, s));
|
||||
free(s);
|
||||
(void) t1, (void) t2; // Silence warnings for MG_ENABLE_LOG=0
|
||||
}
|
||||
@@ -144,7 +144,7 @@ static long mg_sock_send(struct mg_connection *c, const void *buf, size_t len) {
|
||||
long n;
|
||||
if (c->is_udp) {
|
||||
union usa usa;
|
||||
socklen_t slen = tousa(&c->peer, &usa);
|
||||
socklen_t slen = tousa(&c->rem, &usa);
|
||||
n = sendto(FD(c), (char *) buf, len, 0, &usa.sa, slen);
|
||||
} else {
|
||||
n = send(FD(c), (char *) buf, len, MSG_NONBLOCKING);
|
||||
@@ -247,9 +247,9 @@ static long mg_sock_recv(struct mg_connection *c, void *buf, size_t len) {
|
||||
long n = 0;
|
||||
if (c->is_udp) {
|
||||
union usa usa;
|
||||
socklen_t slen = tousa(&c->peer, &usa);
|
||||
socklen_t slen = tousa(&c->rem, &usa);
|
||||
n = recvfrom(FD(c), (char *) buf, len, 0, &usa.sa, &slen);
|
||||
if (n > 0) tomgaddr(&usa, &c->peer, slen != sizeof(usa.sin));
|
||||
if (n > 0) tomgaddr(&usa, &c->rem, slen != sizeof(usa.sin));
|
||||
} else {
|
||||
n = recv(FD(c), (char *) buf, len, MSG_NONBLOCKING);
|
||||
}
|
||||
@@ -335,8 +335,8 @@ static void setsockopts(struct mg_connection *c) {
|
||||
void mg_connect_resolved(struct mg_connection *c) {
|
||||
// char buf[40];
|
||||
int type = c->is_udp ? SOCK_DGRAM : SOCK_STREAM;
|
||||
int rc, af = c->peer.is_ip6 ? AF_INET6 : AF_INET;
|
||||
// mg_straddr(&c->peer, buf, sizeof(buf));
|
||||
int rc, af = c->rem.is_ip6 ? AF_INET6 : AF_INET;
|
||||
// mg_straddr(&c->rem, buf, sizeof(buf));
|
||||
c->fd = S2PTR(socket(af, type, 0));
|
||||
c->is_resolving = 0;
|
||||
if (FD(c) == INVALID_SOCKET) {
|
||||
@@ -346,7 +346,7 @@ void mg_connect_resolved(struct mg_connection *c) {
|
||||
mg_call(c, MG_EV_CONNECT, NULL);
|
||||
} else {
|
||||
union usa usa;
|
||||
socklen_t slen = tousa(&c->peer, &usa);
|
||||
socklen_t slen = tousa(&c->rem, &usa);
|
||||
mg_set_non_blocking_mode(FD(c));
|
||||
setsockopts(c);
|
||||
mg_call(c, MG_EV_RESOLVE, NULL);
|
||||
@@ -383,8 +383,8 @@ static void accept_conn(struct mg_mgr *mgr, struct mg_connection *lsn) {
|
||||
closesocket(fd);
|
||||
} else {
|
||||
char buf[40];
|
||||
tomgaddr(&usa, &c->peer, sa_len != sizeof(usa.sin));
|
||||
mg_straddr(&c->peer, buf, sizeof(buf));
|
||||
tomgaddr(&usa, &c->rem, sa_len != sizeof(usa.sin));
|
||||
mg_straddr(&c->rem, buf, sizeof(buf));
|
||||
MG_DEBUG(("%lu accepted %s", c->id, buf));
|
||||
mg_set_non_blocking_mode(FD(c));
|
||||
setsockopts(c);
|
||||
@@ -392,6 +392,7 @@ static void accept_conn(struct mg_mgr *mgr, struct mg_connection *lsn) {
|
||||
c->is_accepted = 1;
|
||||
c->is_hexdumping = lsn->is_hexdumping;
|
||||
c->pfn = lsn->pfn;
|
||||
c->loc = lsn->loc;
|
||||
c->pfn_data = lsn->pfn_data;
|
||||
c->fn = lsn->fn;
|
||||
c->fn_data = lsn->fn_data;
|
||||
@@ -454,7 +455,7 @@ struct mg_connection *mg_mkpipe(struct mg_mgr *mgr, mg_event_handler_t fn,
|
||||
MG_ERROR(("OOM"));
|
||||
} else {
|
||||
MG_DEBUG(("pipe %lu", (unsigned long) sp[0]));
|
||||
tomgaddr(&usa[0], &c->peer, false);
|
||||
tomgaddr(&usa[0], &c->rem, false);
|
||||
c->is_udp = 1;
|
||||
c->pfn = pf1;
|
||||
c->pfn_data = (void *) (size_t) sp[0];
|
||||
@@ -478,7 +479,7 @@ struct mg_connection *mg_listen(struct mg_mgr *mgr, const char *url,
|
||||
MG_ERROR(("OOM %s", url));
|
||||
closesocket(fd);
|
||||
} else {
|
||||
memcpy(&c->peer, &addr, sizeof(struct mg_addr));
|
||||
memcpy(&c->loc, &addr, sizeof(struct mg_addr));
|
||||
c->fd = S2PTR(fd);
|
||||
c->is_listening = 1;
|
||||
c->is_udp = is_udp;
|
||||
@@ -486,7 +487,7 @@ struct mg_connection *mg_listen(struct mg_mgr *mgr, const char *url,
|
||||
c->fn = fn;
|
||||
c->fn_data = fn_data;
|
||||
mg_call(c, MG_EV_OPEN, NULL);
|
||||
MG_DEBUG(("%lu %s port %u", c->id, url, mg_ntohs(c->peer.port)));
|
||||
MG_DEBUG(("%lu %s port %u", c->id, url, mg_ntohs(c->rem.port)));
|
||||
}
|
||||
return c;
|
||||
}
|
||||
@@ -551,7 +552,7 @@ static void connect_conn(struct mg_connection *c) {
|
||||
if (rc) {
|
||||
char buf[50];
|
||||
mg_error(c, "error connecting to %s",
|
||||
mg_straddr(&c->peer, buf, sizeof(buf)));
|
||||
mg_straddr(&c->rem, buf, sizeof(buf)));
|
||||
} else {
|
||||
if (c->is_tls_hs) mg_tls_handshake(c);
|
||||
mg_call(c, MG_EV_CONNECT, NULL);
|
||||
|
||||
Reference in new issue
Block a user