libwebsockets
Lightweight C library for HTML5 websockets
lws-adopt.h
Go to the documentation of this file.
1 /*
2  * libwebsockets - small server side websockets and web server implementation
3  *
4  * Copyright (C) 2010 - 2019 Andy Green <andy@warmcat.com>
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to
8  * deal in the Software without restriction, including without limitation the
9  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10  * sell copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
22  * IN THE SOFTWARE.
23  */
24 
34 
48 LWS_VISIBLE LWS_EXTERN struct lws *
49 lws_adopt_socket(struct lws_context *context, lws_sockfd_type accept_fd);
50 
64 LWS_VISIBLE LWS_EXTERN struct lws *
65 lws_adopt_socket_vhost(struct lws_vhost *vh, lws_sockfd_type accept_fd);
66 
67 typedef enum {
68  LWS_ADOPT_RAW_FILE_DESC = 0, /* convenience constant */
69  LWS_ADOPT_HTTP = 1, /* flag: absent implies RAW */
70  LWS_ADOPT_SOCKET = 2, /* flag: absent implies file */
71  LWS_ADOPT_ALLOW_SSL = 4, /* flag: use tls */
72  LWS_ADOPT_FLAG_UDP = 16, /* flag: socket is UDP */
73  LWS_ADOPT_FLAG_RAW_PROXY = 32, /* flag: raw proxy */
74 
77 
78 typedef union {
82 
83 #if defined(LWS_ESP_PLATFORM)
84 #include <lwip/sockets.h>
85 #endif
86 
87 typedef union {
88 #if defined(LWS_WITH_IPV6)
89  struct sockaddr_in6 sa6;
90 #else
91 #if defined(LWS_ESP_PLATFORM)
92  uint8_t _pad_sa6[28];
93 #endif
94 #endif
95  struct sockaddr_in sa4;
97 
98 #define sa46_sockaddr(_sa46) ((struct sockaddr *)(_sa46))
99 
100 #if defined(LWS_WITH_IPV6)
101 #define sa46_socklen(_sa46) (socklen_t)((_sa46)->sa4.sin_family == AF_INET ? \
102  sizeof(struct sockaddr_in) : \
103  sizeof(struct sockaddr_in6))
104 #define sa46_sockport(_sa46, _sp) { if ((_sa46)->sa4.sin_family == AF_INET) \
105  (_sa46)->sa4.sin_port = (_sp); else \
106  (_sa46)->sa6.sin6_port = (_sp); }
107 #define sa46_address(_sa46) ((uint8_t *)((_sa46)->sa4.sin_family == AF_INET ? \
108  &_sa46->sa4.sin_addr : &_sa46->sa6.sin6_addr ))
109 #else
110 #define sa46_socklen(_sa46) (socklen_t)sizeof(struct sockaddr_in)
111 #define sa46_sockport(_sa46, _sp) (_sa46)->sa4.sin_port = (_sp)
112 #define sa46_address(_sa46) (uint8_t *)&_sa46->sa4.sin_addr
113 #endif
114 
115 #define sa46_address_len(_sa46) ((_sa46)->sa4.sin_family == AF_INET ? 4 : 16)
116 
117 #if defined(LWS_WITH_UDP)
118 struct lws_udp {
119  lws_sockaddr46 sa46;
120  lws_sockaddr46 sa46_pending;
121  uint8_t connected:1;
122 };
123 #endif
124 
144 LWS_VISIBLE LWS_EXTERN struct lws *
146  lws_sock_file_fd_type fd, const char *vh_prot_name,
147  struct lws *parent);
148 
149 typedef struct lws_adopt_desc {
150  struct lws_vhost *vh;
155  const char *vh_prot_name;
157  struct lws *parent;
159  void *opaque;
161  const char *fi_wsi_name;
165 
188 LWS_VISIBLE LWS_EXTERN struct lws *
190 
214 LWS_VISIBLE LWS_EXTERN struct lws *
215 lws_adopt_socket_readbuf(struct lws_context *context, lws_sockfd_type accept_fd,
216  const char *readbuf, size_t len);
239 LWS_VISIBLE LWS_EXTERN struct lws *
240 lws_adopt_socket_vhost_readbuf(struct lws_vhost *vhost,
241  lws_sockfd_type accept_fd, const char *readbuf,
242  size_t len);
243 
244 #define LWS_CAUDP_BIND (1 << 0)
245 #define LWS_CAUDP_BROADCAST (1 << 1)
246 #define LWS_CAUDP_PF_PACKET (1 << 2)
247 
248 #if defined(LWS_WITH_UDP)
270 LWS_VISIBLE LWS_EXTERN struct lws *
271 lws_create_adopt_udp(struct lws_vhost *vhost, const char *ads, int port,
272  int flags, const char *protocol_name, const char *ifname,
273  struct lws *parent_wsi, void *opaque,
274  const lws_retry_bo_t *retry_policy, const char *fi_wsi_name);
275 #endif
276 
277 
278 
const char * fi_wsi_name
Definition: lws-adopt.h:161
struct lws * parent
Definition: lws-adopt.h:157
const char * vh_prot_name
Definition: lws-adopt.h:155
lws_sockfd_type sockfd
Definition: lws-adopt.h:79
void * opaque
Definition: lws-adopt.h:159
lws_filefd_type filefd
Definition: lws-adopt.h:80
lws_sock_file_fd_type fd
Definition: lws-adopt.h:153
lws_adoption_type type
Definition: lws-adopt.h:151
struct lws_vhost * vh
Definition: lws-adopt.h:150
LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_socket_vhost(struct lws_vhost *vh, lws_sockfd_type accept_fd)
struct lws_adopt_desc lws_adopt_desc_t
LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_socket_vhost_readbuf(struct lws_vhost *vhost, lws_sockfd_type accept_fd, const char *readbuf, size_t len)
lws_adoption_type
Definition: lws-adopt.h:67
LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_socket_readbuf(struct lws_context *context, lws_sockfd_type accept_fd, const char *readbuf, size_t len)
LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_socket(struct lws_context *context, lws_sockfd_type accept_fd)
LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_descriptor_vhost(struct lws_vhost *vh, lws_adoption_type type, lws_sock_file_fd_type fd, const char *vh_prot_name, struct lws *parent)
LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_descriptor_vhost_via_info(const lws_adopt_desc_t *info)
@ LWS_ADOPT_HTTP
Definition: lws-adopt.h:69
@ LWS_ADOPT_SOCKET
Definition: lws-adopt.h:70
@ LWS_ADOPT_FLAG_RAW_PROXY
Definition: lws-adopt.h:73
@ LWS_ADOPT_RAW_FILE_DESC
Definition: lws-adopt.h:68
@ LWS_ADOPT_ALLOW_SSL
Definition: lws-adopt.h:71
@ LWS_ADOPT_FLAG_UDP
Definition: lws-adopt.h:72
@ LWS_ADOPT_RAW_SOCKET_UDP
Definition: lws-adopt.h:75
#define LWS_EXTERN
unsigned char uint8_t
int lws_sockfd_type
#define LWS_VISIBLE
int lws_filefd_type