1*1c60b9acSAndroid Build Coastguard Worker# lws minimal dbus ws proxy 2*1c60b9acSAndroid Build Coastguard Worker 3*1c60b9acSAndroid Build Coastguard WorkerThis is an application which presents a DBUS server on one side, and a 4*1c60b9acSAndroid Build Coastguard Workerwebsocket client proxy on the other. 5*1c60b9acSAndroid Build Coastguard Worker 6*1c60b9acSAndroid Build Coastguard WorkerYou connect to it over DBUS, send a Connect method on its interface giving 7*1c60b9acSAndroid Build Coastguard Workera URI and a ws subprotocol name. 8*1c60b9acSAndroid Build Coastguard Worker 9*1c60b9acSAndroid Build Coastguard WorkerIt replies with a string "Connecting" if all is well. 10*1c60b9acSAndroid Build Coastguard Worker 11*1c60b9acSAndroid Build Coastguard WorkerConnection progress (including close) is then provided using type 7 messages 12*1c60b9acSAndroid Build Coastguard Workersent back to the dbus client. 13*1c60b9acSAndroid Build Coastguard Worker 14*1c60b9acSAndroid Build Coastguard WorkerPayload from the ws connection is provided using type 6 messages sent back to 15*1c60b9acSAndroid Build Coastguard Workerthe dbus client. 16*1c60b9acSAndroid Build Coastguard Worker 17*1c60b9acSAndroid Build Coastguard Worker## build 18*1c60b9acSAndroid Build Coastguard Worker 19*1c60b9acSAndroid Build Coastguard WorkerUsing libdbus requires additional non-default include paths setting, same as 20*1c60b9acSAndroid Build Coastguard Workeris necessary for lws build described in ./lib/roles/dbus/README.md 21*1c60b9acSAndroid Build Coastguard Worker 22*1c60b9acSAndroid Build Coastguard WorkerCMake can guess one path and the library name usually, see the README above 23*1c60b9acSAndroid Build Coastguard Workerfor details of how to override for custom libdbus and cross build. 24*1c60b9acSAndroid Build Coastguard Worker 25*1c60b9acSAndroid Build Coastguard WorkerFedora example: 26*1c60b9acSAndroid Build Coastguard Worker``` 27*1c60b9acSAndroid Build Coastguard Worker$ cmake .. -DLWS_DBUS_INCLUDE2="/usr/lib64/dbus-1.0/include" 28*1c60b9acSAndroid Build Coastguard Worker$ make 29*1c60b9acSAndroid Build Coastguard Worker``` 30*1c60b9acSAndroid Build Coastguard Worker 31*1c60b9acSAndroid Build Coastguard WorkerUbuntu example: 32*1c60b9acSAndroid Build Coastguard Worker``` 33*1c60b9acSAndroid Build Coastguard Worker$ cmake .. -DLWS_DBUS_INCLUDE2="/usr/lib/x86_64-linux-gnu/dbus-1.0/include" 34*1c60b9acSAndroid Build Coastguard Worker$ make 35*1c60b9acSAndroid Build Coastguard Worker``` 36*1c60b9acSAndroid Build Coastguard Worker 37*1c60b9acSAndroid Build Coastguard Worker## Configuration 38*1c60b9acSAndroid Build Coastguard Worker 39*1c60b9acSAndroid Build Coastguard WorkerThe dbus-ws-proxy server tries to register its actual bus name with the SYSTEM 40*1c60b9acSAndroid Build Coastguard Workerbus in DBUS. If it fails, eg because of insufficient permissions on the user, 41*1c60b9acSAndroid Build Coastguard Workerthen it continues without that and starts its own daemon normally. 42*1c60b9acSAndroid Build Coastguard Worker 43*1c60b9acSAndroid Build Coastguard WorkerThe main dbus daemon must be told how to accept these registrations if that's 44*1c60b9acSAndroid Build Coastguard Workerwhat you want. A config file is provided that tells dbus to allow the 45*1c60b9acSAndroid Build Coastguard Workerwell-known busname for this daemon to be registered, but only by root. 46*1c60b9acSAndroid Build Coastguard Worker 47*1c60b9acSAndroid Build Coastguard Worker``` 48*1c60b9acSAndroid Build Coastguard Worker$ sudo cp org.libwebsockets.wsclientproxy.conf /etc/dbus-1/system.d 49*1c60b9acSAndroid Build Coastguard Worker$ sudo systemctl restart dbus 50*1c60b9acSAndroid Build Coastguard Worker``` 51*1c60b9acSAndroid Build Coastguard Worker 52*1c60b9acSAndroid Build Coastguard Worker## usage 53*1c60b9acSAndroid Build Coastguard Worker 54*1c60b9acSAndroid Build Coastguard WorkerRun the dbus-ws-proxy server, then start lws-minimal-dbus-ws-proxy-testclient in 55*1c60b9acSAndroid Build Coastguard Workeranother terminal. 56*1c60b9acSAndroid Build Coastguard Worker 57*1c60b9acSAndroid Build Coastguard WorkerThis test app sends a random line drawing message to the mirror example on 58*1c60b9acSAndroid Build Coastguard Workerhttps://libwebsockets.org/testserver every couple of seconds, and displays 59*1c60b9acSAndroid Build Coastguard Workerany received messages (such as its own sends mirrored back, or anything 60*1c60b9acSAndroid Build Coastguard Workerdrawn in the canvas in a browser). 61*1c60b9acSAndroid Build Coastguard Worker 62*1c60b9acSAndroid Build Coastguard Worker``` 63*1c60b9acSAndroid Build Coastguard Worker $ sudo ./lws-minimal-dbus-ws-proxy-testclient 64*1c60b9acSAndroid Build Coastguard Worker[2018/10/07 10:05:29:2084] USER: LWS minimal DBUS ws proxy testclient 65*1c60b9acSAndroid Build Coastguard Worker[2018/10/07 10:05:29:2345] NOTICE: Creating Vhost 'default' port 0, 1 protocols, IPv6 off 66*1c60b9acSAndroid Build Coastguard Worker[2018/10/07 10:05:29:2424] USER: create_dbus_client_conn: connecting to 'unix:abstract=org.libwebsockets.wsclientproxy' 67*1c60b9acSAndroid Build Coastguard Worker[2018/10/07 10:05:29:2997] NOTICE: state_transition: 0x5679720: from state 0 -> 1 68*1c60b9acSAndroid Build Coastguard Worker[2018/10/07 10:05:29:2999] NOTICE: create_dbus_client_conn: created OK 69*1c60b9acSAndroid Build Coastguard Worker[2018/10/07 10:05:29:3232] USER: remote_method_call: requesting proxy connection wss://libwebsockets.org/ lws-mirror-protocol 70*1c60b9acSAndroid Build Coastguard Worker[2018/10/07 10:05:29:3450] NOTICE: state_transition: 0x5679720: from state 1 -> 2 71*1c60b9acSAndroid Build Coastguard Worker[2018/10/07 10:05:29:5972] USER: pending_call_notify: received 'Connecting' 72*1c60b9acSAndroid Build Coastguard Worker[2018/10/07 10:05:31:3387] NOTICE: state_transition: 0x5679720: from state 2 -> 3 73*1c60b9acSAndroid Build Coastguard Worker[2018/10/07 10:05:33:6672] USER: filter: Received 'd #B0DC51 115 177 166 283;' 74*1c60b9acSAndroid Build Coastguard Worker[2018/10/07 10:05:35:9723] USER: filter: Received 'd #E87CCD 9 192 106 235;' 75*1c60b9acSAndroid Build Coastguard Worker[2018/10/07 10:05:38:2784] USER: filter: Received 'd #E2A9E3 379 290 427 62;' 76*1c60b9acSAndroid Build Coastguard Worker[2018/10/07 10:05:39:5833] USER: filter: Received 'd #B127F8 52 126 60 226;' 77*1c60b9acSAndroid Build Coastguard Worker[2018/10/07 10:05:41:8908] USER: filter: Received 'd #0E0F76 429 267 8 11;' 78*1c60b9acSAndroid Build Coastguard Worker... 79*1c60b9acSAndroid Build Coastguard Worker``` 80*1c60b9acSAndroid Build Coastguard Worker 81*1c60b9acSAndroid Build Coastguard Worker## ws proxy DBUS details 82*1c60b9acSAndroid Build Coastguard Worker 83*1c60b9acSAndroid Build Coastguard Worker### Fixed details 84*1c60b9acSAndroid Build Coastguard Worker 85*1c60b9acSAndroid Build Coastguard WorkerItem|Value 86*1c60b9acSAndroid Build Coastguard Worker---|--- 87*1c60b9acSAndroid Build Coastguard WorkerAddress|unix:abstract=org.libwebsockets.wsclientproxy 88*1c60b9acSAndroid Build Coastguard WorkerInterface|org.libwebsockets.wsclientproxy 89*1c60b9acSAndroid Build Coastguard WorkerBus Name|org.libwebsockets.wsclientproxy 90*1c60b9acSAndroid Build Coastguard WorkerObject path|/org/libwebsockets/wsclientproxy 91*1c60b9acSAndroid Build Coastguard Worker 92*1c60b9acSAndroid Build Coastguard Worker### Interface Methods 93*1c60b9acSAndroid Build Coastguard Worker 94*1c60b9acSAndroid Build Coastguard WorkerMethod|Arguments|Returns 95*1c60b9acSAndroid Build Coastguard Worker---|---|--- 96*1c60b9acSAndroid Build Coastguard WorkerConnect|s: ws URI, s: ws subprotocol name|"Bad Uri", "Connecting" or "Failed" 97*1c60b9acSAndroid Build Coastguard WorkerSend|s: payload|Empty message if no problem, or error message 98*1c60b9acSAndroid Build Coastguard Worker 99*1c60b9acSAndroid Build Coastguard WorkerWhen Connecting, the actual connection happens asynchronously if the initial 100*1c60b9acSAndroid Build Coastguard Workerconnection attempt doesn't fail immediately. If it's continuing in the 101*1c60b9acSAndroid Build Coastguard Workerbackground, the reply will have been "Connecting". 102*1c60b9acSAndroid Build Coastguard Worker 103*1c60b9acSAndroid Build Coastguard Worker### Signals 104*1c60b9acSAndroid Build Coastguard Worker 105*1c60b9acSAndroid Build Coastguard WorkerSignal Name|Argument|Meaning 106*1c60b9acSAndroid Build Coastguard Worker---|---|--- 107*1c60b9acSAndroid Build Coastguard WorkerReceive|s: payload|Received data from the ws link 108*1c60b9acSAndroid Build Coastguard WorkerStatus|s: status|See table below 109*1c60b9acSAndroid Build Coastguard Worker 110*1c60b9acSAndroid Build Coastguard WorkerStatus String|Meaning 111*1c60b9acSAndroid Build Coastguard Worker---|--- 112*1c60b9acSAndroid Build Coastguard Worker"ws client connection error"|The ws connection attempt ended with a fatal error 113*1c60b9acSAndroid Build Coastguard Worker"ws client connection established"|The ws connection attempt succeeded 114*1c60b9acSAndroid Build Coastguard Worker"ws client connection closed"|The ws connection has closed 115*1c60b9acSAndroid Build Coastguard Worker 116