mirror of
https://github.com/cesanta/mongoose.git
synced 2026-10-23 11:44:53 +00:00
Fix SEGFAULT in MQTT server
PUBLISHED_FROM=6455082726781aab819a7f8645e81adaa7fc7669
This commit is contained in:
1 parent
c04e3f80b9
commit
f1b4f0c463
9 files changed
+789
-90
No files matched your search
@@ -0,0 +1,10 @@
|
||||
---
|
||||
title: "LIST_ENTRY()"
|
||||
decl_name: "LIST_ENTRY"
|
||||
symbol_kind: "func"
|
||||
signature: |
|
||||
LIST_ENTRY(mg_mqtt_session);
|
||||
---
|
||||
|
||||
Broker
|
||||
|
||||
@@ -3,9 +3,7 @@ title: "MQTT Server API reference"
|
||||
symbol_kind: "intro"
|
||||
decl_name: "mqtt_server.h"
|
||||
items:
|
||||
- { name: mg_mqtt_broker.md }
|
||||
- { name: mg_mqtt_broker_init.md }
|
||||
- { name: mg_mqtt_next.md }
|
||||
- { name: LIST_ENTRY.md }
|
||||
- { name: struct_mg_mqtt_broker.md }
|
||||
- { name: struct_mg_mqtt_session.md }
|
||||
---
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
---
|
||||
title: "mg_mqtt_broker()"
|
||||
decl_name: "mg_mqtt_broker"
|
||||
symbol_kind: "func"
|
||||
signature: |
|
||||
void mg_mqtt_broker(struct mg_connection *brk, int ev, void *data);
|
||||
---
|
||||
|
||||
Processes a MQTT broker message.
|
||||
|
||||
The listening connection expects a pointer to an initialised
|
||||
`mg_mqtt_broker` structure in the `user_data` field.
|
||||
|
||||
Basic usage:
|
||||
|
||||
```c
|
||||
mg_mqtt_broker_init(&brk, NULL);
|
||||
|
||||
if ((nc = mg_bind(&mgr, address, mg_mqtt_broker)) == NULL) {
|
||||
// fail;
|
||||
}
|
||||
nc->user_data = &brk;
|
||||
```
|
||||
|
||||
New incoming connections will receive a `mg_mqtt_session` structure
|
||||
in the connection `user_data`. The original `user_data` will be stored
|
||||
in the `user_data` field of the session structure. This allows the user
|
||||
handler to store user data before `mg_mqtt_broker` creates the session.
|
||||
|
||||
Since only the MG_EV_ACCEPT message is processed by the listening socket,
|
||||
for most events the `user_data` will thus point to a `mg_mqtt_session`.
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
---
|
||||
title: "mg_mqtt_broker_init()"
|
||||
decl_name: "mg_mqtt_broker_init"
|
||||
symbol_kind: "func"
|
||||
signature: |
|
||||
void mg_mqtt_broker_init(struct mg_mqtt_broker *brk, void *user_data);
|
||||
---
|
||||
|
||||
Initialises a MQTT broker.
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
---
|
||||
title: "mg_mqtt_next()"
|
||||
decl_name: "mg_mqtt_next"
|
||||
symbol_kind: "func"
|
||||
signature: |
|
||||
struct mg_mqtt_session *mg_mqtt_next(struct mg_mqtt_broker *brk,
|
||||
struct mg_mqtt_session *s);
|
||||
---
|
||||
|
||||
Iterates over all MQTT session connections. Example:
|
||||
|
||||
```c
|
||||
struct mg_mqtt_session *s;
|
||||
for (s = mg_mqtt_next(brk, NULL); s != NULL; s = mg_mqtt_next(brk, s)) {
|
||||
// Do something
|
||||
}
|
||||
```
|
||||
|
||||
@@ -4,8 +4,8 @@ decl_name: "struct mg_mqtt_broker"
|
||||
symbol_kind: "struct"
|
||||
signature: |
|
||||
struct mg_mqtt_broker {
|
||||
struct mg_mqtt_session *sessions; /* Session list */
|
||||
void *user_data; /* User data */
|
||||
LIST_HEAD(, mg_mqtt_session) sessions; /* Session list */
|
||||
void *user_data; /* User data */
|
||||
};
|
||||
---
|
||||
|
||||
|
||||
@@ -4,12 +4,12 @@ decl_name: "struct mg_mqtt_session"
|
||||
symbol_kind: "struct"
|
||||
signature: |
|
||||
struct mg_mqtt_session {
|
||||
struct mg_mqtt_broker *brk; /* Broker */
|
||||
struct mg_mqtt_session *next, *prev; /* mg_mqtt_broker::sessions linkage */
|
||||
struct mg_connection *nc; /* Connection with the client */
|
||||
size_t num_subscriptions; /* Size of `subscriptions` array */
|
||||
struct mg_mqtt_broker *brk; /* Broker */
|
||||
LIST_ENTRY(mg_mqtt_session) link; /* mg_mqtt_broker::sessions linkage */
|
||||
struct mg_connection *nc; /* Connection with the client */
|
||||
size_t num_subscriptions; /* Size of `subscriptions` array */
|
||||
void *user_data; /* User data */
|
||||
struct mg_mqtt_topic_expression *subscriptions;
|
||||
void *user_data; /* User data */
|
||||
};
|
||||
---
|
||||
|
||||
|
||||
Reference in new issue
Block a user