cpd: pass up lws_ss_request_tx ret
diff --git a/include/libwebsockets/lws-secure-streams.h b/include/libwebsockets/lws-secure-streams.h
index 47c8fb3..e4cb6ba 100644
--- a/include/libwebsockets/lws-secure-streams.h
+++ b/include/libwebsockets/lws-secure-streams.h
@@ -447,7 +447,7 @@
* formats, \p ppayload_fmt is set to point to the name of the needed payload
* format from the policy database if non-NULL.
*/
-LWS_VISIBLE LWS_EXTERN int
+LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT
lws_ss_create(struct lws_context *context, int tsi, const lws_ss_info_t *ssi,
void *opaque_user_data, struct lws_ss_handle **ppss,
struct lws_sequencer *seq_owner, const char **ppayload_fmt);
@@ -471,9 +471,9 @@
* write on this stream, the \p *tx callback will occur with an empty buffer for
* the stream owner to fill in.
*
- * Returns 0 or LWSSSSRET_SS_HANDLE_DESTROYED
+ * Returns 0 or LWSSSSRET_DESTROY_ME
*/
-LWS_VISIBLE LWS_EXTERN lws_ss_state_return_t
+LWS_VISIBLE LWS_EXTERN lws_ss_state_return_t LWS_WARN_UNUSED_RESULT
lws_ss_request_tx(struct lws_ss_handle *pss);
/**
@@ -489,7 +489,7 @@
* This api variant should be used when it's possible the payload will go out
* over h1 with x-web-form-urlencoded or similar Content-Type.
*/
-LWS_VISIBLE LWS_EXTERN lws_ss_state_return_t
+LWS_VISIBLE LWS_EXTERN lws_ss_state_return_t LWS_WARN_UNUSED_RESULT
lws_ss_request_tx_len(struct lws_ss_handle *pss, unsigned long len);
/**
@@ -505,7 +505,7 @@
* LWSSSSRET_OK means the connection is ongoing.
*
*/
-LWS_VISIBLE LWS_EXTERN lws_ss_state_return_t
+LWS_VISIBLE LWS_EXTERN lws_ss_state_return_t LWS_WARN_UNUSED_RESULT
lws_ss_client_connect(struct lws_ss_handle *h);
/**
diff --git a/lib/secure-streams/secure-streams-serialize.c b/lib/secure-streams/secure-streams-serialize.c
index ccb786d..09969fe 100644
--- a/lib/secure-streams/secure-streams-serialize.c
+++ b/lib/secure-streams/secure-streams-serialize.c
@@ -362,6 +362,7 @@
lws_ss_conn_states_t *state, void *parconn,
lws_ss_handle_t **pss, lws_ss_info_t *ssi, char client)
{
+ lws_ss_state_return_t r;
lws_ss_metadata_t *pm;
lws_sspc_handle_t *h;
uint8_t pre[23];
@@ -1003,11 +1004,14 @@
lwsl_notice("%s: set payload len %u\n", __func__,
par->temp32);
- if (proxy_pss_to_ss_h(pss))
- lws_ss_request_tx_len(proxy_pss_to_ss_h(pss),
- (unsigned long)par->temp32);
-
par->ps = RPAR_TYPE;
+
+ if (proxy_pss_to_ss_h(pss)) {
+ r = lws_ss_request_tx_len(proxy_pss_to_ss_h(pss),
+ (unsigned long)par->temp32);
+ if (r == LWSSSSRET_DESTROY_ME)
+ goto hangup;
+ }
break;
case RPAR_METADATA_NAMELEN:
diff --git a/lib/secure-streams/secure-streams.c b/lib/secure-streams/secure-streams.c
index ced61f3..a13e752 100644
--- a/lib/secure-streams/secure-streams.c
+++ b/lib/secure-streams/secure-streams.c
@@ -1512,7 +1512,7 @@
lws_ss_state_return_t r;
r = _lws_ss_request_tx(h);
- _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, NULL, &h);
+
return r;
}
diff --git a/lib/secure-streams/system/auth-api.amazon.com/auth.c b/lib/secure-streams/system/auth-api.amazon.com/auth.c
index afbb720..af297d8 100644
--- a/lib/secure-streams/system/auth-api.amazon.com/auth.c
+++ b/lib/secure-streams/system/auth-api.amazon.com/auth.c
@@ -227,9 +227,8 @@
s = lws_system_blob_get_size(ab);
if (!s)
lwsl_debug("%s: no auth blob\n", __func__);
- lws_ss_request_tx_len(m->ss, (unsigned long)s);
m->pos = 0;
- break;
+ return lws_ss_request_tx_len(m->ss, (unsigned long)s);
case LWSSSCS_DISCONNECTED:
/*
diff --git a/lib/secure-streams/system/captive-portal-detect/captive-portal-detect.c b/lib/secure-streams/system/captive-portal-detect/captive-portal-detect.c
index 37d23ad..4de54bf 100644
--- a/lib/secure-streams/system/captive-portal-detect/captive-portal-detect.c
+++ b/lib/secure-streams/system/captive-portal-detect/captive-portal-detect.c
@@ -47,8 +47,7 @@
switch (state) {
case LWSSSCS_CREATING:
lws_ss_start_timeout(m->ss, 3 * LWS_US_PER_SEC);
- lws_ss_request_tx(m->ss);
- break;
+ return lws_ss_request_tx(m->ss);
case LWSSSCS_QOS_ACK_REMOTE:
lws_system_cpd_set(cx, LWS_CPD_INTERNET_OK);
diff --git a/lib/secure-streams/system/fetch-policy/fetch-policy.c b/lib/secure-streams/system/fetch-policy/fetch-policy.c
index 237d2db..ee4b139 100644
--- a/lib/secure-streams/system/fetch-policy/fetch-policy.c
+++ b/lib/secure-streams/system/fetch-policy/fetch-policy.c
@@ -102,8 +102,8 @@
switch (state) {
case LWSSSCS_CREATING:
- lws_ss_request_tx(m->ss);
- break;
+ return lws_ss_request_tx(m->ss);
+
case LWSSSCS_CONNECTING:
break;
diff --git a/minimal-examples/api-tests/api-test-lws_sequencer/main.c b/minimal-examples/api-tests/api-test-lws_sequencer/main.c
index becb73b..0db7f40 100644
--- a/minimal-examples/api-tests/api-test-lws_sequencer/main.c
+++ b/minimal-examples/api-tests/api-test-lws_sequencer/main.c
@@ -169,8 +169,8 @@
}
static const struct lws_protocols protocols[] = {
- { "seq-test-http", callback_http, 0, 0, },
- { NULL, NULL, 0, 0 }
+ { "seq-test-http", callback_http, 0, 0, 0, NULL, 0 },
+ LWS_PROTOCOL_LIST_TERM
};
diff --git a/minimal-examples/api-tests/api-test-secure-streams/main.c b/minimal-examples/api-tests/api-test-secure-streams/main.c
index 8becb67..841cd1a 100644
--- a/minimal-examples/api-tests/api-test-secure-streams/main.c
+++ b/minimal-examples/api-tests/api-test-secure-streams/main.c
@@ -183,11 +183,11 @@
*len = budget;
m->sent += budget;
if (m->sent != next_test->send)
- lws_ss_request_tx(m->ss);
- else
- *flags |= LWSSS_FLAG_EOM;
+ return lws_ss_request_tx(m->ss);
- return 0;
+ *flags |= LWSSS_FLAG_EOM;
+
+ return LWSSSSRET_OK;
}
static lws_ss_state_return_t
@@ -195,15 +195,18 @@
lws_ss_tx_ordinal_t ack)
{
myss_t *m = (myss_t *)userobj;
+ lws_ss_state_return_t r;
lwsl_notice("%s: %s, ord 0x%x\n", __func__, lws_ss_state_name((int)state),
(unsigned int)ack);
switch (state) {
case LWSSSCS_CREATING:
- lws_ss_client_connect(m->ss);
+ r = lws_ss_client_connect(m->ss);
+ if (r)
+ return r;
if (next_test->send)
- lws_ss_request_tx_len(m->ss, (unsigned long)next_test->send);
+ return lws_ss_request_tx_len(m->ss, (unsigned long)next_test->send);
break;
case LWSSSCS_ALL_RETRIES_FAILED:
lwsl_notice("%s: Connection failed\n", __func__);
@@ -258,7 +261,7 @@
break;
}
- return 0;
+ return LWSSSSRET_OK;
}
static const lws_ss_info_t ssi_get = {
diff --git a/minimal-examples/embedded/esp32/esp-heltec-wb32/main/lws-minimal-esp32.c b/minimal-examples/embedded/esp32/esp-heltec-wb32/main/lws-minimal-esp32.c
index ecde1a0..a249906 100644
--- a/minimal-examples/embedded/esp32/esp-heltec-wb32/main/lws-minimal-esp32.c
+++ b/minimal-examples/embedded/esp32/esp-heltec-wb32/main/lws-minimal-esp32.c
@@ -86,7 +86,7 @@
switch (state) {
case LWSSSCS_CREATING:
- lws_ss_client_connect(m->ss);
+ return lws_ss_client_connect(m->ss);
break;
default:
break;
diff --git a/minimal-examples/secure-streams/minimal-secure-streams-avs/avs.c b/minimal-examples/secure-streams/minimal-secure-streams-avs/avs.c
index 6728146..bb453bf 100644
--- a/minimal-examples/secure-streams/minimal-secure-streams-avs/avs.c
+++ b/minimal-examples/secure-streams/minimal-secure-streams-avs/avs.c
@@ -187,7 +187,7 @@
lwsl_info("%s: tx done\n", __func__);
m->pos = (size_t)-1l; /* ban subsequent until new stream */
} else
- lws_ss_request_tx(m->ss);
+ return lws_ss_request_tx(m->ss);
lwsl_hexdump_info(buf, *len);
@@ -211,7 +211,7 @@
if (m->pos == tot) {
*flags |= LWSSS_FLAG_EOM;
m->pos = 0; /* for next time */
- lws_ss_request_tx(m->ss);
+ return lws_ss_request_tx(m->ss);
}
lwsl_hexdump_info(buf, *len);
diff --git a/minimal-examples/secure-streams/minimal-secure-streams-post/minimal-secure-streams-post.c b/minimal-examples/secure-streams/minimal-secure-streams-post/minimal-secure-streams-post.c
index 39257e3..087d494 100644
--- a/minimal-examples/secure-streams/minimal-secure-streams-post/minimal-secure-streams-post.c
+++ b/minimal-examples/secure-streams/minimal-secure-streams-post/minimal-secure-streams-post.c
@@ -318,13 +318,15 @@
memcpy(buf, postbody + m->pos, *len);
m->pos += *len;
+
if (m->pos == m->len)
*flags |= LWSSS_FLAG_EOM;
- else
- lws_ss_request_tx(m->ss);
lwsl_notice("%s: write %d flags %d\n", __func__, (int)*len, (int)*flags);
+ if (m->pos != m->len)
+ return lws_ss_request_tx(m->ss);
+
return 0;
}
@@ -353,11 +355,12 @@
/* provide a hint about the payload size */
m->pos = 0;
m->len = strlen(postbody);
- lws_ss_request_tx_len(m->ss, (unsigned long)strlen(postbody));
- break;
+
+ return lws_ss_request_tx_len(m->ss, (unsigned long)strlen(postbody));
+
case LWSSSCS_CONNECTED:
- lws_ss_request_tx(m->ss);
- break;
+ return lws_ss_request_tx(m->ss);
+
case LWSSSCS_ALL_RETRIES_FAILED:
/* if we're out of retries, we want to close the app and FAIL */
interrupted = 1;
diff --git a/minimal-examples/secure-streams/minimal-secure-streams-seq/minimal-secure-streams.c b/minimal-examples/secure-streams/minimal-secure-streams-seq/minimal-secure-streams.c
index c6a7abe..6b7dd83 100644
--- a/minimal-examples/secure-streams/minimal-secure-streams-seq/minimal-secure-streams.c
+++ b/minimal-examples/secure-streams/minimal-secure-streams-seq/minimal-secure-streams.c
@@ -182,8 +182,8 @@
switch (state) {
case LWSSSCS_CREATING:
- lws_ss_request_tx(m->ss);
- break;
+ return lws_ss_request_tx(m->ss);
+
case LWSSSCS_ALL_RETRIES_FAILED:
/* if we're out of retries, we want to close the app and FAIL */
interrupted = 1;
@@ -266,7 +266,7 @@
case LWSSEQ_TIMED_OUT: /* current step timed out */
if (s->state == SEQ_RECONNECT_WAIT)
- lws_ss_request_tx(s->ss);
+ return lws_ss_request_tx(s->ss);
break;
/*
@@ -277,8 +277,8 @@
case LWSSEQ_SS_STATE_BASE + LWSSSCS_CREATING:
lwsl_info("%s: seq LWSSSCS_CREATING\n", __func__);
- lws_ss_request_tx(s->ss);
- break;
+ return lws_ss_request_tx(s->ss);
+
case LWSSEQ_SS_STATE_BASE + LWSSSCS_DISCONNECTED:
lwsl_info("%s: seq LWSSSCS_DISCONNECTED\n", __func__);
break;
diff --git a/minimal-examples/secure-streams/minimal-secure-streams-server-raw/ss-server.c b/minimal-examples/secure-streams/minimal-secure-streams-server-raw/ss-server.c
index 7ad0b84..4d395d4 100644
--- a/minimal-examples/secure-streams/minimal-secure-streams-server-raw/ss-server.c
+++ b/minimal-examples/secure-streams/minimal-secure-streams-server-raw/ss-server.c
@@ -54,9 +54,8 @@
{
myss_srv_t *m = lws_container_of(sul, myss_srv_t, sul);
- lws_ss_request_tx(m->ss);
-
- lws_sul_schedule(lws_ss_get_context(m->ss), 0, &m->sul, spam_sul_cb,
+ if (!lws_ss_request_tx(m->ss))
+ lws_sul_schedule(lws_ss_get_context(m->ss), 0, &m->sul, spam_sul_cb,
100 * LWS_US_PER_MS);
}
@@ -90,8 +89,7 @@
lws_sul_cancel(&m->sul);
break;
case LWSSSCS_CONNECTED:
- lws_ss_request_tx(m->ss);
- break;
+ return lws_ss_request_tx(m->ss);
default:
break;
diff --git a/minimal-examples/secure-streams/minimal-secure-streams-server/ss-client.c b/minimal-examples/secure-streams/minimal-secure-streams-server/ss-client.c
index 64834c3..58c0fd9 100644
--- a/minimal-examples/secure-streams/minimal-secure-streams-server/ss-client.c
+++ b/minimal-examples/secure-streams/minimal-secure-streams-server/ss-client.c
@@ -62,7 +62,7 @@
switch (state) {
case LWSSSCS_CREATING:
- lws_ss_request_tx(m->ss);
+ return lws_ss_request_tx(m->ss);
break;
case LWSSSCS_ALL_RETRIES_FAILED:
/* if we're out of retries, we want to close the app and FAIL */
diff --git a/minimal-examples/secure-streams/minimal-secure-streams-server/ss-server.c b/minimal-examples/secure-streams/minimal-secure-streams-server/ss-server.c
index 2a81092..1b04545 100644
--- a/minimal-examples/secure-streams/minimal-secure-streams-server/ss-server.c
+++ b/minimal-examples/secure-streams/minimal-secure-streams-server/ss-server.c
@@ -134,9 +134,8 @@
{
myss_srv_t *m = lws_container_of(sul, myss_srv_t, sul);
- lws_ss_request_tx(m->ss);
-
- lws_sul_schedule(lws_ss_get_context(m->ss), 0, &m->sul, spam_sul_cb,
+ if (!lws_ss_request_tx(m->ss))
+ lws_sul_schedule(lws_ss_get_context(m->ss), 0, &m->sul, spam_sul_cb,
100 * LWS_US_PER_MS);
}
@@ -170,8 +169,8 @@
lws_sul_cancel(&m->sul);
break;
case LWSSSCS_CREATING:
- lws_ss_request_tx(m->ss);
- break;
+ return lws_ss_request_tx(m->ss);
+
case LWSSSCS_ALL_RETRIES_FAILED:
/* if we're out of retries, we want to close the app and FAIL */
interrupted = 1;
@@ -201,10 +200,9 @@
/*
* ...it's going to be whatever size it is (and request tx)
*/
- lws_ss_request_tx_len(m->ss, (unsigned long)
+ return lws_ss_request_tx_len(m->ss, (unsigned long)
(multipart ? strlen(multipart_html) :
strlen(html)));
- break;
case LWSSSCS_SERVER_UPGRADE:
@@ -217,8 +215,8 @@
m->upgraded = 1;
lws_ss_change_handlers(m->ss, myss_ws_rx, myss_ws_tx, NULL);
- lws_ss_request_tx(m->ss); /* we want to start sending numbers */
- break;
+ return lws_ss_request_tx(m->ss); /* we want to start sending numbers */
+
default:
break;
}
diff --git a/minimal-examples/secure-streams/minimal-secure-streams-sigv4/ss-s3-ss.c b/minimal-examples/secure-streams/minimal-secure-streams-sigv4/ss-s3-ss.c
index b12f8f5..1acd431 100644
--- a/minimal-examples/secure-streams/minimal-secure-streams-sigv4/ss-s3-ss.c
+++ b/minimal-examples/secure-streams/minimal-secure-streams-sigv4/ss-s3-ss.c
@@ -57,7 +57,7 @@
*flags |= LWSSS_FLAG_EOM;
// m->pos = 0; /* we only want to send once */
} else
- lws_ss_request_tx(m->ss);
+ return lws_ss_request_tx(m->ss);
return LWSSSSRET_OK;
}
@@ -173,12 +173,10 @@
timestamp, strlen(timestamp)))
return LWSSSSRET_DESTROY_ME;
- lws_ss_request_tx_len(m->ss, m->total);
- break;
+ return lws_ss_request_tx_len(m->ss, m->total);
case LWSSSCS_CONNECTED:
- lws_ss_request_tx(m->ss);
- break;
+ return lws_ss_request_tx(m->ss);
case LWSSSCS_DISCONNECTED:
return LWSSSSRET_DESTROY_ME;
diff --git a/minimal-examples/secure-streams/minimal-secure-streams-smd/minimal-secure-streams-smd.c b/minimal-examples/secure-streams/minimal-secure-streams-smd/minimal-secure-streams-smd.c
index 741e693..3a9577f 100644
--- a/minimal-examples/secure-streams/minimal-secure-streams-smd/minimal-secure-streams-smd.c
+++ b/minimal-examples/secure-streams/minimal-secure-streams-smd/minimal-secure-streams-smd.c
@@ -94,7 +94,8 @@
myss_t *m = lws_container_of(sul, myss_t, sul);
lwsl_info("%s: requesting TX\n", __func__);
- lws_ss_request_tx(m->ss);
+ if (lws_ss_request_tx(m->ss))
+ lwsl_info("%s: req failed\n", __func__);
}
static lws_ss_state_return_t