Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
M
mongoose
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
esp
mongoose
Commits
9adfe8d4
Commit
9adfe8d4
authored
9 years ago
by
Deomid Ryabkov
Committed by
Marko Mikulicic
9 years ago
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
espconn is out, Mongoose + LWIP is in
PUBLISHED_FROM=c67ea324058d70070f89420c40e57b9df87964b1
parent
799cc369
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
75 additions
and
51 deletions
+75
-51
mongoose.c
mongoose.c
+58
-48
mongoose.h
mongoose.h
+17
-3
No files found.
mongoose.c
View file @
9adfe8d4
...
...
@@ -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_remove_conn
(
struct
mg_connection
*
c
);
MG_INTERNAL
void
mg_set_sock
(
struct
mg_connection
*
nc
,
sock_t
sock
);
#ifndef MG_DISABLE_FILESYSTEM
MG_INTERNAL
int
find_index_file
(
char
*
,
size_t
,
const
char
*
,
cs_stat_t
*
);
#endif
...
...
@@ -1793,10 +1791,10 @@ struct ctl_msg {
int
mg_is_error
(
int
n
);
void
mg_set_non_blocking_mode
(
sock_t
sock
);
static
void
mg_ev_mgr_init
(
struct
mg_mgr
*
mgr
);
static
void
mg_ev_mgr_free
(
struct
mg_mgr
*
mgr
);
static
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_init
(
struct
mg_mgr
*
mgr
);
extern
void
mg_ev_mgr_free
(
struct
mg_mgr
*
mgr
);
extern
void
mg_ev_mgr_add_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
)
{
DBG
((
"%p %p"
,
mgr
,
c
));
...
...
@@ -1856,7 +1854,7 @@ static void mg_destroy_conn(struct mg_connection *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
));
if
(
!
(
conn
->
flags
&
MG_F_CONNECTING
))
{
mg_call
(
conn
,
MG_EV_CLOSE
,
NULL
);
...
...
@@ -1928,8 +1926,10 @@ void mg_mgr_free(struct mg_mgr *m) {
/* Do one last poll, see https://github.com/cesanta/mongoose/issues/286 */
mg_mgr_poll
(
m
,
0
);
#ifndef MG_DISABLE_SOCKETPAIR
if
(
m
->
ctl
[
0
]
!=
INVALID_SOCKET
)
closesocket
(
m
->
ctl
[
0
]);
if
(
m
->
ctl
[
1
]
!=
INVALID_SOCKET
)
closesocket
(
m
->
ctl
[
1
]);
#endif
m
->
ctl
[
0
]
=
m
->
ctl
[
1
]
=
INVALID_SOCKET
;
for
(
conn
=
m
->
active_connections
;
conn
!=
NULL
;
conn
=
tmp_conn
)
{
...
...
@@ -1963,6 +1963,7 @@ int mg_printf(struct mg_connection *conn, const char *fmt, ...) {
return
len
;
}
#ifndef MG_DISABLE_SYNC_RESOLVER
/* TODO(lsm): use non-blocking resolver */
static
int
mg_resolve2
(
const
char
*
host
,
struct
in_addr
*
ina
)
{
#ifdef MG_ENABLE_GETADDRINFO
...
...
@@ -1998,6 +1999,7 @@ int mg_resolve(const char *host, char *buf, size_t n) {
struct
in_addr
ad
;
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
(
struct
mg_mgr
*
mgr
,
mg_event_handler_t
callback
,
...
...
@@ -2266,7 +2268,7 @@ static int mg_ssl_err(struct mg_connection *conn, int res) {
}
#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
)
{
struct
mg_add_sock_opts
opts
;
struct
mg_connection
*
nc
;
...
...
@@ -2274,8 +2276,7 @@ void mg_if_accept_tcp_cb(struct mg_connection *lc, sock_t sock,
memset
(
&
opts
,
0
,
sizeof
(
opts
));
nc
=
mg_create_connection
(
lc
->
mgr
,
lc
->
handler
,
opts
);
if
(
nc
==
NULL
)
{
closesocket
(
sock
);
return
;
return
-
ENOMEM
;
}
nc
->
listener
=
lc
;
nc
->
proto_data
=
lc
->
proto_data
;
...
...
@@ -2283,7 +2284,7 @@ void mg_if_accept_tcp_cb(struct mg_connection *lc, sock_t sock,
nc
->
user_data
=
lc
->
user_data
;
nc
->
recv_mbuf_limit
=
lc
->
recv_mbuf_limit
;
nc
->
sa
=
*
sa
;
mg_set_sock
(
nc
,
sock
);
/* XXX */
mg_
if_
set_sock
(
nc
,
sock
);
/* XXX */
mg_add_conn
(
nc
->
mgr
,
nc
);
#ifdef MG_ENABLE_SSL
if
(
lc
->
ssl_ctx
!=
NULL
)
{
...
...
@@ -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
,
nc
->
ssl
));
return
0
;
}
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) {
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
,
size_t
len
)
{
struct
ctl_msg
ctl_msg
;
...
...
@@ -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 */
}
}
#endif
/* MG_DISABLE_SOCKETPAIR */
static
int
isbyte
(
int
n
)
{
return
n
>=
0
&&
n
<=
255
;
...
...
@@ -2681,6 +2685,8 @@ void mg_forward(struct mg_connection *from, struct mg_connection *to) {
#line 1 "src/net_if_socket.c"
/**/
#endif
#ifndef MG_DISABLE_SOCKET_IF
/* Amalgamated: #include "internal.h" */
#define MG_TCP_RECV_BUFFER_SIZE 1024
...
...
@@ -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
)
{
sock_t
sock
=
mg_open_listening_socket
(
sa
,
SOCK_STREAM
);
if
(
sock
<
0
)
return
(
errno
?
errno
:
1
);
mg_set_sock
(
nc
,
sock
);
mg_
if_
set_sock
(
nc
,
sock
);
return
0
;
}
int
mg_if_listen_udp
(
struct
mg_connection
*
nc
,
union
socket_address
*
sa
)
{
sock_t
sock
=
mg_open_listening_socket
(
sa
,
SOCK_DGRAM
);
if
(
sock
<
0
)
return
(
errno
?
errno
:
1
);
mg_set_sock
(
nc
,
sock
);
mg_
if_
set_sock
(
nc
,
sock
);
return
0
;
}
...
...
@@ -2803,7 +2809,9 @@ static void mg_accept_conn(struct mg_connection *lc) {
DBG
((
"%p: failed to accept: %d"
,
lc
,
errno
));
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 */
...
...
@@ -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_connection
*
nc
=
mg_create_connection
(
s
,
callback
,
opts
);
if
(
nc
!=
NULL
)
{
mg_set_sock
(
nc
,
sock
);
mg_
if_
set_sock
(
nc
,
sock
);
mg_add_conn
(
nc
->
mgr
,
nc
);
}
return
nc
;
}
/* 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_close_on_exec
(
sock
);
nc
->
sock
=
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_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
;
if
(
epf
&
_MG_EPF_EV_EPOLLIN
)
result
|=
EPOLLIN
;
if
(
epf
&
_MG_EPF_EV_EPOLLOUT
)
result
|=
EPOLLOUT
;
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
)
{
/* NOTE: EPOLLERR and EPOLLHUP are always enabled. */
ev
->
events
=
0
;
...
...
@@ -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
;
struct
epoll_event
ev
;
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) {
}
}
static
void
mg_ev_mgr_init
(
struct
mg_mgr
*
mgr
)
{
void
mg_ev_mgr_init
(
struct
mg_mgr
*
mgr
)
{
int
epoll_fd
;
DBG
((
"%p using epoll()"
,
mgr
));
#ifndef MG_DISABLE_SOCKETPAIR
...
...
@@ -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
;
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
)
{
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
)
{
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) {
#else
/* select() */
static
void
mg_ev_mgr_init
(
struct
mg_mgr
*
mgr
)
{
void
mg_ev_mgr_init
(
struct
mg_mgr
*
mgr
)
{
(
void
)
mgr
;
DBG
((
"%p using select()"
,
mgr
));
#ifndef MG_DISABLE_SOCKETPAIR
...
...
@@ -3246,19 +3254,19 @@ static void mg_ev_mgr_init(struct mg_mgr *mgr) {
#endif
}
static
void
mg_ev_mgr_free
(
struct
mg_mgr
*
mgr
)
{
void
mg_ev_mgr_free
(
struct
mg_mgr
*
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
;
}
static
void
mg_ev_mgr_remove_conn
(
struct
mg_connection
*
nc
)
{
void
mg_ev_mgr_remove_conn
(
struct
mg_connection
*
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
)
{
FD_SET
(
sock
,
set
);
if
(
*
max_fd
==
INVALID_SOCKET
||
sock
>
*
max_fd
)
{
...
...
@@ -3396,6 +3404,25 @@ int mg_socketpair(sock_t sp[2], int sock_type) {
return
ret
;
}
#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
#line 1 "src/multithreading.c"
/**/
...
...
@@ -6209,23 +6236,6 @@ void mg_set_close_on_exec(sock_t sock) {
#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
,
int
flags
)
{
int
is_v6
;
...
...
@@ -7684,8 +7694,8 @@ static void mg_resolve_async_eh(struct mg_connection *nc, int ev, void *data) {
req
->
callback
(
NULL
,
req
->
data
);
}
MG_FREE
(
req
);
nc
->
flags
|=
MG_F_CLOSE_IMMEDIATELY
;
MG_FREE
(
msg
);
nc
->
flags
|=
MG_F_CLOSE_IMMEDIATELY
;
break
;
}
}
...
...
This diff is collapsed.
Click to expand it.
mongoose.h
View file @
9adfe8d4
...
...
@@ -21,6 +21,11 @@
*/
#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
* All rights reserved
...
...
@@ -742,6 +747,7 @@ void mg_mgr_free(struct mg_mgr *);
*/
time_t
mg_mgr_poll
(
struct
mg_mgr
*
,
int
milli
);
#ifndef MG_DISABLE_SOCKETPAIR
/*
* Pass a message of a given length to all connections.
*
...
...
@@ -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.
*/
void
mg_broadcast
(
struct
mg_mgr
*
,
mg_event_handler_t
func
,
void
*
,
size_t
);
#endif
/*
* Iterate over all active connections.
...
...
@@ -963,7 +970,9 @@ int mg_socketpair(sock_t[2], int sock_type);
* CAUTION: this function can block.
* 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
);
#endif
/*
* Verify given IP address against the ACL.
...
...
@@ -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. */
int
mg_if_listen_tcp
(
struct
mg_connection
*
nc
,
union
socket_address
*
sa
);
/* Deliver a new TCP connection. */
void
mg_if_accept_tcp_cb
(
struct
mg_connection
*
lc
,
sock_t
sock
,
/* Deliver a new TCP connection. Returns != 0 in case on error (unable to
* 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
);
/* Request that a "listening" UDP socket be created. */
...
...
@@ -1062,6 +1072,10 @@ void mg_if_recved(struct mg_connection *nc, size_t len);
/* Perform interface-related cleanup on connection before destruction. */
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 */
/*
* Copyright (c) 2014 Cesanta Software Limited
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment