mirror of
https://github.com/warmcat/libwebsockets.git
synced 2025-03-09 00:00:04 +01:00
public api remove superfluous context params API BREAK
Extend the cleanout caused by wsi having a context pointer into the public api. There's no point keeping the 1.5 compatibility work, we have changed the api in several places and rebuilt wasn't going to be enough a while ago. Signed-off-by: Andy Green <andy.green@linaro.org>
This commit is contained in:
parent
8a97c06cd1
commit
11c05bfa09
30 changed files with 218 additions and 534 deletions
|
@ -73,7 +73,6 @@ option(LWS_WITHOUT_DAEMONIZE "Don't build the daemonization api" ON)
|
|||
option(LWS_IPV6 "Compile with support for ipv6" OFF)
|
||||
option(LWS_WITH_HTTP2 "Compile with support for http2" OFF)
|
||||
option(LWS_MBED3 "Platform is MBED3" OFF)
|
||||
option(LWS_WITH_OLD_API_WRAPPERS "Compile with binary compatibility with pre-v1.6 apis" OFF)
|
||||
|
||||
if (DEFINED YOTTA_WEBSOCKETS_VERSION_STRING)
|
||||
|
||||
|
@ -1100,7 +1099,6 @@ message(" LWS_USE_LIBEV = ${LWS_USE_LIBEV}")
|
|||
message(" LWS_IPV6 = ${LWS_IPV6}")
|
||||
message(" LWS_WITH_HTTP2 = ${LWS_WITH_HTTP2}")
|
||||
message(" LWS_MBED3 = ${LWS_MBED3}")
|
||||
message(" LWS_WITH_OLD_API_WRAPPERS = ${LWS_WITH_OLD_API_WRAPPERS}")
|
||||
message("---------------------------------------------------------------------")
|
||||
|
||||
# These will be available to parent projects including libwebsockets using add_subdirectory()
|
||||
|
|
|
@ -296,23 +296,23 @@ The user code can get a pointer to the file operations struct
|
|||
LWS_VISIBLE LWS_EXTERN struct lws_plat_file_ops *
|
||||
`lws_get_fops`(struct lws_context *context);
|
||||
|
||||
and then can use it with helpers to also leverage these platform-independent
|
||||
and then can use helpers to also leverage these platform-independent
|
||||
file handling apis
|
||||
|
||||
static inline lws_filefd_type
|
||||
`lws_plat_file_open`(struct lws_plat_file_ops *fops, const char *filename, unsigned long *filelen, int flags)
|
||||
`lws_plat_file_open`(struct lws *wsi, const char *filename, unsigned long *filelen, int flags)
|
||||
|
||||
static inline int
|
||||
`lws_plat_file_close`(struct lws_plat_file_ops *fops, lws_filefd_type fd)
|
||||
`lws_plat_file_close`(struct lws *wsi, lws_filefd_type fd)
|
||||
|
||||
static inline unsigned long
|
||||
`lws_plat_file_seek_cur`(struct lws_plat_file_ops *fops, lws_filefd_type fd, long offset_from_cur_pos)
|
||||
`lws_plat_file_seek_cur`(struct lws *wsi, lws_filefd_type fd, long offset_from_cur_pos)
|
||||
|
||||
static inline int
|
||||
`lws_plat_file_read`(struct lws_plat_file_ops *fops, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
|
||||
`lws_plat_file_read`(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
|
||||
|
||||
static inline int
|
||||
`lws_plat_file_write`(struct lws_plat_file_ops *fops, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
|
||||
`lws_plat_file_write`(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
|
||||
|
||||
The user code can also override or subclass the file operations, to either
|
||||
wrap or replace them. An example is shown in test server.
|
||||
|
|
78
changelog
78
changelog
|
@ -60,23 +60,73 @@ The reason for this change is struct lws_protocols has been changed to remove
|
|||
members that lws used for private storage: so the protocols struct in now
|
||||
truly const and may be reused serially or simultaneously by different contexts.
|
||||
|
||||
2) Several older apis start with libwebsocket_ or libwebsockets_ while newer ones
|
||||
2) Eleven APIs
|
||||
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
lws_add_http_header_by_name(struct lws_context *context,
|
||||
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_finalize_http_header(struct lws_context *context,
|
||||
struct lws *wsi,
|
||||
unsigned char **p,
|
||||
unsigned char *end);
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
lws_add_http_header_by_token(struct lws_context *context,
|
||||
struct lws *wsi,
|
||||
enum lws_token_indexes token,
|
||||
const unsigned char *value,
|
||||
int length,
|
||||
unsigned char **p,
|
||||
unsigned char *end);
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
lws_add_http_header_content_length(struct lws_context *context,
|
||||
struct lws *wsi,
|
||||
unsigned long content_length,
|
||||
unsigned char **p,
|
||||
unsigned char *end);
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
lws_add_http_header_status(struct lws_context *context, struct lws *wsi,
|
||||
unsigned int code, unsigned char **p,
|
||||
unsigned char *end);
|
||||
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
lws_serve_http_file(struct lws_context *context, struct lws *wsi,
|
||||
const char *file, const char *content_type,
|
||||
const char *other_headers, int other_headers_len);
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
lws_serve_http_file_fragment(struct lws_context *context, struct lws *wsi);
|
||||
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
lws_return_http_status(struct lws_context *context, struct lws *wsi,
|
||||
unsigned int code, const char *html_body);
|
||||
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
lws_callback_on_writable(const struct lws_context *context, struct lws *wsi);
|
||||
|
||||
LWS_VISIBLE LWS_EXTERN void
|
||||
lws_get_peer_addresses(struct lws_context *context, struct lws *wsi,
|
||||
lws_sockfd_type fd, char *name, int name_len,
|
||||
char *rip, int rip_len);
|
||||
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
lws_read(struct lws_context *context, struct lws *wsi,
|
||||
unsigned char *buf, size_t len);
|
||||
|
||||
no longer require their initial struct lws_context * parameter.
|
||||
|
||||
3) Several older apis start with libwebsocket_ or libwebsockets_ while newer ones
|
||||
all begin lws_. These apis have been changed to all begin with lws_.
|
||||
|
||||
However except for the three APIs mentioned above in 1), compatibility defines
|
||||
have been added in libwebsockets.h, so it is largely build-compatible with
|
||||
older sources using the old api names.
|
||||
To convert, search-replace
|
||||
|
||||
If you are using lws with a distro, or otherwise can't rebuild the user code,
|
||||
you should add
|
||||
|
||||
-DLWS_WITH_OLD_API_WRAPPERS=1
|
||||
|
||||
to your cmake args. This builds lws with all the old apis as wrappers around
|
||||
the new apis, so the library still exports the old apis.
|
||||
|
||||
In this way you can have lws export both the new and old apis simultaneously
|
||||
for compatibility.
|
||||
- libwebsockets_/lws_
|
||||
- libwebsocket_/lws_
|
||||
- struct\ libwebsocket/struct\ lws
|
||||
|
||||
|
||||
v1.5-chrome47-firefox41
|
||||
|
|
|
@ -162,7 +162,7 @@ lws_client_connect_2(struct lws *wsi)
|
|||
|
||||
wsi->mode = LWS_CONNMODE_WS_CLIENT_WAITING_CONNECT;
|
||||
|
||||
lws_libev_accept(context, wsi, wsi->sock);
|
||||
lws_libev_accept(wsi, wsi->sock);
|
||||
if (insert_wsi_socket_into_fds(context, wsi)) {
|
||||
compatible_close(wsi->sock);
|
||||
goto oom4;
|
||||
|
@ -235,7 +235,7 @@ lws_client_connect_2(struct lws *wsi)
|
|||
*/
|
||||
if (lws_change_pollfd(wsi, 0, LWS_POLLOUT))
|
||||
goto failed;
|
||||
lws_libev_io(context, wsi, LWS_EV_START | LWS_EV_WRITE);
|
||||
lws_libev_io(wsi, LWS_EV_START | LWS_EV_WRITE);
|
||||
|
||||
return wsi;
|
||||
}
|
||||
|
|
|
@ -326,7 +326,7 @@ spill:
|
|||
wsi->u.ws.ping_pending_flag = 1;
|
||||
|
||||
/* get it sent as soon as possible */
|
||||
lws_callback_on_writable(lws_get_ctx(wsi), wsi);
|
||||
lws_callback_on_writable(wsi);
|
||||
ping_drop:
|
||||
wsi->u.ws.rx_user_buffer_head = 0;
|
||||
handled = 1;
|
||||
|
|
|
@ -123,7 +123,7 @@ int lws_client_socket_service(struct lws_context *context,
|
|||
*/
|
||||
if (lws_change_pollfd(wsi, LWS_POLLOUT, 0))
|
||||
return -1;
|
||||
lws_libev_io(context, wsi, LWS_EV_STOP | LWS_EV_WRITE);
|
||||
lws_libev_io(wsi, LWS_EV_STOP | LWS_EV_WRITE);
|
||||
|
||||
#ifdef LWS_OPENSSL_SUPPORT
|
||||
/* we can retry this... just cook the SSL BIO the first time */
|
||||
|
@ -229,8 +229,7 @@ int lws_client_socket_service(struct lws_context *context,
|
|||
|
||||
lwsl_info(
|
||||
"SSL_connect WANT_WRITE... retrying\n");
|
||||
lws_callback_on_writable(
|
||||
context, wsi);
|
||||
lws_callback_on_writable(wsi);
|
||||
some_wait:
|
||||
wsi->mode = LWS_CONNMODE_WS_CLIENT_WAITING_SSL;
|
||||
|
||||
|
@ -291,7 +290,7 @@ some_wait:
|
|||
*/
|
||||
|
||||
lwsl_info("SSL_connect WANT_WRITE... retrying\n");
|
||||
lws_callback_on_writable(context, wsi);
|
||||
lws_callback_on_writable(wsi);
|
||||
|
||||
goto some_wait;
|
||||
}
|
||||
|
@ -369,7 +368,7 @@ some_wait:
|
|||
lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS);
|
||||
return 0;
|
||||
case LWS_SSL_CAPABLE_MORE_SERVICE:
|
||||
lws_callback_on_writable(context, wsi);
|
||||
lws_callback_on_writable(wsi);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -175,8 +175,7 @@ lws_issue_raw_ext_access(struct lws *wsi,
|
|||
* Yes, he's choked. Don't spill the rest now get a callback
|
||||
* when he is ready to send and take care of it there
|
||||
*/
|
||||
lws_callback_on_writable(
|
||||
lws_get_ctx(wsi), wsi);
|
||||
lws_callback_on_writable(wsi);
|
||||
wsi->extension_data_pending = 1;
|
||||
ret = 0;
|
||||
}
|
||||
|
|
|
@ -58,8 +58,7 @@
|
|||
*/
|
||||
|
||||
LWS_VISIBLE int
|
||||
lws_read(struct lws_context *context, struct lws *wsi, unsigned char *buf,
|
||||
size_t len)
|
||||
lws_read(struct lws *wsi, unsigned char *buf, size_t len)
|
||||
{
|
||||
unsigned char *last_char;
|
||||
int body_chunk_len;
|
||||
|
@ -84,7 +83,7 @@ lws_read(struct lws_context *context, struct lws *wsi, unsigned char *buf,
|
|||
/* account for what we're using in rxflow buffer */
|
||||
if (wsi->rxflow_buffer)
|
||||
wsi->rxflow_pos++;
|
||||
if (lws_http2_parser(context, wsi, buf[n++]))
|
||||
if (lws_http2_parser(wsi, buf[n++]))
|
||||
goto bail;
|
||||
}
|
||||
break;
|
||||
|
@ -105,7 +104,7 @@ http_new:
|
|||
goto bail;
|
||||
|
||||
last_char = buf;
|
||||
if (lws_handshake_server(context, wsi, &buf, len))
|
||||
if (lws_handshake_server(wsi, &buf, len))
|
||||
/* Handshake indicates this session is done. */
|
||||
goto bail;
|
||||
|
||||
|
@ -191,18 +190,18 @@ postbody_completion:
|
|||
}
|
||||
break;
|
||||
default:
|
||||
lwsl_err("lws_read: Unhandled state\n");
|
||||
lwsl_err("%s: Unhandled state\n", __func__);
|
||||
break;
|
||||
}
|
||||
|
||||
read_ok:
|
||||
/* Nothing more to do for now */
|
||||
lwsl_debug("lws_read: read_ok\n");
|
||||
lwsl_debug("%s: read_ok\n", __func__);
|
||||
|
||||
return 0;
|
||||
|
||||
http_complete:
|
||||
lwsl_debug("lws_read: http_complete\n");
|
||||
lwsl_debug("%s: http_complete\n", __func__);
|
||||
|
||||
#ifndef LWS_NO_SERVER
|
||||
/* Did the client want to keep the HTTP connection going? */
|
||||
|
|
43
lib/header.c
43
lib/header.c
|
@ -31,18 +31,16 @@ const unsigned char *lws_token_to_string(enum lws_token_indexes token)
|
|||
}
|
||||
|
||||
int
|
||||
lws_add_http_header_by_name(struct lws_context *context, struct lws *wsi,
|
||||
const unsigned char *name,
|
||||
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)
|
||||
{
|
||||
#ifdef LWS_USE_HTTP2
|
||||
if (wsi->mode == LWS_CONNMODE_HTTP2_SERVING)
|
||||
return lws_add_http2_header_by_name(context, wsi, name,
|
||||
return lws_add_http2_header_by_name(wsi, name,
|
||||
value, length, p, end);
|
||||
#else
|
||||
(void)wsi;
|
||||
(void)context;
|
||||
#endif
|
||||
if (name) {
|
||||
while (*p < end && *name)
|
||||
|
@ -62,10 +60,9 @@ lws_add_http_header_by_name(struct lws_context *context, struct lws *wsi,
|
|||
return 0;
|
||||
}
|
||||
|
||||
int lws_finalize_http_header(struct lws_context *context, struct lws *wsi,
|
||||
unsigned char **p, unsigned char *end)
|
||||
int lws_finalize_http_header(struct lws *wsi, unsigned char **p,
|
||||
unsigned char *end)
|
||||
{
|
||||
(void)context;
|
||||
#ifdef LWS_USE_HTTP2
|
||||
if (wsi->mode == LWS_CONNMODE_HTTP2_SERVING)
|
||||
return 0;
|
||||
|
@ -81,24 +78,22 @@ int lws_finalize_http_header(struct lws_context *context, struct lws *wsi,
|
|||
}
|
||||
|
||||
int
|
||||
lws_add_http_header_by_token(struct lws_context *context, struct lws *wsi,
|
||||
enum lws_token_indexes token,
|
||||
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)
|
||||
{
|
||||
const unsigned char *name;
|
||||
#ifdef LWS_USE_HTTP2
|
||||
if (wsi->mode == LWS_CONNMODE_HTTP2_SERVING)
|
||||
return lws_add_http2_header_by_token(context, wsi, token, value, length, p, end);
|
||||
return lws_add_http2_header_by_token(wsi, token, value, length, p, end);
|
||||
#endif
|
||||
name = lws_token_to_string(token);
|
||||
if (!name)
|
||||
return 1;
|
||||
return lws_add_http_header_by_name(context, wsi, name, value, length, p, end);
|
||||
return lws_add_http_header_by_name(wsi, name, value, length, p, end);
|
||||
}
|
||||
|
||||
int lws_add_http_header_content_length(struct lws_context *context,
|
||||
struct lws *wsi,
|
||||
int lws_add_http_header_content_length(struct lws *wsi,
|
||||
unsigned long content_length,
|
||||
unsigned char **p, unsigned char *end)
|
||||
{
|
||||
|
@ -106,7 +101,7 @@ int lws_add_http_header_content_length(struct lws_context *context,
|
|||
int n;
|
||||
|
||||
n = sprintf(b, "%lu", content_length);
|
||||
if (lws_add_http_header_by_token(context, wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH, (unsigned char *)b, n, p, end))
|
||||
if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH, (unsigned char *)b, n, p, end))
|
||||
return 1;
|
||||
wsi->u.http.content_length = content_length;
|
||||
wsi->u.http.content_remain = content_length;
|
||||
|
@ -145,7 +140,7 @@ static const char *err500[] = {
|
|||
};
|
||||
|
||||
int
|
||||
lws_add_http_header_status(struct lws_context *context, struct lws *wsi,
|
||||
lws_add_http_header_status(struct lws *wsi,
|
||||
unsigned int code, unsigned char **p,
|
||||
unsigned char *end)
|
||||
{
|
||||
|
@ -155,7 +150,7 @@ lws_add_http_header_status(struct lws_context *context, struct lws *wsi,
|
|||
|
||||
#ifdef LWS_USE_HTTP2
|
||||
if (wsi->mode == LWS_CONNMODE_HTTP2_SERVING)
|
||||
return lws_add_http2_header_status(context, wsi, code, p, end);
|
||||
return lws_add_http2_header_status(wsi, code, p, end);
|
||||
#endif
|
||||
if (code >= 400 && code < (400 + ARRAY_SIZE(err400)))
|
||||
description = err400[code - 400];
|
||||
|
@ -164,7 +159,7 @@ lws_add_http_header_status(struct lws_context *context, struct lws *wsi,
|
|||
|
||||
n = sprintf((char *)code_and_desc, "HTTP/1.0 %u %s", code, description);
|
||||
|
||||
return lws_add_http_header_by_name(context, wsi, NULL, code_and_desc,
|
||||
return lws_add_http_header_by_name(wsi, NULL, code_and_desc,
|
||||
n, p, end);
|
||||
}
|
||||
|
||||
|
@ -179,11 +174,10 @@ lws_add_http_header_status(struct lws_context *context, struct lws *wsi,
|
|||
* consistently
|
||||
*/
|
||||
LWS_VISIBLE int
|
||||
lws_return_http_status(struct lws_context *context, struct lws *wsi,
|
||||
unsigned int code, const char *html_body)
|
||||
lws_return_http_status(struct lws *wsi, unsigned int code, const char *html_body)
|
||||
{
|
||||
int n, m;
|
||||
|
||||
struct lws_context *context = lws_get_ctx(wsi);
|
||||
unsigned char *p = context->service_buffer +
|
||||
LWS_SEND_BUFFER_PRE_PADDING;
|
||||
unsigned char *start = p;
|
||||
|
@ -193,18 +187,17 @@ lws_return_http_status(struct lws_context *context, struct lws *wsi,
|
|||
if (!html_body)
|
||||
html_body = "";
|
||||
|
||||
if (lws_add_http_header_status(context, wsi, code, &p, end))
|
||||
if (lws_add_http_header_status(wsi, code, &p, end))
|
||||
return 1;
|
||||
if (lws_add_http_header_by_token(context, wsi, WSI_TOKEN_HTTP_SERVER,
|
||||
if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_SERVER,
|
||||
(unsigned char *)"libwebsockets", 13,
|
||||
&p, end))
|
||||
return 1;
|
||||
if (lws_add_http_header_by_token(context, wsi,
|
||||
WSI_TOKEN_HTTP_CONTENT_TYPE,
|
||||
if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE,
|
||||
(unsigned char *)"text/html", 9,
|
||||
&p, end))
|
||||
return 1;
|
||||
if (lws_finalize_http_header(context, wsi, &p, end))
|
||||
if (lws_finalize_http_header(wsi, &p, end))
|
||||
return 1;
|
||||
|
||||
m = lws_write(wsi, start, p - start, LWS_WRITE_HTTP_HEADERS);
|
||||
|
|
19
lib/hpack.c
19
lib/hpack.c
|
@ -349,8 +349,7 @@ static int lws_write_indexed_hdr(struct lws *wsi, int idx)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int lws_hpack_interpret(struct lws_context *context,
|
||||
struct lws *wsi, unsigned char c)
|
||||
int lws_hpack_interpret(struct lws *wsi, unsigned char c)
|
||||
{
|
||||
unsigned int prev;
|
||||
unsigned char c1;
|
||||
|
@ -619,7 +618,7 @@ static int lws_http2_num(int starting_bits, unsigned long num,
|
|||
return 0;
|
||||
}
|
||||
|
||||
int lws_add_http2_header_by_name(struct lws_context *context, struct lws *wsi,
|
||||
int lws_add_http2_header_by_name(struct lws *wsi,
|
||||
const unsigned char *name,
|
||||
const unsigned char *value, int length,
|
||||
unsigned char **p, unsigned char *end)
|
||||
|
@ -654,8 +653,7 @@ int lws_add_http2_header_by_name(struct lws_context *context, struct lws *wsi,
|
|||
return 0;
|
||||
}
|
||||
|
||||
int lws_add_http2_header_by_token(struct lws_context *context, struct lws *wsi,
|
||||
enum lws_token_indexes token,
|
||||
int lws_add_http2_header_by_token(struct lws *wsi, enum lws_token_indexes token,
|
||||
const unsigned char *value, int length,
|
||||
unsigned char **p, unsigned char *end)
|
||||
{
|
||||
|
@ -665,11 +663,10 @@ int lws_add_http2_header_by_token(struct lws_context *context, struct lws *wsi,
|
|||
if (!name)
|
||||
return 1;
|
||||
|
||||
return lws_add_http2_header_by_name(context, wsi, name, value,
|
||||
length, p, end);
|
||||
return lws_add_http2_header_by_name(wsi, name, value, length, p, end);
|
||||
}
|
||||
|
||||
int lws_add_http2_header_status(struct lws_context *context, struct lws *wsi,
|
||||
int lws_add_http2_header_status(struct lws *wsi,
|
||||
unsigned int code, unsigned char **p,
|
||||
unsigned char *end)
|
||||
{
|
||||
|
@ -679,9 +676,9 @@ int lws_add_http2_header_status(struct lws_context *context, struct lws *wsi,
|
|||
wsi->u.http2.send_END_STREAM = !!(code >= 400);
|
||||
|
||||
n = sprintf((char *)status, "%u", code);
|
||||
if (lws_add_http2_header_by_token(context, wsi,
|
||||
WSI_TOKEN_HTTP_COLON_STATUS, status,
|
||||
n, p, end))
|
||||
if (lws_add_http2_header_by_token(wsi, WSI_TOKEN_HTTP_COLON_STATUS,
|
||||
status, n, p, end))
|
||||
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -196,11 +196,11 @@ static const char * https_client_preface =
|
|||
"PRI * HTTP/2.0\x0d\x0a\x0d\x0aSM\x0d\x0a\x0d\x0a";
|
||||
|
||||
int
|
||||
lws_http2_parser(struct lws_context *context, struct lws *wsi, unsigned char c)
|
||||
lws_http2_parser(struct lws *wsi, unsigned char c)
|
||||
{
|
||||
struct lws_context *context = wsi->context;
|
||||
struct lws *swsi;
|
||||
int n;
|
||||
//dstruct lws *wsi_new;
|
||||
|
||||
switch (wsi->state) {
|
||||
case WSI_STATE_HTTP2_AWAIT_CLIENT_PREFACE:
|
||||
|
@ -243,7 +243,7 @@ lws_http2_parser(struct lws_context *context, struct lws *wsi, unsigned char c)
|
|||
case LWS_HTTP2_FRAME_TYPE_CONTINUATION:
|
||||
case LWS_HTTP2_FRAME_TYPE_HEADERS:
|
||||
lwsl_info(" %02X\n", c);
|
||||
if (lws_hpack_interpret(context, wsi->u.http2.stream_wsi, c))
|
||||
if (lws_hpack_interpret(wsi->u.http2.stream_wsi, c))
|
||||
return 1;
|
||||
break;
|
||||
case LWS_HTTP2_FRAME_TYPE_GOAWAY:
|
||||
|
@ -313,7 +313,7 @@ lws_http2_parser(struct lws_context *context, struct lws *wsi, unsigned char c)
|
|||
if (swsi->u.http2.waiting_tx_credit && swsi->u.http2.tx_credit > 0) {
|
||||
lwsl_info("%s: %p: waiting_tx_credit -> wait on writeable\n", __func__, wsi);
|
||||
swsi->u.http2.waiting_tx_credit = 0;
|
||||
lws_callback_on_writable(context, swsi);
|
||||
lws_callback_on_writable(swsi);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -133,9 +133,9 @@ lws_initloop(
|
|||
}
|
||||
|
||||
LWS_VISIBLE void
|
||||
lws_libev_accept(struct lws_context *context,
|
||||
struct lws *new_wsi, int accept_fd)
|
||||
lws_libev_accept(struct lws *new_wsi, int accept_fd)
|
||||
{
|
||||
struct lws_context *context = lws_get_ctx(new_wsi);
|
||||
struct ev_io *r = &new_wsi->w_read.watcher;
|
||||
struct ev_io *w = &new_wsi->w_write.watcher;
|
||||
|
||||
|
@ -149,8 +149,10 @@ lws_libev_accept(struct lws_context *context,
|
|||
}
|
||||
|
||||
LWS_VISIBLE void
|
||||
lws_libev_io(const struct lws_context *context, struct lws *wsi, int flags)
|
||||
lws_libev_io(struct lws *wsi, int flags)
|
||||
{
|
||||
struct lws_context *context = lws_get_ctx(wsi);
|
||||
|
||||
if (!LWS_LIBEV_ENABLED(context))
|
||||
return;
|
||||
|
||||
|
|
|
@ -92,7 +92,7 @@ lws_close_free_wsi(struct lws *wsi, enum lws_close_status reason)
|
|||
|
||||
case WSI_STATE_FLUSHING_STORED_SEND_BEFORE_CLOSE:
|
||||
if (wsi->truncated_send_len) {
|
||||
lws_callback_on_writable(context, wsi);
|
||||
lws_callback_on_writable(wsi);
|
||||
return;
|
||||
}
|
||||
lwsl_info("wsi %p completed WSI_STATE_FLUSHING_STORED_SEND_BEFORE_CLOSE\n", wsi);
|
||||
|
@ -407,9 +407,8 @@ lws_get_addresses(struct lws_context *context, void *ads, char *name,
|
|||
*/
|
||||
|
||||
LWS_VISIBLE void
|
||||
lws_get_peer_addresses(struct lws_context *context, struct lws *wsi,
|
||||
lws_sockfd_type fd, char *name, int name_len,
|
||||
char *rip, int rip_len)
|
||||
lws_get_peer_addresses(struct lws *wsi, lws_sockfd_type fd, char *name,
|
||||
int name_len, char *rip, int rip_len)
|
||||
{
|
||||
#if LWS_POSIX
|
||||
socklen_t len;
|
||||
|
@ -417,6 +416,7 @@ lws_get_peer_addresses(struct lws_context *context, struct lws *wsi,
|
|||
struct sockaddr_in6 sin6;
|
||||
#endif
|
||||
struct sockaddr_in sin4;
|
||||
struct lws_context *context = wsi->context;
|
||||
int ret = -1;
|
||||
void *p;
|
||||
|
||||
|
@ -446,7 +446,6 @@ lws_get_peer_addresses(struct lws_context *context, struct lws *wsi,
|
|||
bail:
|
||||
lws_latency(context, wsi, "lws_get_peer_addresses", ret, 1);
|
||||
#else
|
||||
(void)context;
|
||||
(void)wsi;
|
||||
(void)fd;
|
||||
(void)name;
|
||||
|
@ -898,7 +897,7 @@ void lws_set_protocol_write_pending(struct lws *wsi,
|
|||
lwsl_err("pps overwrite\n");
|
||||
wsi->pps = pend;
|
||||
lws_rx_flow_control(wsi, 0);
|
||||
lws_callback_on_writable(wsi->context, wsi);
|
||||
lws_callback_on_writable(wsi);
|
||||
}
|
||||
|
||||
LWS_VISIBLE size_t
|
||||
|
@ -943,276 +942,3 @@ lws_wsi_user(struct lws *wsi)
|
|||
{
|
||||
return wsi->user_space;
|
||||
}
|
||||
|
||||
#ifdef LWS_WITH_OLD_API_WRAPPERS
|
||||
|
||||
/*
|
||||
* To maintain .so abi, also produce wrappers using old api naming.
|
||||
*
|
||||
* This is disabled by default, use "LWS_WITH_OLD_API_WRAPPERS" on cmake to
|
||||
* enable.
|
||||
*
|
||||
* You only need these if you have existing binary applications using the old
|
||||
* api names and you don't want to / can't recompile them against new lws.
|
||||
* With these new lws .so is compatible with old and new api names.
|
||||
*
|
||||
* If you can recompile your application (using old api names still) against
|
||||
* current lws, you don't need these compatibility helpers since
|
||||
* libwebsockets.h will map them at compile time.
|
||||
*/
|
||||
|
||||
#undef libwebsocket
|
||||
|
||||
#undef libwebsocket_create_context
|
||||
LWS_VISIBLE LWS_EXTERN struct lws_context *
|
||||
libwebsocket_create_context(struct lws_context_creation_info *info)
|
||||
{
|
||||
return lws_create_context(info);
|
||||
}
|
||||
|
||||
#undef libwebsocket_set_proxy
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
libwebsocket_set_proxy(struct lws_context *context, const char *proxy)
|
||||
{
|
||||
return lws_set_proxy(context, proxy);
|
||||
}
|
||||
|
||||
#undef libwebsocket_context_destroy
|
||||
LWS_VISIBLE LWS_EXTERN void
|
||||
libwebsocket_context_destroy(struct lws_context *context)
|
||||
{
|
||||
lws_context_destroy(context);
|
||||
}
|
||||
|
||||
#undef libwebsocket_service
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
libwebsocket_service(struct lws_context *context, int timeout_ms)
|
||||
{
|
||||
return lws_service(context, timeout_ms);
|
||||
}
|
||||
|
||||
#undef libwebsocket_cancel_service
|
||||
LWS_VISIBLE LWS_EXTERN void
|
||||
libwebsocket_cancel_service(struct lws_context *context)
|
||||
{
|
||||
lws_cancel_service(context);
|
||||
}
|
||||
|
||||
#ifdef LWS_USE_LIBEV
|
||||
#undef libwebsocket_sigint_cfg
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
libwebsocket_sigint_cfg(struct lws_context *context, int use_ev_sigint,
|
||||
lws_ev_signal_cb* cb)
|
||||
{
|
||||
return lws_sigint_cfg(context, use_ev_sigint, cb);
|
||||
}
|
||||
|
||||
#undef libwebsocket_initloop
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
libwebsocket_initloop(struct lws_context *context, struct ev_loop *loop)
|
||||
{
|
||||
return lws_initloop(context, loop);
|
||||
}
|
||||
|
||||
#undef libwebsocket_sigint_cb
|
||||
LWS_VISIBLE void
|
||||
libwebsocket_sigint_cb(
|
||||
struct ev_loop *loop, struct ev_signal *watcher, int revents)
|
||||
{
|
||||
lws_sigint_cb(loop, watcher, revents);
|
||||
}
|
||||
#endif /* LWS_USE_LIBEV */
|
||||
|
||||
#undef libwebsocket_service_fd
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
libwebsocket_service_fd(struct lws_context *context,
|
||||
struct lws_pollfd *pollfd)
|
||||
{
|
||||
return lws_service_fd(context, pollfd);
|
||||
}
|
||||
|
||||
#undef libwebsocket_context_user
|
||||
LWS_VISIBLE LWS_EXTERN void *
|
||||
libwebsocket_context_user(struct lws_context *context)
|
||||
{
|
||||
return lws_context_user(context);
|
||||
}
|
||||
|
||||
#undef libwebsocket_set_timeout
|
||||
LWS_VISIBLE LWS_EXTERN void
|
||||
libwebsocket_set_timeout(struct lws *wsi,
|
||||
enum pending_timeout reason, int secs)
|
||||
{
|
||||
lws_set_timeout(wsi, reason, secs);
|
||||
}
|
||||
|
||||
#undef libwebsocket_write
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
libwebsocket_write(struct lws *wsi, unsigned char *buf, size_t len,
|
||||
enum lws_write_protocol protocol)
|
||||
{
|
||||
return lws_write(wsi, buf, len, protocol);
|
||||
}
|
||||
|
||||
#undef libwebsockets_serve_http_file_fragment
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
libwebsockets_serve_http_file_fragment(struct lws_context *context,
|
||||
struct lws *wsi)
|
||||
{
|
||||
return lws_serve_http_file_fragment(context, wsi);
|
||||
}
|
||||
|
||||
#undef libwebsockets_serve_http_file
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
libwebsockets_serve_http_file(struct lws_context *context,
|
||||
struct lws *wsi, const char *file,
|
||||
const char *content_type, const char *other_headers,
|
||||
int other_headers_len)
|
||||
{
|
||||
return lws_serve_http_file(context, wsi, file, content_type,
|
||||
other_headers, other_headers_len);
|
||||
}
|
||||
|
||||
#undef libwebsockets_return_http_status
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
libwebsockets_return_http_status(
|
||||
struct lws_context *context,
|
||||
struct lws *wsi, unsigned int code,
|
||||
const char *html_body)
|
||||
{
|
||||
return lws_return_http_status(context, wsi, code, html_body);
|
||||
}
|
||||
|
||||
#undef libwebsockets_get_protocol
|
||||
LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
|
||||
libwebsockets_get_protocol(struct lws *wsi)
|
||||
{
|
||||
return lws_get_protocol(wsi);
|
||||
}
|
||||
|
||||
|
||||
#undef libwebsocket_callback_on_writable
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
libwebsocket_callback_on_writable(struct lws_context *context,
|
||||
struct lws *wsi)
|
||||
{
|
||||
return lws_callback_on_writable(context, wsi);
|
||||
}
|
||||
|
||||
#undef libwebsocket_get_socket_fd
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
libwebsocket_get_socket_fd(struct lws *wsi)
|
||||
{
|
||||
return lws_get_socket_fd(wsi);
|
||||
}
|
||||
|
||||
#undef libwebsocket_is_final_fragment
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
libwebsocket_is_final_fragment(struct lws *wsi)
|
||||
{
|
||||
return lws_is_final_fragment(wsi);
|
||||
}
|
||||
|
||||
#undef libwebsocket_get_reserved_bits
|
||||
LWS_VISIBLE LWS_EXTERN unsigned char
|
||||
libwebsocket_get_reserved_bits(struct lws *wsi)
|
||||
{
|
||||
return lws_get_reserved_bits(wsi);
|
||||
}
|
||||
|
||||
#undef libwebsocket_rx_flow_control
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
libwebsocket_rx_flow_control(struct lws *wsi, int enable)
|
||||
{
|
||||
return lws_rx_flow_control(wsi, enable);
|
||||
}
|
||||
|
||||
#undef libwebsockets_remaining_packet_payload
|
||||
LWS_VISIBLE LWS_EXTERN size_t
|
||||
libwebsockets_remaining_packet_payload(struct lws *wsi)
|
||||
{
|
||||
return lws_remaining_packet_payload(wsi);
|
||||
}
|
||||
|
||||
#undef libwebsocket_client_connect
|
||||
LWS_VISIBLE LWS_EXTERN struct lws *
|
||||
libwebsocket_client_connect(struct lws_context *clients,
|
||||
const char *address,
|
||||
int port,
|
||||
int ssl_connection,
|
||||
const char *path,
|
||||
const char *host,
|
||||
const char *origin,
|
||||
const char *protocol,
|
||||
int ietf_version_or_minus_one)
|
||||
{
|
||||
return lws_client_connect(clients, address, port, ssl_connection,
|
||||
path, host, origin, protocol, ietf_version_or_minus_one);
|
||||
}
|
||||
LWS_VISIBLE LWS_EXTERN struct lws *
|
||||
libwebsocket_client_connect_extended(struct lws_context *clients,
|
||||
const char *address,
|
||||
int port,
|
||||
int ssl_connection,
|
||||
const char *path,
|
||||
const char *host,
|
||||
const char *origin,
|
||||
const char *protocol,
|
||||
int ietf_version_or_minus_one, void *userdata)
|
||||
{
|
||||
return lws_client_connect_extended(clients, address, port, ssl_connection,
|
||||
path, host, origin, protocol, ietf_version_or_minus_one,
|
||||
userdata);
|
||||
}
|
||||
|
||||
#undef libwebsocket_canonical_hostname
|
||||
LWS_VISIBLE LWS_EXTERN const char *
|
||||
libwebsocket_canonical_hostname(struct lws_context *context)
|
||||
{
|
||||
return lws_canonical_hostname(context);
|
||||
}
|
||||
|
||||
#undef libwebsockets_get_peer_addresses
|
||||
LWS_VISIBLE LWS_EXTERN void
|
||||
libwebsockets_get_peer_addresses(struct lws_context *context,
|
||||
struct lws *wsi, lws_sockfd_type fd, char *name,
|
||||
int name_len, char *rip, int rip_len)
|
||||
{
|
||||
lws_get_peer_addresses(context, wsi, fd, name, name_len, rip, rip_len);
|
||||
}
|
||||
|
||||
#undef libwebsockets_get_random
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
libwebsockets_get_random(struct lws_context *context, void *buf, int len)
|
||||
{
|
||||
return lws_get_random(context, buf, len);
|
||||
}
|
||||
|
||||
#ifndef LWS_SHA1_USE_OPENSSL_NAME
|
||||
#undef libwebsockets_SHA1
|
||||
LWS_VISIBLE LWS_EXTERN unsigned char *
|
||||
libwebsockets_SHA1(const unsigned char *d, size_t n, unsigned char *md)
|
||||
{
|
||||
return lws_SHA1(d, n, md);
|
||||
}
|
||||
#endif
|
||||
|
||||
#undef libwebsocket_read
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
libwebsocket_read(struct lws_context *context, struct lws *wsi,
|
||||
unsigned char *buf, size_t len)
|
||||
{
|
||||
return lws_read(context, wsi, buf, len);
|
||||
}
|
||||
|
||||
#ifndef LWS_NO_EXTENSIONS
|
||||
#undef libwebsocket_get_internal_extensions
|
||||
LWS_VISIBLE LWS_EXTERN struct lws_extension *
|
||||
libwebsocket_get_internal_extensions()
|
||||
{
|
||||
return lws_get_internal_extensions();
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -22,49 +22,6 @@
|
|||
#ifndef LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C
|
||||
#define LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C
|
||||
|
||||
/* old (pre 1.6) api name compatibility defines */
|
||||
|
||||
#define libwebsocket_create_context lws_create_context
|
||||
#define libwebsocket_set_proxy lws_set_proxy
|
||||
#define libwebsocket_context_destroy lws_context_destroy
|
||||
#define libwebsocket_service lws_service
|
||||
#define libwebsocket_cancel_service lws_cancel_service
|
||||
#define libwebsocket_sigint_cfg lws_sigint_cfg
|
||||
#define libwebsocket_initloop lws_initloop
|
||||
#define libwebsocket_sigint_cb lws_sigint_cb
|
||||
#define libwebsocket_service_fd lws_service_fd
|
||||
#define libwebsocket_context_user lws_context_user
|
||||
#define libwebsocket_set_timeout lws_set_timeout
|
||||
#define libwebsocket_write lws_write
|
||||
#define libwebsockets_serve_http_file_fragment lws_serve_http_file_fragment
|
||||
#define libwebsockets_serve_http_file lws_serve_http_file
|
||||
#define libwebsockets_return_http_status lws_return_http_status
|
||||
#define libwebsockets_get_protocol lws_get_protocol
|
||||
#define libwebsocket_callback_on_writable_all_protocol lws_callback_on_writable_all_protocol
|
||||
#define libwebsocket_callback_on_writable lws_callback_on_writable
|
||||
#define libwebsocket_callback_all_protocol lws_callback_all_protocol
|
||||
#define libwebsocket_get_socket_fd lws_get_socket_fd
|
||||
#define libwebsocket_is_final_fragment lws_is_final_fragment
|
||||
#define libwebsocket_get_reserved_bits lws_get_reserved_bits
|
||||
#define libwebsocket_rx_flow_control lws_rx_flow_control
|
||||
#define libwebsocket_rx_flow_allow_all_protocol lws_rx_flow_allow_all_protocol
|
||||
#define libwebsockets_remaining_packet_payload lws_remaining_packet_payload
|
||||
#define libwebsocket_client_connect lws_client_connect
|
||||
#define libwebsocket_canonical_hostname lws_canonical_hostname
|
||||
#define libwebsockets_get_peer_addresses lws_get_peer_addresses
|
||||
#define libwebsockets_get_random lws_get_random
|
||||
#define libwebsockets_SHA1 lws_SHA1
|
||||
#define libwebsocket_read lws_read
|
||||
#define libwebsocket_get_internal_extensions lws_get_internal_extensions
|
||||
#define libwebsocket_write_protocol lws_write_protocol
|
||||
|
||||
#define libwebsocket_protocols lws_protocols
|
||||
#define libwebsocket_extension lws_extension
|
||||
#define libwebsocket_context lws_context
|
||||
#define libwebsocket_pollfd lws_pollfd
|
||||
#define libwebsocket_callback_reasons lws_callback_reasons
|
||||
#define libwebsocket lws
|
||||
|
||||
#ifdef __cplusplus
|
||||
#include <cstddef>
|
||||
#include <cstdarg>
|
||||
|
@ -1356,34 +1313,22 @@ LWS_VISIBLE LWS_EXTERN const unsigned char *
|
|||
lws_token_to_string(enum lws_token_indexes token);
|
||||
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
lws_add_http_header_by_name(struct lws_context *context,
|
||||
struct lws *wsi,
|
||||
const unsigned char *name,
|
||||
const unsigned char *value,
|
||||
int length,
|
||||
unsigned char **p,
|
||||
unsigned char *end);
|
||||
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_finalize_http_header(struct lws_context *context,
|
||||
struct lws *wsi,
|
||||
unsigned char **p,
|
||||
lws_finalize_http_header(struct lws *wsi, unsigned char **p,
|
||||
unsigned char *end);
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
lws_add_http_header_by_token(struct lws_context *context,
|
||||
struct lws *wsi,
|
||||
enum lws_token_indexes token,
|
||||
const unsigned char *value,
|
||||
int length,
|
||||
unsigned char **p,
|
||||
unsigned char *end);
|
||||
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);
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
lws_add_http_header_content_length(struct lws_context *context,
|
||||
struct lws *wsi,
|
||||
lws_add_http_header_content_length(struct lws *wsi,
|
||||
unsigned long content_length,
|
||||
unsigned char **p,
|
||||
unsigned char *end);
|
||||
unsigned char **p, unsigned char *end);
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
lws_add_http_header_status(struct lws_context *context, struct lws *wsi,
|
||||
lws_add_http_header_status(struct lws *wsi,
|
||||
unsigned int code, unsigned char **p,
|
||||
unsigned char *end);
|
||||
|
||||
|
@ -1502,21 +1447,20 @@ lws_write(struct lws *wsi, unsigned char *buf, size_t len,
|
|||
lws_write(wsi, (unsigned char *)(buf), len, LWS_WRITE_HTTP)
|
||||
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
lws_serve_http_file(struct lws_context *context, struct lws *wsi,
|
||||
const char *file, const char *content_type,
|
||||
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 int
|
||||
lws_serve_http_file_fragment(struct lws_context *context, struct lws *wsi);
|
||||
lws_serve_http_file_fragment(struct lws *wsi);
|
||||
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
lws_return_http_status(struct lws_context *context, struct lws *wsi,
|
||||
unsigned int code, const char *html_body);
|
||||
lws_return_http_status(struct lws *wsi, unsigned int code,
|
||||
const char *html_body);
|
||||
|
||||
LWS_VISIBLE LWS_EXTERN const struct lws_protocols *
|
||||
lws_get_protocol(struct lws *wsi);
|
||||
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
lws_callback_on_writable(const struct lws_context *context, struct lws *wsi);
|
||||
lws_callback_on_writable(struct lws *wsi);
|
||||
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
lws_callback_on_writable_all_protocol(const struct lws_context *context,
|
||||
|
@ -1582,7 +1526,7 @@ lws_canonical_hostname(struct lws_context *context);
|
|||
|
||||
|
||||
LWS_VISIBLE LWS_EXTERN void
|
||||
lws_get_peer_addresses(struct lws_context *context, struct lws *wsi,
|
||||
lws_get_peer_addresses(struct lws *wsi,
|
||||
lws_sockfd_type fd, char *name, int name_len,
|
||||
char *rip, int rip_len);
|
||||
|
||||
|
@ -1702,8 +1646,7 @@ lws_plat_file_write(struct lws *wsi, lws_filefd_type fd, unsigned long *amount,
|
|||
*/
|
||||
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
lws_read(struct lws_context *context, struct lws *wsi,
|
||||
unsigned char *buf, size_t len);
|
||||
lws_read(struct lws *wsi, unsigned char *buf, size_t len);
|
||||
|
||||
#ifndef LWS_NO_EXTENSIONS
|
||||
LWS_VISIBLE LWS_EXTERN struct lws_extension *lws_get_internal_extensions();
|
||||
|
|
|
@ -229,7 +229,7 @@ lws_plat_insert_socket_into_fds(struct lws_context *context,
|
|||
struct lws *wsi)
|
||||
{
|
||||
(void)wsi;
|
||||
lws_libev_io(context, wsi, LWS_EV_START | LWS_EV_READ);
|
||||
lws_libev_io(wsi, LWS_EV_START | LWS_EV_READ);
|
||||
context->fds[context->fds_count++].revents = 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -383,7 +383,7 @@ LWS_VISIBLE void
|
|||
lws_plat_insert_socket_into_fds(struct lws_context *context,
|
||||
struct lws *wsi)
|
||||
{
|
||||
lws_libev_io(context, wsi, LWS_EV_START | LWS_EV_READ);
|
||||
lws_libev_io(wsi, LWS_EV_START | LWS_EV_READ);
|
||||
context->fds[context->fds_count++].revents = 0;
|
||||
}
|
||||
|
||||
|
|
10
lib/output.c
10
lib/output.c
|
@ -157,7 +157,7 @@ handle_truncated_send:
|
|||
}
|
||||
}
|
||||
/* always callback on writeable */
|
||||
lws_callback_on_writable(lws_get_ctx(wsi), wsi);
|
||||
lws_callback_on_writable(wsi);
|
||||
|
||||
return n;
|
||||
}
|
||||
|
@ -205,7 +205,7 @@ handle_truncated_send:
|
|||
memcpy(wsi->truncated_send_malloc, buf + n, real_len - n);
|
||||
|
||||
/* since something buffered, force it to get another chance to send */
|
||||
lws_callback_on_writable(lws_get_ctx(wsi), wsi);
|
||||
lws_callback_on_writable(wsi);
|
||||
|
||||
return real_len;
|
||||
}
|
||||
|
@ -505,9 +505,9 @@ send_raw:
|
|||
return n - (pre + post);
|
||||
}
|
||||
|
||||
LWS_VISIBLE int lws_serve_http_file_fragment(struct lws_context *context,
|
||||
struct lws *wsi)
|
||||
LWS_VISIBLE int lws_serve_http_file_fragment(struct lws *wsi)
|
||||
{
|
||||
struct lws_context *context = wsi->context;
|
||||
unsigned long amount;
|
||||
int n, m;
|
||||
|
||||
|
@ -570,7 +570,7 @@ all_sent:
|
|||
}
|
||||
|
||||
lwsl_info("choked before able to send whole file (post)\n");
|
||||
lws_callback_on_writable(context, wsi);
|
||||
lws_callback_on_writable(wsi);
|
||||
|
||||
return 0; /* indicates further processing must be done */
|
||||
}
|
||||
|
|
|
@ -956,7 +956,7 @@ process_as_ping:
|
|||
wsi->u.ws.ping_pending_flag = 1;
|
||||
|
||||
/* get it sent as soon as possible */
|
||||
lws_callback_on_writable(lws_get_ctx(wsi), wsi);
|
||||
lws_callback_on_writable(wsi);
|
||||
ping_drop:
|
||||
wsi->u.ws.rx_user_buffer_head = 0;
|
||||
return 0;
|
||||
|
|
|
@ -76,7 +76,7 @@ remove_wsi_socket_from_fds(struct lws *wsi)
|
|||
struct lws_pollargs pa = { wsi->sock, 0, 0 };
|
||||
struct lws_context *context = wsi->context;
|
||||
|
||||
lws_libev_io(context, wsi, LWS_EV_STOP | LWS_EV_READ | LWS_EV_WRITE);
|
||||
lws_libev_io(wsi, LWS_EV_STOP | LWS_EV_READ | LWS_EV_WRITE);
|
||||
|
||||
--context->fds_count;
|
||||
|
||||
|
@ -208,7 +208,7 @@ lws_change_pollfd(struct lws *wsi, int _and, int _or)
|
|||
*/
|
||||
|
||||
LWS_VISIBLE int
|
||||
lws_callback_on_writable(const struct lws_context *context, struct lws *wsi)
|
||||
lws_callback_on_writable(struct lws *wsi)
|
||||
{
|
||||
#ifdef LWS_USE_HTTP2
|
||||
struct lws *network_wsi, *wsi2;
|
||||
|
@ -257,7 +257,6 @@ lws_callback_on_writable(const struct lws_context *context, struct lws *wsi)
|
|||
network_sock:
|
||||
#endif
|
||||
|
||||
(void)context;
|
||||
if (lws_ext_callback_for_each_active(wsi,
|
||||
LWS_EXT_CALLBACK_REQUEST_ON_WRITEABLE, NULL, 0))
|
||||
return 1;
|
||||
|
@ -270,7 +269,7 @@ network_sock:
|
|||
if (lws_change_pollfd(wsi, 0, LWS_POLLOUT))
|
||||
return -1;
|
||||
|
||||
lws_libev_io(context, wsi, LWS_EV_START | LWS_EV_WRITE);
|
||||
lws_libev_io(wsi, LWS_EV_START | LWS_EV_WRITE);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
@ -296,7 +295,7 @@ lws_callback_on_writable_all_protocol(const struct lws_context *context,
|
|||
if (!wsi)
|
||||
continue;
|
||||
if (wsi->protocol == protocol)
|
||||
lws_callback_on_writable(context, wsi);
|
||||
lws_callback_on_writable(wsi);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -547,11 +547,9 @@ enum {
|
|||
#define LWS_LIBEV_ENABLED(context) (context->options & LWS_SERVER_OPTION_LIBEV)
|
||||
LWS_EXTERN void lws_feature_status_libev(struct lws_context_creation_info *info);
|
||||
LWS_EXTERN void
|
||||
lws_libev_accept(struct lws_context *context,
|
||||
struct lws *new_wsi, lws_sockfd_type accept_fd);
|
||||
lws_libev_accept(struct lws *new_wsi, lws_sockfd_type accept_fd);
|
||||
LWS_EXTERN void
|
||||
lws_libev_io(const struct lws_context *context,
|
||||
struct lws *wsi, int flags);
|
||||
lws_libev_io(struct lws *wsi, int flags);
|
||||
LWS_EXTERN int
|
||||
lws_libev_init_fd_table(struct lws_context *context);
|
||||
LWS_EXTERN void
|
||||
|
@ -564,8 +562,8 @@ lws_libev_run(const struct lws_context *context);
|
|||
#else
|
||||
#define lws_feature_status_libev(_a)
|
||||
#endif
|
||||
#define lws_libev_accept(_a, _b, _c) ((void) 0)
|
||||
#define lws_libev_io(_a, _b, _c) ((void) 0)
|
||||
#define lws_libev_accept(_a, _b) ((void) 0)
|
||||
#define lws_libev_io(_a, _b) ((void) 0)
|
||||
#define lws_libev_init_fd_table(_a) (0)
|
||||
#define lws_libev_run(_a) ((void) 0)
|
||||
#endif
|
||||
|
@ -1048,8 +1046,7 @@ lws_http2_interpret_settings_payload(struct http2_settings *settings,
|
|||
unsigned char *buf, int len);
|
||||
LWS_EXTERN void lws_http2_init(struct http2_settings *settings);
|
||||
LWS_EXTERN int
|
||||
lws_http2_parser(struct lws_context *context,
|
||||
struct lws *wsi, unsigned char c);
|
||||
lws_http2_parser(struct lws *wsi, unsigned char c);
|
||||
LWS_EXTERN int lws_http2_do_pps_send(struct lws_context *context,
|
||||
struct lws *wsi);
|
||||
LWS_EXTERN int lws_http2_frame_write(struct lws *wsi, int type, int flags,
|
||||
|
@ -1057,21 +1054,20 @@ LWS_EXTERN int lws_http2_frame_write(struct lws *wsi, int type, int flags,
|
|||
unsigned char *buf);
|
||||
LWS_EXTERN struct lws *
|
||||
lws_http2_wsi_from_id(struct lws *wsi, unsigned int sid);
|
||||
LWS_EXTERN int lws_hpack_interpret(struct lws_context *context,
|
||||
struct lws *wsi,
|
||||
LWS_EXTERN int lws_hpack_interpret(struct lws *wsi,
|
||||
unsigned char c);
|
||||
LWS_EXTERN int
|
||||
lws_add_http2_header_by_name(struct lws_context *context, struct lws *wsi,
|
||||
lws_add_http2_header_by_name(struct lws *wsi,
|
||||
const unsigned char *name,
|
||||
const unsigned char *value, int length,
|
||||
unsigned char **p, unsigned char *end);
|
||||
LWS_EXTERN int
|
||||
lws_add_http2_header_by_token(struct lws_context *context, struct lws *wsi,
|
||||
lws_add_http2_header_by_token(struct lws *wsi,
|
||||
enum lws_token_indexes token,
|
||||
const unsigned char *value, int length,
|
||||
unsigned char **p, unsigned char *end);
|
||||
LWS_EXTERN int
|
||||
lws_add_http2_header_status(struct lws_context *context, struct lws *wsi,
|
||||
lws_add_http2_header_status(struct lws *wsi,
|
||||
unsigned int code, unsigned char **p,
|
||||
unsigned char *end);
|
||||
LWS_EXTERN
|
||||
|
@ -1093,8 +1089,7 @@ LWS_EXTERN char *
|
|||
lws_hdr_simple_ptr(struct lws *wsi, enum lws_token_indexes h);
|
||||
|
||||
LWS_EXTERN int
|
||||
lws_hdr_simple_create(struct lws *wsi,
|
||||
enum lws_token_indexes h, const char *s);
|
||||
lws_hdr_simple_create(struct lws *wsi, enum lws_token_indexes h, const char *s);
|
||||
|
||||
LWS_EXTERN int
|
||||
lws_ensure_user_space(struct lws *wsi);
|
||||
|
@ -1222,12 +1217,11 @@ lws_server_socket_service(struct lws_context *context, struct lws *wsi,
|
|||
LWS_EXTERN int
|
||||
_lws_rx_flow_control(struct lws *wsi);
|
||||
LWS_EXTERN int
|
||||
lws_handshake_server(struct lws_context *context,
|
||||
struct lws *wsi, unsigned char **buf, size_t len);
|
||||
lws_handshake_server(struct lws *wsi, unsigned char **buf, size_t len);
|
||||
#else
|
||||
#define lws_server_socket_service(_a, _b, _c) (0)
|
||||
#define _lws_rx_flow_control(_a) (0)
|
||||
#define lws_handshake_server(_a, _b, _c, _d) (0)
|
||||
#define lws_handshake_server(_a, _b, _c) (0)
|
||||
#endif
|
||||
|
||||
LWS_EXTERN int
|
||||
|
|
46
lib/server.c
46
lib/server.c
|
@ -152,8 +152,6 @@ int lws_context_init_server(struct lws_context_creation_info *info,
|
|||
int
|
||||
_lws_rx_flow_control(struct lws *wsi)
|
||||
{
|
||||
struct lws_context *context = lws_get_ctx(wsi);
|
||||
|
||||
/* there is no pending change */
|
||||
if (!(wsi->rxflow_change_to & LWS_RXFLOW_PENDING_CHANGE))
|
||||
return 0;
|
||||
|
@ -161,7 +159,7 @@ _lws_rx_flow_control(struct lws *wsi)
|
|||
/* stuff is still buffered, not ready to really accept new input */
|
||||
if (wsi->rxflow_buffer) {
|
||||
/* get ourselves called back to deal with stashed buffer */
|
||||
lws_callback_on_writable(context, wsi);
|
||||
lws_callback_on_writable(wsi);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -256,8 +254,8 @@ int lws_http_action(struct lws *wsi)
|
|||
|
||||
if (lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH)) {
|
||||
lws_hdr_copy(wsi, content_length_str,
|
||||
sizeof(content_length_str) - 1,
|
||||
WSI_TOKEN_HTTP_CONTENT_LENGTH);
|
||||
sizeof(content_length_str) - 1,
|
||||
WSI_TOKEN_HTTP_CONTENT_LENGTH);
|
||||
wsi->u.http.content_length = atoi(content_length_str);
|
||||
}
|
||||
|
||||
|
@ -339,9 +337,9 @@ bail_nuke_ah:
|
|||
}
|
||||
|
||||
|
||||
int lws_handshake_server(struct lws_context *context, struct lws *wsi,
|
||||
unsigned char **buf, size_t len)
|
||||
int lws_handshake_server(struct lws *wsi, unsigned char **buf, size_t len)
|
||||
{
|
||||
struct lws_context *context = lws_get_ctx(wsi);
|
||||
struct allocated_headers *ah;
|
||||
int protocol_len, n, hit;
|
||||
char protocol_list[128];
|
||||
|
@ -745,8 +743,7 @@ int lws_server_socket_service(struct lws_context *context,
|
|||
* hm this may want to send
|
||||
* (via HTTP callback for example)
|
||||
*/
|
||||
n = lws_read(context, wsi,
|
||||
context->service_buffer, len);
|
||||
n = lws_read(wsi, context->service_buffer, len);
|
||||
if (n < 0) /* we closed wsi */
|
||||
return 1;
|
||||
|
||||
|
@ -766,7 +763,7 @@ try_pollout:
|
|||
if (lws_change_pollfd(wsi, LWS_POLLOUT, 0))
|
||||
goto fail;
|
||||
|
||||
lws_libev_io(context, wsi, LWS_EV_STOP | LWS_EV_WRITE);
|
||||
lws_libev_io(wsi, LWS_EV_STOP | LWS_EV_WRITE);
|
||||
|
||||
if (wsi->state != WSI_STATE_HTTP_ISSUING_FILE) {
|
||||
n = user_callback_handle_rxflow(
|
||||
|
@ -782,7 +779,7 @@ try_pollout:
|
|||
}
|
||||
|
||||
/* >0 == completion, <0 == error */
|
||||
n = lws_serve_http_file_fragment(context, wsi);
|
||||
n = lws_serve_http_file_fragment(wsi);
|
||||
if (n < 0 || (n > 0 && lws_http_transaction_completed(wsi)))
|
||||
goto fail;
|
||||
break;
|
||||
|
@ -858,7 +855,7 @@ try_pollout:
|
|||
LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED,
|
||||
NULL, NULL, 0);
|
||||
|
||||
lws_libev_accept(context, new_wsi, accept_fd);
|
||||
lws_libev_accept(new_wsi, accept_fd);
|
||||
|
||||
if (!LWS_SSL_ENABLED(context)) {
|
||||
#if LWS_POSIX
|
||||
|
@ -902,12 +899,12 @@ fail:
|
|||
* the wsi should be left alone.
|
||||
*/
|
||||
|
||||
LWS_VISIBLE int lws_serve_http_file(struct lws_context *context,
|
||||
struct lws *wsi, const char *file,
|
||||
LWS_VISIBLE int lws_serve_http_file(struct lws *wsi, const char *file,
|
||||
const char *content_type,
|
||||
const char *other_headers,
|
||||
int other_headers_len)
|
||||
{
|
||||
struct lws_context *context = lws_get_ctx(wsi);
|
||||
unsigned char *response = context->service_buffer +
|
||||
LWS_SEND_BUFFER_PRE_PADDING;
|
||||
unsigned char *p = response;
|
||||
|
@ -915,29 +912,26 @@ LWS_VISIBLE int lws_serve_http_file(struct lws_context *context,
|
|||
LWS_SEND_BUFFER_PRE_PADDING;
|
||||
int ret = 0;
|
||||
|
||||
wsi->u.http.fd = lws_plat_file_open(wsi, file,
|
||||
&wsi->u.http.filelen, O_RDONLY);
|
||||
wsi->u.http.fd = lws_plat_file_open(wsi, file, &wsi->u.http.filelen, O_RDONLY);
|
||||
|
||||
if (wsi->u.http.fd == LWS_INVALID_FILE) {
|
||||
lwsl_err("Unable to open '%s'\n", file);
|
||||
lws_return_http_status(context, wsi, HTTP_STATUS_NOT_FOUND,
|
||||
NULL);
|
||||
lws_return_http_status(wsi, HTTP_STATUS_NOT_FOUND, NULL);
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (lws_add_http_header_status(context, wsi, 200, &p, end))
|
||||
if (lws_add_http_header_status(wsi, 200, &p, end))
|
||||
return -1;
|
||||
if (lws_add_http_header_by_token(context, wsi, WSI_TOKEN_HTTP_SERVER,
|
||||
if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_SERVER,
|
||||
(unsigned char *)"libwebsockets", 13,
|
||||
&p, end))
|
||||
return -1;
|
||||
if (lws_add_http_header_by_token(context, wsi,
|
||||
WSI_TOKEN_HTTP_CONTENT_TYPE,
|
||||
if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE,
|
||||
(unsigned char *)content_type,
|
||||
strlen(content_type), &p, end))
|
||||
return -1;
|
||||
if (lws_add_http_header_content_length(context, wsi,
|
||||
wsi->u.http.filelen, &p, end))
|
||||
if (lws_add_http_header_content_length(wsi, wsi->u.http.filelen, &p, end))
|
||||
return -1;
|
||||
|
||||
if (other_headers) {
|
||||
|
@ -947,7 +941,7 @@ LWS_VISIBLE int lws_serve_http_file(struct lws_context *context,
|
|||
p += other_headers_len;
|
||||
}
|
||||
|
||||
if (lws_finalize_http_header(context, wsi, &p, end))
|
||||
if (lws_finalize_http_header(wsi, &p, end))
|
||||
return -1;
|
||||
|
||||
ret = lws_write(wsi, response, p - response, LWS_WRITE_HTTP_HEADERS);
|
||||
|
@ -959,7 +953,7 @@ LWS_VISIBLE int lws_serve_http_file(struct lws_context *context,
|
|||
wsi->u.http.filepos = 0;
|
||||
wsi->state = WSI_STATE_HTTP_ISSUING_FILE;
|
||||
|
||||
return lws_serve_http_file_fragment(context, wsi);
|
||||
return lws_serve_http_file_fragment(wsi);
|
||||
}
|
||||
|
||||
int lws_interpret_incoming_packet(struct lws *wsi, unsigned char *buf,
|
||||
|
|
|
@ -212,11 +212,11 @@ user_service:
|
|||
|
||||
if (pollfd) {
|
||||
if (lws_change_pollfd(wsi, LWS_POLLOUT, 0)) {
|
||||
lwsl_info("failled at set pollfd\n");
|
||||
lwsl_info("failed at set pollfd\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
lws_libev_io(context, wsi, LWS_EV_STOP | LWS_EV_WRITE);
|
||||
lws_libev_io(wsi, LWS_EV_STOP | LWS_EV_WRITE);
|
||||
}
|
||||
|
||||
#ifdef LWS_USE_HTTP2
|
||||
|
@ -577,9 +577,8 @@ drain:
|
|||
/* service incoming data */
|
||||
|
||||
if (eff_buf.token_len) {
|
||||
n = lws_read(context, wsi,
|
||||
(unsigned char *)eff_buf.token,
|
||||
eff_buf.token_len);
|
||||
n = lws_read(wsi, (unsigned char *)eff_buf.token,
|
||||
eff_buf.token_len);
|
||||
if (n < 0) {
|
||||
/* we closed wsi */
|
||||
n = 0;
|
||||
|
|
|
@ -610,7 +610,7 @@ lws_server_socket_service_ssl(struct lws **pwsi, struct lws *new_wsi,
|
|||
if (lws_change_pollfd(wsi, LWS_POLLOUT, 0))
|
||||
goto fail;
|
||||
|
||||
lws_libev_io(context, wsi, LWS_EV_STOP | LWS_EV_WRITE);
|
||||
lws_libev_io(wsi, LWS_EV_STOP | LWS_EV_WRITE);
|
||||
|
||||
lws_latency_pre(context, wsi);
|
||||
|
||||
|
@ -678,7 +678,7 @@ go_again:
|
|||
if (lws_change_pollfd(wsi, 0, LWS_POLLIN))
|
||||
goto fail;
|
||||
|
||||
lws_libev_io(context, wsi, LWS_EV_START | LWS_EV_READ);
|
||||
lws_libev_io(wsi, LWS_EV_START | LWS_EV_READ);
|
||||
|
||||
lwsl_info("SSL_ERROR_WANT_READ\n");
|
||||
break;
|
||||
|
@ -687,7 +687,7 @@ go_again:
|
|||
if (lws_change_pollfd(wsi, 0, LWS_POLLOUT))
|
||||
goto fail;
|
||||
|
||||
lws_libev_io(context, wsi, LWS_EV_START | LWS_EV_WRITE);
|
||||
lws_libev_io(wsi, LWS_EV_START | LWS_EV_WRITE);
|
||||
break;
|
||||
}
|
||||
lwsl_debug("SSL_accept failed skt %u: %s\n",
|
||||
|
|
|
@ -68,7 +68,4 @@
|
|||
/* use SHA1() not internal libwebsockets_SHA1 */
|
||||
#cmakedefine LWS_SHA1_USE_OPENSSL_NAME
|
||||
|
||||
/* whether to provide pre v1.6 compatibility wrappers */
|
||||
#cmakedefine LWS_WITH_OLD_API_WRAPPERS
|
||||
|
||||
${LWS_SIZEOFPTR_CODE}
|
||||
|
|
|
@ -167,7 +167,7 @@ callback_lws_mirror(struct lws_context *context,
|
|||
* start the ball rolling,
|
||||
* LWS_CALLBACK_CLIENT_WRITEABLE will come next service
|
||||
*/
|
||||
lws_callback_on_writable(context, wsi);
|
||||
lws_callback_on_writable(wsi);
|
||||
break;
|
||||
|
||||
case LWS_CALLBACK_CLOSED:
|
||||
|
@ -201,7 +201,7 @@ callback_lws_mirror(struct lws_context *context,
|
|||
return -1;
|
||||
}
|
||||
/* get notified as soon as we can write again */
|
||||
lws_callback_on_writable(context, wsi);
|
||||
lws_callback_on_writable(wsi);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
@ -87,7 +87,7 @@ do_rx:
|
|||
}
|
||||
memcpy(&pss->buf[LWS_SEND_BUFFER_PRE_PADDING], in, len);
|
||||
pss->len = (unsigned int)len;
|
||||
lws_callback_on_writable(context, wsi);
|
||||
lws_callback_on_writable(wsi);
|
||||
break;
|
||||
#endif
|
||||
|
||||
|
|
|
@ -76,7 +76,7 @@ callback_fraggle(struct lws_context *context,
|
|||
fprintf(stderr, "server sees client connect\n");
|
||||
psf->state = FRAGSTATE_START_MESSAGE;
|
||||
/* start the ball rolling */
|
||||
lws_callback_on_writable(context, wsi);
|
||||
lws_callback_on_writable(wsi);
|
||||
break;
|
||||
|
||||
case LWS_CALLBACK_CLIENT_ESTABLISHED:
|
||||
|
@ -177,7 +177,7 @@ callback_fraggle(struct lws_context *context,
|
|||
return -1;
|
||||
}
|
||||
|
||||
lws_callback_on_writable(context, wsi);
|
||||
lws_callback_on_writable(wsi);
|
||||
break;
|
||||
|
||||
case FRAGSTATE_POST_PAYLOAD_SUM:
|
||||
|
@ -202,7 +202,7 @@ callback_fraggle(struct lws_context *context,
|
|||
|
||||
psf->state = FRAGSTATE_START_MESSAGE;
|
||||
|
||||
lws_callback_on_writable(context, wsi);
|
||||
lws_callback_on_writable(wsi);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -144,7 +144,7 @@ callback_lws_mirror(struct lws_context * this,
|
|||
* LWS_CALLBACK_CLIENT_WRITEABLE will come next service
|
||||
*/
|
||||
|
||||
lws_callback_on_writable(this, wsi);
|
||||
lws_callback_on_writable(wsi);
|
||||
break;
|
||||
|
||||
case LWS_CALLBACK_CLIENT_RECEIVE:
|
||||
|
@ -451,8 +451,7 @@ int main(int argc, char **argv)
|
|||
}
|
||||
}
|
||||
|
||||
lws_get_peer_addresses(context, ping_wsi[0],
|
||||
lws_get_socket_fd(ping_wsi[0]),
|
||||
lws_get_peer_addresses(ping_wsi[0], lws_get_socket_fd(ping_wsi[0]),
|
||||
peer_name, sizeof peer_name, ip, sizeof ip);
|
||||
|
||||
fprintf(stderr, "Websocket PING %s (%s) %d bytes of data.\n",
|
||||
|
@ -487,8 +486,7 @@ int main(int argc, char **argv)
|
|||
if (!interrupted_time) {
|
||||
if ((l - oldus) > interval_us) {
|
||||
for (n = 0; n < clients; n++)
|
||||
lws_callback_on_writable(
|
||||
context, ping_wsi[n]);
|
||||
lws_callback_on_writable(ping_wsi[n]);
|
||||
oldus = l;
|
||||
}
|
||||
} else
|
||||
|
|
|
@ -150,15 +150,15 @@ int callback_http(struct lws_context *context, struct lws *wsi,
|
|||
}
|
||||
|
||||
if (len < 1) {
|
||||
lws_return_http_status(context, wsi,
|
||||
lws_return_http_status(wsi,
|
||||
HTTP_STATUS_BAD_REQUEST, NULL);
|
||||
goto try_to_reuse;
|
||||
}
|
||||
|
||||
/* this example server has no concept of directories */
|
||||
if (strchr((const char *)in + 1, '/')) {
|
||||
lws_return_http_status(context, wsi,
|
||||
HTTP_STATUS_FORBIDDEN, NULL);
|
||||
lws_return_http_status(wsi,
|
||||
HTTP_STATUS_FORBIDDEN, NULL);
|
||||
goto try_to_reuse;
|
||||
}
|
||||
|
||||
|
@ -194,23 +194,22 @@ int callback_http(struct lws_context *context, struct lws *wsi,
|
|||
* depending on what connection it happens to be working
|
||||
* on
|
||||
*/
|
||||
if (lws_add_http_header_status(context, wsi, 200, &p, end))
|
||||
if (lws_add_http_header_status(wsi, 200, &p, end))
|
||||
return 1;
|
||||
if (lws_add_http_header_by_token(context, wsi,
|
||||
WSI_TOKEN_HTTP_SERVER,
|
||||
if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_SERVER,
|
||||
(unsigned char *)"libwebsockets",
|
||||
13, &p, end))
|
||||
return 1;
|
||||
if (lws_add_http_header_by_token(context, wsi,
|
||||
if (lws_add_http_header_by_token(wsi,
|
||||
WSI_TOKEN_HTTP_CONTENT_TYPE,
|
||||
(unsigned char *)"image/jpeg",
|
||||
10, &p, end))
|
||||
return 1;
|
||||
if (lws_add_http_header_content_length(context, wsi,
|
||||
if (lws_add_http_header_content_length(wsi,
|
||||
file_len, &p,
|
||||
end))
|
||||
return 1;
|
||||
if (lws_finalize_http_header(context, wsi, &p, end))
|
||||
if (lws_finalize_http_header(wsi, &p, end))
|
||||
return 1;
|
||||
|
||||
/*
|
||||
|
@ -235,7 +234,7 @@ int callback_http(struct lws_context *context, struct lws *wsi,
|
|||
/*
|
||||
* book us a LWS_CALLBACK_HTTP_WRITEABLE callback
|
||||
*/
|
||||
lws_callback_on_writable(context, wsi);
|
||||
lws_callback_on_writable(wsi);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -253,12 +252,12 @@ int callback_http(struct lws_context *context, struct lws *wsi,
|
|||
mimetype = get_mimetype(buf);
|
||||
if (!mimetype) {
|
||||
lwsl_err("Unknown mimetype for %s\n", buf);
|
||||
lws_return_http_status(context, wsi,
|
||||
lws_return_http_status(wsi,
|
||||
HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE, NULL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* demostrates how to set a cookie on / */
|
||||
/* demonstrates how to set a cookie on / */
|
||||
|
||||
other_headers = NULL;
|
||||
n = 0;
|
||||
|
@ -272,7 +271,7 @@ int callback_http(struct lws_context *context, struct lws *wsi,
|
|||
|
||||
p = (unsigned char *)leaf_path;
|
||||
|
||||
if (lws_add_http_header_by_name(context, wsi,
|
||||
if (lws_add_http_header_by_name(wsi,
|
||||
(unsigned char *)"set-cookie:",
|
||||
(unsigned char *)b64, n, &p,
|
||||
(unsigned char *)leaf_path + sizeof(leaf_path)))
|
||||
|
@ -281,8 +280,7 @@ int callback_http(struct lws_context *context, struct lws *wsi,
|
|||
other_headers = leaf_path;
|
||||
}
|
||||
|
||||
n = lws_serve_http_file(context, wsi, buf,
|
||||
mimetype, other_headers, n);
|
||||
n = lws_serve_http_file(wsi, buf, mimetype, other_headers, n);
|
||||
if (n < 0 || ((n > 0) && lws_http_transaction_completed(wsi)))
|
||||
return -1; /* error or can't reuse connection: close the socket */
|
||||
|
||||
|
@ -308,8 +306,7 @@ int callback_http(struct lws_context *context, struct lws *wsi,
|
|||
case LWS_CALLBACK_HTTP_BODY_COMPLETION:
|
||||
lwsl_notice("LWS_CALLBACK_HTTP_BODY_COMPLETION\n");
|
||||
/* the whole of the sent body arrived, close or reuse the connection */
|
||||
lws_return_http_status(context, wsi,
|
||||
HTTP_STATUS_OK, NULL);
|
||||
lws_return_http_status(wsi, HTTP_STATUS_OK, NULL);
|
||||
goto try_to_reuse;
|
||||
|
||||
case LWS_CALLBACK_HTTP_FILE_COMPLETION:
|
||||
|
@ -379,12 +376,12 @@ int callback_http(struct lws_context *context, struct lws *wsi,
|
|||
} while (!lws_send_pipe_choked(wsi));
|
||||
|
||||
later:
|
||||
lws_callback_on_writable(context, wsi);
|
||||
lws_callback_on_writable(wsi);
|
||||
break;
|
||||
flush_bail:
|
||||
/* true if still partial pending */
|
||||
if (lws_partial_buffered(wsi)) {
|
||||
lws_callback_on_writable(context, wsi);
|
||||
lws_callback_on_writable(wsi);
|
||||
break;
|
||||
}
|
||||
lws_plat_file_close(wsi, pss->fd);
|
||||
|
|
|
@ -86,7 +86,7 @@ callback_lws_mirror(struct lws_context *context,
|
|||
lws_get_protocol(wsi));
|
||||
|
||||
if (lws_partial_buffered(wsi) || lws_send_pipe_choked(wsi)) {
|
||||
lws_callback_on_writable(context, wsi);
|
||||
lws_callback_on_writable(wsi);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue