Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
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
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
mongoose
Commits
0fc33708
Commit
0fc33708
authored
Mar 15, 2017
by
Dmitry Frank
Committed by
Cesanta Bot
Mar 15, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
First step towards separate userdata argument
PUBLISHED_FROM=93fe1cc2c5e2513509511a81e5919cbd37056b10
parent
c416012f
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
241 additions
and
158 deletions
+241
-158
mg_connect_ws.md
docs/c-api/http.h/mg_connect_ws.md
+2
-3
mg_connect_ws_opt.md
docs/c-api/http.h/mg_connect_ws_opt.md
+2
-5
mg_connect_http.md
docs/c-api/http_client.h/mg_connect_http.md
+3
-5
mg_connect_http_opt.md
docs/c-api/http_client.h/mg_connect_http_opt.md
+2
-6
mg_file_upload_handler.md
docs/c-api/http_server.h/mg_file_upload_handler.md
+2
-1
mg_add_sock.md
docs/c-api/net.h/mg_add_sock.md
+3
-1
mg_add_sock_opt.md
docs/c-api/net.h/mg_add_sock_opt.md
+3
-3
mg_bind.md
docs/c-api/net.h/mg_bind.md
+3
-2
mg_bind_opt.md
docs/c-api/net.h/mg_bind_opt.md
+2
-2
mg_broadcast.md
docs/c-api/net.h/mg_broadcast.md
+2
-1
mg_connect.md
docs/c-api/net.h/mg_connect.md
+2
-1
mg_connect_opt.md
docs/c-api/net.h/mg_connect_opt.md
+2
-2
mg_event_handler_t.md
docs/c-api/net.h/mg_event_handler_t.md
+1
-1
mg_next.md
docs/c-api/net.h/mg_next.md
+1
-1
mongoose.c
mongoose.c
+161
-93
mongoose.h
mongoose.h
+50
-31
No files found.
docs/c-api/http.h/mg_connect_ws.md
View file @
0fc33708
...
...
@@ -4,9 +4,8 @@ decl_name: "mg_connect_ws"
symbol_kind
:
"
func"
signature
:
|
struct mg_connection *mg_connect_ws(struct mg_mgr *mgr,
mg_event_handler_t event_handler,
const char *url, const char *protocol,
const char *extra_headers);
MG_CB(mg_event_handler_t event_handler,
void *user_data);
---
Helper function that creates an outbound WebSocket connection.
...
...
docs/c-api/http.h/mg_connect_ws_opt.md
View file @
0fc33708
...
...
@@ -3,11 +3,8 @@ title: "mg_connect_ws_opt()"
decl_name
:
"
mg_connect_ws_opt"
symbol_kind
:
"
func"
signature
:
|
struct mg_connection *mg_connect_ws_opt(struct mg_mgr *mgr,
mg_event_handler_t ev_handler,
struct mg_connect_opts opts,
const char *url, const char *protocol,
const char *extra_headers);
struct mg_connection *mg_connect_ws_opt(
struct mg_mgr *mgr, MG_CB(mg_event_handler_t ev_handler, void *user_data);
---
Helper function that creates an outbound WebSocket connection
...
...
docs/c-api/http_client.h/mg_connect_http.md
View file @
0fc33708
...
...
@@ -3,11 +3,9 @@ title: "mg_connect_http()"
decl_name
:
"
mg_connect_http"
symbol_kind
:
"
func"
signature
:
|
struct mg_connection *mg_connect_http(struct mg_mgr *mgr,
mg_event_handler_t event_handler,
const char *url,
const char *extra_headers,
const char *post_data);
struct mg_connection *mg_connect_http(
struct mg_mgr *mgr,
MG_CB(mg_event_handler_t event_handler, void *user_data);
---
Helper function that creates an outbound HTTP connection.
...
...
docs/c-api/http_client.h/mg_connect_http_opt.md
View file @
0fc33708
...
...
@@ -3,12 +3,8 @@ title: "mg_connect_http_opt()"
decl_name
:
"
mg_connect_http_opt"
symbol_kind
:
"
func"
signature
:
|
struct mg_connection *mg_connect_http_opt(struct mg_mgr *mgr,
mg_event_handler_t ev_handler,
struct mg_connect_opts opts,
const char *url,
const char *extra_headers,
const char *post_data);
struct mg_connection *mg_connect_http_opt(
struct mg_mgr *mgr, MG_CB(mg_event_handler_t ev_handler, void *user_data);
---
Helper function that creates an outbound HTTP connection.
...
...
docs/c-api/http_server.h/mg_file_upload_handler.md
View file @
0fc33708
...
...
@@ -4,7 +4,8 @@ decl_name: "mg_file_upload_handler"
symbol_kind
:
"
func"
signature
:
|
void mg_file_upload_handler(struct mg_connection *nc, int ev, void *ev_data,
mg_fu_fname_fn local_name_fn);
mg_fu_fname_fn local_name_fn
MG_UD_ARG(void *user_data);
---
File upload handler.
...
...
docs/c-api/net.h/mg_add_sock.md
View file @
0fc33708
...
...
@@ -3,7 +3,9 @@ title: "mg_add_sock()"
decl_name
:
"
mg_add_sock"
symbol_kind
:
"
func"
signature
:
|
struct mg_connection *mg_add_sock(struct mg_mgr *, sock_t, mg_event_handler_t);
struct mg_connection *mg_add_sock(struct mg_mgr *mgr, sock_t sock,
MG_CB(mg_event_handler_t handler,
void *user_data);
---
Creates a connection, associates it with the given socket and event handler
...
...
docs/c-api/net.h/mg_add_sock_opt.md
View file @
0fc33708
...
...
@@ -3,9 +3,9 @@ title: "mg_add_sock_opt()"
decl_name
:
"
mg_add_sock_opt"
symbol_kind
:
"
func"
signature
:
|
struct mg_connection *mg_add_sock_opt(struct mg_mgr *
, sock_t
,
mg_event_handler_t
,
struct mg_add_sock_opts
);
struct mg_connection *mg_add_sock_opt(struct mg_mgr *
mgr, sock_t sock
,
MG_CB(mg_event_handler_t handler
,
void *user_data
);
---
Creates a connection, associates it with the given socket and event handler
...
...
docs/c-api/net.h/mg_bind.md
View file @
0fc33708
...
...
@@ -3,8 +3,9 @@ title: "mg_bind()"
decl_name
:
"
mg_bind"
symbol_kind
:
"
func"
signature
:
|
struct mg_connection *mg_bind(struct mg_mgr *, const char *,
mg_event_handler_t);
struct mg_connection *mg_bind(struct mg_mgr *mgr, const char *address,
MG_CB(mg_event_handler_t handler,
void *user_data);
---
Creates a listening connection.
...
...
docs/c-api/net.h/mg_bind_opt.md
View file @
0fc33708
...
...
@@ -4,8 +4,8 @@ decl_name: "mg_bind_opt"
symbol_kind
:
"
func"
signature
:
|
struct mg_connection *mg_bind_opt(struct mg_mgr *mgr, const char *address,
mg_event_handler_t handler,
struct mg_bind_opts opts
);
MG_CB(
mg_event_handler_t handler,
void *user_data
);
---
Creates a listening connection.
...
...
docs/c-api/net.h/mg_broadcast.md
View file @
0fc33708
...
...
@@ -3,7 +3,8 @@ title: "mg_broadcast()"
decl_name
:
"
mg_broadcast"
symbol_kind
:
"
func"
signature
:
|
void mg_broadcast(struct mg_mgr *, mg_event_handler_t func, void *, size_t);
void mg_broadcast(struct mg_mgr *mgr, mg_event_handler_t cb, void *data,
size_t len);
---
Passes a message of a given length to all connections.
...
...
docs/c-api/net.h/mg_connect.md
View file @
0fc33708
...
...
@@ -4,7 +4,8 @@ decl_name: "mg_connect"
symbol_kind
:
"
func"
signature
:
|
struct mg_connection *mg_connect(struct mg_mgr *mgr, const char *address,
mg_event_handler_t handler);
MG_CB(mg_event_handler_t handler,
void *user_data);
---
Connects to a remote host.
...
...
docs/c-api/net.h/mg_connect_opt.md
View file @
0fc33708
...
...
@@ -4,8 +4,8 @@ decl_name: "mg_connect_opt"
symbol_kind
:
"
func"
signature
:
|
struct mg_connection *mg_connect_opt(struct mg_mgr *mgr, const char *address,
mg_event_handler_t handler,
struct mg_connect_opts opts
);
MG_CB(
mg_event_handler_t handler,
void *user_data
);
---
Connects to a remote host.
...
...
docs/c-api/net.h/mg_event_handler_t.md
View file @
0fc33708
...
...
@@ -4,7 +4,7 @@ decl_name: "mg_event_handler_t"
symbol_kind
:
"
typedef"
signature
:
|
typedef void (*mg_event_handler_t)(struct mg_connection *nc, int ev,
void *ev_data);
void *ev_data
MG_UD_ARG(void *user_data)
);
---
Callback function (event handler) prototype. Must be defined by the user.
...
...
docs/c-api/net.h/mg_next.md
View file @
0fc33708
...
...
@@ -3,7 +3,7 @@ title: "mg_next()"
decl_name
:
"
mg_next"
symbol_kind
:
"
func"
signature
:
|
struct mg_connection *mg_next(struct mg_mgr *
, struct mg_connection *
);
struct mg_connection *mg_next(struct mg_mgr *
mgr, struct mg_connection *c
);
---
Iterates over all active connections.
...
...
mongoose.c
View file @
0fc33708
...
...
@@ -155,7 +155,8 @@ MG_INTERNAL void mg_handle_put(struct mg_connection *nc, const char *path,
struct
http_message
*
hm
);
#endif
#if MG_ENABLE_HTTP_WEBSOCKET
MG_INTERNAL
void
mg_ws_handler
(
struct
mg_connection
*
nc
,
int
ev
,
void
*
ev_data
);
MG_INTERNAL
void
mg_ws_handler
(
struct
mg_connection
*
nc
,
int
ev
,
void
*
ev_data
MG_UD_ARG
(
void
*
user_data
));
MG_INTERNAL
void
mg_ws_handshake
(
struct
mg_connection
*
nc
,
const
struct
mg_str
*
key
);
#endif
...
...
@@ -1934,7 +1935,8 @@ extern "C" {
struct
mg_connection
*
mg_tun_bind_opt
(
struct
mg_mgr
*
mgr
,
const
char
*
dispatcher
,
mg_event_handler_t
handler
,
MG_CB
(
mg_event_handler_t
handler
,
void
*
user_data
),
struct
mg_bind_opts
opts
);
int
mg_tun_parse_frame
(
void
*
data
,
size_t
len
,
struct
mg_tun_frame
*
frame
);
...
...
@@ -2049,7 +2051,7 @@ MG_INTERNAL void mg_call(struct mg_connection *nc,
if
(
ev_handler
!=
NULL
)
{
unsigned
long
flags_before
=
nc
->
flags
;
size_t
recv_mbuf_before
=
nc
->
recv_mbuf
.
len
,
recved
;
ev_handler
(
nc
,
ev
,
ev_data
);
ev_handler
(
nc
,
ev
,
ev_data
MG_UD_ARG
(
nc
->
user_data
)
);
recved
=
(
recv_mbuf_before
-
nc
->
recv_mbuf
.
len
);
/* Prevent user handler from fiddling with system flags. */
if
(
ev_handler
==
nc
->
handler
&&
nc
->
flags
!=
flags_before
)
{
...
...
@@ -2643,14 +2645,16 @@ static void resolve_cb(struct mg_dns_message *msg, void *data,
#endif
struct
mg_connection
*
mg_connect
(
struct
mg_mgr
*
mgr
,
const
char
*
address
,
mg_event_handler_t
callback
)
{
MG_CB
(
mg_event_handler_t
callback
,
void
*
user_data
))
{
struct
mg_connect_opts
opts
;
memset
(
&
opts
,
0
,
sizeof
(
opts
));
return
mg_connect_opt
(
mgr
,
address
,
callback
,
opts
);
return
mg_connect_opt
(
mgr
,
address
,
MG_CB
(
callback
,
user_data
)
,
opts
);
}
struct
mg_connection
*
mg_connect_opt
(
struct
mg_mgr
*
mgr
,
const
char
*
address
,
mg_event_handler_t
callback
,
MG_CB
(
mg_event_handler_t
callback
,
void
*
user_data
),
struct
mg_connect_opts
opts
)
{
struct
mg_connection
*
nc
=
NULL
;
int
proto
,
rc
;
...
...
@@ -2673,7 +2677,11 @@ struct mg_connection *mg_connect_opt(struct mg_mgr *mgr, const char *address,
nc
->
flags
|=
opts
.
flags
&
_MG_ALLOWED_CONNECT_FLAGS_MASK
;
nc
->
flags
|=
(
proto
==
SOCK_DGRAM
)
?
MG_F_UDP
:
0
;
#if MG_ENABLE_CALLBACK_USERDATA
nc
->
user_data
=
user_data
;
#else
nc
->
user_data
=
opts
.
user_data
;
#endif
#if MG_ENABLE_SSL
DBG
((
"%p %s %s,%s,%s"
,
nc
,
address
,
(
opts
.
ssl_cert
?
opts
.
ssl_cert
:
"-"
),
...
...
@@ -2745,14 +2753,16 @@ struct mg_connection *mg_connect_opt(struct mg_mgr *mgr, const char *address,
}
struct
mg_connection
*
mg_bind
(
struct
mg_mgr
*
srv
,
const
char
*
address
,
mg_event_handler_t
event_handler
)
{
MG_CB
(
mg_event_handler_t
event_handler
,
void
*
user_data
))
{
struct
mg_bind_opts
opts
;
memset
(
&
opts
,
0
,
sizeof
(
opts
));
return
mg_bind_opt
(
srv
,
address
,
event_handler
,
opts
);
return
mg_bind_opt
(
srv
,
address
,
MG_CB
(
event_handler
,
user_data
)
,
opts
);
}
struct
mg_connection
*
mg_bind_opt
(
struct
mg_mgr
*
mgr
,
const
char
*
address
,
mg_event_handler_t
callback
,
MG_CB
(
mg_event_handler_t
callback
,
void
*
user_data
),
struct
mg_bind_opts
opts
)
{
union
socket_address
sa
;
struct
mg_connection
*
nc
=
NULL
;
...
...
@@ -2765,7 +2775,7 @@ struct mg_connection *mg_bind_opt(struct mg_mgr *mgr, const char *address,
#if MG_ENABLE_TUN
if
(
mg_strncmp
(
mg_mk_str
(
address
),
mg_mk_str
(
"ws://"
),
5
)
==
0
||
mg_strncmp
(
mg_mk_str
(
address
),
mg_mk_str
(
"wss://"
),
6
)
==
0
)
{
return
mg_tun_bind_opt
(
mgr
,
address
,
callback
,
opts
);
return
mg_tun_bind_opt
(
mgr
,
address
,
MG_CB
(
callback
,
user_data
)
,
opts
);
}
#endif
...
...
@@ -2823,6 +2833,9 @@ struct mg_connection *mg_bind_opt(struct mg_mgr *mgr, const char *address,
}
mg_add_conn
(
nc
->
mgr
,
nc
);
#if MG_ENABLE_CALLBACK_USERDATA
(
void
)
user_data
;
#endif
return
nc
;
}
...
...
@@ -2934,8 +2947,13 @@ void mg_if_get_conn_addr(struct mg_connection *nc, int remote,
}
struct
mg_connection
*
mg_add_sock_opt
(
struct
mg_mgr
*
s
,
sock_t
sock
,
mg_event_handler_t
callback
,
MG_CB
(
mg_event_handler_t
callback
,
void
*
user_data
),
struct
mg_add_sock_opts
opts
)
{
#if MG_ENABLE_CALLBACK_USERDATA
opts
.
user_data
=
user_data
;
#endif
struct
mg_connection
*
nc
=
mg_create_connection_base
(
s
,
callback
,
opts
);
if
(
nc
!=
NULL
)
{
mg_sock_set
(
nc
,
sock
);
...
...
@@ -2945,10 +2963,11 @@ struct mg_connection *mg_add_sock_opt(struct mg_mgr *s, sock_t sock,
}
struct
mg_connection
*
mg_add_sock
(
struct
mg_mgr
*
s
,
sock_t
sock
,
mg_event_handler_t
callback
)
{
MG_CB
(
mg_event_handler_t
callback
,
void
*
user_data
))
{
struct
mg_add_sock_opts
opts
;
memset
(
&
opts
,
0
,
sizeof
(
opts
));
return
mg_add_sock_opt
(
s
,
sock
,
callback
,
opts
);
return
mg_add_sock_opt
(
s
,
sock
,
MG_CB
(
callback
,
user_data
)
,
opts
);
}
double
mg_time
(
void
)
{
...
...
@@ -3525,7 +3544,8 @@ static void mg_mgr_handle_ctl_sock(struct mg_mgr *mgr) {
if
(
len
>=
(
int
)
sizeof
(
ctl_msg
.
callback
)
&&
ctl_msg
.
callback
!=
NULL
)
{
struct
mg_connection
*
nc
;
for
(
nc
=
mg_next
(
mgr
,
NULL
);
nc
!=
NULL
;
nc
=
mg_next
(
mgr
,
nc
))
{
ctl_msg
.
callback
(
nc
,
MG_EV_POLL
,
ctl_msg
.
message
);
ctl_msg
.
callback
(
nc
,
MG_EV_POLL
,
ctl_msg
.
message
MG_UD_ARG
(
nc
->
user_data
));
}
}
}
...
...
@@ -5046,7 +5066,7 @@ struct mg_http_proto_data {
static
void
mg_http_conn_destructor
(
void
*
proto_data
);
struct
mg_connection
*
mg_connect_http_base
(
struct
mg_mgr
*
mgr
,
mg_event_handler_t
ev_handler
,
struct
mg_mgr
*
mgr
,
MG_CB
(
mg_event_handler_t
ev_handler
,
void
*
user_data
)
,
struct
mg_connect_opts
opts
,
const
char
*
schema
,
const
char
*
schema_ssl
,
const
char
*
url
,
const
char
**
path
,
char
**
user
,
char
**
pass
,
char
**
addr
);
...
...
@@ -5561,18 +5581,22 @@ static void mg_http_multipart_begin(struct mg_connection *nc,
* even bigger (round up to 4k, from 700 bytes of actual size).
*/
#ifdef __xtensa__
static
void
mg_http_handler2
(
struct
mg_connection
*
nc
,
int
ev
,
void
*
ev_data
,
static
void
mg_http_handler2
(
struct
mg_connection
*
nc
,
int
ev
,
void
*
ev_data
MG_UD_ARG
(
void
*
user_data
),
struct
http_message
*
hm
)
__attribute__
((
noinline
));
void
mg_http_handler
(
struct
mg_connection
*
nc
,
int
ev
,
void
*
ev_data
)
{
void
mg_http_handler
(
struct
mg_connection
*
nc
,
int
ev
,
void
*
ev_data
MG_UD_ARG
(
void
*
user_data
))
{
struct
http_message
hm
;
mg_http_handler2
(
nc
,
ev
,
ev_data
,
&
hm
);
mg_http_handler2
(
nc
,
ev
,
ev_data
MG_UD_ARG
(
user_data
)
,
&
hm
);
}
static
void
mg_http_handler2
(
struct
mg_connection
*
nc
,
int
ev
,
void
*
ev_data
,
static
void
mg_http_handler2
(
struct
mg_connection
*
nc
,
int
ev
,
void
*
ev_data
MG_UD_ARG
(
void
*
user_data
),
struct
http_message
*
hm
)
{
#else
/* !__XTENSA__ */
void
mg_http_handler
(
struct
mg_connection
*
nc
,
int
ev
,
void
*
ev_data
)
{
void
mg_http_handler
(
struct
mg_connection
*
nc
,
int
ev
,
void
*
ev_data
MG_UD_ARG
(
void
*
user_data
))
{
struct
http_message
shm
;
struct
http_message
*
hm
=
&
shm
;
#endif
/* __XTENSA__ */
...
...
@@ -5674,7 +5698,7 @@ void mg_http_handler(struct mg_connection *nc, int ev, void *ev_data) {
nc
->
proto_handler
=
mg_ws_handler
;
nc
->
flags
|=
MG_F_IS_WEBSOCKET
;
mg_call
(
nc
,
nc
->
handler
,
MG_EV_WEBSOCKET_HANDSHAKE_DONE
,
NULL
);
mg_ws_handler
(
nc
,
MG_EV_RECV
,
ev_data
);
mg_ws_handler
(
nc
,
MG_EV_RECV
,
ev_data
MG_UD_ARG
(
user_data
)
);
}
else
if
(
nc
->
listener
!=
NULL
&&
(
vec
=
mg_get_http_header
(
hm
,
"Sec-WebSocket-Key"
))
!=
NULL
)
{
mg_event_handler_t
handler
;
...
...
@@ -5701,7 +5725,7 @@ void mg_http_handler(struct mg_connection *nc, int ev, void *ev_data) {
mg_ws_handshake
(
nc
,
vec
);
}
mg_call
(
nc
,
nc
->
handler
,
MG_EV_WEBSOCKET_HANDSHAKE_DONE
,
NULL
);
mg_ws_handler
(
nc
,
MG_EV_RECV
,
ev_data
);
mg_ws_handler
(
nc
,
MG_EV_RECV
,
ev_data
MG_UD_ARG
(
user_data
)
);
}
}
#endif
/* MG_ENABLE_HTTP_WEBSOCKET */
...
...
@@ -6950,7 +6974,7 @@ static int mg_http_send_port_based_redirect(
}
static
void
mg_reverse_proxy_handler
(
struct
mg_connection
*
nc
,
int
ev
,
void
*
ev_data
)
{
void
*
ev_data
MG_UD_ARG
(
void
*
user_data
)
)
{
struct
http_message
*
hm
=
(
struct
http_message
*
)
ev_data
;
struct
mg_http_proto_data
*
pd
=
mg_http_get_proto_data
(
nc
);
...
...
@@ -6976,6 +7000,10 @@ static void mg_reverse_proxy_handler(struct mg_connection *nc, int ev,
pd
->
reverse_proxy_data
.
linked_conn
->
flags
|=
MG_F_SEND_AND_CLOSE
;
break
;
}
#if MG_ENABLE_CALLBACK_USERDATA
(
void
)
user_data
;
#endif
}
void
mg_http_reverse_proxy
(
struct
mg_connection
*
nc
,
...
...
@@ -6994,9 +7022,9 @@ void mg_http_reverse_proxy(struct mg_connection *nc,
mg_asprintf
(
&
purl
,
sizeof
(
burl
),
"%.*s%.*s"
,
(
int
)
upstream
.
len
,
upstream
.
p
,
(
int
)
(
hm
->
uri
.
len
-
mount
.
len
),
hm
->
uri
.
p
+
mount
.
len
);
be
=
mg_connect_http_base
(
nc
->
mgr
,
mg_reverse_proxy_handler
,
opts
,
"http://"
,
"https://"
,
purl
,
&
path
,
NULL
/* user */
,
NULL
/* pass */
,
&
addr
);
be
=
mg_connect_http_base
(
nc
->
mgr
,
MG_CB
(
mg_reverse_proxy_handler
,
NULL
)
,
opts
,
"http://"
,
"https://"
,
purl
,
&
path
,
NULL
/*
user */
,
NULL
/*
pass */
,
&
addr
);
LOG
(
LL_DEBUG
,
(
"Proxying %.*s to %s (rule: %.*s)"
,
(
int
)
hm
->
uri
.
len
,
hm
->
uri
.
p
,
purl
,
(
int
)
mount
.
len
,
mount
.
p
));
...
...
@@ -7474,7 +7502,8 @@ void mg_serve_http(struct mg_connection *nc, struct http_message *hm,
#if MG_ENABLE_HTTP_STREAMING_MULTIPART
void
mg_file_upload_handler
(
struct
mg_connection
*
nc
,
int
ev
,
void
*
ev_data
,
mg_fu_fname_fn
local_name_fn
)
{
mg_fu_fname_fn
local_name_fn
MG_UD_ARG
(
void
*
user_data
))
{
switch
(
ev
)
{
case
MG_EV_HTTP_PART_BEGIN
:
{
struct
mg_http_multipart_part
*
mp
=
...
...
@@ -7586,6 +7615,10 @@ void mg_file_upload_handler(struct mg_connection *nc, int ev, void *ev_data,
break
;
}
}
#if MG_ENABLE_CALLBACK_USERDATA
(
void
)
user_data
;
#endif
}
#endif
/* MG_ENABLE_HTTP_STREAMING_MULTIPART */
...
...
@@ -7674,7 +7707,7 @@ cleanup:
}
struct
mg_connection
*
mg_connect_http_base
(
struct
mg_mgr
*
mgr
,
mg_event_handler_t
ev_handler
,
struct
mg_mgr
*
mgr
,
MG_CB
(
mg_event_handler_t
ev_handler
,
void
*
user_data
)
,
struct
mg_connect_opts
opts
,
const
char
*
schema
,
const
char
*
schema_ssl
,
const
char
*
url
,
const
char
**
path
,
char
**
user
,
char
**
pass
,
char
**
addr
)
{
struct
mg_connection
*
nc
=
NULL
;
...
...
@@ -7707,7 +7740,8 @@ struct mg_connection *mg_connect_http_base(
#endif
}
if
((
nc
=
mg_connect_opt
(
mgr
,
*
addr
,
ev_handler
,
opts
))
!=
NULL
)
{
if
((
nc
=
mg_connect_opt
(
mgr
,
*
addr
,
MG_CB
(
ev_handler
,
user_data
),
opts
))
!=
NULL
)
{
mg_set_protocol_http_websocket
(
nc
);
/* If the port was addred by us, restore the original host. */
if
(
port_i
>=
0
)
(
*
addr
)[
port_i
]
=
'\0'
;
...
...
@@ -7716,18 +7750,16 @@ struct mg_connection *mg_connect_http_base(
return
nc
;
}
struct
mg_connection
*
mg_connect_http_opt
(
struct
mg_mgr
*
mgr
,
mg_event_handler_t
ev_handler
,
struct
mg_connect_opts
opts
,
const
char
*
url
,
const
char
*
extra_headers
,
const
char
*
post_data
)
{
struct
mg_connection
*
mg_connect_http_opt
(
struct
mg_mgr
*
mgr
,
MG_CB
(
mg_event_handler_t
ev_handler
,
void
*
user_data
),
struct
mg_connect_opts
opts
,
const
char
*
url
,
const
char
*
extra_headers
,
const
char
*
post_data
)
{
char
*
user
=
NULL
,
*
pass
=
NULL
,
*
addr
=
NULL
;
const
char
*
path
=
NULL
;
struct
mbuf
auth
;
struct
mg_connection
*
nc
=
mg_connect_http_base
(
mgr
,
ev_handler
,
opts
,
"http://"
,
"https://"
,
url
,
&
path
,
&
user
,
&
pass
,
&
addr
);
mg_connect_http_base
(
mgr
,
MG_CB
(
ev_handler
,
user_data
),
opts
,
"http://"
,
"https://"
,
url
,
&
path
,
&
user
,
&
pass
,
&
addr
);
if
(
nc
==
NULL
)
{
return
NULL
;
...
...
@@ -7754,15 +7786,13 @@ struct mg_connection *mg_connect_http_opt(struct mg_mgr *mgr,
return
nc
;
}
struct
mg_connection
*
mg_connect_http
(
struct
mg_mgr
*
mgr
,
mg_event_handler_t
ev_handler
,
const
char
*
url
,
const
char
*
extra_headers
,
const
char
*
post_data
)
{
struct
mg_connection
*
mg_connect_http
(
struct
mg_mgr
*
mgr
,
MG_CB
(
mg_event_handler_t
ev_handler
,
void
*
user_data
),
const
char
*
url
,
const
char
*
extra_headers
,
const
char
*
post_data
)
{
struct
mg_connect_opts
opts
;
memset
(
&
opts
,
0
,
sizeof
(
opts
));
return
mg_connect_http_opt
(
mgr
,
ev_handler
,
opts
,
url
,
extra_headers
,
post_data
);
return
mg_connect_http_opt
(
mgr
,
MG_CB
(
ev_handler
,
user_data
),
opts
,
url
,
extra_headers
,
post_data
);
}
size_t
mg_parse_multipart
(
const
char
*
buf
,
size_t
buf_len
,
char
*
var_name
,
...
...
@@ -8196,8 +8226,11 @@ static void mg_prepare_cgi_environment(struct mg_connection *nc,
}
static
void
mg_cgi_ev_handler
(
struct
mg_connection
*
cgi_nc
,
int
ev
,
void
*
ev_data
)
{
struct
mg_connection
*
nc
=
(
struct
mg_connection
*
)
cgi_nc
->
user_data
;
void
*
ev_data
MG_UD_ARG
(
void
*
user_data
))
{
#if !MG_ENABLE_CALLBACK_USERDATA
void
*
user_data
=
cgi_nc
->
user_data
;
#endif
struct
mg_connection
*
nc
=
(
struct
mg_connection
*
)
user_data
;
(
void
)
ev_data
;
if
(
nc
==
NULL
)
{
...
...
@@ -8289,10 +8322,12 @@ MG_INTERNAL void mg_handle_cgi(struct mg_connection *nc, const char *prog,
fds
[
1
])
!=
0
)
{
size_t
n
=
nc
->
recv_mbuf
.
len
-
(
hm
->
message
.
len
-
hm
->
body
.
len
);
struct
mg_connection
*
cgi_nc
=
mg_add_sock
(
nc
->
mgr
,
fds
[
0
],
mg_cgi_ev_handler
);
mg_add_sock
(
nc
->
mgr
,
fds
[
0
],
mg_cgi_ev_handler
MG_UD_ARG
(
nc
)
);
struct
mg_http_proto_data
*
cgi_pd
=
mg_http_get_proto_data
(
nc
);
cgi_pd
->
cgi
.
cgi_nc
=
cgi_nc
;
#if !MG_ENABLE_CALLBACK_USERDATA
cgi_pd
->
cgi
.
cgi_nc
->
user_data
=
nc
;
#endif
nc
->
flags
|=
MG_F_USER_1
;
/* Push POST data to the CGI */
if
(
n
>
0
&&
n
<
nc
->
recv_mbuf
.
len
)
{
...
...
@@ -9035,7 +9070,7 @@ void mg_printf_websocket_frame(struct mg_connection *nc, int op,
}
MG_INTERNAL
void
mg_ws_handler
(
struct
mg_connection
*
nc
,
int
ev
,
void
*
ev_data
)
{
void
*
ev_data
MG_UD_ARG
(
void
*
user_data
)
)
{
mg_call
(
nc
,
nc
->
handler
,
ev
,
ev_data
);
switch
(
ev
)
{
...
...
@@ -9056,6 +9091,9 @@ MG_INTERNAL void mg_ws_handler(struct mg_connection *nc, int ev,
default:
break
;
}
#if MG_ENABLE_CALLBACK_USERDATA
(
void
)
user_data
;
#endif
}
#ifndef MG_EXT_SHA1
...
...
@@ -9154,16 +9192,15 @@ void mg_send_websocket_handshake(struct mg_connection *nc, const char *path,
extra_headers
);
}
struct
mg_connection
*
mg_connect_ws_opt
(
struct
mg_mgr
*
mgr
,
mg_event_handler_t
ev_handler
,
struct
mg_connect_opts
opts
,
const
char
*
url
,
const
char
*
protocol
,
const
char
*
extra_headers
)
{
struct
mg_connection
*
mg_connect_ws_opt
(
struct
mg_mgr
*
mgr
,
MG_CB
(
mg_event_handler_t
ev_handler
,
void
*
user_data
),
struct
mg_connect_opts
opts
,
const
char
*
url
,
const
char
*
protocol
,
const
char
*
extra_headers
)
{
char
*
user
=
NULL
,
*
pass
=
NULL
,
*
addr
=
NULL
;
const
char
*
path
=
NULL
;
struct
mg_connection
*
nc
=
mg_connect_http_base
(
mgr
,
ev_handler
,
opts
,
"ws://"
,
"wss://"
,
url
,
&
path
,
&
user
,
&
pass
,
&
addr
);
mg_connect_http_base
(
mgr
,
MG_CB
(
ev_handler
,
user_data
),
opts
,
"ws://"
,
"wss://"
,
url
,
&
path
,
&
user
,
&
pass
,
&
addr
);
if
(
nc
!=
NULL
)
{
mg_send_websocket_handshake3
(
nc
,
path
,
addr
,
protocol
,
extra_headers
,
user
,
...
...
@@ -9176,13 +9213,13 @@ struct mg_connection *mg_connect_ws_opt(struct mg_mgr *mgr,
return
nc
;
}
struct
mg_connection
*
mg_connect_ws
(
struct
mg_mgr
*
mgr
,
mg_event_handler_t
ev_handler
,
const
char
*
url
,
const
char
*
protocol
,
const
char
*
extra_headers
)
{
struct
mg_connection
*
mg_connect_ws
(
struct
mg_mgr
*
mgr
,
MG_CB
(
mg_event_handler_t
ev_handler
,
void
*
user_data
),
const
char
*
url
,
const
char
*
protocol
,
const
char
*
extra_headers
)
{
struct
mg_connect_opts
opts
;
memset
(
&
opts
,
0
,
sizeof
(
opts
));
return
mg_connect_ws_opt
(
mgr
,
ev_handler
,
opts
,
url
,
protocol
,
extra_headers
);
return
mg_connect_ws_opt
(
mgr
,
MG_CB
(
ev_handler
,
user_data
),
opts
,
url
,
protocol
,
extra_headers
);
}
#endif
/* MG_ENABLE_HTTP && MG_ENABLE_HTTP_WEBSOCKET */
#ifdef MG_MODULE_LINES
...
...
@@ -9694,19 +9731,20 @@ MG_INTERNAL int parse_mqtt(struct mbuf *io, struct mg_mqtt_message *mm) {
return
end
-
io
->
buf
;
}
static
void
mqtt_handler
(
struct
mg_connection
*
nc
,
int
ev
,
void
*
ev_data
)
{
static
void
mqtt_handler
(
struct
mg_connection
*
nc
,
int
ev
,
void
*
ev_data
MG_UD_ARG
(
void
*
user_data
))
{
int
len
;
struct
mbuf
*
io
=
&
nc
->
recv_mbuf
;
struct
mg_mqtt_message
mm
;
memset
(
&
mm
,
0
,
sizeof
(
mm
));
nc
->
handler
(
nc
,
ev
,
ev_data
);
nc
->
handler
(
nc
,
ev
,
ev_data
MG_UD_ARG
(
user_data
)
);
switch
(
ev
)
{
case
MG_EV_RECV
:
len
=
parse_mqtt
(
io
,
&
mm
);
if
(
len
==
-
1
)
break
;
/* not fully buffered */
nc
->
handler
(
nc
,
MG_MQTT_EVENT_BASE
+
mm
.
cmd
,
&
mm
);
nc
->
handler
(
nc
,
MG_MQTT_EVENT_BASE
+
mm
.
cmd
,
&
mm
MG_UD_ARG
(
user_data
)
);
mbuf_remove
(
io
,
len
);
break
;
}
...
...
@@ -10479,12 +10517,13 @@ size_t mg_dns_uncompress_name(struct mg_dns_message *msg, struct mg_str *name,
return
dst
-
old_dst
;
}
static
void
dns_handler
(
struct
mg_connection
*
nc
,
int
ev
,
void
*
ev_data
)
{
static
void
dns_handler
(
struct
mg_connection
*
nc
,
int
ev
,
void
*
ev_data
MG_UD_ARG
(
void
*
user_data
))
{
struct
mbuf
*
io
=
&
nc
->
recv_mbuf
;
struct
mg_dns_message
msg
;
/* Pass low-level events to the user handler */
nc
->
handler
(
nc
,
ev
,
ev_data
);
nc
->
handler
(
nc
,
ev
,
ev_data
MG_UD_ARG
(
user_data
)
);
switch
(
ev
)
{
case
MG_EV_RECV
:
...
...
@@ -10503,7 +10542,7 @@ static void dns_handler(struct mg_connection *nc, int ev, void *ev_data) {
mg_send
(
nc
,
io
->
buf
,
io
->
len
);
}
else
{
/* Call user handler with parsed message */
nc
->
handler
(
nc
,
MG_DNS_MESSAGE
,
&
msg
);
nc
->
handler
(
nc
,
MG_DNS_MESSAGE
,
&
msg
MG_UD_ARG
(
user_data
)
);
}
mbuf_remove
(
io
,
io
->
len
);
break
;
...
...
@@ -10741,15 +10780,19 @@ int mg_resolve_from_hosts_file(const char *name, union socket_address *usa) {
return
-
1
;
}
static
void
mg_resolve_async_eh
(
struct
mg_connection
*
nc
,
int
ev
,
void
*
data
)
{
static
void
mg_resolve_async_eh
(
struct
mg_connection
*
nc
,
int
ev
,
void
*
data
MG_UD_ARG
(
void
*
user_data
))
{
time_t
now
=
(
time_t
)
mg_time
();
struct
mg_resolve_async_request
*
req
;
struct
mg_dns_message
*
msg
;
int
first
=
0
;
#if !MG_ENABLE_CALLBACK_USERDATA
void
*
user_data
=
nc
->
user_data
;
#endif
if
(
ev
!=
MG_EV_POLL
)
DBG
((
"ev=%d user_data=%p"
,
ev
,
nc
->
user_data
));
if
(
ev
!=
MG_EV_POLL
)
DBG
((
"ev=%d user_data=%p"
,
ev
,
user_data
));
req
=
(
struct
mg_resolve_async_request
*
)
nc
->
user_data
;
req
=
(
struct
mg_resolve_async_request
*
)
user_data
;
if
(
req
==
NULL
)
{
return
;
...
...
@@ -10849,7 +10892,7 @@ int mg_resolve_async_opt(struct mg_mgr *mgr, const char *name, int query,
nameserver
=
mg_dns_server
;
}
dns_nc
=
mg_connect
(
mgr
,
nameserver
,
mg_resolve_async_eh
);
dns_nc
=
mg_connect
(
mgr
,
nameserver
,
MG_CB
(
mg_resolve_async_eh
,
NULL
)
);
if
(
dns_nc
==
NULL
)
{
free
(
req
);
return
-
1
;
...
...
@@ -11523,8 +11566,13 @@ static void mg_tun_close_all(struct mg_tun_client *client) {
}
static
void
mg_tun_client_handler
(
struct
mg_connection
*
nc
,
int
ev
,
void
*
ev_data
)
{
struct
mg_tun_client
*
client
=
(
struct
mg_tun_client
*
)
nc
->
user_data
;
void
*
ev_data
MG_UD_ARG
(
void
*
user_data
))
{
#if !MG_ENABLE_CALLBACK_USERDATA
void
*
user_data
=
nc
->
user_data
;
#else
(
void
)
nc
;
#endif
struct
mg_tun_client
*
client
=
(
struct
mg_tun_client
*
)
user_data
;
switch
(
ev
)
{
case
MG_EV_CONNECT
:
{
...
...
@@ -11611,21 +11659,28 @@ static void mg_tun_do_reconnect(struct mg_tun_client *client) {
opts
.
ssl_ca_cert
=
client
->
ssl
.
ssl_ca_cert
;
#endif
/* HTTP/Websocket listener */
if
((
dc
=
mg_connect_ws_opt
(
client
->
mgr
,
mg_tun_client_handler
,
opts
,
client
->
disp_url
,
MG_TUN_PROTO_NAME
,
NULL
))
==
NULL
)
{
if
((
dc
=
mg_connect_ws_opt
(
client
->
mgr
,
MG_CB
(
mg_tun_client_handler
,
client
)
,
opts
,
client
->
disp_url
,
MG_TUN_PROTO_NAME
,
NULL
))
==
NULL
)
{
LOG
(
LL_ERROR
,
(
"Cannot connect to WS server on addr [%s]
\n
"
,
client
->
disp_url
));
return
;
}
client
->
disp
=
dc
;
#if !MG_ENABLE_CALLBACK_USERDATA
dc
->
user_data
=
client
;
#endif
}
void
mg_tun_reconnect_ev_handler
(
struct
mg_connection
*
nc
,
int
ev
,
void
*
ev_data
)
{
struct
mg_tun_client
*
client
=
(
struct
mg_tun_client
*
)
nc
->
user_data
;
void
*
ev_data
MG_UD_ARG
(
void
*
user_data
))
{
#if !MG_ENABLE_CALLBACK_USERDATA
void
*
user_data
=
nc
->
user_data
;
#else
(
void
)
nc
;
#endif
struct
mg_tun_client
*
client
=
(
struct
mg_tun_client
*
)
user_data
;
(
void
)
ev_data
;
switch
(
ev
)
{
...
...
@@ -11642,9 +11697,11 @@ void mg_tun_reconnect_ev_handler(struct mg_connection *nc, int ev,
static
void
mg_tun_reconnect
(
struct
mg_tun_client
*
client
,
int
timeout
)
{
if
(
client
->
reconnect
==
NULL
)
{
client
->
reconnect
=
mg_add_sock
(
client
->
mgr
,
INVALID_SOCKET
,
mg_tun_reconnect_ev_handler
);
client
->
reconnect
=
mg_add_sock
(
client
->
mgr
,
INVALID_SOCKET
,
MG_CB
(
mg_tun_reconnect_ev_handler
,
client
));
#if !MG_ENABLE_CALLBACK_USERDATA
client
->
reconnect
->
user_data
=
client
;
#endif
}
client
->
reconnect
->
ev_timer_time
=
mg_time
()
+
timeout
;
}
...
...
@@ -11700,18 +11757,21 @@ void mg_tun_destroy_client(struct mg_tun_client *client) {
}
static
struct
mg_connection
*
mg_tun_do_bind
(
struct
mg_tun_client
*
client
,
mg_event_handler_t
handler
,
MG_CB
(
mg_event_handler_t
handler
,
void
*
user_data
),
struct
mg_bind_opts
opts
)
{
struct
mg_connection
*
lc
;
opts
.
iface
=
client
->
iface
;
lc
=
mg_bind_opt
(
client
->
mgr
,
":1234"
/* dummy port */
,
handler
,
opts
);
lc
=
mg_bind_opt
(
client
->
mgr
,
":1234"
/* dummy port */
,
MG_CB
(
handler
,
user_data
),
opts
);
client
->
listener
=
lc
;
return
lc
;
}
struct
mg_connection
*
mg_tun_bind_opt
(
struct
mg_mgr
*
mgr
,
const
char
*
dispatcher
,
mg_event_handler_t
handler
,
MG_CB
(
mg_event_handler_t
handler
,
void
*
user_data
),
struct
mg_bind_opts
opts
)
{
#if MG_ENABLE_SSL
struct
mg_tun_ssl_opts
ssl
=
{
opts
.
ssl_cert
,
opts
.
ssl_key
,
opts
.
ssl_ca_cert
};
...
...
@@ -11728,7 +11788,7 @@ struct mg_connection *mg_tun_bind_opt(struct mg_mgr *mgr,
opts
.
ssl_key
=
NULL
;
opts
.
ssl_ca_cert
=
NULL
;
#endif
return
mg_tun_do_bind
(
client
,
handler
,
opts
);
return
mg_tun_do_bind
(
client
,
MG_CB
(
handler
,
user_data
)
,
opts
);
}
int
mg_tun_parse_frame
(
void
*
data
,
size_t
len
,
struct
mg_tun_frame
*
frame
)
{
...
...
@@ -11909,19 +11969,20 @@ MG_INTERNAL int mg_sntp_parse_reply(const char *buf, int len,
return
0
;
}
static
void
mg_sntp_handler
(
struct
mg_connection
*
c
,
int
ev
,
void
*
ev_data
)
{
static
void
mg_sntp_handler
(
struct
mg_connection
*
c
,
int
ev
,
void
*
ev_data
MG_UD_ARG
(
void
*
user_data
))
{
struct
mbuf
*
io
=
&
c
->
recv_mbuf
;
struct
mg_sntp_message
msg
;
c
->
handler
(
c
,
ev
,
ev_data
);
c
->
handler
(
c
,
ev
,
ev_data
MG_UD_ARG
(
user_data
)
);
switch
(
ev
)
{
case
MG_EV_RECV
:
{
if
(
mg_sntp_parse_reply
(
io
->
buf
,
io
->
len
,
&
msg
)
<
0
)
{
DBG
((
"Invalid SNTP packet received (%d)"
,
(
int
)
io
->
len
));
c
->
handler
(
c
,
MG_SNTP_MALFORMED_REPLY
,
NULL
);
c
->
handler
(
c
,
MG_SNTP_MALFORMED_REPLY
,
NULL
MG_UD_ARG
(
user_data
)
);
}
else
{
c
->
handler
(
c
,
MG_SNTP_REPLY
,
(
void
*
)
&
msg
);
c
->
handler
(
c
,
MG_SNTP_REPLY
,
(
void
*
)
&
msg
MG_UD_ARG
(
user_data
)
);
}
mbuf_remove
(
io
,
io
->
len
);
...
...
@@ -11941,7 +12002,8 @@ int mg_set_protocol_sntp(struct mg_connection *c) {
}
struct
mg_connection
*
mg_sntp_connect
(
struct
mg_mgr
*
mgr
,
mg_event_handler_t
event_handler
,
MG_CB
(
mg_event_handler_t
event_handler
,
void
*
user_data
),
const
char
*
sntp_server_name
)
{
struct
mg_connection
*
c
=
NULL
;
char
url
[
100
],
*
p_url
=
url
;
...
...
@@ -11964,7 +12026,7 @@ struct mg_connection *mg_sntp_connect(struct mg_mgr *mgr,
mg_asprintf
(
&
p_url
,
sizeof
(
url
),
"%s%s%s"
,
proto
,
sntp_server_name
,
port
);
c
=
mg_connect
(
mgr
,
p_url
,
event_handler
);
c
=
mg_connect
(
mgr
,
p_url
,
event_handler
MG_UD_ARG
(
user_data
)
);
if
(
c
==
NULL
)
{
goto
cleanup
;
...
...
@@ -11986,8 +12048,11 @@ struct sntp_data {
};
static
void
mg_sntp_util_ev_handler
(
struct
mg_connection
*
c
,
int
ev
,
void
*
ev_data
)
{
struct
sntp_data
*
sd
=
(
struct
sntp_data
*
)
c
->
user_data
;
void
*
ev_data
MG_UD_ARG
(
void
*
user_data
))
{
#if !MG_ENABLE_CALLBACK_USERDATA
void
*
user_data
=
c
->
user_data
;
#endif
struct
sntp_data
*
sd
=
(
struct
sntp_data
*
)
user_data
;
switch
(
ev
)
{
case
MG_EV_CONNECT
:
...
...
@@ -12015,7 +12080,7 @@ static void mg_sntp_util_ev_handler(struct mg_connection *c, int ev,
c
->
flags
|=
MG_F_CLOSE_IMMEDIATELY
;
break
;
case
MG_EV_CLOSE
:
MG_FREE
(
c
->
user_data
);
MG_FREE
(
user_data
);
c
->
user_data
=
NULL
;
break
;
}
...
...
@@ -12030,14 +12095,17 @@ struct mg_connection *mg_sntp_get_time(struct mg_mgr *mgr,
return
NULL
;
}
c
=
mg_sntp_connect
(
mgr
,
mg_sntp_util_ev_handler
,
sntp_server_name
);
c
=
mg_sntp_connect
(
mgr
,
MG_CB
(
mg_sntp_util_ev_handler
,
sd
),
sntp_server_name
);
if
(
c
==
NULL
)
{
MG_FREE
(
sd
);
return
NULL
;
}
sd
->
hander
=
event_handler
;
#if !MG_ENABLE_CALLBACK_USERDATA
c
->
user_data
=
sd
;
#endif
return
c
;
}
...
...
mongoose.h
View file @
0fc33708
...
...
@@ -2963,6 +2963,18 @@ struct { \
#define MG_ENABLE_EXTRA_ERRORS_DESC 0
#endif
#ifndef MG_ENABLE_CALLBACK_USERDATA
#define MG_ENABLE_CALLBACK_USERDATA 0
#endif
#if MG_ENABLE_CALLBACK_USERDATA
#define MG_UD_ARG(ud) , ud
#define MG_CB(cb, ud) cb, ud
#else
#define MG_UD_ARG(ud)
#define MG_CB(cb, ud) cb
#endif
#endif
/* CS_MONGOOSE_SRC_FEATURES_H_ */
#ifdef MG_MODULE_LINES
#line 1 "mongoose/src/net_if.h"
...
...
@@ -3229,7 +3241,7 @@ struct mg_connection;
* Mongoose calls the event handler, passing the events defined below.
*/
typedef
void
(
*
mg_event_handler_t
)(
struct
mg_connection
*
nc
,
int
ev
,
void
*
ev_data
);
void
*
ev_data
MG_UD_ARG
(
void
*
user_data
)
);
/* Events. Meaning of event parameter (evp) is given in the comment. */
#define MG_EV_POLL 0
/* Sent to each connection on each mg_mgr_poll() call */
...
...
@@ -3392,7 +3404,8 @@ time_t mg_mgr_poll(struct mg_mgr *, int milli);
* be passed as the `ev_data` pointer. Maximum message size is capped
* 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
*
mgr
,
mg_event_handler_t
cb
,
void
*
data
,
size_t
len
);
#endif
/*
...
...
@@ -3408,7 +3421,7 @@ void mg_broadcast(struct mg_mgr *, mg_event_handler_t func, void *, size_t);
* }
* ```
*/
struct
mg_connection
*
mg_next
(
struct
mg_mgr
*
,
struct
mg_connection
*
);
struct
mg_connection
*
mg_next
(
struct
mg_mgr
*
mgr
,
struct
mg_connection
*
c
);
/*
* Optional parameters to `mg_add_sock_opt()`.
...
...
@@ -3429,7 +3442,9 @@ struct mg_add_sock_opts {
*
* For more options see the `mg_add_sock_opt` variant.
*/
struct
mg_connection
*
mg_add_sock
(
struct
mg_mgr
*
,
sock_t
,
mg_event_handler_t
);
struct
mg_connection
*
mg_add_sock
(
struct
mg_mgr
*
mgr
,
sock_t
sock
,
MG_CB
(
mg_event_handler_t
handler
,
void
*
user_data
));
/*
* Creates a connection, associates it with the given socket and event handler
...
...
@@ -3437,9 +3452,10 @@ struct mg_connection *mg_add_sock(struct mg_mgr *, sock_t, mg_event_handler_t);
*
* See the `mg_add_sock_opts` structure for a description of the options.
*/
struct
mg_connection
*
mg_add_sock_opt
(
struct
mg_mgr
*
,
sock_t
,
mg_event_handler_t
,
struct
mg_add_sock_opts
);
struct
mg_connection
*
mg_add_sock_opt
(
struct
mg_mgr
*
mgr
,
sock_t
sock
,
MG_CB
(
mg_event_handler_t
handler
,
void
*
user_data
),
struct
mg_add_sock_opts
opts
);
/*
* Optional parameters to `mg_bind_opt()`.
...
...
@@ -3485,8 +3501,9 @@ struct mg_bind_opts {
*
* See `mg_bind_opt` for full documentation.
*/
struct
mg_connection
*
mg_bind
(
struct
mg_mgr
*
,
const
char
*
,
mg_event_handler_t
);
struct
mg_connection
*
mg_bind
(
struct
mg_mgr
*
mgr
,
const
char
*
address
,
MG_CB
(
mg_event_handler_t
handler
,
void
*
user_data
));
/*
* Creates a listening connection.
*
...
...
@@ -3506,7 +3523,8 @@ struct mg_connection *mg_bind(struct mg_mgr *, const char *,
* NOTE: The connection remains owned by the manager, do not free().
*/
struct
mg_connection
*
mg_bind_opt
(
struct
mg_mgr
*
mgr
,
const
char
*
address
,
mg_event_handler_t
handler
,
MG_CB
(
mg_event_handler_t
handler
,
void
*
user_data
),
struct
mg_bind_opts
opts
);
/* Optional parameters to `mg_connect_opt()` */
...
...
@@ -3569,7 +3587,8 @@ struct mg_connect_opts {
* See `mg_connect_opt()` for full documentation.
*/
struct
mg_connection
*
mg_connect
(
struct
mg_mgr
*
mgr
,
const
char
*
address
,
mg_event_handler_t
handler
);
MG_CB
(
mg_event_handler_t
handler
,
void
*
user_data
));
/*
* Connects to a remote host.
...
...
@@ -3620,7 +3639,8 @@ struct mg_connection *mg_connect(struct mg_mgr *mgr, const char *address,
* ```
*/
struct
mg_connection
*
mg_connect_opt
(
struct
mg_mgr
*
mgr
,
const
char
*
address
,
mg_event_handler_t
handler
,
MG_CB
(
mg_event_handler_t
handler
,
void
*
user_data
),
struct
mg_connect_opts
opts
);
#if MG_ENABLE_SSL && MG_NET_IF != MG_NET_IF_SIMPLELINK
...
...
@@ -4274,7 +4294,8 @@ void mg_send_websocket_handshake3(struct mg_connection *nc, const char *path,
* ```
*/
struct
mg_connection
*
mg_connect_ws
(
struct
mg_mgr
*
mgr
,
mg_event_handler_t
event_handler
,
MG_CB
(
mg_event_handler_t
event_handler
,
void
*
user_data
),
const
char
*
url
,
const
char
*
protocol
,
const
char
*
extra_headers
);
...
...
@@ -4284,11 +4305,10 @@ struct mg_connection *mg_connect_ws(struct mg_mgr *mgr,
* Mostly identical to `mg_connect_ws`, but allows to provide extra parameters
* (for example, SSL parameters)
*/
struct
mg_connection
*
mg_connect_ws_opt
(
struct
mg_mgr
*
mgr
,
mg_event_handler_t
ev_handler
,
struct
mg_connect_opts
opts
,
const
char
*
url
,
const
char
*
protocol
,
const
char
*
extra_headers
);
struct
mg_connection
*
mg_connect_ws_opt
(
struct
mg_mgr
*
mgr
,
MG_CB
(
mg_event_handler_t
ev_handler
,
void
*
user_data
),
struct
mg_connect_opts
opts
,
const
char
*
url
,
const
char
*
protocol
,
const
char
*
extra_headers
);
/*
* Send WebSocket frame to the remote end.
...
...
@@ -4739,7 +4759,8 @@ typedef struct mg_str (*mg_fu_fname_fn)(struct mg_connection *nc,
* ```
*/
void
mg_file_upload_handler
(
struct
mg_connection
*
nc
,
int
ev
,
void
*
ev_data
,
mg_fu_fname_fn
local_name_fn
);
mg_fu_fname_fn
local_name_fn
MG_UD_ARG
(
void
*
user_data
));
#endif
/* MG_ENABLE_HTTP_STREAMING_MULTIPART */
#endif
/* MG_ENABLE_FILESYSTEM */
...
...
@@ -4926,11 +4947,10 @@ extern "C" {
* "var_1=value_1&var_2=value_2");
* ```
*/
struct
mg_connection
*
mg_connect_http
(
struct
mg_mgr
*
mgr
,
mg_event_handler_t
event_handler
,
const
char
*
url
,
const
char
*
extra_headers
,
const
char
*
post_data
);
struct
mg_connection
*
mg_connect_http
(
struct
mg_mgr
*
mgr
,
MG_CB
(
mg_event_handler_t
event_handler
,
void
*
user_data
),
const
char
*
url
,
const
char
*
extra_headers
,
const
char
*
post_data
);
/*
* Helper function that creates an outbound HTTP connection.
...
...
@@ -4939,12 +4959,10 @@ struct mg_connection *mg_connect_http(struct mg_mgr *mgr,
*parameters
* (for example, SSL parameters)
*/
struct
mg_connection
*
mg_connect_http_opt
(
struct
mg_mgr
*
mgr
,
mg_event_handler_t
ev_handler
,
struct
mg_connect_opts
opts
,
const
char
*
url
,
const
char
*
extra_headers
,
const
char
*
post_data
);
struct
mg_connection
*
mg_connect_http_opt
(
struct
mg_mgr
*
mgr
,
MG_CB
(
mg_event_handler_t
ev_handler
,
void
*
user_data
),
struct
mg_connect_opts
opts
,
const
char
*
url
,
const
char
*
extra_headers
,
const
char
*
post_data
);
/* Creates digest authentication header for a client request. */
int
mg_http_create_digest_auth_header
(
char
*
buf
,
size_t
buf_len
,
...
...
@@ -5837,7 +5855,8 @@ struct mg_sntp_message {
/* Establishes connection to given sntp server */
struct
mg_connection
*
mg_sntp_connect
(
struct
mg_mgr
*
mgr
,
mg_event_handler_t
event_handler
,
MG_CB
(
mg_event_handler_t
event_handler
,
void
*
user_data
),
const
char
*
sntp_server_name
);
/* Sends time request to given connection */
...
...
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