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 ?