libwebsockets
Lightweight C library for HTML5 websockets
lws-adopt.h
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
48LWS_VISIBLE LWS_EXTERN struct lws *
49lws_adopt_socket(struct lws_context *context, lws_sockfd_type accept_fd);
63LWS_VISIBLE LWS_EXTERN struct lws *
64lws_adopt_socket_vhost(struct lws_vhost *vh, lws_sockfd_type accept_fd);
65
66typedef enum {
67 LWS_ADOPT_RAW_FILE_DESC = 0, /* convenience constant */
68 LWS_ADOPT_HTTP = 1, /* flag: absent implies RAW */
69 LWS_ADOPT_SOCKET = 2, /* flag: absent implies file */
70 LWS_ADOPT_ALLOW_SSL = 4, /* flag: use tls */
71 LWS_ADOPT_FLAG_UDP = 16, /* flag: socket is UDP */
72 LWS_ADOPT_FLAG_RAW_PROXY = 32, /* flag: raw proxy */
73
74 LWS_ADOPT_RAW_SOCKET_UDP = LWS_ADOPT_SOCKET | LWS_ADOPT_FLAG_UDP,
75} lws_adoption_type;
76
77typedef union {
78 lws_sockfd_type sockfd;
79 lws_filefd_type filefd;
81
82#if defined(LWS_ESP_PLATFORM)
83#include <lwip/sockets.h>
84#endif
85
86typedef union {
87#if defined(LWS_WITH_IPV6)
88 struct sockaddr_in6 sa6;
89#else
90#if defined(LWS_ESP_PLATFORM)
91 uint8_t _pad_sa6[28];
92#endif
93#endif
94 struct sockaddr_in sa4;
96
97#define sa46_sockaddr(_sa46) ((struct sockaddr *)(_sa46))
98
99#if defined(LWS_WITH_IPV6)
100#define sa46_socklen(_sa46) (socklen_t)((_sa46)->sa4.sin_family == AF_INET ? \
101 sizeof(struct sockaddr_in) : \
102 sizeof(struct sockaddr_in6))
103#define sa46_sockport(_sa46, _sp) { if ((_sa46)->sa4.sin_family == AF_INET) \
104 (_sa46)->sa4.sin_port = (_sp); else \
105 (_sa46)->sa6.sin6_port = (_sp); }
106#define sa46_address(_sa46) ((uint8_t *)((_sa46)->sa4.sin_family == AF_INET ? \
107 &_sa46->sa4.sin_addr : &_sa46->sa6.sin6_addr ))
108#else
109#define sa46_socklen(_sa46) (socklen_t)sizeof(struct sockaddr_in)
110#define sa46_sockport(_sa46, _sp) (_sa46)->sa4.sin_port = (_sp)
111#define sa46_address(_sa46) (uint8_t *)&_sa46->sa4.sin_addr
112#endif
113
114#define sa46_address_len(_sa46) ((_sa46)->sa4.sin_family == AF_INET ? 4 : 16)
115
116#if defined(LWS_WITH_UDP)
117struct lws_udp {
118 lws_sockaddr46 sa46;
119 lws_sockaddr46 sa46_pending;
120 uint8_t connected:1;
121};
122#endif
123
143LWS_VISIBLE LWS_EXTERN struct lws *
144lws_adopt_descriptor_vhost(struct lws_vhost *vh, lws_adoption_type type,
145 lws_sock_file_fd_type fd, const char *vh_prot_name,
146 struct lws *parent);
147
148typedef struct lws_adopt_desc {
149 struct lws_vhost *vh;
150 lws_adoption_type type;
152 const char *vh_prot_name;
153 struct lws *parent;
154 void *opaque;
155 const char *fi_wsi_name;
156} lws_adopt_desc_t;
157
180LWS_VISIBLE LWS_EXTERN struct lws *
181lws_adopt_descriptor_vhost_via_info(const lws_adopt_desc_t *info);
182
206LWS_VISIBLE LWS_EXTERN struct lws *
207lws_adopt_socket_readbuf(struct lws_context *context, lws_sockfd_type accept_fd,
208 const char *readbuf, size_t len);
231LWS_VISIBLE LWS_EXTERN struct lws *
232lws_adopt_socket_vhost_readbuf(struct lws_vhost *vhost,
233 lws_sockfd_type accept_fd, const char *readbuf,
234 size_t len);
235
236#define LWS_CAUDP_BIND (1 << 0)
237#define LWS_CAUDP_BROADCAST (1 << 1)
238#define LWS_CAUDP_PF_PACKET (1 << 2)
239
240#if defined(LWS_WITH_UDP)
262LWS_VISIBLE LWS_EXTERN struct lws *
263lws_create_adopt_udp(struct lws_vhost *vhost, const char *ads, int port,
264 int flags, const char *protocol_name, const char *ifname,
265 struct lws *parent_wsi, void *opaque,
266 const lws_retry_bo_t *retry_policy, const char *fi_wsi_name);
267#endif
268
269
270
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_socket_vhost_readbuf(struct lws_vhost *vhost, 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_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_vhost(struct lws_vhost *vh, lws_sockfd_type accept_fd)
LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_descriptor_vhost_via_info(const lws_adopt_desc_t *info)
Definition lws-adopt.h:148
const char * fi_wsi_name
Definition lws-adopt.h:155
struct lws * parent
Definition lws-adopt.h:153
const char * vh_prot_name
Definition lws-adopt.h:152
void * opaque
Definition lws-adopt.h:154
lws_sock_file_fd_type fd
Definition lws-adopt.h:151
lws_adoption_type type
Definition lws-adopt.h:150
struct lws_vhost * vh
Definition lws-adopt.h:149
Definition lws-adopt.h:77
Definition lws-adopt.h:86