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```