libwebsockets
Lightweight C library for HTML5 websockets
lws-http.h
Go to the documentation of this file.
1 /*
2  * libwebsockets - small server side websockets and web server implementation
3  *
4  * Copyright (C) 2010 - 2020 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 
25 /* minimal space for typical headers and CSP stuff */
26 
27 #define LWS_RECOMMENDED_MIN_HEADER_SPACE 2048
28 
34 
41 
53 LWS_VISIBLE LWS_EXTERN const char *
54 lws_get_mimetype(const char *file, const struct lws_http_mount *m);
55 
75 lws_serve_http_file(struct lws *wsi, const char *file, const char *content_type,
76  const char *other_headers, int other_headers_len);
77 
81 
82 
85 
89 
94 
113 
120 };
131 
133  char *p;
134  int len;
135  int max_len;
136  int final;
137  int chunked;
139 };
140 
141 typedef const char *(*lws_process_html_state_cb)(void *data, int index);
142 
144  char *start;
145  char swallow[16];
146  int pos;
147  void *data;
148  const char * const *vars;
153 };
154 
161  struct lws_process_html_state *s);
163 
197 
204 struct lws_tokens {
205  unsigned char *token;
206  int len;
207 };
208 
209 /* enum lws_token_indexes
210  * these have to be kept in sync with lextable.h / minilex.c
211  *
212  * NOTE: These public enums are part of the abi. If you want to add one,
213  * add it at where specified so existing users are unaffected.
214  */
218 #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_HTTP_HEADERS_ALL)
219  WSI_TOKEN_OPTIONS_URI,
220 #endif
225 #if defined(LWS_ROLE_WS) || defined(LWS_HTTP_HEADERS_ALL)
226  WSI_TOKEN_DRAFT,
227 #endif
229 #if defined(LWS_ROLE_WS) || defined(LWS_HTTP_HEADERS_ALL)
230  WSI_TOKEN_EXTENSIONS,
231  WSI_TOKEN_KEY1, /* 10 */
232  WSI_TOKEN_KEY2,
233  WSI_TOKEN_PROTOCOL,
234  WSI_TOKEN_ACCEPT,
235  WSI_TOKEN_NONCE,
236 #endif
238 #if defined(LWS_ROLE_H2) || defined(LWS_HTTP_HEADERS_ALL)
239  WSI_TOKEN_HTTP2_SETTINGS, /* 16 */
240 #endif
242 #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_HTTP_HEADERS_ALL)
243  WSI_TOKEN_HTTP_AC_REQUEST_HEADERS,
244 #endif
257 #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_ROLE_H2) || defined(LWS_HTTP_HEADERS_ALL)
258  WSI_TOKEN_HTTP_REFERER,
259 #endif
260 #if defined(LWS_ROLE_WS) || defined(LWS_HTTP_HEADERS_ALL)
261  WSI_TOKEN_KEY,
262  WSI_TOKEN_VERSION,
263  WSI_TOKEN_SWORIGIN,
264 #endif
265 #if defined(LWS_ROLE_H2) || defined(LWS_HTTP_HEADERS_ALL)
266  WSI_TOKEN_HTTP_COLON_AUTHORITY,
267  WSI_TOKEN_HTTP_COLON_METHOD,
268  WSI_TOKEN_HTTP_COLON_PATH,
269  WSI_TOKEN_HTTP_COLON_SCHEME,
270  WSI_TOKEN_HTTP_COLON_STATUS,
271 #endif
272 
273 #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_ROLE_H2) || defined(LWS_HTTP_HEADERS_ALL)
274  WSI_TOKEN_HTTP_ACCEPT_CHARSET,
275 #endif
277 #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_ROLE_H2) || defined(LWS_HTTP_HEADERS_ALL)
278  WSI_TOKEN_HTTP_ACCESS_CONTROL_ALLOW_ORIGIN,
279 #endif
297 #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_ROLE_H2) || defined(LWS_HTTP_HEADERS_ALL)
298  WSI_TOKEN_HTTP_MAX_FORWARDS,
299  WSI_TOKEN_HTTP_PROXY_AUTHENTICATE,
300  WSI_TOKEN_HTTP_PROXY_AUTHORIZATION,
301 #endif
306 #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_ROLE_H2) || defined(LWS_HTTP_HEADERS_ALL)
307  WSI_TOKEN_HTTP_STRICT_TRANSPORT_SECURITY,
308 #endif
310 #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_ROLE_H2) || defined(LWS_HTTP_HEADERS_ALL)
311  WSI_TOKEN_HTTP_USER_AGENT,
312  WSI_TOKEN_HTTP_VARY,
313  WSI_TOKEN_HTTP_VIA,
314  WSI_TOKEN_HTTP_WWW_AUTHENTICATE,
315 #endif
316 #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_HTTP_HEADERS_ALL)
317  WSI_TOKEN_PATCH_URI,
318  WSI_TOKEN_PUT_URI,
319  WSI_TOKEN_DELETE_URI,
320 #endif
321 
323 #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_HTTP_HEADERS_ALL)
324  WSI_TOKEN_PROXY,
325  WSI_TOKEN_HTTP_X_REAL_IP,
326 #endif
331 #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_ROLE_H2) || defined(LWS_HTTP_HEADERS_ALL)
332  WSI_TOKEN_TE,
333  WSI_TOKEN_REPLAY_NONCE, /* ACME */
334 #endif
335 #if defined(LWS_ROLE_H2) || defined(LWS_HTTP_HEADERS_ALL)
336  WSI_TOKEN_COLON_PROTOCOL,
337 #endif
340 
341  /****** add new things just above ---^ ******/
342 
343  /* use token storage to stash these internally, not for
344  * user use */
345 
355 
356  /* always last real token index*/
358 
359  /* parser state additions, no storage associated */
361 #if defined(LWS_WITH_CUSTOM_HEADERS) || defined(LWS_HTTP_HEADERS_ALL)
362  WSI_TOKEN_UNKNOWN_VALUE_PART,
363 #endif
368 };
369 
371  unsigned short token_limit[WSI_TOKEN_COUNT];
372 };
373 
382  H2SET_ENABLE_CONNECT_PROTOCOL, /* defined in mcmanus-httpbis-h2-ws-02 */
383 
384  H2SET_COUNT /* always last */
385 };
386 
392 LWS_VISIBLE LWS_EXTERN const unsigned char *
394 
404 lws_hdr_total_length(struct lws *wsi, enum lws_token_indexes h);
405 
417  int frag_idx);
418 
434 lws_hdr_copy(struct lws *wsi, char *dest, int len, enum lws_token_indexes h);
435 
454 lws_hdr_copy_fragment(struct lws *wsi, char *dest, int len,
455  enum lws_token_indexes h, int frag_idx);
456 
474 lws_hdr_custom_length(struct lws *wsi, const char *name, int nlen);
475 
495 lws_hdr_custom_copy(struct lws *wsi, char *dst, int len, const char *name,
496  int nlen);
497 
498 typedef void (*lws_hdr_custom_fe_cb_t)(const char *name, int nlen, void *opaque);
516 lws_hdr_custom_name_foreach(struct lws *wsi, lws_hdr_custom_fe_cb_t cb, void *opaque);
517 
540 lws_get_urlarg_by_name_safe(struct lws *wsi, const char *name, char *buf, int len);
541 
559 LWS_VISIBLE LWS_EXTERN const char *
560 lws_get_urlarg_by_name(struct lws *wsi, const char *name, char *buf, int len)
561 /* LWS_WARN_DEPRECATED */;
563 
579 
580 #define LWSAHH_CODE_MASK ((1 << 16) - 1)
581 #define LWSAHH_FLAG_NO_SERVER_NAME (1 << 30)
582 
599  unsigned int code, unsigned char **p,
600  unsigned char *end);
614 lws_add_http_header_by_name(struct lws *wsi, const unsigned char *name,
615  const unsigned char *value, int length,
616  unsigned char **p, unsigned char *end);
632  const unsigned char *value, int length,
633  unsigned char **p, unsigned char *end);
646  lws_filepos_t content_length,
647  unsigned char **p, unsigned char *end);
658 lws_finalize_http_header(struct lws *wsi, unsigned char **p,
659  unsigned char *end);
660 
673 lws_finalize_write_http_header(struct lws *wsi, unsigned char *start,
674  unsigned char **p, unsigned char *end);
675 
676 #define LWS_ILLEGAL_HTTP_CONTENT_LEN ((lws_filepos_t)-1ll)
677 
705 lws_add_http_common_headers(struct lws *wsi, unsigned int code,
706  const char *content_type, lws_filepos_t content_len,
707  unsigned char **p, unsigned char *end);
708 
709 enum {
719 };
720 
735 lws_http_get_uri_and_method(struct lws *wsi, char **puri_ptr, int *puri_len);
736 
738 
749 
760 LWS_VISIBLE LWS_EXTERN const char *
761 lws_urlencode(char *escaped, const char *string, int len);
762 
763 /*
764  * URLDECODE 1 / 2
765  *
766  * This simple urldecode only operates until the first '\0' and requires the
767  * data to exist all at once
768  */
785 lws_urldecode(char *string, const char *escaped, int len);
787 
799 lws_http_date_render_from_unix(char *buf, size_t len, const time_t *t);
800 
812 lws_http_date_parse_unix(const char *b, size_t len, time_t *t);
813 
833 lws_http_check_retry_after(struct lws *wsi, lws_usec_t *us_interval_in_out);
834 
845 lws_return_http_status(struct lws *wsi, unsigned int code,
846  const char *html_body);
847 
861 lws_http_redirect(struct lws *wsi, int code, const unsigned char *loc, int len,
862  unsigned char **p, unsigned char *end);
863 
874 
883 lws_http_headers_detach(struct lws *wsi);
884 
894 lws_http_mark_sse(struct lws *wsi);
895 
913 
940 lws_http_compression_apply(struct lws *wsi, const char *name,
941  unsigned char **p, unsigned char *end, char decomp);
942 
953 
972 lws_http_cookie_get(struct lws *wsi, const char *name, char *buf, size_t *max);
973 
982 #define lws_http_client_http_resp_is_error(code) (!(code < 400))
983 
1009 #define LWS_H2_STREAM_SID -1
1011 lws_h2_update_peer_txcredit(struct lws *wsi, unsigned int sid, int bump);
1012 
1013 
1027 
1029 
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_finalize_write_http_header(struct lws *wsi, unsigned char *start, unsigned char **p, unsigned char *end)
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_status(struct lws *wsi, unsigned int code, unsigned char **p, unsigned char *end)
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_by_name(struct lws *wsi, const unsigned char *name, const unsigned char *value, int length, unsigned char **p, unsigned char *end)
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_finalize_http_header(struct lws *wsi, unsigned char **p, unsigned char *end)
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_common_headers(struct lws *wsi, unsigned int code, const char *content_type, lws_filepos_t content_len, unsigned char **p, unsigned char *end)
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_http_get_uri_and_method(struct lws *wsi, char **puri_ptr, int *puri_len)
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_content_length(struct lws *wsi, lws_filepos_t content_length, unsigned char **p, unsigned char *end)
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_by_token(struct lws *wsi, enum lws_token_indexes token, const unsigned char *value, int length, unsigned char **p, unsigned char *end)
@ LWSHUMETH_CONNECT
Definition: lws-http.h:716
@ LWSHUMETH_HEAD
Definition: lws-http.h:717
@ LWSHUMETH_OPTIONS
Definition: lws-http.h:712
@ LWSHUMETH_COLON_PATH
Definition: lws-http.h:718
@ LWSHUMETH_PATCH
Definition: lws-http.h:714
@ LWSHUMETH_PUT
Definition: lws-http.h:713
@ LWSHUMETH_GET
Definition: lws-http.h:710
@ LWSHUMETH_POST
Definition: lws-http.h:711
@ LWSHUMETH_DELETE
Definition: lws-http.h:715
unsigned short token_limit[WSI_TOKEN_COUNT]
Definition: lws-http.h:371
unsigned char * token
Definition: lws-http.h:205
LWS_VISIBLE LWS_EXTERN int lws_hdr_custom_copy(struct lws *wsi, char *dst, int len, const char *name, int nlen)
LWS_VISIBLE LWS_EXTERN const unsigned char * lws_token_to_string(enum lws_token_indexes token)
LWS_VISIBLE LWS_EXTERN int lws_hdr_custom_name_foreach(struct lws *wsi, lws_hdr_custom_fe_cb_t cb, void *opaque)
LWS_VISIBLE LWS_EXTERN int lws_get_urlarg_by_name_safe(struct lws *wsi, const char *name, char *buf, int len)
void(* lws_hdr_custom_fe_cb_t)(const char *name, int nlen, void *opaque)
Definition: lws-http.h:498
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_hdr_fragment_length(struct lws *wsi, enum lws_token_indexes h, int frag_idx)
LWS_VISIBLE LWS_EXTERN int lws_hdr_custom_length(struct lws *wsi, const char *name, int nlen)
LWS_VISIBLE LWS_EXTERN int lws_hdr_copy(struct lws *wsi, char *dest, int len, enum lws_token_indexes h)
lws_token_indexes
Definition: lws-http.h:215
LWS_VISIBLE LWS_EXTERN const char * lws_get_urlarg_by_name(struct lws *wsi, const char *name, char *buf, int len)
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_hdr_total_length(struct lws *wsi, enum lws_token_indexes h)
LWS_VISIBLE LWS_EXTERN int lws_hdr_copy_fragment(struct lws *wsi, char *dest, int len, enum lws_token_indexes h, int frag_idx)
lws_h2_settings
Definition: lws-http.h:374
@ WSI_TOKEN_HTTP_LAST_MODIFIED
Definition: lws-http.h:294
@ WSI_TOKEN_HTTP_CONTENT_LENGTH
Definition: lws-http.h:253
@ WSI_TOKEN_HTTP_CONTENT_LANGUAGE
Definition: lws-http.h:284
@ _WSI_TOKEN_CLIENT_ALPN
Definition: lws-http.h:354
@ _WSI_TOKEN_CLIENT_SENT_PROTOCOLS
Definition: lws-http.h:346
@ WSI_TOKEN_HTTP_EXPECT
Definition: lws-http.h:288
@ _WSI_TOKEN_CLIENT_LOCALPORT
Definition: lws-http.h:353
@ WSI_TOKEN_HTTP_FROM
Definition: lws-http.h:290
@ WSI_TOKEN_DSS_SIGNATURE
Definition: lws-http.h:339
@ _WSI_TOKEN_CLIENT_URI
Definition: lws-http.h:348
@ WSI_TOKEN_HTTP_ETAG
Definition: lws-http.h:287
@ _WSI_TOKEN_CLIENT_HOST
Definition: lws-http.h:349
@ WSI_TOKEN_HTTP_CONTENT_DISPOSITION
Definition: lws-http.h:282
@ WSI_TOKEN_HTTP_IF_UNMODIFIED_SINCE
Definition: lws-http.h:293
@ _WSI_TOKEN_CLIENT_METHOD
Definition: lws-http.h:351
@ WSI_TOKEN_HTTP_IF_MATCH
Definition: lws-http.h:291
@ WSI_TOKEN_HTTP_ACCEPT
Definition: lws-http.h:241
@ WSI_INIT_TOKEN_MUXURL
Definition: lws-http.h:367
@ WSI_PARSING_COMPLETE
Definition: lws-http.h:366
@ WSI_TOKEN_HTTP_SET_COOKIE
Definition: lws-http.h:305
@ WSI_TOKEN_X_AUTH_TOKEN
Definition: lws-http.h:338
@ WSI_TOKEN_HTTP_LINK
Definition: lws-http.h:295
@ WSI_TOKEN_HTTP_ACCEPT_LANGUAGE
Definition: lws-http.h:248
@ WSI_TOKEN_HTTP_SERVER
Definition: lws-http.h:304
@ WSI_TOKEN_HTTP_CONTENT_ENCODING
Definition: lws-http.h:283
@ WSI_TOKEN_HTTP_IF_NONE_MATCH
Definition: lws-http.h:246
@ WSI_TOKEN_HTTP_IF_RANGE
Definition: lws-http.h:292
@ _WSI_TOKEN_CLIENT_PEER_ADDRESS
Definition: lws-http.h:347
@ WSI_TOKEN_HTTP_ALLOW
Definition: lws-http.h:281
@ WSI_TOKEN_HTTP_CONTENT_LOCATION
Definition: lws-http.h:285
@ WSI_TOKEN_HTTP_ACCEPT_RANGES
Definition: lws-http.h:276
@ WSI_TOKEN_HOST
Definition: lws-http.h:221
@ WSI_TOKEN_HTTP_TRANSFER_ENCODING
Definition: lws-http.h:309
@ WSI_TOKEN_HTTP
Definition: lws-http.h:237
@ WSI_TOKEN_HTTP_URI_ARGS
Definition: lws-http.h:322
@ WSI_TOKEN_POST_URI
Definition: lws-http.h:217
@ WSI_TOKEN_HTTP_RETRY_AFTER
Definition: lws-http.h:303
@ WSI_TOKEN_HTTP_EXPIRES
Definition: lws-http.h:289
@ WSI_TOKEN_HTTP_IF_MODIFIED_SINCE
Definition: lws-http.h:245
@ WSI_TOKEN_HEAD_URI
Definition: lws-http.h:330
@ WSI_TOKEN_COUNT
Definition: lws-http.h:357
@ WSI_TOKEN_HTTP_COOKIE
Definition: lws-http.h:252
@ WSI_TOKEN_HTTP_CONTENT_RANGE
Definition: lws-http.h:286
@ WSI_TOKEN_HTTP_CACHE_CONTROL
Definition: lws-http.h:250
@ WSI_TOKEN_SKIPPING_SAW_CR
Definition: lws-http.h:365
@ WSI_TOKEN_HTTP_REFRESH
Definition: lws-http.h:302
@ WSI_TOKEN_HTTP_RANGE
Definition: lws-http.h:256
@ _WSI_TOKEN_CLIENT_ORIGIN
Definition: lws-http.h:350
@ WSI_TOKEN_NAME_PART
Definition: lws-http.h:360
@ WSI_TOKEN_UPGRADE
Definition: lws-http.h:223
@ WSI_TOKEN_X_FORWARDED_FOR
Definition: lws-http.h:328
@ WSI_TOKEN_SKIPPING
Definition: lws-http.h:364
@ WSI_TOKEN_CONNECT
Definition: lws-http.h:329
@ WSI_TOKEN_CONNECTION
Definition: lws-http.h:222
@ WSI_TOKEN_HTTP_ACCEPT_ENCODING
Definition: lws-http.h:247
@ WSI_TOKEN_ORIGIN
Definition: lws-http.h:224
@ WSI_TOKEN_HTTP_CONTENT_TYPE
Definition: lws-http.h:254
@ WSI_TOKEN_HTTP_LOCATION
Definition: lws-http.h:296
@ WSI_TOKEN_HTTP_AUTHORIZATION
Definition: lws-http.h:251
@ WSI_TOKEN_GET_URI
Definition: lws-http.h:216
@ WSI_TOKEN_HTTP_AGE
Definition: lws-http.h:280
@ WSI_TOKEN_HTTP_DATE
Definition: lws-http.h:255
@ WSI_TOKEN_HTTP_PRAGMA
Definition: lws-http.h:249
@ WSI_TOKEN_CHALLENGE
Definition: lws-http.h:228
@ WSI_TOKEN_HTTP1_0
Definition: lws-http.h:327
@ _WSI_TOKEN_CLIENT_IFACE
Definition: lws-http.h:352
@ H2SET_MAX_HEADER_LIST_SIZE
Definition: lws-http.h:380
@ H2SET_HEADER_TABLE_SIZE
Definition: lws-http.h:375
@ H2SET_MAX_CONCURRENT_STREAMS
Definition: lws-http.h:377
@ H2SET_INITIAL_WINDOW_SIZE
Definition: lws-http.h:378
@ H2SET_ENABLE_PUSH
Definition: lws-http.h:376
@ H2SET_MAX_FRAME_SIZE
Definition: lws-http.h:379
@ H2SET_COUNT
Definition: lws-http.h:384
@ H2SET_ENABLE_CONNECT_PROTOCOL
Definition: lws-http.h:382
@ H2SET_RESERVED7
Definition: lws-http.h:381
#define LWS_EXTERN
int64_t lws_usec_t
#define LWS_WARN_UNUSED_RESULT
#define LWS_VISIBLE
unsigned long long lws_filepos_t
LWS_VISIBLE LWS_EXTERN int lws_http_compression_apply(struct lws *wsi, const char *name, unsigned char **p, unsigned char *end, char decomp)
LWS_VISIBLE LWS_EXTERN int lws_http_mark_sse(struct lws *wsi)
LWS_VISIBLE LWS_EXTERN int lws_http_date_parse_unix(const char *b, size_t len, time_t *t)
LWS_VISIBLE LWS_EXTERN int lws_serve_http_file_fragment(struct lws *wsi)
const char *const * vars
Definition: lws-http.h:148
LWS_VISIBLE LWS_EXTERN int lws_http_check_retry_after(struct lws *wsi, lws_usec_t *us_interval_in_out)
LWS_VISIBLE LWS_EXTERN int lws_chunked_html_process(struct lws_process_html_args *args, struct lws_process_html_state *s)
const char *(* lws_process_html_state_cb)(void *data, int index)
Definition: lws-http.h:141
lws_process_html_state_cb replace
Definition: lws-http.h:151
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_http_redirect(struct lws *wsi, int code, const unsigned char *loc, int len, unsigned char **p, unsigned char *end)
LWS_VISIBLE LWS_EXTERN int lws_h2_get_peer_txcredit_estimate(struct lws *wsi)
LWS_VISIBLE LWS_EXTERN int lws_http_date_render_from_unix(char *buf, size_t len, const time_t *t)
LWS_VISIBLE LWS_EXTERN int lws_urldecode(char *string, const char *escaped, int len)
LWS_VISIBLE LWS_EXTERN int lws_h2_update_peer_txcredit(struct lws *wsi, unsigned int sid, int bump)
LWS_VISIBLE LWS_EXTERN int lws_serve_http_file(struct lws *wsi, const char *file, const char *content_type, const char *other_headers, int other_headers_len)
LWS_VISIBLE LWS_EXTERN const char * lws_get_mimetype(const char *file, const struct lws_http_mount *m)
LWS_VISIBLE LWS_EXTERN const char * lws_urlencode(char *escaped, const char *string, int len)
http_status
Definition: lws-http.h:83
@ HTTP_STATUS_EXPECTATION_FAILED
Definition: lws-http.h:112
@ HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE
Definition: lws-http.h:110
@ HTTP_STATUS_NOT_ACCEPTABLE
Definition: lws-http.h:101
@ HTTP_STATUS_REQ_URI_TOO_LONG
Definition: lws-http.h:109
@ HTTP_STATUS_INTERNAL_SERVER_ERROR
Definition: lws-http.h:114
@ HTTP_STATUS_REQ_RANGE_NOT_SATISFIABLE
Definition: lws-http.h:111
@ HTTP_STATUS_REQUEST_TIMEOUT
Definition: lws-http.h:103
@ HTTP_STATUS_PROXY_AUTH_REQUIRED
Definition: lws-http.h:102
@ HTTP_STATUS_FORBIDDEN
Definition: lws-http.h:98
@ HTTP_STATUS_BAD_REQUEST
Definition: lws-http.h:95
@ HTTP_STATUS_FOUND
Definition: lws-http.h:91
@ HTTP_STATUS_METHOD_NOT_ALLOWED
Definition: lws-http.h:100
@ HTTP_STATUS_GONE
Definition: lws-http.h:105
@ HTTP_STATUS_NOT_MODIFIED
Definition: lws-http.h:93
@ HTTP_STATUS_CONFLICT
Definition: lws-http.h:104
@ HTTP_STATUS_MOVED_PERMANENTLY
Definition: lws-http.h:90
@ HTTP_STATUS_PARTIAL_CONTENT
Definition: lws-http.h:88
@ HTTP_STATUS_REQ_ENTITY_TOO_LARGE
Definition: lws-http.h:108
@ HTTP_STATUS_SERVICE_UNAVAILABLE
Definition: lws-http.h:117
@ HTTP_STATUS_LENGTH_REQUIRED
Definition: lws-http.h:106
@ HTTP_STATUS_PRECONDITION_FAILED
Definition: lws-http.h:107
@ HTTP_STATUS_BAD_GATEWAY
Definition: lws-http.h:116
@ HTTP_STATUS_NOT_IMPLEMENTED
Definition: lws-http.h:115
@ HTTP_STATUS_NO_CONTENT
Definition: lws-http.h:87
@ HTTP_STATUS_OK
Definition: lws-http.h:86
@ HTTP_STATUS_CONTINUE
Definition: lws-http.h:84
@ HTTP_STATUS_UNAUTHORIZED
Definition: lws-http.h:96
@ HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED
Definition: lws-http.h:119
@ HTTP_STATUS_SEE_OTHER
Definition: lws-http.h:92
@ HTTP_STATUS_GATEWAY_TIMEOUT
Definition: lws-http.h:118
@ HTTP_STATUS_NOT_FOUND
Definition: lws-http.h:99
@ HTTP_STATUS_PAYMENT_REQUIRED
Definition: lws-http.h:97
LWS_VISIBLE LWS_EXTERN int lws_return_http_status(struct lws *wsi, unsigned int code, const char *html_body)
LWS_VISIBLE LWS_EXTERN int lws_http_is_redirected_to_get(struct lws *wsi)
LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_http_transaction_completed(struct lws *wsi)
LWS_VISIBLE LWS_EXTERN int lws_http_cookie_get(struct lws *wsi, const char *name, char *buf, size_t *max)
LWS_VISIBLE LWS_EXTERN int lws_http_headers_detach(struct lws *wsi)
LWS_VISIBLE LWS_EXTERN int lws_h2_client_stream_long_poll_rxonly(struct lws *wsi)