From a4161780dfa490c0c0966e9209dcccc1736f84bd Mon Sep 17 00:00:00 2001 From: Andy Green Date: Thu, 22 Mar 2018 07:44:02 +0800 Subject: [PATCH] wss-over-h2: show feedback in test page if active --- CMakeLists.txt | 1 + README.md | 2 ++ plugins/protocol_lws_status.c | 5 +++++ test-apps/http2.png | Bin 7563 -> 2046 bytes test-apps/test-server-libuv.c | 2 +- test-apps/test.html | 16 ++++++++++------ test-apps/wss-over-h2.png | Bin 0 -> 2727 bytes 7 files changed, 19 insertions(+), 7 deletions(-) create mode 100644 test-apps/wss-over-h2.png diff --git a/CMakeLists.txt b/CMakeLists.txt index f58595db..e56781a2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1633,6 +1633,7 @@ if (NOT LWS_WITHOUT_TESTAPPS) "${PROJECT_SOURCE_DIR}/test-apps/candide.zip" "${PROJECT_SOURCE_DIR}/test-apps/libwebsockets.org-logo.png" "${PROJECT_SOURCE_DIR}/test-apps/http2.png" + "${PROJECT_SOURCE_DIR}/test-apps/wss-over-h2.png" "${PROJECT_SOURCE_DIR}/test-apps/lws-common.js" "${PROJECT_SOURCE_DIR}/test-apps/test.html") diff --git a/README.md b/README.md index 0d60a88c..8fa6048f 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,8 @@ News ## Lws has the first official ws-over-h2 server support +![wss-over-h2](https://libwebsockets.org/sc-wss-over-h2.png) + There's a new standard on the RFC track that enables multiplexing ws connections over an http/2 link. Compared to making individual tcp and tls connections for each ws link back to the same server, this makes your site start up radically diff --git a/plugins/protocol_lws_status.c b/plugins/protocol_lws_status.c index e456c8bd..edd53413 100644 --- a/plugins/protocol_lws_status.c +++ b/plugins/protocol_lws_status.c @@ -49,6 +49,7 @@ struct per_session_data__lws_status { struct per_session_data__lws_status *walk_next; unsigned char subsequent:1; unsigned char changed_partway:1; + unsigned char wss_over_h2:1; }; struct per_vhost_data__lws_status { @@ -114,6 +115,8 @@ callback_lws_status(struct lws *wsi, enum lws_callback_reasons reason, pss->next = vhd->live_pss_list; vhd->live_pss_list = pss; + pss->wss_over_h2 = !!len; + time(&pss->time_est); pss->wsi = wsi; strcpy(pss->user_agent, "unknown"); @@ -129,9 +132,11 @@ callback_lws_status(struct lws *wsi, enum lws_callback_reasons reason, n = LWS_WRITE_TEXT | LWS_WRITE_NO_FIN;; p += lws_snprintf(p, end - p, "{ \"version\":\"%s\"," + " \"wss_over_h2\":\"%d\"," " \"hostname\":\"%s\"," " \"wsi\":\"%d\", \"conns\":[", lws_get_library_version(), + pss->wss_over_h2, lws_canonical_hostname(vhd->context), vhd->count_live_pss); pss->walk = WALK_LIST; diff --git a/test-apps/http2.png b/test-apps/http2.png index 439bfa482fa00e69af2d562f17a6e89453eb98cc..b4129e73b7ad5a5aa5696e8958a968ba780a6798 100644 GIT binary patch delta 2010 zcmV<02POE6JN^%l7cW2v1^@s6s%dfF00004b3#c}2nYxWdL_t(|ob8)!j9gV2$A9-_=I-pYGc3%^!mA!)e>Oe`BT;@PDDrhJodxW5|9(L}pJ#M*l=1O#ve_)fVzC_0Y6!5GfN7fN-O%?6x~?-ZF~RioG`U<3 zUDwM&JunLd;%pS=6^IzHr0AAqyTFv7O9xFC-|Hb>e}sYxdY!F_YQoZj82d;PPRAe@ zf&N*zIxFm{f@zxMaybfxf@|_nXCDxVo9}~>%i$Zl;PD-mc3pppIZ(LDv z)ivX8nLS}mhmRhI%pBZuM6^vVfel{}^&kHcZXB;nA~OfOpQ`Bj`W>*VA8tDUTVJZQ zf8aFy_QRsyr9<`+h#IhS0B+wXmfO>-;r`bff0{~j1iacOJ`)A_;3;p}wUffIfvhM1 zzrUt(-Cg@2J?HLwy~CRh^@z_;9(K1wh2&MGF#v8l3hNKSuZLh_X~R=#ZVBw}s~9X- zxt2}9$E%EX_8Xk8oxBroUjkEcQLkQNPCeDK=~A!_(p`n-JixvKZ>3=UJ#N`ZueWi| ze|}yvCu|aBtM=~aRoGh^!%6bbSHVkzqJHb)VEqn+Ct#+l60F``DvB4XV*^ws<|T8& zChD4#VwpKHayb+gQGaeFys!fPn-K+|_bhC2XMrGuC*ZX{uu4A=zV(U-L^gH~z{^*Q zJpG}Q?tX`R;AFR`*Yf~B7kA1)Ox}rWe<$IWzj=?BfNel#4jy~KExY$lLBMqrwXwnO zrF?Sv@_lEK?koZfNkVX=YgpM}+vF#JyKxOEVofPa?^xWU7?UH$$t+wh^O+MS~l zZ>3GQ=eD+Hb5go< zsT?euamz*>Ztb-^yz~U6(exZ#m2J%CI*_XW7%>ckTrS7m*4^w#?C|T?QBV)6tlPAX z;o)J1hld#&8X}cS5sgMKJ{G@7e?Y4ZXf>LDAacHO1~?AP0;y8zUbxzD1iTL16(D~U z_^e0!J-|PG`YZ$d_A_q+KL!2-><66TS^`!9cL3i6dIRhVKsW;Oz@Y&78K3rvfPRWc z+d1Gt;0eI**{lWpr&Jz8kpI;H+kDV|OCS&23A`AhPY(DRFb#Ys+;Hs|e*}L(xXC;5 zJ>ZpaUD}I)S>Q(t=x+jB!*yvd0$xO{e=jJ&df-!abo?bihX>k=fV}~-A0i0)Gq5G# zx;*es<3qL=0e)FT1@3ozUsp#@h|s>cS>XG?;~wo}4fcN&_%iVKQuzlk1tft>9M>HS z(4hhS4UWfR6YzGaGz%HAf4NzO*xXpaKH!b2>wXcSV?Ba|2GM@|04F5iBc)>FSHQml z`aBSBi1vyB^)Lo(4v^mqd?K96&LQ9ka64kR=Y^YrC&Q~<+$9hPq8{yMf%ygK-3x5M zKfP@Lo(CFu4WSx~>j6&yr#(u&v=xNsft&E2yaqf1Y^Uj;#_hWVf3m)9z6<{^+JD>>6;C@!{MPOxP!?hm)pCBAlo^g?YRvXZ2gbRWsiWPKse|IxGJL@`V&|!e8Pha7%Jsb<%W}Cm sGl4Gw;67x~An62nof?HY1Y8LCKbEqKTz(Zi+5i9m07*qoM6N<$f@?Rw-T(jq literal 7563 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 zMinimal Websocket test app