From a82be3bd39c22357198a14c6188e73e2548c34ed Mon Sep 17 00:00:00 2001 From: Andy Green Date: Fri, 1 Jan 2021 14:57:07 +0000 Subject: [PATCH] sspc: allow NULL rx and state in ssi Sometimes there's no need for .tx or even .state... make sure we are OK with that in the ssi by checking before sspc callthrus --- lib/secure-streams/secure-streams-client.c | 8 +++++++- lib/secure-streams/secure-streams-serialize.c | 20 ++++++++++--------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/lib/secure-streams/secure-streams-client.c b/lib/secure-streams/secure-streams-client.c index 0f3ca2234..c2fda7b1e 100644 --- a/lib/secure-streams/secure-streams-client.c +++ b/lib/secure-streams/secure-streams-client.c @@ -357,6 +357,11 @@ callback_sspc_client(struct lws *wsi, enum lws_callback_reasons reason, len = sizeof(pkt) - LWS_PRE - 19; flags = 0; + if (!h->ssi.tx) { + n = 0; + goto do_write_nz; + } + n = h->ssi.tx(m, h->ord++, pkt + LWS_PRE + 19, &len, &flags); switch (n) { @@ -568,7 +573,8 @@ lws_sspc_destroy(lws_sspc_handle_t **ph) lws_sspc_rxmetadata_destroy(h); - h->ssi.state(m, NULL, LWSSSCS_DESTROYING, 0); + if (h->ssi.state) + h->ssi.state(m, NULL, LWSSSCS_DESTROYING, 0); *ph = NULL; __lws_lc_untag(&h->lc); diff --git a/lib/secure-streams/secure-streams-serialize.c b/lib/secure-streams/secure-streams-serialize.c index ec1d75260..e377dd203 100644 --- a/lib/secure-streams/secure-streams-serialize.c +++ b/lib/secure-streams/secure-streams-serialize.c @@ -1239,15 +1239,17 @@ payload_ff: h->creating_cb_done = 1; - n = ssi->state(client_pss_to_userdata(pss), - NULL, LWSSSCS_CREATING, 0); - switch (n) { - case LWSSSSRET_OK: - break; - case LWSSSSRET_DISCONNECT_ME: - goto hangup; - case LWSSSSRET_DESTROY_ME: - return LWSSSSRET_DESTROY_ME; + if (ssi->state) { + n = ssi->state(client_pss_to_userdata(pss), + NULL, LWSSSCS_CREATING, 0); + switch (n) { + case LWSSSSRET_OK: + break; + case LWSSSSRET_DISCONNECT_ME: + goto hangup; + case LWSSSSRET_DESTROY_ME: + return LWSSSSRET_DESTROY_ME; + } } h->dsh = lws_dsh_create(NULL, (size_t)(par->temp32 ?