xref: /aosp_15_r20/external/libwebsockets/include/libwebsockets.hxx (revision 1c60b9aca93fdbc9b5f19b2d2194c91294b22281)
1*1c60b9acSAndroid Build Coastguard Worker /*
2*1c60b9acSAndroid Build Coastguard Worker  * libwebsockets - small server side websockets and web server implementation
3*1c60b9acSAndroid Build Coastguard Worker  *
4*1c60b9acSAndroid Build Coastguard Worker  * Copyright (C) 2020 Andy Green <[email protected]>
5*1c60b9acSAndroid Build Coastguard Worker  *
6*1c60b9acSAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a copy
7*1c60b9acSAndroid Build Coastguard Worker  * of this software and associated documentation files (the "Software"), to
8*1c60b9acSAndroid Build Coastguard Worker  * deal in the Software without restriction, including without limitation the
9*1c60b9acSAndroid Build Coastguard Worker  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10*1c60b9acSAndroid Build Coastguard Worker  * sell copies of the Software, and to permit persons to whom the Software is
11*1c60b9acSAndroid Build Coastguard Worker  * furnished to do so, subject to the following conditions:
12*1c60b9acSAndroid Build Coastguard Worker  *
13*1c60b9acSAndroid Build Coastguard Worker  * The above copyright notice and this permission notice shall be included in
14*1c60b9acSAndroid Build Coastguard Worker  * all copies or substantial portions of the Software.
15*1c60b9acSAndroid Build Coastguard Worker  *
16*1c60b9acSAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17*1c60b9acSAndroid Build Coastguard Worker  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18*1c60b9acSAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19*1c60b9acSAndroid Build Coastguard Worker  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20*1c60b9acSAndroid Build Coastguard Worker  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21*1c60b9acSAndroid Build Coastguard Worker  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
22*1c60b9acSAndroid Build Coastguard Worker  * IN THE SOFTWARE.
23*1c60b9acSAndroid Build Coastguard Worker  *
24*1c60b9acSAndroid Build Coastguard Worker  * C++ classes for Secure Streams
25*1c60b9acSAndroid Build Coastguard Worker  */
26*1c60b9acSAndroid Build Coastguard Worker 
27*1c60b9acSAndroid Build Coastguard Worker #include <map>
28*1c60b9acSAndroid Build Coastguard Worker #include <set>
29*1c60b9acSAndroid Build Coastguard Worker #include <list>
30*1c60b9acSAndroid Build Coastguard Worker #include <string>
31*1c60b9acSAndroid Build Coastguard Worker #include <vector>
32*1c60b9acSAndroid Build Coastguard Worker #include <exception>
33*1c60b9acSAndroid Build Coastguard Worker 
34*1c60b9acSAndroid Build Coastguard Worker #include "libwebsockets.h"
35*1c60b9acSAndroid Build Coastguard Worker 
36*1c60b9acSAndroid Build Coastguard Worker class lss;
37*1c60b9acSAndroid Build Coastguard Worker 
38*1c60b9acSAndroid Build Coastguard Worker /*
39*1c60b9acSAndroid Build Coastguard Worker  * Exception subclass for lss-specific issues
40*1c60b9acSAndroid Build Coastguard Worker  */
41*1c60b9acSAndroid Build Coastguard Worker 
42*1c60b9acSAndroid Build Coastguard Worker class lssException : public std::exception
43*1c60b9acSAndroid Build Coastguard Worker {
44*1c60b9acSAndroid Build Coastguard Worker private:
45*1c60b9acSAndroid Build Coastguard Worker 	std::string details;
46*1c60b9acSAndroid Build Coastguard Worker public:
lssException(std::string _details)47*1c60b9acSAndroid Build Coastguard Worker 	lssException(std::string _details) { details = _details; }
~lssException()48*1c60b9acSAndroid Build Coastguard Worker 	~lssException() throw() { }
what() const49*1c60b9acSAndroid Build Coastguard Worker 	virtual const char *what() const throw() { return details.c_str(); }
50*1c60b9acSAndroid Build Coastguard Worker };
51*1c60b9acSAndroid Build Coastguard Worker 
52*1c60b9acSAndroid Build Coastguard Worker typedef struct lssbuf {
53*1c60b9acSAndroid Build Coastguard Worker 	uint8_t				*buf;
54*1c60b9acSAndroid Build Coastguard Worker 	size_t				len;
55*1c60b9acSAndroid Build Coastguard Worker } lssbuf_t;
56*1c60b9acSAndroid Build Coastguard Worker 
57*1c60b9acSAndroid Build Coastguard Worker class lssAc
58*1c60b9acSAndroid Build Coastguard Worker {
59*1c60b9acSAndroid Build Coastguard Worker private:
60*1c60b9acSAndroid Build Coastguard Worker 	struct lwsac			*ac;
61*1c60b9acSAndroid Build Coastguard Worker 	struct lwsac			*iter;
lssAc()62*1c60b9acSAndroid Build Coastguard Worker 	lssAc() { ac = NULL; }
~lssAc()63*1c60b9acSAndroid Build Coastguard Worker 	~lssAc() { lwsac_free(&ac); }
64*1c60b9acSAndroid Build Coastguard Worker 
65*1c60b9acSAndroid Build Coastguard Worker public:
66*1c60b9acSAndroid Build Coastguard Worker 	void append(lssbuf_t *lb);
67*1c60b9acSAndroid Build Coastguard Worker 	void start(bool atomic);
68*1c60b9acSAndroid Build Coastguard Worker 	int get(lssbuf_t *lb);
69*1c60b9acSAndroid Build Coastguard Worker };
70*1c60b9acSAndroid Build Coastguard Worker 
71*1c60b9acSAndroid Build Coastguard Worker /*
72*1c60b9acSAndroid Build Coastguard Worker  * Fixed userdata priv used with ss creation... userdata lives in the lss
73*1c60b9acSAndroid Build Coastguard Worker  * subclasses' members
74*1c60b9acSAndroid Build Coastguard Worker  */
75*1c60b9acSAndroid Build Coastguard Worker 
76*1c60b9acSAndroid Build Coastguard Worker class lssPriv
77*1c60b9acSAndroid Build Coastguard Worker {
78*1c60b9acSAndroid Build Coastguard Worker public:
79*1c60b9acSAndroid Build Coastguard Worker 	struct lws_ss_handle		*m_ss;
80*1c60b9acSAndroid Build Coastguard Worker 	void				*m_plss;
81*1c60b9acSAndroid Build Coastguard Worker };
82*1c60b9acSAndroid Build Coastguard Worker 
83*1c60b9acSAndroid Build Coastguard Worker #define userobj_to_lss(uo) ((lss *)(((lssPriv *)userobj)->m_plss))
84*1c60b9acSAndroid Build Coastguard Worker 
85*1c60b9acSAndroid Build Coastguard Worker /*
86*1c60b9acSAndroid Build Coastguard Worker  * The completion callback... it's called once, and state will be one of
87*1c60b9acSAndroid Build Coastguard Worker  *
88*1c60b9acSAndroid Build Coastguard Worker  * LWSSSCS_QOS_ACK_REMOTE:     it completed OK
89*1c60b9acSAndroid Build Coastguard Worker  * LWSSSCS_DESTROYING:         we didn't complete
90*1c60b9acSAndroid Build Coastguard Worker  * LWSSSCS_ALL_RETRIES_FAILED:  "
91*1c60b9acSAndroid Build Coastguard Worker  * LWSSSCS_QOS_NACK_REMOTE:     "
92*1c60b9acSAndroid Build Coastguard Worker  */
93*1c60b9acSAndroid Build Coastguard Worker 
94*1c60b9acSAndroid Build Coastguard Worker typedef int (*lsscomp_t)(lss *lss, lws_ss_constate_t state, void *arg);
95*1c60b9acSAndroid Build Coastguard Worker 
96*1c60b9acSAndroid Build Coastguard Worker /*
97*1c60b9acSAndroid Build Coastguard Worker  * Base class for Secure Stream objects
98*1c60b9acSAndroid Build Coastguard Worker  */
99*1c60b9acSAndroid Build Coastguard Worker 
100*1c60b9acSAndroid Build Coastguard Worker class lss
101*1c60b9acSAndroid Build Coastguard Worker {
102*1c60b9acSAndroid Build Coastguard Worker public:
103*1c60b9acSAndroid Build Coastguard Worker 	lss(lws_ctx_t _ctx, std::string _uri, lsscomp_t _comp, bool _psh,
104*1c60b9acSAndroid Build Coastguard Worker 	    lws_sscb_rx rx, lws_sscb_tx tx, lws_sscb_state state);
105*1c60b9acSAndroid Build Coastguard Worker 	virtual ~lss();
106*1c60b9acSAndroid Build Coastguard Worker 	int call_completion(lws_ss_constate_t state);
107*1c60b9acSAndroid Build Coastguard Worker 
108*1c60b9acSAndroid Build Coastguard Worker 	lsscomp_t			comp;
109*1c60b9acSAndroid Build Coastguard Worker 	struct lws_ss_handle		*m_ss;
110*1c60b9acSAndroid Build Coastguard Worker 	uint64_t			rxlen;
111*1c60b9acSAndroid Build Coastguard Worker 	lws_usec_t			us_start;
112*1c60b9acSAndroid Build Coastguard Worker 
113*1c60b9acSAndroid Build Coastguard Worker private:
114*1c60b9acSAndroid Build Coastguard Worker 	lws_ctx_t			ctx;
115*1c60b9acSAndroid Build Coastguard Worker 	char				*uri;
116*1c60b9acSAndroid Build Coastguard Worker 	lws_ss_policy_t			pol;
117*1c60b9acSAndroid Build Coastguard Worker 	bool				comp_done;
118*1c60b9acSAndroid Build Coastguard Worker };
119*1c60b9acSAndroid Build Coastguard Worker 
120*1c60b9acSAndroid Build Coastguard Worker /*
121*1c60b9acSAndroid Build Coastguard Worker  * Subclass of lss for atomic messages on heap
122*1c60b9acSAndroid Build Coastguard Worker  */
123*1c60b9acSAndroid Build Coastguard Worker 
124*1c60b9acSAndroid Build Coastguard Worker class lssMsg : public lss
125*1c60b9acSAndroid Build Coastguard Worker {
126*1c60b9acSAndroid Build Coastguard Worker public:
127*1c60b9acSAndroid Build Coastguard Worker 	lssMsg(lws_ctx_t _ctx, lsscomp_t _comp, std::string _uri);
128*1c60b9acSAndroid Build Coastguard Worker 	virtual ~lssMsg();
129*1c60b9acSAndroid Build Coastguard Worker };
130*1c60b9acSAndroid Build Coastguard Worker 
131*1c60b9acSAndroid Build Coastguard Worker /*
132*1c60b9acSAndroid Build Coastguard Worker  * Subclass of lss for file transactions
133*1c60b9acSAndroid Build Coastguard Worker  */
134*1c60b9acSAndroid Build Coastguard Worker 
135*1c60b9acSAndroid Build Coastguard Worker class lssFile : public lss
136*1c60b9acSAndroid Build Coastguard Worker {
137*1c60b9acSAndroid Build Coastguard Worker public:
138*1c60b9acSAndroid Build Coastguard Worker 	lssFile(lws_ctx_t _ctx, std::string _uri, std::string _path,
139*1c60b9acSAndroid Build Coastguard Worker 		lsscomp_t _comp, bool _psh);
140*1c60b9acSAndroid Build Coastguard Worker 	virtual ~lssFile();
141*1c60b9acSAndroid Build Coastguard Worker 	lws_ss_state_return_t write(const uint8_t *buf, size_t len, int flags);
142*1c60b9acSAndroid Build Coastguard Worker 
143*1c60b9acSAndroid Build Coastguard Worker 	std::string			path;
144*1c60b9acSAndroid Build Coastguard Worker 
145*1c60b9acSAndroid Build Coastguard Worker private:
146*1c60b9acSAndroid Build Coastguard Worker 	lws_filefd_type			fd;
147*1c60b9acSAndroid Build Coastguard Worker 	bool				push;
148*1c60b9acSAndroid Build Coastguard Worker };
149