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
8 years ago
by
Sergey Lyubka
Committed by
Cesanta Bot
8 years ago
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,
...
@@ -2042,14 +2042,9 @@ MG_INTERNAL void mg_call(struct mg_connection *nc,
#if !defined(NO_LIBC) && MG_ENABLE_HEXDUMP
#if !defined(NO_LIBC) && MG_ENABLE_HEXDUMP
/* LCOV_EXCL_START */
/* 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 */
)
{
ev
!=
MG_EV_SEND
/* handled separately */
)
{
if
(
ev
==
MG_EV_RECV
)
{
mg_hexdump_connection
(
nc
,
nc
->
mgr
->
hexdump_file
,
NULL
,
0
,
ev
);
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
);
}
}
}
/* LCOV_EXCL_STOP */
/* LCOV_EXCL_STOP */
#endif
#endif
...
@@ -2480,16 +2475,20 @@ void mg_send(struct mg_connection *nc, const void *buf, int len) {
...
@@ -2480,16 +2475,20 @@ void mg_send(struct mg_connection *nc, const void *buf, int len) {
}
else
{
}
else
{
nc
->
iface
->
vtable
->
tcp_send
(
nc
,
buf
,
len
);
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 !defined(NO_LIBC) && MG_ENABLE_HEXDUMP
if
(
nc
->
mgr
&&
nc
->
mgr
->
hexdump_file
!=
NULL
)
{
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
#endif
}
void
mg_if_sent_cb
(
struct
mg_connection
*
nc
,
int
num_sent
)
{
if
(
num_sent
<
0
)
{
if
(
num_sent
<
0
)
{
nc
->
flags
|=
MG_F_CLOSE_IMMEDIATELY
;
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
);
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) {
...
@@ -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
,
MG_INTERNAL
void
mg_recv_common
(
struct
mg_connection
*
nc
,
void
*
buf
,
int
len
,
int
own
)
{
int
own
)
{
DBG
((
"%p %d %u"
,
nc
,
len
,
(
unsigned
int
)
nc
->
recv_mbuf
.
len
));
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
)
{
if
(
nc
->
flags
&
MG_F_CLOSE_IMMEDIATELY
)
{
DBG
((
"%p discarded %d bytes"
,
nc
,
len
));
DBG
((
"%p discarded %d bytes"
,
nc
,
len
));
/*
/*
...
@@ -3134,17 +3140,16 @@ void mg_set_non_blocking_mode(sock_t sock) {
...
@@ -3134,17 +3140,16 @@ void mg_set_non_blocking_mode(sock_t sock) {
#endif
#endif
}
}
static
int
mg_is_error
(
int
n
)
{
static
int
mg_is_error
(
void
)
{
int
err
=
mg_get_errno
();
int
err
=
mg_get_errno
();
return
(
n
<
0
&&
err
!=
EINPROGRESS
&&
err
!=
EWOULDBLOCK
return
err
!=
EINPROGRESS
&&
err
!=
EWOULDBLOCK
#ifndef WINCE
#ifndef WINCE
&&
err
!=
EAGAIN
&&
err
!=
EINTR
&&
err
!=
EAGAIN
&&
err
!=
EINTR
#endif
#endif
#ifdef _WIN32
#ifdef _WIN32
&&
WSAGetLastError
()
!=
WSAEINTR
&&
&&
WSAGetLastError
()
!=
WSAEINTR
&&
WSAGetLastError
()
!=
WSAEWOULDBLOCK
WSAGetLastError
()
!=
WSAEWOULDBLOCK
#endif
#endif
)
;
;
}
}
void
mg_socket_if_connect_tcp
(
struct
mg_connection
*
nc
,
void
mg_socket_if_connect_tcp
(
struct
mg_connection
*
nc
,
...
@@ -3159,7 +3164,7 @@ 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
);
mg_set_non_blocking_mode
(
nc
->
sock
);
#endif
#endif
rc
=
connect
(
nc
->
sock
,
&
sa
->
sa
,
sizeof
(
sa
->
sin
));
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
(),
DBG
((
"%p sock %d rc %d errno %d err %d"
,
nc
,
nc
->
sock
,
rc
,
mg_get_errno
(),
nc
->
err
));
nc
->
err
));
}
}
...
@@ -3235,7 +3240,7 @@ static int mg_accept_conn(struct mg_connection *lc) {
...
@@ -3235,7 +3240,7 @@ static int mg_accept_conn(struct mg_connection *lc) {
/* NOTE(lsm): on Windows, sock is always > FD_SETSIZE */
/* NOTE(lsm): on Windows, sock is always > FD_SETSIZE */
sock_t
sock
=
accept
(
lc
->
sock
,
&
sa
.
sa
,
&
sa_len
);
sock_t
sock
=
accept
(
lc
->
sock
,
&
sa
.
sa
,
&
sa_len
);
if
(
sock
==
INVALID_SOCKET
)
{
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
;
return
0
;
}
}
nc
=
mg_if_accept_new_conn
(
lc
);
nc
=
mg_if_accept_new_conn
(
lc
);
...
@@ -3320,10 +3325,7 @@ static void mg_write_to_socket(struct mg_connection *nc) {
...
@@ -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
));
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
(),
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
)));
inet_ntoa
(
nc
->
sa
.
sin
.
sin_addr
),
ntohs
(
nc
->
sa
.
sin
.
sin_port
)));
if
(
n
>
0
)
{
mg_if_sent_cb
(
nc
,
n
);
mbuf_remove
(
io
,
n
);
mg_if_sent_cb
(
nc
,
n
);
}
return
;
return
;
}
}
...
@@ -3350,17 +3352,9 @@ static void mg_write_to_socket(struct mg_connection *nc) {
...
@@ -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
);
n
=
(
int
)
MG_SEND_FUNC
(
nc
->
sock
,
io
->
buf
,
io
->
len
,
0
);
DBG
((
"%p %d bytes -> %d"
,
nc
,
n
,
nc
->
sock
));
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
)
{
mg_if_sent_cb
(
nc
,
n
);
mbuf_remove
(
io
,
n
);
mg_if_sent_cb
(
nc
,
n
);
}
}
}
MG_INTERNAL
size_t
recv_avail_size
(
struct
mg_connection
*
conn
,
size_t
max
)
{
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) {
...
@@ -3415,7 +3409,7 @@ static void mg_handle_tcp_read(struct mg_connection *conn) {
if
(
n
==
0
)
{
if
(
n
==
0
)
{
/* Orderly shutdown of the socket, try flushing output. */
/* Orderly shutdown of the socket, try flushing output. */
conn
->
flags
|=
MG_F_SEND_AND_CLOSE
;
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
;
conn
->
flags
|=
MG_F_CLOSE_IMMEDIATELY
;
}
}
}
}
...
@@ -9549,6 +9543,25 @@ void mg_hexdump_connection(struct mg_connection *nc, const char *path,
...
@@ -9549,6 +9543,25 @@ void mg_hexdump_connection(struct mg_connection *nc, const char *path,
FILE
*
fp
=
NULL
;
FILE
*
fp
=
NULL
;
char
*
hexbuf
,
src
[
60
],
dst
[
60
];
char
*
hexbuf
,
src
[
60
],
dst
[
60
];
int
buf_size
=
num_bytes
*
5
+
100
;
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
)
{
if
(
strcmp
(
path
,
"-"
)
==
0
)
{
fp
=
stdout
;
fp
=
stdout
;
...
@@ -9566,14 +9579,8 @@ void mg_hexdump_connection(struct mg_connection *nc, const char *path,
...
@@ -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_conn_addr_to_str
(
nc
,
dst
,
sizeof
(
dst
),
MG_SOCK_STRINGIFY_IP
|
MG_SOCK_STRINGIFY_PORT
|
MG_SOCK_STRINGIFY_PORT
|
MG_SOCK_STRINGIFY_REMOTE
);
MG_SOCK_STRINGIFY_REMOTE
);
fprintf
(
fprintf
(
fp
,
"%lu %p %s %s %s %d
\n
"
,
(
unsigned
long
)
mg_time
(),
(
void
*
)
nc
,
fp
,
"%lu %p %s %s %s %d
\n
"
,
(
unsigned
long
)
mg_time
(),
(
void
*
)
nc
,
src
,
src
,
tag
,
dst
,
num_bytes
);
ev
==
MG_EV_RECV
?
"<-"
:
ev
==
MG_EV_SEND
?
"->"
:
ev
==
MG_EV_ACCEPT
?
"<A"
:
ev
==
MG_EV_CONNECT
?
"C>"
:
"XX"
,
dst
,
num_bytes
);
if
(
num_bytes
>
0
&&
(
hexbuf
=
(
char
*
)
MG_MALLOC
(
buf_size
))
!=
NULL
)
{
if
(
num_bytes
>
0
&&
(
hexbuf
=
(
char
*
)
MG_MALLOC
(
buf_size
))
!=
NULL
)
{
mg_hexdump
(
buf
,
num_bytes
,
hexbuf
,
buf_size
);
mg_hexdump
(
buf
,
num_bytes
,
hexbuf
,
buf_size
);
fprintf
(
fp
,
"%s"
,
hexbuf
);
fprintf
(
fp
,
"%s"
,
hexbuf
);
...
@@ -11991,7 +11998,7 @@ static void mg_get_ntp_ts(const char *ntp, uint64_t *val) {
...
@@ -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
)
{
void
mg_sntp_send_request
(
struct
mg_connection
*
c
)
{
char
buf
[
48
]
=
{
0
};
uint8_t
buf
[
48
]
=
{
0
};
/*
/*
* header - 8 bit:
* header - 8 bit:
* LI (2 bit) - 3 (not in sync), VN (3 bit) - 4 (version),
* 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) {
...
@@ -13373,7 +13380,6 @@ static void mg_write_to_socket(struct mg_connection *nc) {
}
}
if
(
n
>
0
)
{
if
(
n
>
0
)
{
mbuf_remove
(
io
,
n
);
mg_if_sent_cb
(
nc
,
n
);
mg_if_sent_cb
(
nc
,
n
);
}
else
if
(
n
<
0
&&
mg_is_error
(
n
))
{
}
else
if
(
n
<
0
&&
mg_is_error
(
n
))
{
/* Something went wrong, drop the connection. */
/* Something went wrong, drop the connection. */
...
@@ -14399,8 +14405,6 @@ static void mg_lwip_send_more(struct mg_connection *nc) {
...
@@ -14399,8 +14405,6 @@ static void mg_lwip_send_more(struct mg_connection *nc) {
if
(
num_written
<
0
)
{
if
(
num_written
<
0
)
{
mg_lwip_post_signal
(
MG_SIG_CLOSE_CONN
,
nc
);
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
,
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) {
...
@@ -14639,7 +14643,7 @@ void mg_ev_mgr_lwip_process_signals(struct mg_mgr *mgr) {
break
;
break
;
}
}
case
MG_SIG_SENT_CB
:
{
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
;
cs
->
num_sent
=
0
;
if
(
nc
->
send_mbuf
.
len
==
0
&&
(
nc
->
flags
&
MG_F_SEND_AND_CLOSE
)
&&
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) {
...
@@ -15268,10 +15272,7 @@ static void mg_handle_send(struct mg_connection *nc) {
}
}
}
}
if
(
bytes_written
!=
0
)
{
mg_if_sent_cb
(
nc
,
bytes_written
);
mbuf_remove
(
&
nc
->
send_mbuf
,
bytes_written
);
mg_if_sent_cb
(
nc
,
bytes_written
);
}
}
}
static
void
mg_handle_recv
(
struct
mg_connection
*
nc
)
{
static
void
mg_handle_recv
(
struct
mg_connection
*
nc
)
{
...
...
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