1d4afb5ceSopenharmony_ci# lws minimal ws - raw proxy
2d4afb5ceSopenharmony_ci
3d4afb5ceSopenharmony_ciThis demonstrates how to use a proxy connection object to bind together two or
4d4afb5ceSopenharmony_cimore connections in a proxy.  This particular example has a ws server that
5d4afb5ceSopenharmony_cicreates an onward "raw" client connection to 127.0.0.1:1234.
6d4afb5ceSopenharmony_ci
7d4afb5ceSopenharmony_ciYou can make a suitable "raw server" with
8d4afb5ceSopenharmony_ci
9d4afb5ceSopenharmony_ci```
10d4afb5ceSopenharmony_ci$ nc -l 127.0.0.1 1234
11d4afb5ceSopenharmony_ci```
12d4afb5ceSopenharmony_ci
13d4afb5ceSopenharmony_ci## build
14d4afb5ceSopenharmony_ci
15d4afb5ceSopenharmony_ci```
16d4afb5ceSopenharmony_ci $ cmake . && make
17d4afb5ceSopenharmony_ci```
18d4afb5ceSopenharmony_ci
19d4afb5ceSopenharmony_ci## Commandline Options
20d4afb5ceSopenharmony_ci
21d4afb5ceSopenharmony_ciOption|Meaning
22d4afb5ceSopenharmony_ci---|---
23d4afb5ceSopenharmony_ci-d|Set logging verbosity
24d4afb5ceSopenharmony_ci
25d4afb5ceSopenharmony_ci
26d4afb5ceSopenharmony_ci## usage
27d4afb5ceSopenharmony_ci
28d4afb5ceSopenharmony_ci```
29d4afb5ceSopenharmony_ci $ ./lws-minimal-ws-raw-proxy
30d4afb5ceSopenharmony_ci[2021/03/04 21:14:45:0540] U: LWS minimal ws-raw proxy | visit http://localhost:7681 (-s = use TLS / https)
31d4afb5ceSopenharmony_ci[2021/03/04 21:14:45:0898] N: LWS: 4.1.99-v4.1.0-294-g2776b4ce65, loglevel 1031
32d4afb5ceSopenharmony_ci[2021/03/04 21:14:45:0902] N: NET CLI SRV H1 H2 WS SS-JSON-POL SSPROX IPV6-on
33d4afb5ceSopenharmony_ci[2021/03/04 21:14:45:1146] N:  ++ [3224086|wsi|0|pipe] (1)
34d4afb5ceSopenharmony_ci[2021/03/04 21:14:45:1203] N:  ++ [3224086|vh|0|netlink] (1)
35d4afb5ceSopenharmony_ci[2021/03/04 21:14:45:1284] N:  ++ [3224086|vh|1|localhost||7681] (2)
36d4afb5ceSopenharmony_ci[2021/03/04 21:14:45:1401] N: lws_socket_bind: nowsi: source ads ::
37d4afb5ceSopenharmony_ci[2021/03/04 21:14:45:1425] N:  ++ [3224086|wsi|1|listen|localhost||7681] (2)
38d4afb5ceSopenharmony_ci[2021/03/04 21:14:46:1164] N:  ++ [3224086|wsisrv|0|adopted] (1)
39d4afb5ceSopenharmony_ci[2021/03/04 21:14:46:2771] N:  ++ [3224086|wsisrv|1|adopted] (2)
40d4afb5ceSopenharmony_ci[2021/03/04 21:14:46:3159] N:  ++ [3224086|wsicli|0|RAW/raw-skt/127.0.0.1] (1)
41d4afb5ceSopenharmony_ci[2021/03/04 21:14:46:3451] N:  ++ [3224086|wsisrv|2|adopted] (3)
42d4afb5ceSopenharmony_ci
43d4afb5ceSopenharmony_ci```
44d4afb5ceSopenharmony_ci
45d4afb5ceSopenharmony_ciVisit http://localhost:7681 in a browser... it loads JS that opens a ws
46d4afb5ceSopenharmony_ciconnection to the proxy's ws server side.  That causes the proxy to open a
47d4afb5ceSopenharmony_ciraw client connection to 127.0.0.1:1234, and forward anything you type in the
48d4afb5ceSopenharmony_cibrowser to the raw server, and anything typed in the raw server (you must
49d4afb5ceSopenharmony_cipress enter on netcat to get it sent) is proxied back to the browser.
50d4afb5ceSopenharmony_ci
51d4afb5ceSopenharmony_ciThe proxy can handle many ws connections each with their individual onward
52d4afb5ceSopenharmony_ciraw client connections, so you could open multiple browser windows.  But you
53d4afb5ceSopenharmony_ciwill need a better "raw server" than netcat, which is restricted to just the
54d4afb5ceSopenharmony_cione peer at a time.