Skip to content

Commit 997b203

Browse files
embhornclaude
andcommitted
Fix TLS disabled when WebSocket is enabled
Remove !defined(ENABLE_MQTT_WEBSOCKET) guards from mqtt_socket.c and mqtt_socket.h that incorrectly excluded the entire wolfSSL TLS layer when --enable-websocket was configured. This broke TLS for all non-WebSocket clients (mqttclient, firmware, etc.). The WebSocket client handles TLS through libwebsockets and never calls these functions, so the guards were unnecessary. Also remove the local BrokerTls_IORecv/IOSend workaround from mqtt_broker.c since MqttSocket_TlsSocketReceive/Send are now available. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 44c84ff commit 997b203

3 files changed

Lines changed: 11 additions & 60 deletions

File tree

src/mqtt_broker.c

Lines changed: 0 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -346,44 +346,6 @@ int MqttBrokerNet_Init(MqttBrokerNet* net)
346346
}
347347

348348
#ifdef ENABLE_MQTT_TLS
349-
/* When ENABLE_MQTT_WEBSOCKET is also defined, mqtt_socket.c excludes the
350-
* MqttSocket_TlsSocket{Receive,Send} functions (they're meant for client-side
351-
* only). The broker TLS backend needs equivalent wolfSSL IO callbacks, so
352-
* define them locally. */
353-
#ifdef ENABLE_MQTT_WEBSOCKET
354-
static int BrokerTls_IORecv(WOLFSSL* ssl, char *buf, int sz, void *ptr)
355-
{
356-
int rc;
357-
MqttClient *client = (MqttClient*)ptr;
358-
(void)ssl;
359-
rc = client->net->read(client->net->context, (byte*)buf, sz,
360-
client->tls.timeout_ms_read);
361-
client->tls.sockRcRead = rc;
362-
if (rc == 0 || rc == MQTT_CODE_ERROR_TIMEOUT || rc == MQTT_CODE_CONTINUE) {
363-
return WOLFSSL_CBIO_ERR_WANT_READ;
364-
}
365-
else if (rc < 0) {
366-
return WOLFSSL_CBIO_ERR_GENERAL;
367-
}
368-
return rc;
369-
}
370-
static int BrokerTls_IOSend(WOLFSSL* ssl, char *buf, int sz, void *ptr)
371-
{
372-
int rc;
373-
MqttClient *client = (MqttClient*)ptr;
374-
(void)ssl;
375-
rc = client->net->write(client->net->context, (byte*)buf, sz,
376-
client->tls.timeout_ms_write);
377-
client->tls.sockRcWrite = rc;
378-
if (rc == 0 || rc == MQTT_CODE_ERROR_TIMEOUT || rc == MQTT_CODE_CONTINUE) {
379-
return WOLFSSL_CBIO_ERR_WANT_WRITE;
380-
}
381-
else if (rc < 0) {
382-
return WOLFSSL_CBIO_ERR_GENERAL;
383-
}
384-
return rc;
385-
}
386-
#endif /* ENABLE_MQTT_WEBSOCKET */
387349
static int BrokerTls_Init(MqttBroker* broker)
388350
{
389351
WOLFSSL_CTX* ctx = NULL;
@@ -446,13 +408,8 @@ static int BrokerTls_Init(MqttBroker* broker)
446408

447409
/* Set wolfSSL IO callbacks */
448410
if (rc == WOLFSSL_SUCCESS) {
449-
#ifdef ENABLE_MQTT_WEBSOCKET
450-
wolfSSL_CTX_SetIORecv(ctx, BrokerTls_IORecv);
451-
wolfSSL_CTX_SetIOSend(ctx, BrokerTls_IOSend);
452-
#else
453411
wolfSSL_CTX_SetIORecv(ctx, MqttSocket_TlsSocketReceive);
454412
wolfSSL_CTX_SetIOSend(ctx, MqttSocket_TlsSocketSend);
455-
#endif
456413
}
457414

458415
/* Mutual TLS: load CA and require client certificate */

src/mqtt_socket.c

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,7 @@
5555

5656

5757
/* Public Functions */
58-
#if defined(ENABLE_MQTT_TLS) && !defined(ENABLE_MQTT_CURL) && \
59-
!defined(ENABLE_MQTT_WEBSOCKET)
58+
#if defined(ENABLE_MQTT_TLS) && !defined(ENABLE_MQTT_CURL)
6059
int MqttSocket_TlsSocketReceive(WOLFSSL* ssl, char *buf, int sz,
6160
void *ptr)
6261
{
@@ -101,7 +100,7 @@ int MqttSocket_TlsSocketSend(WOLFSSL* ssl, char *buf, int sz,
101100
}
102101
return rc;
103102
}
104-
#endif /* ENABLE_MQTT_TLS && !ENABLE_MQTT_CURL && !ENABLE_MQTT_WEBSOCKET*/
103+
#endif /* ENABLE_MQTT_TLS && !ENABLE_MQTT_CURL */
105104

106105
int MqttSocket_Init(MqttClient *client, MqttNet *net)
107106
{
@@ -114,8 +113,7 @@ int MqttSocket_Init(MqttClient *client, MqttNet *net)
114113
client->net = net;
115114
MqttClient_Flags(client, (MQTT_CLIENT_FLAG_IS_CONNECTED |
116115
MQTT_CLIENT_FLAG_IS_TLS), 0);;
117-
#if defined(ENABLE_MQTT_TLS) && !defined(ENABLE_MQTT_CURL) && \
118-
!defined(ENABLE_MQTT_WEBSOCKET)
116+
#if defined(ENABLE_MQTT_TLS) && !defined(ENABLE_MQTT_CURL)
119117
client->tls.ctx = NULL;
120118
client->tls.ssl = NULL;
121119
client->tls.timeout_ms_read = client->cmd_timeout_ms;
@@ -135,8 +133,7 @@ static int MqttSocket_WriteDo(MqttClient *client, const byte* buf, int buf_len,
135133
{
136134
int rc;
137135

138-
#if defined(ENABLE_MQTT_TLS) && !defined(ENABLE_MQTT_CURL) && \
139-
!defined(ENABLE_MQTT_WEBSOCKET)
136+
#if defined(ENABLE_MQTT_TLS) && !defined(ENABLE_MQTT_CURL)
140137
if (MqttClient_Flags(client,0,0) & MQTT_CLIENT_FLAG_IS_TLS) {
141138
client->tls.timeout_ms_write = timeout_ms;
142139
client->tls.sockRcWrite = 0; /* init value */
@@ -166,7 +163,7 @@ static int MqttSocket_WriteDo(MqttClient *client, const byte* buf, int buf_len,
166163
}
167164
}
168165
else
169-
#endif /* ENABLE_MQTT_TLS && !ENABLE_MQTT_CURL && !ENABLE_MQTT_WEBSOCKET*/
166+
#endif /* ENABLE_MQTT_TLS && !ENABLE_MQTT_CURL */
170167
{
171168
rc = client->net->write(client->net->context, buf, buf_len,
172169
timeout_ms);
@@ -238,8 +235,7 @@ static int MqttSocket_ReadDo(MqttClient *client, byte* buf, int buf_len,
238235
{
239236
int rc;
240237

241-
#if defined(ENABLE_MQTT_TLS) && !defined(ENABLE_MQTT_CURL) && \
242-
!defined(ENABLE_MQTT_WEBSOCKET)
238+
#if defined(ENABLE_MQTT_TLS) && !defined(ENABLE_MQTT_CURL)
243239
if (MqttClient_Flags(client,0,0) & MQTT_CLIENT_FLAG_IS_TLS) {
244240
client->tls.timeout_ms_read = timeout_ms;
245241
client->tls.sockRcRead = 0; /* init value */
@@ -274,7 +270,7 @@ static int MqttSocket_ReadDo(MqttClient *client, byte* buf, int buf_len,
274270
}
275271
}
276272
else
277-
#endif /* ENABLE_MQTT_TLS && !ENABLE_MQTT_CURL && !ENABLE_MQTT_WEBSOCKET */
273+
#endif /* ENABLE_MQTT_TLS && !ENABLE_MQTT_CURL */
278274
{
279275
rc = client->net->read(client->net->context, buf, buf_len, timeout_ms);
280276
}
@@ -401,8 +397,7 @@ int MqttSocket_Connect(MqttClient *client, const char* host, word16 port,
401397
MqttClient_Flags(client, 0, MQTT_CLIENT_FLAG_IS_CONNECTED);
402398
}
403399

404-
#if defined(ENABLE_MQTT_TLS) && !defined(ENABLE_MQTT_CURL) && \
405-
!defined(ENABLE_MQTT_WEBSOCKET)
400+
#if defined(ENABLE_MQTT_TLS) && !defined(ENABLE_MQTT_CURL)
406401
if (use_tls) {
407402
/* Clear any previous TLS error */
408403
client->tls.lastError = 0;
@@ -523,7 +518,7 @@ int MqttSocket_Connect(MqttClient *client, const char* host, word16 port,
523518

524519
#else
525520
(void)cb;
526-
#endif /* ENABLE_MQTT_TLS && !ENABLE_MQTT_CURL && !ENABLE_MQTT_WEBSOCKET */
521+
#endif /* ENABLE_MQTT_TLS && !ENABLE_MQTT_CURL */
527522

528523
#ifdef WOLFMQTT_DEBUG_SOCKET
529524
PRINTF("MqttSocket_Connect: Rc=%d", rc);

wolfmqtt/mqtt_socket.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,13 +106,12 @@ WOLFMQTT_LOCAL int MqttSocket_Connect(struct _MqttClient *client,
106106
MqttTlsCb cb);
107107
WOLFMQTT_LOCAL int MqttSocket_Disconnect(struct _MqttClient *client);
108108

109-
#if defined(ENABLE_MQTT_TLS) && !defined(ENABLE_MQTT_CURL) && \
110-
!defined(ENABLE_MQTT_WEBSOCKET)
109+
#if defined(ENABLE_MQTT_TLS) && !defined(ENABLE_MQTT_CURL)
111110
/* make these public for cases where user needs to create
112111
* WOLFSSL_CTX context and WOLFSSL object in the TLS callback */
113112
WOLFMQTT_API int MqttSocket_TlsSocketReceive(WOLFSSL* ssl, char *buf, int sz, void *ptr);
114113
WOLFMQTT_API int MqttSocket_TlsSocketSend(WOLFSSL* ssl, char *buf, int sz, void *ptr);
115-
#endif /* ENABLE_MQTT_TLS && !ENABLE_MQTT_CURL && !ENABLE_MQTT_WEBSOCKET */
114+
#endif /* ENABLE_MQTT_TLS && !ENABLE_MQTT_CURL */
116115

117116
#ifdef __cplusplus
118117
} /* extern "C" */

0 commit comments

Comments
 (0)