diff options
author | Jed Lu <jianlu@amazon.com> | 2021-06-10 00:08:37 -0700 |
---|---|---|
committer | Andy Green <andy@warmcat.com> | 2021-06-11 14:44:10 +0100 |
commit | 2abf4115a8d65d1ee610181e4cc80abc2ee43d9b (patch) | |
tree | 501e7d18dd8f6c1737938d55c03cfdf6d0ef2c0b /minimal-examples | |
parent | e82778e07a054e4b79bb379895a774f86a32a922 (diff) | |
download | libwebsockets-2abf4115a8d65d1ee610181e4cc80abc2ee43d9b.tar.gz |
ss: direct protocol string
Diffstat (limited to 'minimal-examples')
-rw-r--r-- | minimal-examples/secure-streams/minimal-secure-streams/minimal-secure-streams.c | 87 |
1 files changed, 80 insertions, 7 deletions
diff --git a/minimal-examples/secure-streams/minimal-secure-streams/minimal-secure-streams.c b/minimal-examples/secure-streams/minimal-secure-streams/minimal-secure-streams.c index 6d48f04d..3f4b2afb 100644 --- a/minimal-examples/secure-streams/minimal-secure-streams/minimal-secure-streams.c +++ b/minimal-examples/secure-streams/minimal-secure-streams/minimal-secure-streams.c @@ -1,7 +1,7 @@ /* * lws-minimal-secure-streams * - * Written in 2010-2020 by Andy Green <andy@warmcat.com> + * Written in 2010-2021 by Andy Green <andy@warmcat.com> * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. @@ -118,7 +118,8 @@ static const char * const default_ss_policy = #endif "]," "\"s\": [" - /* +#if !defined(LWS_WITH_SS_DIRECT_PROTOCOL_STR) + /* * "fetch_policy" decides from where the real policy * will be fetched, if present. Otherwise the initial * policy is treated as the whole, hardcoded, policy. @@ -139,6 +140,25 @@ static const char * const default_ss_policy = "\"tls_trust_store\":" "\"le_via_dst\"," #endif "\"retry\":" "\"default\"" +#else + "{\"mintest\": {" + "\"endpoint\": \"warmcat.com\"," + "\"port\": 443," + "\"protocol\": \"h1\"," + "\"http_method\": \"GET\"," + "\"http_url\": \"index.html?uptag=${uptag}\"," + "\"metadata\": [{" + " \"uptag\": \"X-Upload-Tag:\"" + "}, {" + " \"xctype\": \"X-Content-Type:\"" + "}]," + "\"tls\": true," + "\"opportunistic\": true," + "\"retry\": \"default\"," + "\"timeout_ms\": 2000," + "\"direct_proto_str\": true," + "\"tls_trust_store\": \"le_via_dst\"" +#endif "}},{" /* * "captive_portal_detect" describes @@ -197,20 +217,23 @@ static const char *canned_root_token_payload = static lws_ss_state_return_t myss_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { - myss_t *m = (myss_t *)userobj; - const char *md_srv = "not set", *md_test = "not set"; - size_t md_srv_len = 7, md_test_len = 7; if (flags & LWSSS_FLAG_PERF_JSON) return LWSSSSRET_OK; +#if !defined(LWS_WITH_SS_DIRECT_PROTOCOL_STR) + myss_t *m = (myss_t *)userobj; + const char *md_srv = "not set", *md_test = "not set"; + size_t md_srv_len = 7, md_test_len = 7; + lws_ss_get_metadata(m->ss, "srv", (const void **)&md_srv, &md_srv_len); lws_ss_get_metadata(m->ss, "test", (const void **)&md_test, &md_test_len); - lwsl_user("%s: len %d, flags: %d, srv: %.*s, test: %.*s\n", __func__, (int)len, flags, (int)md_srv_len, md_srv, (int)md_test_len, md_test); + lwsl_hexdump_info(buf, len); +#endif /* * If we received the whole message, for our example it means @@ -240,6 +263,21 @@ myss_state(void *userobj, void *sh, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { myss_t *m = (myss_t *)userobj; +#if defined(LWS_WITH_SS_DIRECT_PROTOCOL_STR) + const char *md_test = "not set"; + size_t md_test_len = 7; + int i; + static const char * imd_test_keys[8] = { + "server:", + "content-security-policy:", + "strict-transport-security:", + "test-custom-header:", + "x-xss-protection:", + "x-content-type-options:", + "x-frame-options:", + "x-non-exist:", + }; +#endif lwsl_user("%s: %s (%d), ord 0x%x\n", __func__, lws_ss_state_name((int)state), state, (unsigned int)ack); @@ -254,10 +292,21 @@ myss_state(void *userobj, void *sh, lws_ss_constate_t state, if (lws_ss_set_metadata(m->ss, "uptag", "myuptag123", 10)) /* can fail, eg due to OOM, retry later if so */ return LWSSSSRET_DISCONNECT_ME; - +#if !defined(LWS_WITH_SS_DIRECT_PROTOCOL_STR) if (lws_ss_set_metadata(m->ss, "ctype", "myctype", 7)) /* can fail, eg due to OOM, retry later if so */ return LWSSSSRET_DISCONNECT_ME; +#else + if (lws_ss_set_metadata(m->ss, "X-Test-Type1:", "myctype1", 8)) + /* can fail, eg due to OOM, retry later if so */ + return LWSSSSRET_DISCONNECT_ME; + if (lws_ss_set_metadata(m->ss, "X-Test-Type2:", "myctype2", 8)) + /* can fail, eg due to OOM, retry later if so */ + return LWSSSSRET_DISCONNECT_ME; + if (lws_ss_set_metadata(m->ss, "Content-Type:", "myctype", 7)) + /* can fail, eg due to OOM, retry later if so */ + return LWSSSSRET_DISCONNECT_ME; +#endif break; case LWSSSCS_ALL_RETRIES_FAILED: @@ -265,6 +314,16 @@ myss_state(void *userobj, void *sh, lws_ss_constate_t state, interrupted = 1; bad = 2; break; + case LWSSSCS_CONNECTED: +#if defined(LWS_WITH_SS_DIRECT_PROTOCOL_STR) + lwsl_user("%s: get direct metadata\n", __func__); + for (i = 0; i < 8; i++) { + md_test = "not set"; + lws_ss_get_metadata(m->ss, imd_test_keys[i], (const void **)&md_test, &md_test_len); + lwsl_user("%s test key:[%s], got [%s]\n", __func__, imd_test_keys[i], md_test); + } +#endif + break; case LWSSSCS_QOS_ACK_REMOTE: lwsl_notice("%s: LWSSSCS_QOS_ACK_REMOTE\n", __func__); @@ -288,6 +347,15 @@ myss_state(void *userobj, void *sh, lws_ss_constate_t state, return LWSSSSRET_OK; } +#if defined(LWS_WITH_SECURE_STREAMS_BUFFER_DUMP) +static void +myss_headers_dump(void *userobj, const uint8_t *buf, size_t len, int done) +{ + lwsl_user("%s: %lu done: %s\n", __func__, len, done?"true":"false"); + + lwsl_hexdump_err(buf, len); +} +#endif static int app_system_state_nf(lws_state_manager_t *mgr, lws_state_notify_link_t *link, int current, int target) @@ -371,6 +439,9 @@ app_system_state_nf(lws_state_manager_t *mgr, lws_state_notify_link_t *link, ssi.rx = myss_rx; ssi.tx = myss_tx; ssi.state = myss_state; +#if defined(LWS_WITH_SECURE_STREAMS_BUFFER_DUMP) + ssi.dump = myss_headers_dump; +#endif ssi.user_alloc = sizeof(myss_t); ssi.streamtype = test_ots ? "mintest-ots" : (test_respmap ? "respmap" : "mintest"); @@ -434,6 +505,8 @@ int main(int argc, const char **argv) memset(&info, 0, sizeof info); lws_cmdline_option_handle_builtin(argc, argv, &info); + //lws_set_log_level(LLL_USER | LLL_ERR | LLL_DEBUG | LLL_NOTICE | LLL_INFO, NULL); + lwsl_user("LWS secure streams test client [-d<verb>]\n"); /* these options are mutually exclusive if given */ |