xref: /aosp_15_r20/external/libwebsockets/minimal-examples/dbus-server/minimal-dbus-ws-proxy/README.md (revision 1c60b9aca93fdbc9b5f19b2d2194c91294b22281)
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