Commit 9adfe8d4 authored by Deomid Ryabkov's avatar Deomid Ryabkov Committed by Marko Mikulicic

espconn is out, Mongoose + LWIP is in

    PUBLISHED_FROM=c67ea324058d70070f89420c40e57b9df87964b1
parent 799cc369
...@@ -77,8 +77,6 @@ MG_INTERNAL void mg_forward(struct mg_connection *, struct mg_connection *); ...@@ -77,8 +77,6 @@ MG_INTERNAL void mg_forward(struct mg_connection *, struct mg_connection *);
MG_INTERNAL void mg_add_conn(struct mg_mgr *mgr, struct mg_connection *c); MG_INTERNAL void mg_add_conn(struct mg_mgr *mgr, struct mg_connection *c);
MG_INTERNAL void mg_remove_conn(struct mg_connection *c); MG_INTERNAL void mg_remove_conn(struct mg_connection *c);
MG_INTERNAL void mg_set_sock(struct mg_connection *nc, sock_t sock);
#ifndef MG_DISABLE_FILESYSTEM #ifndef MG_DISABLE_FILESYSTEM
MG_INTERNAL int find_index_file(char *, size_t, const char *, cs_stat_t *); MG_INTERNAL int find_index_file(char *, size_t, const char *, cs_stat_t *);
#endif #endif
...@@ -1793,10 +1791,10 @@ struct ctl_msg { ...@@ -1793,10 +1791,10 @@ struct ctl_msg {
int mg_is_error(int n); int mg_is_error(int n);
void mg_set_non_blocking_mode(sock_t sock); void mg_set_non_blocking_mode(sock_t sock);
static void mg_ev_mgr_init(struct mg_mgr *mgr); extern void mg_ev_mgr_init(struct mg_mgr *mgr);
static void mg_ev_mgr_free(struct mg_mgr *mgr); extern void mg_ev_mgr_free(struct mg_mgr *mgr);
static void mg_ev_mgr_add_conn(struct mg_connection *nc); extern void mg_ev_mgr_add_conn(struct mg_connection *nc);
static void mg_ev_mgr_remove_conn(struct mg_connection *nc); extern void mg_ev_mgr_remove_conn(struct mg_connection *nc);
MG_INTERNAL void mg_add_conn(struct mg_mgr *mgr, struct mg_connection *c) { MG_INTERNAL void mg_add_conn(struct mg_mgr *mgr, struct mg_connection *c) {
DBG(("%p %p", mgr, c)); DBG(("%p %p", mgr, c));
...@@ -1856,7 +1854,7 @@ static void mg_destroy_conn(struct mg_connection *conn) { ...@@ -1856,7 +1854,7 @@ static void mg_destroy_conn(struct mg_connection *conn) {
MG_FREE(conn); MG_FREE(conn);
} }
static void mg_close_conn(struct mg_connection *conn) { void mg_close_conn(struct mg_connection *conn) {
DBG(("%p %lu", conn, conn->flags)); DBG(("%p %lu", conn, conn->flags));
if (!(conn->flags & MG_F_CONNECTING)) { if (!(conn->flags & MG_F_CONNECTING)) {
mg_call(conn, MG_EV_CLOSE, NULL); mg_call(conn, MG_EV_CLOSE, NULL);
...@@ -1928,8 +1926,10 @@ void mg_mgr_free(struct mg_mgr *m) { ...@@ -1928,8 +1926,10 @@ void mg_mgr_free(struct mg_mgr *m) {
/* Do one last poll, see https://github.com/cesanta/mongoose/issues/286 */ /* Do one last poll, see https://github.com/cesanta/mongoose/issues/286 */
mg_mgr_poll(m, 0); mg_mgr_poll(m, 0);
#ifndef MG_DISABLE_SOCKETPAIR
if (m->ctl[0] != INVALID_SOCKET) closesocket(m->ctl[0]); if (m->ctl[0] != INVALID_SOCKET) closesocket(m->ctl[0]);
if (m->ctl[1] != INVALID_SOCKET) closesocket(m->ctl[1]); if (m->ctl[1] != INVALID_SOCKET) closesocket(m->ctl[1]);
#endif
m->ctl[0] = m->ctl[1] = INVALID_SOCKET; m->ctl[0] = m->ctl[1] = INVALID_SOCKET;
for (conn = m->active_connections; conn != NULL; conn = tmp_conn) { for (conn = m->active_connections; conn != NULL; conn = tmp_conn) {
...@@ -1963,6 +1963,7 @@ int mg_printf(struct mg_connection *conn, const char *fmt, ...) { ...@@ -1963,6 +1963,7 @@ int mg_printf(struct mg_connection *conn, const char *fmt, ...) {
return len; return len;
} }
#ifndef MG_DISABLE_SYNC_RESOLVER
/* TODO(lsm): use non-blocking resolver */ /* TODO(lsm): use non-blocking resolver */
static int mg_resolve2(const char *host, struct in_addr *ina) { static int mg_resolve2(const char *host, struct in_addr *ina) {
#ifdef MG_ENABLE_GETADDRINFO #ifdef MG_ENABLE_GETADDRINFO
...@@ -1998,6 +1999,7 @@ int mg_resolve(const char *host, char *buf, size_t n) { ...@@ -1998,6 +1999,7 @@ int mg_resolve(const char *host, char *buf, size_t n) {
struct in_addr ad; struct in_addr ad;
return mg_resolve2(host, &ad) ? snprintf(buf, n, "%s", inet_ntoa(ad)) : 0; return mg_resolve2(host, &ad) ? snprintf(buf, n, "%s", inet_ntoa(ad)) : 0;
} }
#endif /* MG_DISABLE_SYNC_RESOLVER */
MG_INTERNAL struct mg_connection *mg_create_connection( MG_INTERNAL struct mg_connection *mg_create_connection(
struct mg_mgr *mgr, mg_event_handler_t callback, struct mg_mgr *mgr, mg_event_handler_t callback,
...@@ -2266,7 +2268,7 @@ static int mg_ssl_err(struct mg_connection *conn, int res) { ...@@ -2266,7 +2268,7 @@ static int mg_ssl_err(struct mg_connection *conn, int res) {
} }
#endif /* MG_ENABLE_SSL */ #endif /* MG_ENABLE_SSL */
void mg_if_accept_tcp_cb(struct mg_connection *lc, sock_t sock, int mg_if_accept_tcp_cb(struct mg_connection *lc, sock_t sock,
union socket_address *sa, size_t sa_len) { union socket_address *sa, size_t sa_len) {
struct mg_add_sock_opts opts; struct mg_add_sock_opts opts;
struct mg_connection *nc; struct mg_connection *nc;
...@@ -2274,8 +2276,7 @@ void mg_if_accept_tcp_cb(struct mg_connection *lc, sock_t sock, ...@@ -2274,8 +2276,7 @@ void mg_if_accept_tcp_cb(struct mg_connection *lc, sock_t sock,
memset(&opts, 0, sizeof(opts)); memset(&opts, 0, sizeof(opts));
nc = mg_create_connection(lc->mgr, lc->handler, opts); nc = mg_create_connection(lc->mgr, lc->handler, opts);
if (nc == NULL) { if (nc == NULL) {
closesocket(sock); return -ENOMEM;
return;
} }
nc->listener = lc; nc->listener = lc;
nc->proto_data = lc->proto_data; nc->proto_data = lc->proto_data;
...@@ -2283,7 +2284,7 @@ void mg_if_accept_tcp_cb(struct mg_connection *lc, sock_t sock, ...@@ -2283,7 +2284,7 @@ void mg_if_accept_tcp_cb(struct mg_connection *lc, sock_t sock,
nc->user_data = lc->user_data; nc->user_data = lc->user_data;
nc->recv_mbuf_limit = lc->recv_mbuf_limit; nc->recv_mbuf_limit = lc->recv_mbuf_limit;
nc->sa = *sa; nc->sa = *sa;
mg_set_sock(nc, sock); /* XXX */ mg_if_set_sock(nc, sock); /* XXX */
mg_add_conn(nc->mgr, nc); mg_add_conn(nc->mgr, nc);
#ifdef MG_ENABLE_SSL #ifdef MG_ENABLE_SSL
if (lc->ssl_ctx != NULL) { if (lc->ssl_ctx != NULL) {
...@@ -2299,6 +2300,7 @@ void mg_if_accept_tcp_cb(struct mg_connection *lc, sock_t sock, ...@@ -2299,6 +2300,7 @@ void mg_if_accept_tcp_cb(struct mg_connection *lc, sock_t sock,
} }
DBG(("%p %p %d %d, %p %p", lc, nc, nc->sock, (int) nc->flags, lc->ssl_ctx, DBG(("%p %p %d %d, %p %p", lc, nc, nc->sock, (int) nc->flags, lc->ssl_ctx,
nc->ssl)); nc->ssl));
return 0;
} }
static size_t recv_avail_size(struct mg_connection *conn, size_t max) { static size_t recv_avail_size(struct mg_connection *conn, size_t max) {
...@@ -2605,6 +2607,7 @@ struct mg_connection *mg_next(struct mg_mgr *s, struct mg_connection *conn) { ...@@ -2605,6 +2607,7 @@ struct mg_connection *mg_next(struct mg_mgr *s, struct mg_connection *conn) {
return conn == NULL ? s->active_connections : conn->next; return conn == NULL ? s->active_connections : conn->next;
} }
#ifndef MG_DISABLE_SOCKETPAIR
void mg_broadcast(struct mg_mgr *mgr, mg_event_handler_t cb, void *data, void mg_broadcast(struct mg_mgr *mgr, mg_event_handler_t cb, void *data,
size_t len) { size_t len) {
struct ctl_msg ctl_msg; struct ctl_msg ctl_msg;
...@@ -2628,6 +2631,7 @@ void mg_broadcast(struct mg_mgr *mgr, mg_event_handler_t cb, void *data, ...@@ -2628,6 +2631,7 @@ void mg_broadcast(struct mg_mgr *mgr, mg_event_handler_t cb, void *data,
(void) dummy; /* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=25509 */ (void) dummy; /* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=25509 */
} }
} }
#endif /* MG_DISABLE_SOCKETPAIR */
static int isbyte(int n) { static int isbyte(int n) {
return n >= 0 && n <= 255; return n >= 0 && n <= 255;
...@@ -2681,6 +2685,8 @@ void mg_forward(struct mg_connection *from, struct mg_connection *to) { ...@@ -2681,6 +2685,8 @@ void mg_forward(struct mg_connection *from, struct mg_connection *to) {
#line 1 "src/net_if_socket.c" #line 1 "src/net_if_socket.c"
/**/ /**/
#endif #endif
#ifndef MG_DISABLE_SOCKET_IF
/* Amalgamated: #include "internal.h" */ /* Amalgamated: #include "internal.h" */
#define MG_TCP_RECV_BUFFER_SIZE 1024 #define MG_TCP_RECV_BUFFER_SIZE 1024
...@@ -2747,14 +2753,14 @@ void mg_if_connect_udp(struct mg_connection *nc) { ...@@ -2747,14 +2753,14 @@ void mg_if_connect_udp(struct mg_connection *nc) {
int mg_if_listen_tcp(struct mg_connection *nc, union socket_address *sa) { int mg_if_listen_tcp(struct mg_connection *nc, union socket_address *sa) {
sock_t sock = mg_open_listening_socket(sa, SOCK_STREAM); sock_t sock = mg_open_listening_socket(sa, SOCK_STREAM);
if (sock < 0) return (errno ? errno : 1); if (sock < 0) return (errno ? errno : 1);
mg_set_sock(nc, sock); mg_if_set_sock(nc, sock);
return 0; return 0;
} }
int mg_if_listen_udp(struct mg_connection *nc, union socket_address *sa) { int mg_if_listen_udp(struct mg_connection *nc, union socket_address *sa) {
sock_t sock = mg_open_listening_socket(sa, SOCK_DGRAM); sock_t sock = mg_open_listening_socket(sa, SOCK_DGRAM);
if (sock < 0) return (errno ? errno : 1); if (sock < 0) return (errno ? errno : 1);
mg_set_sock(nc, sock); mg_if_set_sock(nc, sock);
return 0; return 0;
} }
...@@ -2803,7 +2809,9 @@ static void mg_accept_conn(struct mg_connection *lc) { ...@@ -2803,7 +2809,9 @@ static void mg_accept_conn(struct mg_connection *lc) {
DBG(("%p: failed to accept: %d", lc, errno)); DBG(("%p: failed to accept: %d", lc, errno));
return; return;
} }
mg_if_accept_tcp_cb(lc, sock, &sa, sa_len); if (mg_if_accept_tcp_cb(lc, sock, &sa, sa_len) != 0) {
closesocket(sock);
}
} }
/* 'sa' must be an initialized address to bind to */ /* 'sa' must be an initialized address to bind to */
...@@ -3073,14 +3081,14 @@ struct mg_connection *mg_add_sock_opt(struct mg_mgr *s, sock_t sock, ...@@ -3073,14 +3081,14 @@ struct mg_connection *mg_add_sock_opt(struct mg_mgr *s, sock_t sock,
struct mg_add_sock_opts opts) { struct mg_add_sock_opts opts) {
struct mg_connection *nc = mg_create_connection(s, callback, opts); struct mg_connection *nc = mg_create_connection(s, callback, opts);
if (nc != NULL) { if (nc != NULL) {
mg_set_sock(nc, sock); mg_if_set_sock(nc, sock);
mg_add_conn(nc->mgr, nc); mg_add_conn(nc->mgr, nc);
} }
return nc; return nc;
} }
/* Associate a socket to a connection. */ /* Associate a socket to a connection. */
MG_INTERNAL void mg_set_sock(struct mg_connection *nc, sock_t sock) { void mg_if_set_sock(struct mg_connection *nc, sock_t sock) {
mg_set_non_blocking_mode(sock); mg_set_non_blocking_mode(sock);
mg_set_close_on_exec(sock); mg_set_close_on_exec(sock);
nc->sock = sock; nc->sock = sock;
...@@ -3097,14 +3105,14 @@ MG_INTERNAL void mg_set_sock(struct mg_connection *nc, sock_t sock) { ...@@ -3097,14 +3105,14 @@ MG_INTERNAL void mg_set_sock(struct mg_connection *nc, sock_t sock) {
#define _MG_EPF_EV_EPOLLOUT (1 << 1) #define _MG_EPF_EV_EPOLLOUT (1 << 1)
#define _MG_EPF_NO_POLL (1 << 2) #define _MG_EPF_NO_POLL (1 << 2)
static uint32_t mg_epf_to_evflags(unsigned int epf) { uint32_t mg_epf_to_evflags(unsigned int epf) {
uint32_t result = 0; uint32_t result = 0;
if (epf & _MG_EPF_EV_EPOLLIN) result |= EPOLLIN; if (epf & _MG_EPF_EV_EPOLLIN) result |= EPOLLIN;
if (epf & _MG_EPF_EV_EPOLLOUT) result |= EPOLLOUT; if (epf & _MG_EPF_EV_EPOLLOUT) result |= EPOLLOUT;
return result; return result;
} }
static void mg_ev_mgr_epoll_set_flags(const struct mg_connection *nc, void mg_ev_mgr_epoll_set_flags(const struct mg_connection *nc,
struct epoll_event *ev) { struct epoll_event *ev) {
/* NOTE: EPOLLERR and EPOLLHUP are always enabled. */ /* NOTE: EPOLLERR and EPOLLHUP are always enabled. */
ev->events = 0; ev->events = 0;
...@@ -3117,7 +3125,7 @@ static void mg_ev_mgr_epoll_set_flags(const struct mg_connection *nc, ...@@ -3117,7 +3125,7 @@ static void mg_ev_mgr_epoll_set_flags(const struct mg_connection *nc,
} }
} }
static void mg_ev_mgr_epoll_ctl(struct mg_connection *nc, int op) { void mg_ev_mgr_epoll_ctl(struct mg_connection *nc, int op) {
int epoll_fd = (intptr_t) nc->mgr->mgr_data; int epoll_fd = (intptr_t) nc->mgr->mgr_data;
struct epoll_event ev; struct epoll_event ev;
assert(op == EPOLL_CTL_ADD || op == EPOLL_CTL_MOD || EPOLL_CTL_DEL); assert(op == EPOLL_CTL_ADD || op == EPOLL_CTL_MOD || EPOLL_CTL_DEL);
...@@ -3137,7 +3145,7 @@ static void mg_ev_mgr_epoll_ctl(struct mg_connection *nc, int op) { ...@@ -3137,7 +3145,7 @@ static void mg_ev_mgr_epoll_ctl(struct mg_connection *nc, int op) {
} }
} }
static void mg_ev_mgr_init(struct mg_mgr *mgr) { void mg_ev_mgr_init(struct mg_mgr *mgr) {
int epoll_fd; int epoll_fd;
DBG(("%p using epoll()", mgr)); DBG(("%p using epoll()", mgr));
#ifndef MG_DISABLE_SOCKETPAIR #ifndef MG_DISABLE_SOCKETPAIR
...@@ -3162,18 +3170,18 @@ static void mg_ev_mgr_init(struct mg_mgr *mgr) { ...@@ -3162,18 +3170,18 @@ static void mg_ev_mgr_init(struct mg_mgr *mgr) {
} }
} }
static void mg_ev_mgr_free(struct mg_mgr *mgr) { void mg_ev_mgr_free(struct mg_mgr *mgr) {
int epoll_fd = (intptr_t) mgr->mgr_data; int epoll_fd = (intptr_t) mgr->mgr_data;
close(epoll_fd); close(epoll_fd);
} }
static void mg_ev_mgr_add_conn(struct mg_connection *nc) { void mg_ev_mgr_add_conn(struct mg_connection *nc) {
if (!(nc->flags & MG_F_UDP) || nc->listener == NULL) { if (!(nc->flags & MG_F_UDP) || nc->listener == NULL) {
mg_ev_mgr_epoll_ctl(nc, EPOLL_CTL_ADD); mg_ev_mgr_epoll_ctl(nc, EPOLL_CTL_ADD);
} }
} }
static void mg_ev_mgr_remove_conn(struct mg_connection *nc) { void mg_ev_mgr_remove_conn(struct mg_connection *nc) {
if (!(nc->flags & MG_F_UDP) || nc->listener == NULL) { if (!(nc->flags & MG_F_UDP) || nc->listener == NULL) {
mg_ev_mgr_epoll_ctl(nc, EPOLL_CTL_DEL); mg_ev_mgr_epoll_ctl(nc, EPOLL_CTL_DEL);
} }
...@@ -3236,7 +3244,7 @@ time_t mg_mgr_poll(struct mg_mgr *mgr, int timeout_ms) { ...@@ -3236,7 +3244,7 @@ time_t mg_mgr_poll(struct mg_mgr *mgr, int timeout_ms) {
#else /* select() */ #else /* select() */
static void mg_ev_mgr_init(struct mg_mgr *mgr) { void mg_ev_mgr_init(struct mg_mgr *mgr) {
(void) mgr; (void) mgr;
DBG(("%p using select()", mgr)); DBG(("%p using select()", mgr));
#ifndef MG_DISABLE_SOCKETPAIR #ifndef MG_DISABLE_SOCKETPAIR
...@@ -3246,19 +3254,19 @@ static void mg_ev_mgr_init(struct mg_mgr *mgr) { ...@@ -3246,19 +3254,19 @@ static void mg_ev_mgr_init(struct mg_mgr *mgr) {
#endif #endif
} }
static void mg_ev_mgr_free(struct mg_mgr *mgr) { void mg_ev_mgr_free(struct mg_mgr *mgr) {
(void) mgr; (void) mgr;
} }
static void mg_ev_mgr_add_conn(struct mg_connection *nc) { void mg_ev_mgr_add_conn(struct mg_connection *nc) {
(void) nc; (void) nc;
} }
static void mg_ev_mgr_remove_conn(struct mg_connection *nc) { void mg_ev_mgr_remove_conn(struct mg_connection *nc) {
(void) nc; (void) nc;
} }
static void mg_add_to_set(sock_t sock, fd_set *set, sock_t *max_fd) { void mg_add_to_set(sock_t sock, fd_set *set, sock_t *max_fd) {
if (sock != INVALID_SOCKET) { if (sock != INVALID_SOCKET) {
FD_SET(sock, set); FD_SET(sock, set);
if (*max_fd == INVALID_SOCKET || sock > *max_fd) { if (*max_fd == INVALID_SOCKET || sock > *max_fd) {
...@@ -3396,6 +3404,25 @@ int mg_socketpair(sock_t sp[2], int sock_type) { ...@@ -3396,6 +3404,25 @@ int mg_socketpair(sock_t sp[2], int sock_type) {
return ret; return ret;
} }
#endif /* MG_DISABLE_SOCKETPAIR */ #endif /* MG_DISABLE_SOCKETPAIR */
void mg_sock_to_str(sock_t sock, char *buf, size_t len, int flags) {
union socket_address sa;
#ifndef MG_CC3200
socklen_t slen = sizeof(sa);
#endif
memset(&sa, 0, sizeof(sa));
#ifndef MG_CC3200
if (flags & MG_SOCK_STRINGIFY_REMOTE) {
getpeername(sock, &sa.sa, &slen);
} else {
getsockname(sock, &sa.sa, &slen);
}
#endif
mg_sock_addr_to_str(&sa, buf, len, flags);
}
#endif /* !MG_DISABLE_SOCKET_IF */
#ifdef NS_MODULE_LINES #ifdef NS_MODULE_LINES
#line 1 "src/multithreading.c" #line 1 "src/multithreading.c"
/**/ /**/
...@@ -6209,23 +6236,6 @@ void mg_set_close_on_exec(sock_t sock) { ...@@ -6209,23 +6236,6 @@ void mg_set_close_on_exec(sock_t sock) {
#endif #endif
} }
void mg_sock_to_str(sock_t sock, char *buf, size_t len, int flags) {
union socket_address sa;
#ifndef MG_CC3200
socklen_t slen = sizeof(sa);
#endif
memset(&sa, 0, sizeof(sa));
#ifndef MG_CC3200
if (flags & MG_SOCK_STRINGIFY_REMOTE) {
getpeername(sock, &sa.sa, &slen);
} else {
getsockname(sock, &sa.sa, &slen);
}
#endif
mg_sock_addr_to_str(&sa, buf, len, flags);
}
void mg_sock_addr_to_str(const union socket_address *sa, char *buf, size_t len, void mg_sock_addr_to_str(const union socket_address *sa, char *buf, size_t len,
int flags) { int flags) {
int is_v6; int is_v6;
...@@ -7684,8 +7694,8 @@ static void mg_resolve_async_eh(struct mg_connection *nc, int ev, void *data) { ...@@ -7684,8 +7694,8 @@ static void mg_resolve_async_eh(struct mg_connection *nc, int ev, void *data) {
req->callback(NULL, req->data); req->callback(NULL, req->data);
} }
MG_FREE(req); MG_FREE(req);
nc->flags |= MG_F_CLOSE_IMMEDIATELY;
MG_FREE(msg); MG_FREE(msg);
nc->flags |= MG_F_CLOSE_IMMEDIATELY;
break; break;
} }
} }
......
...@@ -21,6 +21,11 @@ ...@@ -21,6 +21,11 @@
*/ */
#define MG_VERSION "6.0" #define MG_VERSION "6.0"
/* Local tweaks, applied before any of Mongoose's own headers. */
#ifdef MG_LOCALS
#include <mg_locals.h>
#endif
/* /*
* Copyright (c) 2015 Cesanta Software Limited * Copyright (c) 2015 Cesanta Software Limited
* All rights reserved * All rights reserved
...@@ -742,6 +747,7 @@ void mg_mgr_free(struct mg_mgr *); ...@@ -742,6 +747,7 @@ void mg_mgr_free(struct mg_mgr *);
*/ */
time_t mg_mgr_poll(struct mg_mgr *, int milli); time_t mg_mgr_poll(struct mg_mgr *, int milli);
#ifndef MG_DISABLE_SOCKETPAIR
/* /*
* Pass a message of a given length to all connections. * Pass a message of a given length to all connections.
* *
...@@ -755,6 +761,7 @@ time_t mg_mgr_poll(struct mg_mgr *, int milli); ...@@ -755,6 +761,7 @@ time_t mg_mgr_poll(struct mg_mgr *, int milli);
* by `MG_CTL_MSG_MESSAGE_SIZE` which is set to 8192 bytes. * by `MG_CTL_MSG_MESSAGE_SIZE` which is set to 8192 bytes.
*/ */
void mg_broadcast(struct mg_mgr *, mg_event_handler_t func, void *, size_t); void mg_broadcast(struct mg_mgr *, mg_event_handler_t func, void *, size_t);
#endif
/* /*
* Iterate over all active connections. * Iterate over all active connections.
...@@ -963,7 +970,9 @@ int mg_socketpair(sock_t[2], int sock_type); ...@@ -963,7 +970,9 @@ int mg_socketpair(sock_t[2], int sock_type);
* CAUTION: this function can block. * CAUTION: this function can block.
* Return 1 on success, 0 on failure. * Return 1 on success, 0 on failure.
*/ */
#ifndef MG_DISABLE_SYNC_RESOLVER
int mg_resolve(const char *domain_name, char *ip_addr_buf, size_t buf_len); int mg_resolve(const char *domain_name, char *ip_addr_buf, size_t buf_len);
#endif
/* /*
* Verify given IP address against the ACL. * Verify given IP address against the ACL.
...@@ -1035,8 +1044,9 @@ void mg_if_connect_cb(struct mg_connection *nc, int err); ...@@ -1035,8 +1044,9 @@ void mg_if_connect_cb(struct mg_connection *nc, int err);
/* Set up a listening TCP socket on a given address. rv = 0 -> ok. */ /* Set up a listening TCP socket on a given address. rv = 0 -> ok. */
int mg_if_listen_tcp(struct mg_connection *nc, union socket_address *sa); int mg_if_listen_tcp(struct mg_connection *nc, union socket_address *sa);
/* Deliver a new TCP connection. */ /* Deliver a new TCP connection. Returns != 0 in case on error (unable to
void mg_if_accept_tcp_cb(struct mg_connection *lc, sock_t sock, * create connection, in which case interface state should be removed. */
int mg_if_accept_tcp_cb(struct mg_connection *lc, sock_t sock,
union socket_address *sa, size_t sa_len); union socket_address *sa, size_t sa_len);
/* Request that a "listening" UDP socket be created. */ /* Request that a "listening" UDP socket be created. */
...@@ -1062,6 +1072,10 @@ void mg_if_recved(struct mg_connection *nc, size_t len); ...@@ -1062,6 +1072,10 @@ void mg_if_recved(struct mg_connection *nc, size_t len);
/* Perform interface-related cleanup on connection before destruction. */ /* Perform interface-related cleanup on connection before destruction. */
void mg_if_destroy_conn(struct mg_connection *nc); void mg_if_destroy_conn(struct mg_connection *nc);
void mg_if_set_sock(struct mg_connection *nc, sock_t sock);
void mg_close_conn(struct mg_connection *nc);
#endif /* MG_NET_IF_HEADER_INCLUDED */ #endif /* MG_NET_IF_HEADER_INCLUDED */
/* /*
* Copyright (c) 2014 Cesanta Software Limited * Copyright (c) 2014 Cesanta Software Limited
......
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