mirror of
https://github.com/cesanta/mongoose.git
synced 2025-06-10 19:33:06 +08:00
Fixes in MQTT for AWS support
PUBLISHED_FROM=2b82f3793b3c6d0cf1266e4cc0e67930f43002c5
This commit is contained in:
parent
fffb54e2c6
commit
d0c50632cd
@ -20,6 +20,7 @@ items:
|
|||||||
- { name: mg_send_mqtt_handshake.md }
|
- { name: mg_send_mqtt_handshake.md }
|
||||||
- { name: mg_send_mqtt_handshake_opt.md }
|
- { name: mg_send_mqtt_handshake_opt.md }
|
||||||
- { name: mg_set_protocol_mqtt.md }
|
- { name: mg_set_protocol_mqtt.md }
|
||||||
|
- { name: struct_mg_mqtt_proto_data.md }
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
|
12
docs/c-api/mqtt.h/struct_mg_mqtt_proto_data.md
Normal file
12
docs/c-api/mqtt.h/struct_mg_mqtt_proto_data.md
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
title: "struct mg_mqtt_proto_data"
|
||||||
|
decl_name: "struct mg_mqtt_proto_data"
|
||||||
|
symbol_kind: "struct"
|
||||||
|
signature: |
|
||||||
|
struct mg_mqtt_proto_data {
|
||||||
|
uint16_t keep_alive;
|
||||||
|
};
|
||||||
|
---
|
||||||
|
|
||||||
|
mg_mqtt_proto_data should be in header to allow external access to it
|
||||||
|
|
@ -11,7 +11,7 @@ else
|
|||||||
ifeq ($(SSL_LIB),openssl)
|
ifeq ($(SSL_LIB),openssl)
|
||||||
CFLAGS += -DMG_ENABLE_SSL -lssl -lcrypto
|
CFLAGS += -DMG_ENABLE_SSL -lssl -lcrypto
|
||||||
else ifeq ($(SSL_LIB), krypton)
|
else ifeq ($(SSL_LIB), krypton)
|
||||||
CFLAGS += -DMG_ENABLE_SSL -DMG_DISABLE_PFS ../../../krypton/krypton.c
|
CFLAGS += -DMG_ENABLE_SSL -DMG_DISABLE_PFS -DSSL_KRYPTON ../../../krypton/krypton.c -I../../../krypton
|
||||||
endif
|
endif
|
||||||
CFLAGS += -lpthread
|
CFLAGS += -lpthread
|
||||||
endif
|
endif
|
||||||
|
12
mongoose.c
12
mongoose.c
@ -8536,8 +8536,14 @@ static void mqtt_handler(struct mg_connection *nc, int ev, void *ev_data) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void mg_mqtt_proto_data_destructor(void *proto_data) {
|
||||||
|
MG_FREE(proto_data);
|
||||||
|
}
|
||||||
|
|
||||||
void mg_set_protocol_mqtt(struct mg_connection *nc) {
|
void mg_set_protocol_mqtt(struct mg_connection *nc) {
|
||||||
nc->proto_handler = mqtt_handler;
|
nc->proto_handler = mqtt_handler;
|
||||||
|
nc->proto_data = MG_CALLOC(1, sizeof(struct mg_mqtt_proto_data));
|
||||||
|
nc->proto_data_destructor = mg_mqtt_proto_data_destructor;
|
||||||
}
|
}
|
||||||
|
|
||||||
void mg_send_mqtt_handshake(struct mg_connection *nc, const char *client_id) {
|
void mg_send_mqtt_handshake(struct mg_connection *nc, const char *client_id) {
|
||||||
@ -8551,6 +8557,7 @@ void mg_send_mqtt_handshake_opt(struct mg_connection *nc, const char *client_id,
|
|||||||
uint8_t rem_len;
|
uint8_t rem_len;
|
||||||
uint16_t keep_alive;
|
uint16_t keep_alive;
|
||||||
uint16_t len;
|
uint16_t len;
|
||||||
|
struct mg_mqtt_proto_data* pd = (struct mg_mqtt_proto_data*) nc->proto_data;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 9: version_header(len, magic_string, version_number), 1: flags, 2:
|
* 9: version_header(len, magic_string, version_number), 1: flags, 2:
|
||||||
@ -8576,6 +8583,7 @@ void mg_send_mqtt_handshake_opt(struct mg_connection *nc, const char *client_id,
|
|||||||
if (opts.keep_alive == 0) {
|
if (opts.keep_alive == 0) {
|
||||||
opts.keep_alive = 60;
|
opts.keep_alive = 60;
|
||||||
}
|
}
|
||||||
|
|
||||||
keep_alive = htons(opts.keep_alive);
|
keep_alive = htons(opts.keep_alive);
|
||||||
mg_send(nc, &keep_alive, 2);
|
mg_send(nc, &keep_alive, 2);
|
||||||
|
|
||||||
@ -8593,6 +8601,10 @@ void mg_send_mqtt_handshake_opt(struct mg_connection *nc, const char *client_id,
|
|||||||
mg_send(nc, &len, 2);
|
mg_send(nc, &len, 2);
|
||||||
mg_send(nc, opts.password, strlen(opts.password));
|
mg_send(nc, opts.password, strlen(opts.password));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pd != NULL) {
|
||||||
|
pd->keep_alive = opts.keep_alive;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mg_mqtt_prepend_header(struct mg_connection *nc, uint8_t cmd,
|
static void mg_mqtt_prepend_header(struct mg_connection *nc, uint8_t cmd,
|
||||||
|
@ -4712,6 +4712,11 @@ struct mg_send_mqtt_handshake_opts {
|
|||||||
const char *password;
|
const char *password;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* mg_mqtt_proto_data should be in header to allow external access to it */
|
||||||
|
struct mg_mqtt_proto_data {
|
||||||
|
uint16_t keep_alive;
|
||||||
|
};
|
||||||
|
|
||||||
/* Message types */
|
/* Message types */
|
||||||
#define MG_MQTT_CMD_CONNECT 1
|
#define MG_MQTT_CMD_CONNECT 1
|
||||||
#define MG_MQTT_CMD_CONNACK 2
|
#define MG_MQTT_CMD_CONNACK 2
|
||||||
|
Loading…
Reference in New Issue
Block a user