1*1c60b9acSAndroid Build Coastguard Worker# lws minimal secure streams SMD
2*1c60b9acSAndroid Build Coastguard Worker
3*1c60b9acSAndroid Build Coastguard WorkerThis application creates a Secure Stream link to LWS SMD, System
4*1c60b9acSAndroid Build Coastguard WorkerMessage Distribution.
5*1c60b9acSAndroid Build Coastguard Worker
6*1c60b9acSAndroid Build Coastguard WorkerThe SS is able to receive system messages matching a specified
7*1c60b9acSAndroid Build Coastguard Workerclass filter, and issue system messages also using SS payload
8*1c60b9acSAndroid Build Coastguard Workersemantics.
9*1c60b9acSAndroid Build Coastguard Worker
10*1c60b9acSAndroid Build Coastguard WorkerBoth a direct api lws_smd participant and an SS based one are instantiated.
11*1c60b9acSAndroid Build Coastguard WorkerThey both filter on system messages.
12*1c60b9acSAndroid Build Coastguard Worker
13*1c60b9acSAndroid Build Coastguard WorkerWhen the Secure Stream is created, it asks to send using normal the SS api.
14*1c60b9acSAndroid Build Coastguard WorkerIn the SS tx callback, it prepares a header and then send a NETWORK class
15*1c60b9acSAndroid Build Coastguard Workermessage.
16*1c60b9acSAndroid Build Coastguard Worker
17*1c60b9acSAndroid Build Coastguard WorkerNumbers of messages received each way and sent is compared after 2s and the
18*1c60b9acSAndroid Build Coastguard Workertest exits with a success or a fail.
19*1c60b9acSAndroid Build Coastguard Worker
20*1c60b9acSAndroid Build Coastguard Worker### Building and testing
21*1c60b9acSAndroid Build Coastguard Worker
22*1c60b9acSAndroid Build Coastguard WorkerBuild with
23*1c60b9acSAndroid Build Coastguard Worker
24*1c60b9acSAndroid Build Coastguard Worker -DLWS_WITH_SECURE_STREAMS=1
25*1c60b9acSAndroid Build Coastguard Worker -DLWS_WITH_SECURE_STREAMS_PROXY_API=1
26*1c60b9acSAndroid Build Coastguard Worker -DLWS_WITH_MINIMAL_EXAMPLES=1
27*1c60b9acSAndroid Build Coastguard Worker
28*1c60b9acSAndroid Build Coastguard WorkerThe run ./bin/lws-minimal-secure-streams-smd alone (local SS and direct SMD tests)
29*1c60b9acSAndroid Build Coastguard Workerand after run ./bin/lws-minimal-secure-streams-proxy in one console and
30*1c60b9acSAndroid Build Coastguard Worker./bin-lws-minimal-secure-streams-smd-client in the other (SS proxy tests)
31*1c60b9acSAndroid Build Coastguard Worker
32*1c60b9acSAndroid Build Coastguard Worker### What's going on in the -client test
33*1c60b9acSAndroid Build Coastguard Worker
34*1c60b9acSAndroid Build Coastguard WorkerThe -client build version contains the test logic as usual, but outsources the
35*1c60b9acSAndroid Build Coastguard Workerpolicy and smd_ server part to the Secure Streams Proxy.
36*1c60b9acSAndroid Build Coastguard Worker
37*1c60b9acSAndroid Build Coastguard Worker - start lws-minimal-secure-streams-proxy first
38*1c60b9acSAndroid Build Coastguard Worker
39*1c60b9acSAndroid Build Coastguard Worker - start lws-minimal-secure-streams-smd-client
40*1c60b9acSAndroid Build Coastguard Worker
41*1c60b9acSAndroid Build Coastguard Worker1) When the client starts, we waits to hear the client state is OPERATIONAL in
42*1c60b9acSAndroid Build Coastguard Workera direct smd participant callback.  When it is, he creates a Secure Stream of
43*1c60b9acSAndroid Build Coastguard Workerstreamtype "_lws_smd", creating a local SS handle.
44*1c60b9acSAndroid Build Coastguard Worker
45*1c60b9acSAndroid Build Coastguard Worker2) The SS creation request is proxied to the SS proxy process over Unix Domain
46*1c60b9acSAndroid Build Coastguard WorkerSockets.  There it creates a Secure Stream object proxyside, and registers as
47*1c60b9acSAndroid Build Coastguard Workeran SMD participant... this smd-related behaviour is tied to the special
48*1c60b9acSAndroid Build Coastguard Workerstreamtype name "_lws_smd".  The SMD registration uses a class mask passed to
49*1c60b9acSAndroid Build Coastguard Workerthe proxy in the tx credit field of the serialization.
50*1c60b9acSAndroid Build Coastguard Worker
51*1c60b9acSAndroid Build Coastguard Worker3) SMD messages that pass the class mask filter are proxied back to the client
52*1c60b9acSAndroid Build Coastguard Workerover the connection.
53*1c60b9acSAndroid Build Coastguard Worker
54*1c60b9acSAndroid Build Coastguard Worker4) SMD messages created at the client are passed to the proxy and added to the
55*1c60b9acSAndroid Build Coastguard Workerproxy's SMD queue, if the same connection's class mask accepts the message then
56*1c60b9acSAndroid Build Coastguard Workerit will be proxied back to the client same as other messages.
57*1c60b9acSAndroid Build Coastguard Worker
58*1c60b9acSAndroid Build Coastguard WorkerThe minimal example produces a variety of messages on the SS link, including
59*1c60b9acSAndroid Build Coastguard WorkerCPD detect trigger.  The SS link is set up to only accept messages of classes
60*1c60b9acSAndroid Build Coastguard WorkerLWSSMDCL_SYSTEM_STATE and LWSSMDCL_NETWORK, INTERACTION type messages are
61*1c60b9acSAndroid Build Coastguard Workernot accepted.
62*1c60b9acSAndroid Build Coastguard Worker
63*1c60b9acSAndroid Build Coastguard Worker### multi via proxy
64*1c60b9acSAndroid Build Coastguard Worker
65*1c60b9acSAndroid Build Coastguard WorkerIf the -client version is run with `--multi`, it spawns four worker processes
66*1c60b9acSAndroid Build Coastguard Workerwhich send and confirm SMD messages between each other via the SS proxy.
67*1c60b9acSAndroid Build Coastguard Worker
68*1c60b9acSAndroid Build Coastguard Worker## build
69*1c60b9acSAndroid Build Coastguard Worker
70*1c60b9acSAndroid Build Coastguard Worker```
71*1c60b9acSAndroid Build Coastguard Worker $ cmake . && make
72*1c60b9acSAndroid Build Coastguard Worker```
73*1c60b9acSAndroid Build Coastguard Worker
74*1c60b9acSAndroid Build Coastguard Worker## usage
75*1c60b9acSAndroid Build Coastguard Worker
76*1c60b9acSAndroid Build Coastguard WorkerCommandline option|Meaning
77*1c60b9acSAndroid Build Coastguard Worker---|---
78*1c60b9acSAndroid Build Coastguard Worker-d <loglevel>|Debug verbosity in decimal, eg, -d15
79*1c60b9acSAndroid Build Coastguard Worker--multi|Fork four worker processes that send and check messages to each other over sspc proxy
80*1c60b9acSAndroid Build Coastguard Worker
81*1c60b9acSAndroid Build Coastguard Worker```
82*1c60b9acSAndroid Build Coastguard Worker$ ./bin/lws-minimal-secure-streams-smd -d 1151
83*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:5148] U: LWS Secure Streams SMD test client [-d<verb>]
84*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:5601] I: Initial logging level 1151
85*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:5605] I: Libwebsockets version: 4.0.99-v4.0.0-174-ga8a2eb954 v4.0.0-174-ga8a2eb954
86*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:5607] I: IPV6 not compiled in
87*1c60b9acSAndroid Build Coastguard Worker...
88*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:7906] D: _lws_state_transition: system: changed 11 'AUTH2' -> 12 'OPERATIONAL'
89*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:7906] D: _realloc: size 81: lws_smd_msg_alloc
90*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:7907] I: lws_cancel_service
91*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:7912] I: lws_state_transition_steps: CONTEXT_CREATED -> OPERATIONAL
92*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:7919] N: myss_tx: sending SS smd
93*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:7940] D: _realloc: size 84: lws_smd_msg_alloc
94*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:7944] I: lws_cancel_service
95*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:7966] D: direct_smd_cb: class: 0x2, ts: 3139600721554
96*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:7972] D:
97*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:7990] D: 0000: 7B 22 73 74 61 74 65 22 3A 22 49 4E 49 54 49 41    {"state":"INITIA
98*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:7998] D: 0010: 4C 49 5A 45 44 22 7D                               LIZED"}
99*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:8001] D:
100*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:8016] I: myss_rx: len 39, flags: 3
101*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:8018] I:
102*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:8021] I: 0000: 00 00 00 00 00 00 00 02 00 00 02 DA FE C9 26 92    ..............&.
103*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:8022] I: 0010: 7B 22 73 74 61 74 65 22 3A 22 49 4E 49 54 49 41    {"state":"INITIA
104*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:8023] I: 0020: 4C 49 5A 45 44 22 7D                               LIZED"}
105*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:8023] I:
106*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:8029] D: direct_smd_cb: class: 0x2, ts: 3139600724243
107*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:8029] D:
108*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:8030] D: 0000: 7B 22 73 74 61 74 65 22 3A 22 49 46 41 43 45 5F    {"state":"IFACE_
109*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:8031] D: 0010: 43 4F 4C 44 50 4C 55 47 22 7D                      COLDPLUG"}
110*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:8032] D:
111*1c60b9acSAndroid Build Coastguard Worker...
112*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:8112] D: direct_smd_cb: class: 0x4, ts: 3139600732952
113*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:8112] D:
114*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:8114] D: 0000: 7B 22 73 6F 6D 74 68 69 6E 67 22 3A 22 6E 6F 74    {"somthing":"not
115*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:8115] D: 0010: 73 65 65 6E 62 79 73 73 72 78 22 7D                seenbyssrx"}
116*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:54:8115] D:
117*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:57:5823] I: 11 12 1
118*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:57:5838] I: lws_context_destroy: ctx 0x4f61db0
119*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:57:5849] D: _lws_state_transition: system: changed 12 'OPERATIONAL' -> 13 'POLICY_INVALID'
120*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:57:5851] D: _realloc: size 84: lws_smd_msg_alloc
121*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:57:5853] I: lws_cancel_service
122*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:57:5871] I: lws_destroy_event_pipe
123*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:57:5906] I: lws_pt_destroy: pt destroyed
124*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:57:5913] I: lws_context_destroy2: ctx 0x4f61db0
125*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:57:5936] D: lwsac_free: head (nil)
126*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:57:5947] D: 0x455970: post vh listl
127*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:57:5950] D: 0x455970: post pdl
128*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:57:5961] D: 0x455970: baggage
129*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:57:5968] D: 0x455970: post dc2
130*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:57:6010] D: lws_context_destroy3: ctx 0x4f61db0 freed
131*1c60b9acSAndroid Build Coastguard Worker[2020/06/18 21:44:57:6014] U: Completed: OK
132*1c60b9acSAndroid Build Coastguard Worker```