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.