Each listener requires its own copy of the protocols struct.

pull/211/merge
Roger A. Light 11 years ago
parent 06d5e000f1
commit 6af0c236e8

@ -75,6 +75,9 @@ static struct libwebsocket_protocols protocols[] = {
callback_http, callback_http,
sizeof (struct libws_http_data), sizeof (struct libws_http_data),
0, 0,
0,
NULL,
0
}, },
{ {
"mqtt", "mqtt",
@ -82,6 +85,8 @@ static struct libwebsocket_protocols protocols[] = {
sizeof(struct libws_mqtt_data), sizeof(struct libws_mqtt_data),
0, 0,
1, 1,
NULL,
0
}, },
{ {
"mqttv3.1", "mqttv3.1",
@ -89,11 +94,12 @@ static struct libwebsocket_protocols protocols[] = {
sizeof(struct libws_mqtt_data), sizeof(struct libws_mqtt_data),
0, 0,
1, 1,
NULL,
0
}, },
{ NULL, NULL, 0, 0 } { NULL, NULL, 0, 0, 0, NULL, 0}
}; };
static int callback_mqtt(struct libwebsocket_context *context, static int callback_mqtt(struct libwebsocket_context *context,
struct libwebsocket *wsi, struct libwebsocket *wsi,
enum libwebsocket_callback_reasons reason, enum libwebsocket_callback_reasons reason,
@ -322,10 +328,29 @@ static int callback_http(struct libwebsocket_context *context,
struct libwebsocket_context *mosq_websockets_init(struct _mqtt3_listener *listener) struct libwebsocket_context *mosq_websockets_init(struct _mqtt3_listener *listener)
{ {
struct lws_context_creation_info info; struct lws_context_creation_info info;
struct libwebsocket_protocols *p;
int protocol_count;
int i;
/* Count valid protocols */
for(protocol_count=0; protocols[protocol_count].name; protocol_count++);
p = _mosquitto_calloc(protocol_count+1, sizeof(struct libwebsocket_protocols));
if(!p){
_mosquitto_log_printf(NULL, MOSQ_LOG_ERR, "Out of memory.");
return NULL;
}
for(i=0; protocols[i].name; i++){
p[i].name = protocols[i].name;
p[i].callback = protocols[i].callback;
p[i].per_session_data_size = protocols[i].per_session_data_size;
p[i].rx_buffer_size = protocols[i].rx_buffer_size;
p[i].no_buffer_all_partial_tx = protocols[i].no_buffer_all_partial_tx;
}
memset(&info, 0, sizeof(info)); memset(&info, 0, sizeof(info));
info.port = listener->port; info.port = listener->port;
info.protocols = protocols; info.protocols = p;
info.gid = -1; info.gid = -1;
info.uid = -1; info.uid = -1;
#ifdef WITH_TLS #ifdef WITH_TLS

Loading…
Cancel
Save