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
8ce34af9
Commit
8ce34af9
authored
Apr 10, 2017
by
Sergey Lyubka
Committed by
Cesanta Bot
Apr 11, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Clean send_mbuf in mg_if_sent_cb, fix hexdump
PUBLISHED_FROM=3d222e548a3323b957376666e6702b408843b5a3
parent
82761bb8
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
51 additions
and
50 deletions
+51
-50
mongoose.c
mongoose.c
+51
-50
No files found.
mongoose.c
View file @
8ce34af9
...
...
@@ -2042,14 +2042,9 @@ MG_INTERNAL void mg_call(struct mg_connection *nc,
#if !defined(NO_LIBC) && MG_ENABLE_HEXDUMP
/* LCOV_EXCL_START */
if (nc->mgr->hexdump_file != NULL && ev != MG_EV_POLL &&
if
(
nc
->
mgr
->
hexdump_file
!=
NULL
&&
ev
!=
MG_EV_POLL
&&
ev
!=
MG_EV_RECV
&&
ev
!=
MG_EV_SEND
/* handled separately */
)
{
if (ev == MG_EV_RECV) {
mg_hexdump_connection(nc, nc->mgr->hexdump_file, nc->recv_mbuf.buf,
*(int *) ev_data, ev);
} else {
mg_hexdump_connection(nc, nc->mgr->hexdump_file, NULL, 0, ev);
}
mg_hexdump_connection
(
nc
,
nc
->
mgr
->
hexdump_file
,
NULL
,
0
,
ev
);
}
/* LCOV_EXCL_STOP */
#endif
...
...
@@ -2480,16 +2475,20 @@ void mg_send(struct mg_connection *nc, const void *buf, int len) {
}
else
{
nc
->
iface
->
vtable
->
tcp_send
(
nc
,
buf
,
len
);
}
}
void
mg_if_sent_cb
(
struct
mg_connection
*
nc
,
int
num_sent
)
{
#if !defined(NO_LIBC) && MG_ENABLE_HEXDUMP
if
(
nc
->
mgr
&&
nc
->
mgr
->
hexdump_file
!=
NULL
)
{
mg_hexdump_connection(nc, nc->mgr->hexdump_file, buf, len, MG_EV_SEND);
char
*
buf
=
nc
->
send_mbuf
.
buf
;
mg_hexdump_connection
(
nc
,
nc
->
mgr
->
hexdump_file
,
buf
,
num_sent
,
MG_EV_SEND
);
}
#endif
}
void mg_if_sent_cb(struct mg_connection *nc, int num_sent) {
if
(
num_sent
<
0
)
{
nc
->
flags
|=
MG_F_CLOSE_IMMEDIATELY
;
}
else
{
mbuf_remove
(
&
nc
->
send_mbuf
,
num_sent
);
mbuf_trim
(
&
nc
->
send_mbuf
);
}
mg_call
(
nc
,
NULL
,
nc
->
user_data
,
MG_EV_SEND
,
&
num_sent
);
}
...
...
@@ -2497,6 +2496,13 @@ void mg_if_sent_cb(struct mg_connection *nc, int num_sent) {
MG_INTERNAL
void
mg_recv_common
(
struct
mg_connection
*
nc
,
void
*
buf
,
int
len
,
int
own
)
{
DBG
((
"%p %d %u"
,
nc
,
len
,
(
unsigned
int
)
nc
->
recv_mbuf
.
len
));
#if !defined(NO_LIBC) && MG_ENABLE_HEXDUMP
if
(
nc
->
mgr
&&
nc
->
mgr
->
hexdump_file
!=
NULL
)
{
mg_hexdump_connection
(
nc
,
nc
->
mgr
->
hexdump_file
,
buf
,
len
,
MG_EV_RECV
);
}
#endif
if
(
nc
->
flags
&
MG_F_CLOSE_IMMEDIATELY
)
{
DBG
((
"%p discarded %d bytes"
,
nc
,
len
));
/*
...
...
@@ -3134,17 +3140,16 @@ void mg_set_non_blocking_mode(sock_t sock) {
#endif
}
static int mg_is_error(
int n
) {
static
int
mg_is_error
(
void
)
{
int
err
=
mg_get_errno
();
return
(n < 0 &&
err != EINPROGRESS && err != EWOULDBLOCK
return
err
!=
EINPROGRESS
&&
err
!=
EWOULDBLOCK
#ifndef WINCE
&& err != EAGAIN && err != EINTR
&&
err
!=
EAGAIN
&&
err
!=
EINTR
#endif
#ifdef _WIN32
&& WSAGetLastError() != WSAEINTR &&
WSAGetLastError() != WSAEWOULDBLOCK
&&
WSAGetLastError
()
!=
WSAEINTR
&&
WSAGetLastError
()
!=
WSAEWOULDBLOCK
#endif
)
;
;
}
void
mg_socket_if_connect_tcp
(
struct
mg_connection
*
nc
,
...
...
@@ -3159,7 +3164,7 @@ void mg_socket_if_connect_tcp(struct mg_connection *nc,
mg_set_non_blocking_mode
(
nc
->
sock
);
#endif
rc
=
connect
(
nc
->
sock
,
&
sa
->
sa
,
sizeof
(
sa
->
sin
));
nc->err =
mg_is_error(rc
) ? mg_get_errno() : 0;
nc
->
err
=
rc
<
0
&&
mg_is_error
(
)
?
mg_get_errno
()
:
0
;
DBG
((
"%p sock %d rc %d errno %d err %d"
,
nc
,
nc
->
sock
,
rc
,
mg_get_errno
(),
nc
->
err
));
}
...
...
@@ -3235,7 +3240,7 @@ static int mg_accept_conn(struct mg_connection *lc) {
/* NOTE(lsm): on Windows, sock is always > FD_SETSIZE */
sock_t
sock
=
accept
(
lc
->
sock
,
&
sa
.
sa
,
&
sa_len
);
if
(
sock
==
INVALID_SOCKET
)
{
if (mg_is_error(
-1
)) DBG(("%p: failed to accept: %d", lc, mg_get_errno()));
if
(
mg_is_error
())
DBG
((
"%p: failed to accept: %d"
,
lc
,
mg_get_errno
()));
return
0
;
}
nc
=
mg_if_accept_new_conn
(
lc
);
...
...
@@ -3320,10 +3325,7 @@ static void mg_write_to_socket(struct mg_connection *nc) {
sendto
(
nc
->
sock
,
io
->
buf
,
io
->
len
,
0
,
&
nc
->
sa
.
sa
,
sizeof
(
nc
->
sa
.
sin
));
DBG
((
"%p %d %d %d %s:%hu"
,
nc
,
nc
->
sock
,
n
,
mg_get_errno
(),
inet_ntoa
(
nc
->
sa
.
sin
.
sin_addr
),
ntohs
(
nc
->
sa
.
sin
.
sin_port
)));
if (n > 0) {
mbuf_remove(io, n);
mg_if_sent_cb(nc, n);
}
mg_if_sent_cb
(
nc
,
n
);
return
;
}
...
...
@@ -3350,17 +3352,9 @@ static void mg_write_to_socket(struct mg_connection *nc) {
{
n
=
(
int
)
MG_SEND_FUNC
(
nc
->
sock
,
io
->
buf
,
io
->
len
,
0
);
DBG
((
"%p %d bytes -> %d"
,
nc
,
n
,
nc
->
sock
));
if (n < 0 && mg_is_error(n)) {
/* Something went wrong, drop the connection. */
nc->flags |= MG_F_CLOSE_IMMEDIATELY;
return;
}
}
if (n > 0) {
mbuf_remove(io, n);
mg_if_sent_cb(nc, n);
}
mg_if_sent_cb
(
nc
,
n
);
}
MG_INTERNAL
size_t
recv_avail_size
(
struct
mg_connection
*
conn
,
size_t
max
)
{
...
...
@@ -3415,7 +3409,7 @@ static void mg_handle_tcp_read(struct mg_connection *conn) {
if
(
n
==
0
)
{
/* Orderly shutdown of the socket, try flushing output. */
conn
->
flags
|=
MG_F_SEND_AND_CLOSE
;
} else if (
mg_is_error(n
)) {
}
else
if
(
n
<
0
&&
mg_is_error
(
))
{
conn
->
flags
|=
MG_F_CLOSE_IMMEDIATELY
;
}
}
...
...
@@ -9549,6 +9543,25 @@ void mg_hexdump_connection(struct mg_connection *nc, const char *path,
FILE
*
fp
=
NULL
;
char
*
hexbuf
,
src
[
60
],
dst
[
60
];
int
buf_size
=
num_bytes
*
5
+
100
;
const
char
*
tag
=
NULL
;
switch
(
ev
)
{
case
MG_EV_RECV
:
tag
=
"<-"
;
break
;
case
MG_EV_SEND
:
tag
=
"->"
;
break
;
case
MG_EV_ACCEPT
:
tag
=
"<A"
;
break
;
case
MG_EV_CONNECT
:
tag
=
"C>"
;
break
;
case
MG_EV_CLOSE
:
tag
=
"XX"
;
break
;
}
if
(
tag
==
NULL
)
return
;
/* Don't log MG_EV_TIMER, etc */
if
(
strcmp
(
path
,
"-"
)
==
0
)
{
fp
=
stdout
;
...
...
@@ -9566,14 +9579,8 @@ void mg_hexdump_connection(struct mg_connection *nc, const char *path,
mg_conn_addr_to_str
(
nc
,
dst
,
sizeof
(
dst
),
MG_SOCK_STRINGIFY_IP
|
MG_SOCK_STRINGIFY_PORT
|
MG_SOCK_STRINGIFY_REMOTE
);
fprintf(
fp, "%lu %p %s %s %s %d\n", (unsigned long) mg_time(), (void *) nc, src,
ev == MG_EV_RECV ? "<-" : ev == MG_EV_SEND
? "->"
: ev == MG_EV_ACCEPT
? "<A"
: ev == MG_EV_CONNECT ? "C>" : "XX",
dst, num_bytes);
fprintf
(
fp
,
"%lu %p %s %s %s %d
\n
"
,
(
unsigned
long
)
mg_time
(),
(
void
*
)
nc
,
src
,
tag
,
dst
,
num_bytes
);
if
(
num_bytes
>
0
&&
(
hexbuf
=
(
char
*
)
MG_MALLOC
(
buf_size
))
!=
NULL
)
{
mg_hexdump
(
buf
,
num_bytes
,
hexbuf
,
buf_size
);
fprintf
(
fp
,
"%s"
,
hexbuf
);
...
...
@@ -11991,7 +11998,7 @@ static void mg_get_ntp_ts(const char *ntp, uint64_t *val) {
}
void
mg_sntp_send_request
(
struct
mg_connection
*
c
)
{
char
buf[48] = {0};
uint8_t
buf
[
48
]
=
{
0
};
/*
* header - 8 bit:
* LI (2 bit) - 3 (not in sync), VN (3 bit) - 4 (version),
...
...
@@ -13373,7 +13380,6 @@ static void mg_write_to_socket(struct mg_connection *nc) {
}
if
(
n
>
0
)
{
mbuf_remove(io, n);
mg_if_sent_cb
(
nc
,
n
);
}
else
if
(
n
<
0
&&
mg_is_error
(
n
))
{
/* Something went wrong, drop the connection. */
...
...
@@ -14399,8 +14405,6 @@ static void mg_lwip_send_more(struct mg_connection *nc) {
if
(
num_written
<
0
)
{
mg_lwip_post_signal
(
MG_SIG_CLOSE_CONN
,
nc
);
}
mbuf_remove(&nc->send_mbuf, num_written);
mbuf_trim(&nc->send_mbuf);
}
void
mg_lwip_if_tcp_send
(
struct
mg_connection
*
nc
,
const
void
*
buf
,
...
...
@@ -14639,7 +14643,7 @@ void mg_ev_mgr_lwip_process_signals(struct mg_mgr *mgr) {
break
;
}
case
MG_SIG_SENT_CB
:
{
if (cs->num_sent > 0)
mg_if_sent_cb(nc, cs->num_sent);
mg_if_sent_cb
(
nc
,
cs
->
num_sent
);
cs
->
num_sent
=
0
;
if
(
nc
->
send_mbuf
.
len
==
0
&&
(
nc
->
flags
&
MG_F_SEND_AND_CLOSE
)
&&
...
...
@@ -15268,10 +15272,7 @@ static void mg_handle_send(struct mg_connection *nc) {
}
}
if (bytes_written != 0) {
mbuf_remove(&nc->send_mbuf, bytes_written);
mg_if_sent_cb(nc, bytes_written);
}
mg_if_sent_cb
(
nc
,
bytes_written
);
}
static
void
mg_handle_recv
(
struct
mg_connection
*
nc
)
{
...
...
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