1/*
2 * lws-minimal-secure-streams-server
3 *
4 * Written in 2010-2020 by Andy Green <andy@warmcat.com>
5 *
6 * This file is made available under the Creative Commons CC0 1.0
7 * Universal Public Domain Dedication.
8 */
9
10#include <libwebsockets.h>
11
12extern int interrupted, bad;
13
14typedef struct myss {
15	struct lws_ss_handle 	*ss;
16	void			*opaque_data;
17	/* ... application specific state ... */
18	lws_sorted_usec_list_t	sul;
19
20	int			count;
21} myss_t;
22
23/* secure streams payload interface */
24
25static lws_ss_state_return_t
26myss_rx(void *userobj, const uint8_t *buf, size_t len, int flags)
27{
28//	myss_t *m = (myss_t *)userobj;
29
30	lwsl_user("%s: len %d, flags: %d\n", __func__, (int)len, flags);
31	lwsl_hexdump_info(buf, len);
32
33	/*
34	 * If we received the whole message, for our example it means
35	 * we are done.
36	 */
37	if (flags & LWSSS_FLAG_EOM) {
38		bad = 0;
39		interrupted = 1;
40	}
41
42	return 0;
43}
44
45static lws_ss_state_return_t
46myss_tx(void *userobj, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len,
47	int *flags)
48{
49	//myss_t *m = (myss_t *)userobj;
50
51	return LWSSSSRET_TX_DONT_SEND; /* don't want to write */
52}
53
54static lws_ss_state_return_t
55myss_state(void *userobj, void *sh, lws_ss_constate_t state,
56	   lws_ss_tx_ordinal_t ack)
57{
58	myss_t *m = (myss_t *)userobj;
59
60	lwsl_user("%s: %p %s, ord 0x%x\n", __func__, m->ss,
61		  lws_ss_state_name((int)state), (unsigned int)ack);
62
63	switch (state) {
64	case LWSSSCS_CREATING:
65		return lws_ss_request_tx(m->ss);
66		break;
67	case LWSSSCS_ALL_RETRIES_FAILED:
68		/* if we're out of retries, we want to close the app and FAIL */
69		interrupted = 1;
70		break;
71	default:
72		break;
73	}
74
75	return 0;
76}
77
78const lws_ss_info_t ssi_client = {
79	.handle_offset			= offsetof(myss_t, ss),
80	.opaque_user_data_offset	= offsetof(myss_t, opaque_data),
81	.streamtype			= "mintest",
82	.rx				= myss_rx,
83	.tx				= myss_tx,
84	.state				= myss_state,
85	.user_alloc			= sizeof(myss_t),
86};
87