From 22961548a85e0a89d16be1886aa58e4a3515a32c Mon Sep 17 00:00:00 2001 From: Wenhai Lin Date: Wed, 13 Apr 2016 19:47:48 +0800 Subject: [PATCH] Fixed compile fail on win32 --- win32/include/websockets/libwebsockets.h | 1411 ++++++++++++----- win32/include/websockets/lws_config.h | 74 + .../include/websockets/win32helpers/getopt.h | 66 +- .../websockets/win32helpers/gettimeofday.h | 0 .../websockets/win32helpers/websock-w32.h | 0 win32/libs/websockets.dll | Bin 84992 -> 0 bytes win32/libs/websockets.lib | Bin 24828 -> 162342 bytes 7 files changed, 1124 insertions(+), 427 deletions(-) create mode 100644 win32/include/websockets/lws_config.h mode change 100644 => 100755 win32/include/websockets/win32helpers/getopt.h mode change 100644 => 100755 win32/include/websockets/win32helpers/gettimeofday.h mode change 100644 => 100755 win32/include/websockets/win32helpers/websock-w32.h delete mode 100644 win32/libs/websockets.dll diff --git a/win32/include/websockets/libwebsockets.h b/win32/include/websockets/libwebsockets.h index 75b41b28..fdbdc0a3 100644 --- a/win32/include/websockets/libwebsockets.h +++ b/win32/include/websockets/libwebsockets.h @@ -1,7 +1,7 @@ /* * libwebsockets - small server side websockets and web server implementation * - * Copyright (C) 2010-2013 Andy Green + * Copyright (C) 2010-2016 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -23,28 +23,111 @@ #define LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C #ifdef __cplusplus -extern "C" { #include +#include +#ifdef MBED_OPERATORS +#include "mbed-drivers/mbed.h" +#include "sal-iface-eth/EthernetInterface.h" +#include "sockets/TCPListener.h" +#include "sal-stack-lwip/lwipv4_init.h" + +namespace { +} +using namespace mbed::Sockets::v0; + +struct lws; +struct lws_context; + +class lws_conn { + public: + lws_conn(): + ts(NULL), + wsi(NULL), + writeable(1), + awaiting_on_writeable(0) + { + } + +public: + void set_wsi(struct lws *_wsi) { wsi = _wsi; } + int actual_onRX(Socket *s); + void onRX(Socket *s); + void onError(Socket *s, socket_error_t err); + void onDisconnect(TCPStream *s); + void onSent(Socket *s, uint16_t len); + void serialized_writeable(struct lws *wsi); + +public: + TCPStream *ts; + +public: + struct lws *wsi; + char writeable; + char awaiting_on_writeable; +}; + +class lws_conn_listener : lws_conn { +public: + lws_conn_listener(): + srv(SOCKET_STACK_LWIP_IPV4) + { + srv.setOnError(TCPStream::ErrorHandler_t(this, + &lws_conn_listener::onError)); + } + + void start(const uint16_t port); + +protected: + void onRX(Socket *s); + void onError(Socket *s, socket_error_t err); + void onIncoming(TCPListener *s, void *impl); + void onDisconnect(TCPStream *s); + +public: + TCPListener srv; +}; + #endif - -#ifdef CMAKE_BUILD + +extern "C" { +#else +#include +#endif + +#if _MSC_VER >= 1900 +#pragma comment(lib,"legacy_stdio_definitions.lib") + +FILE * __cdecl __iob_func(void) +{ + FILE __libwebsocket_std_redef_arr[] = { stdin, stdout, stderr }; + return &(__libwebsocket_std_redef_arr[0]); +} +#endif + +#ifdef MBED_OPERATORS +#define LWS_POSIX 0 +#else +#define LWS_POSIX 1 +#endif + #include "lws_config.h" -#endif #if defined(WIN32) || defined(_WIN32) - #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif + #include #include #include -//#include -#include"win32helpers/websock-w32.h" +#include +#include +#include #define strcasecmp stricmp #define getdtablesize() 30000 +#define LWS_INLINE __inline #define LWS_VISIBLE #ifdef LWS_DLL @@ -57,29 +140,44 @@ extern "C" { #define LWS_EXTERN #endif -#else // NOT WIN32 +#define LWS_INVALID_FILE INVALID_HANDLE_VALUE +#define LWS_O_RDONLY _O_RDONLY -#include +#else /* NOT WIN32 */ #include +#define LWS_INLINE inline +#define LWS_O_RDONLY O_RDONLY + +#ifndef MBED_OPERATORS +#include +#include +#define LWS_INVALID_FILE -1 +#else +#define getdtablesize() (20) +#define LWS_INVALID_FILE NULL +#endif + #if defined(__GNUC__) #define LWS_VISIBLE __attribute__((visibility("default"))) #else #define LWS_VISIBLE #endif +#if defined(__ANDROID__) +#define getdtablesize() 1024 +#endif + #endif #ifdef LWS_USE_LIBEV #include #endif /* LWS_USE_LIBEV */ -#include - #ifndef LWS_EXTERN #define LWS_EXTERN extern #endif - + #ifdef _WIN32 #define random rand #else @@ -87,8 +185,19 @@ extern "C" { #include #endif +#ifdef LWS_OPENSSL_SUPPORT +#ifdef USE_WOLFSSL +#ifdef USE_OLD_CYASSL +#include +#else +#include +#endif /* not USE_OLD_CYASSL */ +#else +#include +#endif /* not USE_WOLFSSL */ +#endif + #define CONTEXT_PORT_NO_LISTEN -1 -#define MAX_MUX_RECURSION 2 enum lws_log_levels { LLL_ERR = 1 << 0, @@ -106,6 +215,7 @@ enum lws_log_levels { }; LWS_VISIBLE LWS_EXTERN void _lws_log(int filter, const char *format, ...); +LWS_VISIBLE LWS_EXTERN void _lws_logv(int filter, const char *format, va_list vl); /* notice, warn and log are always compiled in */ #define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__) @@ -129,131 +239,249 @@ LWS_VISIBLE LWS_EXTERN void lwsl_hexdump(void *buf, size_t len); #else /* no debug */ -#define lwsl_info(...) -#define lwsl_debug(...) -#define lwsl_parser(...) -#define lwsl_header(...) -#define lwsl_ext(...) -#define lwsl_client(...) -#define lwsl_latency(...) +#define lwsl_info(...) {} +#define lwsl_debug(...) {} +#define lwsl_parser(...) {} +#define lwsl_header(...) {} +#define lwsl_ext(...) {} +#define lwsl_client(...) {} +#define lwsl_latency(...) {} #define lwsl_hexdump(a, b) #endif - +struct lws; #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) /* api change list for user code to test against */ #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_ARG +/* the struct lws_protocols has the id field present */ +#define LWS_FEATURE_PROTOCOLS_HAS_ID_FIELD -enum libwebsocket_context_options { - LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT = 2, - LWS_SERVER_OPTION_SKIP_SERVER_CANONICAL_NAME = 4, - LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT = 8, - LWS_SERVER_OPTION_LIBEV = 16, - LWS_SERVER_OPTION_DISABLE_IPV6 = 32, - LWS_SERVER_OPTION_DISABLE_OS_CA_CERTS = 64, +/* you can call lws_get_peer_write_allowance */ +#define LWS_FEATURE_PROTOCOLS_HAS_PEER_WRITE_ALLOWANCE + +/* extra parameter introduced in 917f43ab821 */ +#define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_LEN + +/* File operations stuff exists */ +#define LWS_FEATURE_FOPS + +/* + * NOTE: These public enums are part of the abi. If you want to add one, + * add it at where specified so existing users are unaffected. + */ +enum lws_context_options { + LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT = (1 << 1), + LWS_SERVER_OPTION_SKIP_SERVER_CANONICAL_NAME = (1 << 2), + LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT = (1 << 3), + LWS_SERVER_OPTION_LIBEV = (1 << 4), + LWS_SERVER_OPTION_DISABLE_IPV6 = (1 << 5), + LWS_SERVER_OPTION_DISABLE_OS_CA_CERTS = (1 << 6), + LWS_SERVER_OPTION_PEER_CERT_NOT_REQUIRED = (1 << 7), + LWS_SERVER_OPTION_VALIDATE_UTF8 = (1 << 8), + LWS_SERVER_OPTION_SSL_ECDH = (1 << 9), + + /****** add new things just above ---^ ******/ }; -enum libwebsocket_callback_reasons { - LWS_CALLBACK_ESTABLISHED, - LWS_CALLBACK_CLIENT_CONNECTION_ERROR, - LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH, - LWS_CALLBACK_CLIENT_ESTABLISHED, - LWS_CALLBACK_CLOSED, - LWS_CALLBACK_CLOSED_HTTP, - LWS_CALLBACK_RECEIVE, - LWS_CALLBACK_CLIENT_RECEIVE, - LWS_CALLBACK_CLIENT_RECEIVE_PONG, - LWS_CALLBACK_CLIENT_WRITEABLE, - LWS_CALLBACK_SERVER_WRITEABLE, - LWS_CALLBACK_HTTP, - LWS_CALLBACK_HTTP_BODY, - LWS_CALLBACK_HTTP_BODY_COMPLETION, - LWS_CALLBACK_HTTP_FILE_COMPLETION, - LWS_CALLBACK_HTTP_WRITEABLE, - LWS_CALLBACK_FILTER_NETWORK_CONNECTION, - LWS_CALLBACK_FILTER_HTTP_CONNECTION, - LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED, - LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION, - LWS_CALLBACK_OPENSSL_LOAD_EXTRA_CLIENT_VERIFY_CERTS, - LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS, - LWS_CALLBACK_OPENSSL_PERFORM_CLIENT_CERT_VERIFICATION, - LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER, - LWS_CALLBACK_CONFIRM_EXTENSION_OKAY, - LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED, - LWS_CALLBACK_PROTOCOL_INIT, - LWS_CALLBACK_PROTOCOL_DESTROY, - LWS_CALLBACK_WSI_CREATE, /* always protocol[0] */ - LWS_CALLBACK_WSI_DESTROY, /* always protocol[0] */ - LWS_CALLBACK_GET_THREAD_ID, +/* + * NOTE: These public enums are part of the abi. If you want to add one, + * add it at where specified so existing users are unaffected. + */ +enum lws_callback_reasons { + LWS_CALLBACK_ESTABLISHED = 0, + LWS_CALLBACK_CLIENT_CONNECTION_ERROR = 1, + LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH = 2, + LWS_CALLBACK_CLIENT_ESTABLISHED = 3, + LWS_CALLBACK_CLOSED = 4, + LWS_CALLBACK_CLOSED_HTTP = 5, + LWS_CALLBACK_RECEIVE = 6, + LWS_CALLBACK_RECEIVE_PONG = 7, + LWS_CALLBACK_CLIENT_RECEIVE = 8, + LWS_CALLBACK_CLIENT_RECEIVE_PONG = 9, + LWS_CALLBACK_CLIENT_WRITEABLE = 10, + LWS_CALLBACK_SERVER_WRITEABLE = 11, + LWS_CALLBACK_HTTP = 12, + LWS_CALLBACK_HTTP_BODY = 13, + LWS_CALLBACK_HTTP_BODY_COMPLETION = 14, + LWS_CALLBACK_HTTP_FILE_COMPLETION = 15, + LWS_CALLBACK_HTTP_WRITEABLE = 16, + LWS_CALLBACK_FILTER_NETWORK_CONNECTION = 17, + LWS_CALLBACK_FILTER_HTTP_CONNECTION = 18, + LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED = 19, + LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION = 20, + LWS_CALLBACK_OPENSSL_LOAD_EXTRA_CLIENT_VERIFY_CERTS = 21, + LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS = 22, + LWS_CALLBACK_OPENSSL_PERFORM_CLIENT_CERT_VERIFICATION = 23, + LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER = 24, + LWS_CALLBACK_CONFIRM_EXTENSION_OKAY = 25, + LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED = 26, + LWS_CALLBACK_PROTOCOL_INIT = 27, + LWS_CALLBACK_PROTOCOL_DESTROY = 28, + LWS_CALLBACK_WSI_CREATE /* always protocol[0] */ = 29, + LWS_CALLBACK_WSI_DESTROY /* always protocol[0] */ = 30, + LWS_CALLBACK_GET_THREAD_ID = 31, /* external poll() management support */ - LWS_CALLBACK_ADD_POLL_FD, - LWS_CALLBACK_DEL_POLL_FD, - LWS_CALLBACK_CHANGE_MODE_POLL_FD, - LWS_CALLBACK_LOCK_POLL, - LWS_CALLBACK_UNLOCK_POLL, + LWS_CALLBACK_ADD_POLL_FD = 32, + LWS_CALLBACK_DEL_POLL_FD = 33, + LWS_CALLBACK_CHANGE_MODE_POLL_FD = 34, + LWS_CALLBACK_LOCK_POLL = 35, + LWS_CALLBACK_UNLOCK_POLL = 36, + + LWS_CALLBACK_OPENSSL_CONTEXT_REQUIRES_PRIVATE_KEY = 37, + LWS_CALLBACK_WS_PEER_INITIATED_CLOSE = 38, + + LWS_CALLBACK_WS_EXT_DEFAULTS = 39, + + /****** add new things just above ---^ ******/ LWS_CALLBACK_USER = 1000, /* user code can use any including / above */ }; -// argument structure for all external poll related calls -// passed in via 'in' -struct libwebsocket_pollargs { - int fd; // applicable file descriptor - int events; // the new event mask - int prev_events; // the previous event mask -}; -#ifdef _WIN32 -struct libwebsocket_pollfd { - SOCKET fd; +#if defined(_WIN32) +typedef SOCKET lws_sockfd_type; +typedef HANDLE lws_filefd_type; +#define lws_sockfd_valid(sfd) (!!sfd) +struct lws_pollfd { + lws_sockfd_type fd; SHORT events; SHORT revents; }; #else -#define libwebsocket_pollfd pollfd + +#if defined(MBED_OPERATORS) +/* it's a class lws_conn * */ +typedef void * lws_sockfd_type; +typedef void * lws_filefd_type; +#define lws_sockfd_valid(sfd) (!!sfd) +struct pollfd { + lws_sockfd_type fd; + short events; + short revents; +}; +#define POLLIN 0x0001 +#define POLLPRI 0x0002 +#define POLLOUT 0x0004 +#define POLLERR 0x0008 +#define POLLHUP 0x0010 +#define POLLNVAL 0x0020 + +struct lws; + +void * mbed3_create_tcp_stream_socket(void); +void mbed3_delete_tcp_stream_socket(void *sockfd); +void mbed3_tcp_stream_bind(void *sock, int port, struct lws *); +void mbed3_tcp_stream_accept(void *sock, struct lws *); +#else +typedef int lws_sockfd_type; +typedef int lws_filefd_type; +#define lws_sockfd_valid(sfd) (sfd >= 0) #endif -enum libwebsocket_extension_callback_reasons { - LWS_EXT_CALLBACK_SERVER_CONTEXT_CONSTRUCT, - LWS_EXT_CALLBACK_CLIENT_CONTEXT_CONSTRUCT, - LWS_EXT_CALLBACK_SERVER_CONTEXT_DESTRUCT, - LWS_EXT_CALLBACK_CLIENT_CONTEXT_DESTRUCT, - LWS_EXT_CALLBACK_CONSTRUCT, - LWS_EXT_CALLBACK_CLIENT_CONSTRUCT, - LWS_EXT_CALLBACK_CHECK_OK_TO_REALLY_CLOSE, - LWS_EXT_CALLBACK_CHECK_OK_TO_PROPOSE_EXTENSION, - LWS_EXT_CALLBACK_DESTROY, - LWS_EXT_CALLBACK_DESTROY_ANY_WSI_CLOSING, - LWS_EXT_CALLBACK_ANY_WSI_ESTABLISHED, - LWS_EXT_CALLBACK_PACKET_RX_PREPARSE, - LWS_EXT_CALLBACK_PACKET_TX_PRESEND, - LWS_EXT_CALLBACK_PACKET_TX_DO_SEND, - LWS_EXT_CALLBACK_HANDSHAKE_REPLY_TX, - LWS_EXT_CALLBACK_FLUSH_PENDING_TX, - LWS_EXT_CALLBACK_EXTENDED_PAYLOAD_RX, - LWS_EXT_CALLBACK_CAN_PROXY_CLIENT_CONNECTION, - LWS_EXT_CALLBACK_1HZ, - LWS_EXT_CALLBACK_REQUEST_ON_WRITEABLE, - LWS_EXT_CALLBACK_IS_WRITEABLE, - LWS_EXT_CALLBACK_PAYLOAD_TX, - LWS_EXT_CALLBACK_PAYLOAD_RX, +#define lws_pollfd pollfd +#endif + +/* argument structure for all external poll related calls + * passed in via 'in' + */ +struct lws_pollargs { + lws_sockfd_type fd; /* applicable socket descriptor */ + int events; /* the new event mask */ + int prev_events; /* the previous event mask */ }; -enum libwebsocket_write_protocol { - LWS_WRITE_TEXT, - LWS_WRITE_BINARY, - LWS_WRITE_CONTINUATION, - LWS_WRITE_HTTP, +/** + * struct lws_plat_file_ops - Platform-specific file operations + * + * These provide platform-agnostic ways to deal with filesystem access in the + * library and in the user code. + * + * @open: Open file (always binary access if plat supports it) + * filelen is filled on exit to be the length of the file + * flags should be set to O_RDONLY or O_RDWR + * @close: Close file + * @seek_cur: Seek from current position + * @read: Read fron file *amount is set on exit to amount read + * @write: Write to file *amount is set on exit as amount written + */ +struct lws_plat_file_ops { + lws_filefd_type (*open)(struct lws *wsi, const char *filename, + unsigned long *filelen, int flags); + int (*close)(struct lws *wsi, lws_filefd_type fd); + unsigned long (*seek_cur)(struct lws *wsi, lws_filefd_type fd, + long offset_from_cur_pos); + int (*read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, + unsigned char *buf, unsigned long len); + int (*write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, + unsigned char *buf, unsigned long len); + + /* Add new things just above here ---^ + * This is part of the ABI, don't needlessly break compatibilty */ +}; + +/* + * NOTE: These public enums are part of the abi. If you want to add one, + * add it at where specified so existing users are unaffected. + */ +enum lws_extension_callback_reasons { + LWS_EXT_CB_SERVER_CONTEXT_CONSTRUCT = 0, + LWS_EXT_CB_CLIENT_CONTEXT_CONSTRUCT = 1, + LWS_EXT_CB_SERVER_CONTEXT_DESTRUCT = 2, + LWS_EXT_CB_CLIENT_CONTEXT_DESTRUCT = 3, + LWS_EXT_CB_CONSTRUCT = 4, + LWS_EXT_CB_CLIENT_CONSTRUCT = 5, + LWS_EXT_CB_CHECK_OK_TO_REALLY_CLOSE = 6, + LWS_EXT_CB_CHECK_OK_TO_PROPOSE_EXTENSION = 7, + LWS_EXT_CB_DESTROY = 8, + LWS_EXT_CB_DESTROY_ANY_WSI_CLOSING = 9, + LWS_EXT_CB_ANY_WSI_ESTABLISHED = 10, + LWS_EXT_CB_PACKET_RX_PREPARSE = 11, + LWS_EXT_CB_PACKET_TX_PRESEND = 12, + LWS_EXT_CB_PACKET_TX_DO_SEND = 13, + LWS_EXT_CB_HANDSHAKE_REPLY_TX = 14, + LWS_EXT_CB_FLUSH_PENDING_TX = 15, + LWS_EXT_CB_EXTENDED_PAYLOAD_RX = 16, + LWS_EXT_CB_CAN_PROXY_CLIENT_CONNECTION = 17, + LWS_EXT_CB_1HZ = 18, + LWS_EXT_CB_REQUEST_ON_WRITEABLE = 19, + LWS_EXT_CB_IS_WRITEABLE = 20, + LWS_EXT_CB_PAYLOAD_TX = 21, + LWS_EXT_CB_PAYLOAD_RX = 22, + LWS_EXT_CB_OPTION_DEFAULT = 23, + LWS_EXT_CB_OPTION_SET = 24, + LWS_EXT_CB_OPTION_CONFIRM = 25, + + /****** add new things just above ---^ ******/ +}; + +/* + * NOTE: These public enums are part of the abi. If you want to add one, + * add it at where specified so existing users are unaffected. + */ +enum lws_write_protocol { + LWS_WRITE_TEXT = 0, + LWS_WRITE_BINARY = 1, + LWS_WRITE_CONTINUATION = 2, + LWS_WRITE_HTTP = 3, /* special 04+ opcodes */ - LWS_WRITE_CLOSE, - LWS_WRITE_PING, - LWS_WRITE_PONG, + /* LWS_WRITE_CLOSE is handled by lws_close_reason() */ + LWS_WRITE_PING = 5, + LWS_WRITE_PONG = 6, + + /* Same as write_http but we know this write ends the transaction */ + LWS_WRITE_HTTP_FINAL = 7, + + /* HTTP2 */ + + LWS_WRITE_HTTP_HEADERS = 8, + + /****** add new things just above ---^ ******/ /* flags */ @@ -278,64 +506,111 @@ struct lws_tokens { int token_len; }; +/* + * don't forget to update test server header dump accordingly + * + * these have to be kept in sync with lextable.h / minilex.c + * + * NOTE: These public enums are part of the abi. If you want to add one, + * add it at where specified so existing users are unaffected. + */ enum lws_token_indexes { - WSI_TOKEN_GET_URI, - WSI_TOKEN_POST_URI, - WSI_TOKEN_OPTIONS_URI, - WSI_TOKEN_HOST, - WSI_TOKEN_CONNECTION, - WSI_TOKEN_KEY1, - WSI_TOKEN_KEY2, - WSI_TOKEN_PROTOCOL, - WSI_TOKEN_UPGRADE, - WSI_TOKEN_ORIGIN, - WSI_TOKEN_DRAFT, - WSI_TOKEN_CHALLENGE, + WSI_TOKEN_GET_URI = 0, + WSI_TOKEN_POST_URI = 1, + WSI_TOKEN_OPTIONS_URI = 2, + WSI_TOKEN_HOST = 3, + WSI_TOKEN_CONNECTION = 4, + WSI_TOKEN_UPGRADE = 5, + WSI_TOKEN_ORIGIN = 6, + WSI_TOKEN_DRAFT = 7, + WSI_TOKEN_CHALLENGE = 8, + WSI_TOKEN_EXTENSIONS = 9, + WSI_TOKEN_KEY1 = 10, + WSI_TOKEN_KEY2 = 11, + WSI_TOKEN_PROTOCOL = 12, + WSI_TOKEN_ACCEPT = 13, + WSI_TOKEN_NONCE = 14, + WSI_TOKEN_HTTP = 15, + WSI_TOKEN_HTTP2_SETTINGS = 16, + WSI_TOKEN_HTTP_ACCEPT = 17, + WSI_TOKEN_HTTP_AC_REQUEST_HEADERS = 18, + WSI_TOKEN_HTTP_IF_MODIFIED_SINCE = 19, + WSI_TOKEN_HTTP_IF_NONE_MATCH = 20, + WSI_TOKEN_HTTP_ACCEPT_ENCODING = 21, + WSI_TOKEN_HTTP_ACCEPT_LANGUAGE = 22, + WSI_TOKEN_HTTP_PRAGMA = 23, + WSI_TOKEN_HTTP_CACHE_CONTROL = 24, + WSI_TOKEN_HTTP_AUTHORIZATION = 25, + WSI_TOKEN_HTTP_COOKIE = 26, + WSI_TOKEN_HTTP_CONTENT_LENGTH = 27, + WSI_TOKEN_HTTP_CONTENT_TYPE = 28, + WSI_TOKEN_HTTP_DATE = 29, + WSI_TOKEN_HTTP_RANGE = 30, + WSI_TOKEN_HTTP_REFERER = 31, + WSI_TOKEN_KEY = 32, + WSI_TOKEN_VERSION = 33, + WSI_TOKEN_SWORIGIN = 34, - /* new for 04 */ - WSI_TOKEN_KEY, - WSI_TOKEN_VERSION, - WSI_TOKEN_SWORIGIN, + WSI_TOKEN_HTTP_COLON_AUTHORITY = 35, + WSI_TOKEN_HTTP_COLON_METHOD = 36, + WSI_TOKEN_HTTP_COLON_PATH = 37, + WSI_TOKEN_HTTP_COLON_SCHEME = 38, + WSI_TOKEN_HTTP_COLON_STATUS = 39, - /* new for 05 */ - WSI_TOKEN_EXTENSIONS, + WSI_TOKEN_HTTP_ACCEPT_CHARSET = 40, + WSI_TOKEN_HTTP_ACCEPT_RANGES = 41, + WSI_TOKEN_HTTP_ACCESS_CONTROL_ALLOW_ORIGIN = 42, + WSI_TOKEN_HTTP_AGE = 43, + WSI_TOKEN_HTTP_ALLOW = 44, + WSI_TOKEN_HTTP_CONTENT_DISPOSITION = 45, + WSI_TOKEN_HTTP_CONTENT_ENCODING = 46, + WSI_TOKEN_HTTP_CONTENT_LANGUAGE = 47, + WSI_TOKEN_HTTP_CONTENT_LOCATION = 48, + WSI_TOKEN_HTTP_CONTENT_RANGE = 49, + WSI_TOKEN_HTTP_ETAG = 50, + WSI_TOKEN_HTTP_EXPECT = 51, + WSI_TOKEN_HTTP_EXPIRES = 52, + WSI_TOKEN_HTTP_FROM = 53, + WSI_TOKEN_HTTP_IF_MATCH = 54, + WSI_TOKEN_HTTP_IF_RANGE = 55, + WSI_TOKEN_HTTP_IF_UNMODIFIED_SINCE = 56, + WSI_TOKEN_HTTP_LAST_MODIFIED = 57, + WSI_TOKEN_HTTP_LINK = 58, + WSI_TOKEN_HTTP_LOCATION = 59, + WSI_TOKEN_HTTP_MAX_FORWARDS = 60, + WSI_TOKEN_HTTP_PROXY_AUTHENTICATE = 61, + WSI_TOKEN_HTTP_PROXY_AUTHORIZATION = 62, + WSI_TOKEN_HTTP_REFRESH = 63, + WSI_TOKEN_HTTP_RETRY_AFTER = 64, + WSI_TOKEN_HTTP_SERVER = 65, + WSI_TOKEN_HTTP_SET_COOKIE = 66, + WSI_TOKEN_HTTP_STRICT_TRANSPORT_SECURITY = 67, + WSI_TOKEN_HTTP_TRANSFER_ENCODING = 68, + WSI_TOKEN_HTTP_USER_AGENT = 69, + WSI_TOKEN_HTTP_VARY = 70, + WSI_TOKEN_HTTP_VIA = 71, + WSI_TOKEN_HTTP_WWW_AUTHENTICATE = 72, + WSI_TOKEN_PROXY, - /* client receives these */ - WSI_TOKEN_ACCEPT, - WSI_TOKEN_NONCE, - WSI_TOKEN_HTTP, + WSI_TOKEN_PATCH_URI = 73, + WSI_TOKEN_PUT_URI = 74, + WSI_TOKEN_DELETE_URI = 75, - /* http-related */ - WSI_TOKEN_HTTP_ACCEPT, - WSI_TOKEN_HTTP_AC_REQUEST_HEADERS, - WSI_TOKEN_HTTP_IF_MODIFIED_SINCE, - WSI_TOKEN_HTTP_IF_NONE_MATCH, - WSI_TOKEN_HTTP_ACCEPT_ENCODING, - WSI_TOKEN_HTTP_ACCEPT_LANGUAGE, - WSI_TOKEN_HTTP_PRAGMA, - WSI_TOKEN_HTTP_CACHE_CONTROL, - WSI_TOKEN_HTTP_AUTHORIZATION, - WSI_TOKEN_HTTP_COOKIE, - WSI_TOKEN_HTTP_CONTENT_LENGTH, - WSI_TOKEN_HTTP_CONTENT_TYPE, - WSI_TOKEN_HTTP_DATE, - WSI_TOKEN_HTTP_RANGE, - WSI_TOKEN_HTTP_REFERER, - WSI_TOKEN_HTTP_URI_ARGS, - - - WSI_TOKEN_MUXURL, + WSI_TOKEN_HTTP_URI_ARGS = 76, /* use token storage to stash these */ - _WSI_TOKEN_CLIENT_SENT_PROTOCOLS, - _WSI_TOKEN_CLIENT_PEER_ADDRESS, - _WSI_TOKEN_CLIENT_URI, - _WSI_TOKEN_CLIENT_HOST, - _WSI_TOKEN_CLIENT_ORIGIN, + _WSI_TOKEN_CLIENT_SENT_PROTOCOLS = 77, + _WSI_TOKEN_CLIENT_PEER_ADDRESS = 78, + _WSI_TOKEN_CLIENT_URI = 79, + _WSI_TOKEN_CLIENT_HOST = 80, + _WSI_TOKEN_CLIENT_ORIGIN = 81, + + /****** add new things just above ---^ ******/ /* always last real token index*/ WSI_TOKEN_COUNT, + /* parser state additions */ WSI_TOKEN_NAME_PART, WSI_TOKEN_SKIPPING, @@ -345,7 +620,7 @@ enum lws_token_indexes { }; struct lws_token_limits { - unsigned short token_limit[WSI_TOKEN_COUNT]; + unsigned short token_limit[WSI_TOKEN_COUNT]; }; /* @@ -437,28 +712,36 @@ struct lws_token_limits { (e.g., the server certificate can't be verified). */ +/* + * NOTE: These public enums are part of the abi. If you want to add one, + * add it at where specified so existing users are unaffected. + */ enum lws_close_status { - LWS_CLOSE_STATUS_NOSTATUS = 0, - LWS_CLOSE_STATUS_NORMAL = 1000, - LWS_CLOSE_STATUS_GOINGAWAY = 1001, - LWS_CLOSE_STATUS_PROTOCOL_ERR = 1002, - LWS_CLOSE_STATUS_UNACCEPTABLE_OPCODE = 1003, - LWS_CLOSE_STATUS_RESERVED = 1004, - LWS_CLOSE_STATUS_NO_STATUS = 1005, - LWS_CLOSE_STATUS_ABNORMAL_CLOSE = 1006, - LWS_CLOSE_STATUS_INVALID_PAYLOAD = 1007, - LWS_CLOSE_STATUS_POLICY_VIOLATION = 1008, - LWS_CLOSE_STATUS_MESSAGE_TOO_LARGE = 1009, - LWS_CLOSE_STATUS_EXTENSION_REQUIRED = 1010, - LWS_CLOSE_STATUS_UNEXPECTED_CONDITION = 1011, - LWS_CLOSE_STATUS_TLS_FAILURE = 1015, + LWS_CLOSE_STATUS_NOSTATUS = 0, + LWS_CLOSE_STATUS_NORMAL = 1000, + LWS_CLOSE_STATUS_GOINGAWAY = 1001, + LWS_CLOSE_STATUS_PROTOCOL_ERR = 1002, + LWS_CLOSE_STATUS_UNACCEPTABLE_OPCODE = 1003, + LWS_CLOSE_STATUS_RESERVED = 1004, + LWS_CLOSE_STATUS_NO_STATUS = 1005, + LWS_CLOSE_STATUS_ABNORMAL_CLOSE = 1006, + LWS_CLOSE_STATUS_INVALID_PAYLOAD = 1007, + LWS_CLOSE_STATUS_POLICY_VIOLATION = 1008, + LWS_CLOSE_STATUS_MESSAGE_TOO_LARGE = 1009, + LWS_CLOSE_STATUS_EXTENSION_REQUIRED = 1010, + LWS_CLOSE_STATUS_UNEXPECTED_CONDITION = 1011, + LWS_CLOSE_STATUS_TLS_FAILURE = 1015, + + /****** add new things just above ---^ ******/ + + LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY = 9999, }; enum http_status { - HTTP_STATUS_OK = 200, - HTTP_STATUS_NO_CONTENT = 204, + HTTP_STATUS_OK = 200, + HTTP_STATUS_NO_CONTENT = 204, - HTTP_STATUS_BAD_REQUEST = 400, + HTTP_STATUS_BAD_REQUEST = 400, HTTP_STATUS_UNAUTHORIZED, HTTP_STATUS_PAYMENT_REQUIRED, HTTP_STATUS_FORBIDDEN, @@ -477,7 +760,7 @@ enum http_status { HTTP_STATUS_REQ_RANGE_NOT_SATISFIABLE, HTTP_STATUS_EXPECTATION_FAILED, - HTTP_STATUS_INTERNAL_SERVER_ERROR = 500, + HTTP_STATUS_INTERNAL_SERVER_ERROR = 500, HTTP_STATUS_NOT_IMPLEMENTED, HTTP_STATUS_BAD_GATEWAY, HTTP_STATUS_SERVICE_UNAVAILABLE, @@ -485,14 +768,13 @@ enum http_status { HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED, }; -struct libwebsocket; -struct libwebsocket_context; +struct lws; +struct lws_context; /* needed even with extensions disabled for create context */ -struct libwebsocket_extension; +struct lws_extension; /** - * callback_function() - User server actions - * @context: Websockets context + * typedef lws_callback_function() - User server actions * @wsi: Opaque websocket instance pointer * @reason: The reason for the call * @user: Pointer to per-session user data allocated by library @@ -504,16 +786,21 @@ struct libwebsocket_extension; * * For each connection / session there is user data allocated that is * pointed to by "user". You set the size of this user data area when - * the library is initialized with libwebsocket_create_server. + * the library is initialized with lws_create_server. * * You get an opportunity to initialize user data when called back with * LWS_CALLBACK_ESTABLISHED reason. * * LWS_CALLBACK_ESTABLISHED: after the server completes a handshake with - * an incoming client + * an incoming client. If you built the library + * with ssl support, @in is a pointer to the + * ssl struct associated with the connection or + * NULL. * * LWS_CALLBACK_CLIENT_CONNECTION_ERROR: the request client connection has - * been unable to complete a handshake with the remote server + * been unable to complete a handshake with the remote server. If + * in is non-NULL, you can find an error string of length len where + * it points to. * * LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH: this is the last chance for the * client user code to examine the http headers @@ -548,7 +835,7 @@ struct libwebsocket_extension; * for example, to send a script to the client * which will then open the websockets connection. * @in points to the URI path requested and - * libwebsockets_serve_http_file() makes it very + * lws_serve_http_file() makes it very * simple to send back a file to the client. * Normally after sending the file you are done * with the http connection, since the rest of the @@ -573,7 +860,7 @@ struct libwebsocket_extension; * * LWS_CALLBACK_CLIENT_WRITEABLE: * LWS_CALLBACK_SERVER_WRITEABLE: If you call - * libwebsocket_callback_on_writable() on a connection, you will + * lws_callback_on_writable() on a connection, you will * get one of these callbacks coming when the connection socket * is able to accept another write packet without blocking. * If it already was able to take another packet without blocking, @@ -591,7 +878,7 @@ struct libwebsocket_extension; * receiving anything. Because this happens immediately after the * network connection from the client, there's no websocket protocol * selected yet so this callback is issued only to protocol 0. - * + * * LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED: A new client just had * been connected, accepted, and instantiated into the pool. This * callback allows setting any relevant property to it. Because this @@ -637,6 +924,15 @@ struct libwebsocket_extension; * verify the validity of certificates returned by clients. @user * is the server's OpenSSL SSL_CTX* * + * LWS_CALLBACK_OPENSSL_CONTEXT_REQUIRES_PRIVATE_KEY: if configured for + * including OpenSSL support but no private key file has been + * specified (ssl_private_key_filepath is NULL), this is called to + * allow the user to set the private key directly via libopenssl + * and perform further operations if required; this might be useful + * in situations where the private key is not directly accessible + * by the OS, for example if it is stored on a smartcard + * @user is the server's OpenSSL SSL_CTX* + * * LWS_CALLBACK_OPENSSL_PERFORM_CLIENT_CERT_VERIFICATION: if the * libwebsockets context was created with the option * LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT, then this @@ -716,7 +1012,7 @@ struct libwebsocket_extension; * will be integrating libwebsockets sockets into an external polling * array. * - * For these calls, @in points to a struct libwebsocket_pollargs that + * For these calls, @in points to a struct lws_pollargs that * contains @fd, @events and @prev_events members * * LWS_CALLBACK_ADD_POLL_FD: libwebsocket deals with its poll() loop @@ -729,7 +1025,7 @@ struct libwebsocket_extension; * serving case. * This callback happens when a socket needs to be * added to the polling loop: @in points to a struct - * libwebsocket_pollargs; the @fd member of the struct is the file + * lws_pollargs; the @fd member of the struct is the file * descriptor, and @events contains the active events. * * If you are using the internal polling loop (the "service" @@ -737,13 +1033,13 @@ struct libwebsocket_extension; * * LWS_CALLBACK_DEL_POLL_FD: This callback happens when a socket descriptor * needs to be removed from an external polling array. @in is - * again the struct libwebsocket_pollargs containing the @fd member + * again the struct lws_pollargs containing the @fd member * to be removed. If you are using the internal polling * loop, you can just ignore it. * * LWS_CALLBACK_CHANGE_MODE_POLL_FD: This callback happens when * libwebsockets wants to modify the events for a connectiion. - * @in is the struct libwebsocket_pollargs with the @fd to change. + * @in is the struct lws_pollargs with the @fd to change. * The new event mask is in @events member and the old mask is in * the @prev_events member. * If you are using the internal polling loop, you can just ignore @@ -753,25 +1049,36 @@ struct libwebsocket_extension; * LWS_CALLBACK_UNLOCK_POLL: These allow the external poll changes driven * by libwebsockets to participate in an external thread locking * scheme around the changes, so the whole thing is threadsafe. + * These are called around three activities in the library, + * - inserting a new wsi in the wsi / fd table (len=1) + * - deleting a wsi from the wsi / fd table (len=1) + * - changing a wsi's POLLIN/OUT state (len=0) + * Locking and unlocking external synchronization objects when + * len == 1 allows external threads to be synchronized against + * wsi lifecycle changes if it acquires the same lock for the + * duration of wsi dereference from the other thread context. + * + * LWS_CALLBACK_WS_PEER_INITIATED_CLOSE: + * The peer has sent an unsolicited Close WS packet. @in and + * @len are the optional close code (first 2 bytes, network + * order) and the optional additional information which is not + * defined in the standard, and may be a string or non-human- + * readble data. + * If you return 0 lws will echo the close and then close the + * connection. If you return nonzero lws will just close the + * connection. */ -LWS_VISIBLE LWS_EXTERN int callback(struct libwebsocket_context *context, - struct libwebsocket *wsi, - enum libwebsocket_callback_reasons reason, void *user, - void *in, size_t len); +typedef int +lws_callback_function(struct lws *wsi, enum lws_callback_reasons reason, + void *user, void *in, size_t len); -typedef int (callback_function)(struct libwebsocket_context *context, - struct libwebsocket *wsi, - enum libwebsocket_callback_reasons reason, void *user, - void *in, size_t len); - -#ifndef LWS_NO_EXTENSIONS /** - * extension_callback_function() - Hooks to allow extensions to operate + * typedef lws_extension_callback_function() - Hooks to allow extensions to operate * @context: Websockets context * @ext: This extension * @wsi: Opaque websocket instance pointer * @reason: The reason for the call - * @user: Pointer to per-session user data allocated by library + * @user: Pointer to ptr to per-session user data allocated by library * @in: Pointer used for some callback reasons * @len: Length set for some callback reasons * @@ -783,26 +1090,26 @@ typedef int (callback_function)(struct libwebsocket_context *context, * each active extension on each connection. That is what is pointed to * by the @user parameter. * - * LWS_EXT_CALLBACK_CONSTRUCT: called when the server has decided to + * LWS_EXT_CB_CONSTRUCT: called when the server has decided to * select this extension from the list provided by the client, * just before the server will send back the handshake accepting * the connection with this extension active. This gives the * extension a chance to initialize its connection context found * in @user. * - * LWS_EXT_CALLBACK_CLIENT_CONSTRUCT: same as LWS_EXT_CALLBACK_CONSTRUCT + * LWS_EXT_CB_CLIENT_CONSTRUCT: same as LWS_EXT_CB_CONSTRUCT * but called when client is instantiating this extension. Some * extensions will work the same on client and server side and then * you can just merge handlers for both CONSTRUCTS. * - * LWS_EXT_CALLBACK_DESTROY: called when the connection the extension was + * LWS_EXT_CB_DESTROY: called when the connection the extension was * being used on is about to be closed and deallocated. It's the * last chance for the extension to deallocate anything it has * allocated in the user data (pointed to by @user) before the * user data is deleted. This same callback is used whether you * are in client or server instantiation context. * - * LWS_EXT_CALLBACK_PACKET_RX_PREPARSE: when this extension was active on + * LWS_EXT_CB_PACKET_RX_PREPARSE: when this extension was active on * a connection, and a packet of data arrived at the connection, * it is passed to this callback to give the extension a chance to * change the data, eg, decompress it. @user is pointing to the @@ -814,33 +1121,28 @@ typedef int (callback_function)(struct libwebsocket_context *context, * a new buffer allocated in its private user context data and * set the pointed-to lws_tokens members to point to its buffer. * - * LWS_EXT_CALLBACK_PACKET_TX_PRESEND: this works the same way as - * LWS_EXT_CALLBACK_PACKET_RX_PREPARSE above, except it gives the + * LWS_EXT_CB_PACKET_TX_PRESEND: this works the same way as + * LWS_EXT_CB_PACKET_RX_PREPARSE above, except it gives the * extension a chance to change websocket data just before it will * be sent out. Using the same lws_token pointer scheme in @in, * the extension can change the buffer and the length to be * transmitted how it likes. Again if it wants to grow the * buffer safely, it should copy the data into its own buffer and * set the lws_tokens token pointer to it. + * + * LWS_EXT_CB_ARGS_VALIDATE: */ -LWS_VISIBLE LWS_EXTERN int extension_callback(struct libwebsocket_context *context, - struct libwebsocket_extension *ext, - struct libwebsocket *wsi, - enum libwebsocket_extension_callback_reasons reason, - void *user, void *in, size_t len); - -typedef int (extension_callback_function)(struct libwebsocket_context *context, - struct libwebsocket_extension *ext, - struct libwebsocket *wsi, - enum libwebsocket_extension_callback_reasons reason, - void *user, void *in, size_t len); -#endif +typedef int +lws_extension_callback_function(struct lws_context *context, + const struct lws_extension *ext, struct lws *wsi, + enum lws_extension_callback_reasons reason, + void *user, void *in, size_t len); /** - * struct libwebsocket_protocols - List of protocols and handlers server + * struct lws_protocols - List of protocols and handlers server * supports. * @name: Protocol name that must match the one given in the client - * Javascript new WebSocket(url, 'protocol') name + * Javascript new WebSocket(url, 'protocol') name. * @callback: The service callback used for this protocol. It allows the * service action for an entire protocol to be encapsulated in * the protocol-specific callback @@ -853,95 +1155,141 @@ typedef int (extension_callback_function)(struct libwebsocket_context *context, * you support. If the frame size is exceeded, there is no * error, but the buffer will spill to the user callback when * full, which you can detect by using - * libwebsockets_remaining_packet_payload(). Notice that you - * just talk about frame size here, the LWS_SEND_BUFFER_PRE_PADDING + * lws_remaining_packet_payload(). Notice that you + * just talk about frame size here, the LWS_PRE * and post-padding are automatically also allocated on top. - * @no_buffer_all_partial_tx: Leave at zero if you want the library to take - * care of all partial tx for you. It's useful if you only have - * small tx packets and the chance of any truncated send is small - * enough any additional malloc / buffering overhead is less - * painful than writing the code to deal with partial sends. For - * protocols where you stream big blocks, set to nonzero and use - * the return value from libwebsocket_write() to manage how much - * got send yourself. - * @owning_server: the server init call fills in this opaque pointer when - * registering this protocol with the server. - * @protocol_index: which protocol we are starting from zero + * @id: ignored by lws, but useful to contain user information bound + * to the selected protocol. For example if this protocol was + * called "myprotocol-v2", you might set id to 2, and the user + * code that acts differently according to the version can do so by + * switch (wsi->protocol->id), user code might use some bits as + * capability flags based on selected protocol version, etc. + * @user: User provided context data at the protocol level. + * Accessible via lws_get_protocol(wsi)->user + * This should not be confused with wsi->user, it is not the same. + * The library completely ignores any value in here. * * This structure represents one protocol supported by the server. An - * array of these structures is passed to libwebsocket_create_server() + * array of these structures is passed to lws_create_server() * allows as many protocols as you like to be handled by one server. + * + * The first protocol given has its callback used for user callbacks when + * there is no agreed protocol name, that's true during HTTP part of the + * connection and true if the client did not send a Protocol: header. */ -struct libwebsocket_protocols { +struct lws_protocols { const char *name; - callback_function *callback; + lws_callback_function *callback; size_t per_session_data_size; size_t rx_buffer_size; - int no_buffer_all_partial_tx; + unsigned int id; + void *user; - /* - * below are filled in on server init and can be left uninitialized, - * no need for user to use them directly either - */ - - struct libwebsocket_context *owning_server; - int protocol_index; + /* Add new things just above here ---^ + * This is part of the ABI, don't needlessly break compatibilty */ +}; + +enum lws_ext_options_types { + EXTARG_NONE, + EXTARG_DEC, + EXTARG_OPT_DEC + + /* Add new things just above here ---^ + * This is part of the ABI, don't needlessly break compatibilty */ }; -#ifndef LWS_NO_EXTENSIONS /** - * struct libwebsocket_extension - An extension we know how to cope with + * struct lws_ext_options - Option arguments to the extension. These are + * used in the negotiation at ws upgrade time. + * The helper function lws_ext_parse_options() + * uses these to generate callbacks * - * @name: Formal extension name, eg, "deflate-stream" + * @name: Option name, eg, "server_no_context_takeover" + * @type: What kind of args the option can take + */ +struct lws_ext_options { + const char *name; + enum lws_ext_options_types type; + + /* Add new things just above here ---^ + * This is part of the ABI, don't needlessly break compatibilty */ +}; + +struct lws_ext_option_arg { + int option_index; + const char *start; + int len; +}; + +/** + * struct lws_extension - An extension we know how to cope with + * + * @name: Formal extension name, eg, "permessage-deflate" * @callback: Service callback - * @per_session_data_size: Libwebsockets will auto-malloc this much - * memory for the use of the extension, a pointer - * to it comes in the @user callback parameter - * @per_context_private_data: Optional storage for this extension that - * is per-context, so it can track stuff across - * all sessions, etc, if it wants + * @client_offer: String containing exts and options client offers */ -struct libwebsocket_extension { +struct lws_extension { const char *name; - extension_callback_function *callback; - size_t per_session_data_size; - void *per_context_private_data; + lws_extension_callback_function *callback; + const char *client_offer; + + /* Add new things just above here ---^ + * This is part of the ABI, don't needlessly break compatibilty */ }; -#endif + +/* + * The internal exts are part of the public abi + * If we add more extensions, publish the callback here + */ + +extern int lws_extension_callback_pm_deflate( + struct lws_context *context, const struct lws_extension *ext, + struct lws *wsi, enum lws_extension_callback_reasons reason, + void *user, void *in, size_t len); + /** - * struct lws_context_creation_info: parameters to create context with + * struct lws_context_creation_info - parameters to create context with * - * @port: Port to listen on... you can use 0 to suppress listening on - * any port, that's what you want if you are not running a - * websocket server at all but just using it as a client + * @port: Port to listen on... you can use CONTEXT_PORT_NO_LISTEN to + * suppress listening on any port, that's what you want if you are + * not running a websocket server at all but just using it as a + * client * @iface: NULL to bind the listen socket to all interfaces, or the * interface name, eg, "eth2" * @protocols: Array of structures listing supported protocols and a protocol- * specific callback for each one. The list is ended with an * entry that has a NULL callback pointer. * It's not const because we write the owning_server member - * @extensions: NULL or array of libwebsocket_extension structs listing the + * @extensions: NULL or array of lws_extension structs listing the * extensions this context supports. If you configured with * --without-extensions, you should give NULL here. * @token_limits: NULL or struct lws_token_limits pointer which is initialized - * with a token length limit for each possible WSI_TOKEN_*** + * with a token length limit for each possible WSI_TOKEN_*** * @ssl_cert_filepath: If libwebsockets was compiled to use ssl, and you want * to listen using SSL, set to the filepath to fetch the * server cert from, otherwise NULL for unencrypted - * @ssl_private_key_filepath: filepath to private key if wanting SSL mode, - * else ignored + * @ssl_private_key_filepath: filepath to private key if wanting SSL mode; + * if this is set to NULL but sll_cert_filepath is set, the + * OPENSSL_CONTEXT_REQUIRES_PRIVATE_KEY callback is called + * to allow setting of the private key directly via openSSL + * library calls * @ssl_ca_filepath: CA certificate filepath or NULL * @ssl_cipher_list: List of valid ciphers to use (eg, * "RC4-MD5:RC4-SHA:AES128-SHA:AES256-SHA:HIGH:!DSS:!aNULL" * or you can leave it as NULL to get "DEFAULT" + * @http_proxy_address: If non-NULL, attempts to proxy via the given address. + * If proxy auth is required, use format + * "username:password@server:port" + * @http_proxy_port: If http_proxy_address was non-NULL, uses this port at + * the address * @gid: group id to change to after setting listen socket, or -1. * @uid: user id to change to after setting listen socket, or -1. - * @options: 0, or LWS_SERVER_OPTION_DEFEAT_CLIENT_MASK + * @options: 0, or LWS_SERVER_OPTION_... bitfields * @user: optional user pointer that can be recovered via the context - * pointer using libwebsocket_context_user + * pointer using lws_context_user * @ka_time: 0 for no keepalive, otherwise apply this keepalive timeout to * all libwebsocket sockets, client or server * @ka_probes: if ka_time was nonzero, after the timeout expires how many @@ -949,14 +1297,26 @@ struct libwebsocket_extension { * and killing the connection * @ka_interval: if ka_time was nonzero, how long to wait before each ka_probes * attempt + * @provided_client_ssl_ctx: If non-null, swap out libwebsockets ssl + * implementation for the one provided by provided_ssl_ctx. + * Libwebsockets no longer is responsible for freeing the context + * if this option is selected. + * @max_http_header_data: The max amount of header payload that can be handled + * in an http request (unrecognized header payload is dropped) + * @max_http_header_pool: The max number of connections with http headers that + * can be processed simultaneously (the corresponding memory is + * allocated for the lifetime of the context). If the pool is + * busy new incoming connections must wait for accept until one + * becomes free. */ struct lws_context_creation_info { int port; const char *iface; - struct libwebsocket_protocols *protocols; - struct libwebsocket_extension *extensions; - struct lws_token_limits *token_limits; + const struct lws_protocols *protocols; + const struct lws_extension *extensions; + const struct lws_token_limits *token_limits; + const char *ssl_private_key_password; const char *ssl_cert_filepath; const char *ssl_private_key_filepath; const char *ssl_ca_filepath; @@ -970,204 +1330,365 @@ struct lws_context_creation_info { int ka_time; int ka_probes; int ka_interval; +#ifdef LWS_OPENSSL_SUPPORT + SSL_CTX *provided_client_ssl_ctx; +#else /* maintain structure layout either way */ + void *provided_client_ssl_ctx; +#endif + short max_http_header_data; + short max_http_header_pool; + + /* Add new things just above here ---^ + * This is part of the ABI, don't needlessly break compatibility + * + * The below is to ensure later library versions with new + * members added above will see 0 (default) even if the app + * was not built against the newer headers. + */ + + void *_unused[8]; }; -LWS_VISIBLE LWS_EXTERN -void lws_set_log_level(int level, - void (*log_emit_function)(int level, const char *line)); +/** + * struct lws_client_connect_info - parameters to connect with when using + * lws_client_connect_via_info() + * + * @context: lws context to create connection in + * @address: remote address to connect to + * @port: remote port to connect to + * @ssl_connection: nonzero for ssl + * @path: uri path + * @host: content of host header + * @origin: content of origin header + * @protocol: list of ws protocols + * @ietf_version_or_minus_one: currently leave at 0 or -1 + * @userdata: if non-NULL, use this as wsi user_data instead of malloc it + * @client_exts: array of extensions that may be used on connection + */ + +struct lws_client_connect_info { + struct lws_context *context; + 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; + const struct lws_extension *client_exts; + + /* Add new things just above here ---^ + * This is part of the ABI, don't needlessly break compatibility + * + * The below is to ensure later library versions with new + * members added above will see 0 (default) even if the app + * was not built against the newer headers. + */ + + void *_unused[4]; +}; + +LWS_VISIBLE LWS_EXTERN void +lws_set_log_level(int level, + void (*log_emit_function)(int level, const char *line)); LWS_VISIBLE LWS_EXTERN void lwsl_emit_syslog(int level, const char *line); -LWS_VISIBLE LWS_EXTERN struct libwebsocket_context * -libwebsocket_create_context(struct lws_context_creation_info *info); - -LWS_VISIBLE LWS_EXTERN int -libwebsocket_set_proxy(struct libwebsocket_context *context, const char *proxy); - -LWS_VISIBLE LWS_EXTERN void -libwebsocket_context_destroy(struct libwebsocket_context *context); +LWS_VISIBLE LWS_EXTERN struct lws_context * +lws_create_context(struct lws_context_creation_info *info); LWS_VISIBLE LWS_EXTERN int -libwebsocket_service(struct libwebsocket_context *context, int timeout_ms); +lws_set_proxy(struct lws_context *context, const char *proxy); LWS_VISIBLE LWS_EXTERN void -libwebsocket_cancel_service(struct libwebsocket_context *context); +lws_context_destroy(struct lws_context *context); + +LWS_VISIBLE LWS_EXTERN int +lws_service(struct lws_context *context, int timeout_ms); + +LWS_VISIBLE LWS_EXTERN void +lws_cancel_service(struct lws_context *context); + +LWS_VISIBLE LWS_EXTERN int +lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr, size_t addrlen); + +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 *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 *wsi, unsigned char **p, + unsigned char *end); +LWS_VISIBLE LWS_EXTERN int +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 *wsi, + unsigned long content_length, + unsigned char **p, unsigned char *end); +LWS_VISIBLE LWS_EXTERN int +lws_add_http_header_status(struct lws *wsi, + unsigned int code, unsigned char **p, + unsigned char *end); + +LWS_EXTERN int +lws_http_transaction_completed(struct lws *wsi); #ifdef LWS_USE_LIBEV +typedef void (lws_ev_signal_cb)(EV_P_ struct ev_signal *w, int revents); + LWS_VISIBLE LWS_EXTERN int -libwebsocket_initloop( - struct libwebsocket_context *context, struct ev_loop *loop); +lws_sigint_cfg(struct lws_context *context, int use_ev_sigint, + lws_ev_signal_cb *cb); + +LWS_VISIBLE LWS_EXTERN int +lws_initloop(struct lws_context *context, struct ev_loop *loop); LWS_VISIBLE void -libwebsocket_sigint_cb( - struct ev_loop *loop, struct ev_signal *watcher, int revents); +lws_sigint_cb(struct ev_loop *loop, struct ev_signal *watcher, int revents); #endif /* LWS_USE_LIBEV */ LWS_VISIBLE LWS_EXTERN int -libwebsocket_service_fd(struct libwebsocket_context *context, - struct libwebsocket_pollfd *pollfd); +lws_service_fd(struct lws_context *context, struct lws_pollfd *pollfd); LWS_VISIBLE LWS_EXTERN void * -libwebsocket_context_user(struct libwebsocket_context *context); +lws_context_user(struct lws_context *context); +LWS_VISIBLE LWS_EXTERN void * +lws_wsi_user(struct lws *wsi); + +/* + * NOTE: These public enums are part of the abi. If you want to add one, + * add it at where specified so existing users are unaffected. + */ enum pending_timeout { - NO_PENDING_TIMEOUT = 0, - PENDING_TIMEOUT_AWAITING_PROXY_RESPONSE, - PENDING_TIMEOUT_AWAITING_CONNECT_RESPONSE, - PENDING_TIMEOUT_ESTABLISH_WITH_SERVER, - PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE, - PENDING_TIMEOUT_AWAITING_PING, - PENDING_TIMEOUT_CLOSE_ACK, - PENDING_TIMEOUT_AWAITING_EXTENSION_CONNECT_RESPONSE, - PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE, - PENDING_TIMEOUT_SSL_ACCEPT, - PENDING_TIMEOUT_HTTP_CONTENT, - PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND, + NO_PENDING_TIMEOUT = 0, + PENDING_TIMEOUT_AWAITING_PROXY_RESPONSE = 1, + PENDING_TIMEOUT_AWAITING_CONNECT_RESPONSE = 2, + PENDING_TIMEOUT_ESTABLISH_WITH_SERVER = 3, + PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE = 4, + PENDING_TIMEOUT_AWAITING_PING = 5, + PENDING_TIMEOUT_CLOSE_ACK = 6, + PENDING_TIMEOUT_AWAITING_EXTENSION_CONNECT_RESPONSE = 7, + PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE = 8, + PENDING_TIMEOUT_SSL_ACCEPT = 9, + PENDING_TIMEOUT_HTTP_CONTENT = 10, + PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND = 11, + PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE = 12, + + /****** add new things just above ---^ ******/ }; LWS_VISIBLE LWS_EXTERN void -libwebsocket_set_timeout(struct libwebsocket *wsi, - enum pending_timeout reason, int secs); +lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs); /* * IMPORTANT NOTICE! * - * When sending with websocket protocol (LWS_WRITE_TEXT or LWS_WRITE_BINARY) - * the send buffer has to have LWS_SEND_BUFFER_PRE_PADDING bytes valid BEFORE - * buf, and LWS_SEND_BUFFER_POST_PADDING bytes valid AFTER (buf + len). + * When sending with websocket protocol + * + * LWS_WRITE_TEXT, + * LWS_WRITE_BINARY, + * LWS_WRITE_CONTINUATION, + * LWS_WRITE_PING, + * LWS_WRITE_PONG + * + * the send buffer has to have LWS_PRE bytes valid BEFORE + * the buffer pointer you pass to lws_write(). * * This allows us to add protocol info before and after the data, and send as * one packet on the network without payload copying, for maximum efficiency. * - * So for example you need this kind of code to use libwebsocket_write with a + * So for example you need this kind of code to use lws_write with a * 128-byte payload * - * char buf[LWS_SEND_BUFFER_PRE_PADDING + 128 + LWS_SEND_BUFFER_POST_PADDING]; + * char buf[LWS_PRE + 128]; * * // fill your part of the buffer... for example here it's all zeros - * memset(&buf[LWS_SEND_BUFFER_PRE_PADDING], 0, 128); + * memset(&buf[LWS_PRE], 0, 128); * - * libwebsocket_write(wsi, &buf[LWS_SEND_BUFFER_PRE_PADDING], 128, - * LWS_WRITE_TEXT); + * lws_write(wsi, &buf[LWS_PRE], 128, LWS_WRITE_TEXT); * - * When sending LWS_WRITE_HTTP, there is no protocol addition and you can just - * use the whole buffer without taking care of the above. + * When sending HTTP, with + * + * LWS_WRITE_HTTP, + * LWS_WRITE_HTTP_HEADERS + * LWS_WRITE_HTTP_FINAL + * + * there is no protocol data prepended, and don't need to take care about the + * LWS_PRE bytes valid before the buffer pointer. + * + * LWS_PRE is at least the frame nonce + 2 header + 8 length + * LWS_SEND_BUFFER_POST_PADDING is deprecated, it's now 0 and can be left off. + * The example apps no longer use it. + * + * Pad LWS_PRE to the CPU word size, so that word references + * to the address immediately after the padding won't cause an unaligned access + * error. Sometimes for performance reasons the recommended padding is even + * larger than sizeof(void *). */ -/* - * this is the frame nonce plus two header plus 8 length - * there's an additional two for mux extension per mux nesting level - * 2 byte prepend on close will already fit because control frames cannot use - * the big length style - */ +#if !defined(LWS_SIZEOFPTR) +#define LWS_SIZEOFPTR (sizeof (void *)) +#endif +#if !defined(u_int64_t) +#define u_int64_t unsigned long long +#endif -#define LWS_SEND_BUFFER_PRE_PADDING (4 + 10 + (2 * MAX_MUX_RECURSION)) -#define LWS_SEND_BUFFER_POST_PADDING 4 +#if __x86_64__ +#define _LWS_PAD_SIZE 16 /* Intel recommended for best performance */ +#else +#define _LWS_PAD_SIZE LWS_SIZEOFPTR /* Size of a pointer on the target arch */ +#endif +#define _LWS_PAD(n) (((n) % _LWS_PAD_SIZE) ? \ + ((n) + (_LWS_PAD_SIZE - ((n) % _LWS_PAD_SIZE))) : (n)) +#define LWS_PRE _LWS_PAD(4 + 10) +/* used prior to 1.7 and retained for backward compatibility */ +#define LWS_SEND_BUFFER_PRE_PADDING LWS_PRE +#define LWS_SEND_BUFFER_POST_PADDING 0 LWS_VISIBLE LWS_EXTERN int -libwebsocket_write(struct libwebsocket *wsi, unsigned char *buf, size_t len, - enum libwebsocket_write_protocol protocol); +lws_write(struct lws *wsi, unsigned char *buf, size_t len, + enum lws_write_protocol protocol); + +/** + * lws_close_reason - Set reason and aux data to send with Close packet + * If you are going to return nonzero from the callback + * requesting the connection to close, you can optionally + * call this to set the reason the peer will be told if + * possible. + * + * @wsi: The websocket connection to set the close reason on + * @status: A valid close status from websocket standard + * @buf: NULL or buffer containing up to 124 bytes of auxiliary data + * @len: Length of data in @buf to send + */ +LWS_VISIBLE LWS_EXTERN void +lws_close_reason(struct lws *wsi, enum lws_close_status status, + unsigned char *buf, size_t len); /* helper for case where buffer may be const */ -#define libwebsocket_write_http(wsi, buf, len) \ - libwebsocket_write(wsi, (unsigned char *)(buf), len, LWS_WRITE_HTTP) +#define lws_write_http(wsi, buf, len) \ + lws_write(wsi, (unsigned char *)(buf), len, LWS_WRITE_HTTP) LWS_VISIBLE LWS_EXTERN int -libwebsockets_serve_http_file(struct libwebsocket_context *context, - struct libwebsocket *wsi, const char *file, - const char *content_type, const char *other_headers); +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 -libwebsockets_serve_http_file_fragment(struct libwebsocket_context *context, - struct libwebsocket *wsi); - -LWS_VISIBLE LWS_EXTERN int libwebsockets_return_http_status( - struct libwebsocket_context *context, - struct libwebsocket *wsi, unsigned int code, - const char *html_body); - -LWS_VISIBLE LWS_EXTERN const struct libwebsocket_protocols * -libwebsockets_get_protocol(struct libwebsocket *wsi); +lws_serve_http_file_fragment(struct lws *wsi); LWS_VISIBLE LWS_EXTERN int -libwebsocket_callback_on_writable(struct libwebsocket_context *context, - struct libwebsocket *wsi); +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 -libwebsocket_callback_on_writable_all_protocol( - const struct libwebsocket_protocols *protocol); +lws_callback_on_writable(struct lws *wsi); LWS_VISIBLE LWS_EXTERN int -libwebsocket_callback_all_protocol( - const struct libwebsocket_protocols *protocol, int reason); +lws_callback_on_writable_all_protocol(const struct lws_context *context, + const struct lws_protocols *protocol); LWS_VISIBLE LWS_EXTERN int -libwebsocket_get_socket_fd(struct libwebsocket *wsi); +lws_callback_all_protocol(struct lws_context *context, + const struct lws_protocols *protocol, int reason); LWS_VISIBLE LWS_EXTERN int -libwebsocket_is_final_fragment(struct libwebsocket *wsi); +lws_get_socket_fd(struct lws *wsi); + +LWS_VISIBLE LWS_EXTERN int +lws_is_final_fragment(struct lws *wsi); LWS_VISIBLE LWS_EXTERN unsigned char -libwebsocket_get_reserved_bits(struct libwebsocket *wsi); +lws_get_reserved_bits(struct lws *wsi); LWS_VISIBLE LWS_EXTERN int -libwebsocket_rx_flow_control(struct libwebsocket *wsi, int enable); +lws_rx_flow_control(struct lws *wsi, int enable); LWS_VISIBLE LWS_EXTERN void -libwebsocket_rx_flow_allow_all_protocol( - const struct libwebsocket_protocols *protocol); +lws_rx_flow_allow_all_protocol(const struct lws_context *context, + const struct lws_protocols *protocol); LWS_VISIBLE LWS_EXTERN size_t -libwebsockets_remaining_packet_payload(struct libwebsocket *wsi); +lws_remaining_packet_payload(struct lws *wsi); -LWS_VISIBLE LWS_EXTERN struct libwebsocket * -libwebsocket_client_connect(struct libwebsocket_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); +/* + * if the protocol does not have any guidance, returns -1. Currently only + * http2 connections get send window information from this API. But your code + * should use it so it can work properly with any protocol. + * + * If nonzero return is the amount of payload data the peer or intermediary has + * reported it has buffer space for. That has NO relationship with the amount + * of buffer space your OS can accept on this connection for a write action. + * + * This number represents the maximum you could send to the peer or intermediary + * on this connection right now without it complaining. + * + * lws manages accounting for send window updates and payload writes + * automatically, so this number reflects the situation at the peer or + * intermediary dynamically. + */ +LWS_VISIBLE LWS_EXTERN size_t +lws_get_peer_write_allowance(struct lws *wsi); -LWS_VISIBLE LWS_EXTERN struct libwebsocket * -libwebsocket_client_connect_extended(struct libwebsocket_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); +/* deprecated, use lws_client_connect_via_info() */ +LWS_VISIBLE LWS_EXTERN struct lws * +lws_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); +/* deprecated, use lws_client_connect_via_info() */ +LWS_VISIBLE LWS_EXTERN struct lws * +lws_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); + +LWS_VISIBLE LWS_EXTERN struct lws * +lws_client_connect_via_info(struct lws_client_connect_info * ccinfo); LWS_VISIBLE LWS_EXTERN const char * -libwebsocket_canonical_hostname(struct libwebsocket_context *context); +lws_canonical_hostname(struct lws_context *context); LWS_VISIBLE LWS_EXTERN void -libwebsockets_get_peer_addresses(struct libwebsocket_context *context, - struct libwebsocket *wsi, int 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); LWS_VISIBLE LWS_EXTERN int -libwebsockets_get_random(struct libwebsocket_context *context, - void *buf, int len); +lws_get_random(struct lws_context *context, void *buf, int len); LWS_VISIBLE LWS_EXTERN int lws_daemonize(const char *_lock_path); LWS_VISIBLE LWS_EXTERN int -lws_send_pipe_choked(struct libwebsocket *wsi); +lws_send_pipe_choked(struct lws *wsi); LWS_VISIBLE LWS_EXTERN int -lws_frame_is_binary(struct libwebsocket *wsi); +lws_partial_buffered(struct lws *wsi); +LWS_VISIBLE LWS_EXTERN int +lws_frame_is_binary(struct lws *wsi); + +LWS_VISIBLE LWS_EXTERN int +lws_is_ssl(struct lws *wsi); +#ifdef LWS_SHA1_USE_OPENSSL_NAME +#define lws_SHA1 SHA1 +#else LWS_VISIBLE LWS_EXTERN unsigned char * -libwebsockets_SHA1(const unsigned char *d, size_t n, unsigned char *md); +lws_SHA1(const unsigned char *d, size_t n, unsigned char *md); +#endif LWS_VISIBLE LWS_EXTERN int lws_b64_encode_string(const char *in, int in_len, char *out, int out_size); @@ -1178,29 +1699,131 @@ lws_b64_decode_string(const char *in, char *out, int out_size); LWS_VISIBLE LWS_EXTERN const char * lws_get_library_version(void); -/* access to headers... only valid while headers valid */ +LWS_VISIBLE LWS_EXTERN int +lws_parse_uri(char *p, const char **prot, const char **ads, int *port, + const char **path); + +/* + * Access to http headers + * + * In lws the client http headers are temporarily malloc'd only for the + * duration of the http part of the handshake. It's because in most cases, + * the header content is ignored for the whole rest of the connection lifetime + * and would then just be taking up space needlessly. + * + * During LWS_CALLBACK_HTTP when the URI path is delivered is the last time + * the http headers are still allocated, you can use these apis then to + * look at and copy out interesting header content (cookies, etc) + * + * Notice that the header total length reported does not include a terminating + * '\0', however you must allocate for it when using the _copy apis. So the + * length reported for a header containing "123" is 3, but you must provide + * a buffer of length 4 so that "123\0" may be copied into it, or the copy + * will fail with a nonzero return code. + */ LWS_VISIBLE LWS_EXTERN int -lws_hdr_total_length(struct libwebsocket *wsi, enum lws_token_indexes h); +lws_hdr_total_length(struct lws *wsi, enum lws_token_indexes h); LWS_VISIBLE LWS_EXTERN int -lws_hdr_copy(struct libwebsocket *wsi, char *dest, int len, - enum lws_token_indexes h); +lws_hdr_fragment_length(struct lws *wsi, enum lws_token_indexes h, int frag_idx); + +/* + * copies the whole, aggregated header, even if it was delivered in + * several actual headers piece by piece + */ +LWS_VISIBLE LWS_EXTERN int +lws_hdr_copy(struct lws *wsi, char *dest, int len, enum lws_token_indexes h); + +/* + * copies only fragment frag_idx of a header. Normally this is only useful + * to parse URI arguments like ?x=1&y=2, oken index WSI_TOKEN_HTTP_URI_ARGS + * fragment 0 will contain "x=1" and fragment 1 "y=2" + */ +LWS_VISIBLE LWS_EXTERN int +lws_hdr_copy_fragment(struct lws *wsi, char *dest, int len, + enum lws_token_indexes h, int frag_idx); + + +/* get the active file operations struct */ +LWS_VISIBLE LWS_EXTERN struct lws_plat_file_ops * +lws_get_fops(struct lws_context *context); + +LWS_VISIBLE LWS_EXTERN struct lws_context * +lws_get_context(const struct lws *wsi); + +/* + * Wsi-associated File Operations access helpers + * + * Use these helper functions if you want to access a file from the perspective + * of a specific wsi, which is usually the case. If you just want contextless + * file access, use the fops callbacks directly with NULL wsi instead of these + * helpers. + * + * If so, then it calls the platform handler or user overrides where present + * (as defined in info->fops) + * + * The advantage from all this is user code can be portable for file operations + * without having to deal with differences between platforms. + */ + +static LWS_INLINE lws_filefd_type +lws_plat_file_open(struct lws *wsi, const char *filename, + unsigned long *filelen, int flags) +{ + return lws_get_fops(lws_get_context(wsi))->open(wsi, filename, + filelen, flags); +} + +static LWS_INLINE int +lws_plat_file_close(struct lws *wsi, lws_filefd_type fd) +{ + return lws_get_fops(lws_get_context(wsi))->close(wsi, fd); +} + +static LWS_INLINE unsigned long +lws_plat_file_seek_cur(struct lws *wsi, lws_filefd_type fd, long offset) +{ + return lws_get_fops(lws_get_context(wsi))->seek_cur(wsi, fd, offset); +} + +static LWS_INLINE int +lws_plat_file_read(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, + unsigned char *buf, unsigned long len) +{ + return lws_get_fops(lws_get_context(wsi))->read(wsi, fd, amount, buf, + len); +} + +static LWS_INLINE int +lws_plat_file_write(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, + unsigned char *buf, unsigned long len) +{ + return lws_get_fops(lws_get_context(wsi))->write(wsi, fd, amount, buf, + len); +} /* * Note: this is not normally needed as a user api. It's provided in case it is * useful when integrating with other app poll loop service code. */ - LWS_VISIBLE LWS_EXTERN int -libwebsocket_read(struct libwebsocket_context *context, - struct libwebsocket *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 libwebsocket_extension *libwebsocket_get_internal_extensions(); +/* deprecated */ +#define lws_get_internal_extensions() NULL +LWS_VISIBLE LWS_EXTERN int +lws_ext_parse_options(const struct lws_extension *ext, struct lws *wsi, + void *ext_user, const struct lws_ext_options *opts, const char *o, int len); #endif +/* + * custom allocator support + */ +LWS_VISIBLE LWS_EXTERN void +lws_set_allocator(void *(*realloc)(void *ptr, size_t size)); + #ifdef __cplusplus } #endif diff --git a/win32/include/websockets/lws_config.h b/win32/include/websockets/lws_config.h new file mode 100644 index 00000000..36a695ee --- /dev/null +++ b/win32/include/websockets/lws_config.h @@ -0,0 +1,74 @@ +/* lws_config.h Generated from lws_config.h.in */ + +#ifndef NDEBUG + #ifndef _DEBUG + #define _DEBUG + #endif +#endif + +/* Define to 1 to use wolfSSL/CyaSSL as a replacement for OpenSSL. + * LWS_OPENSSL_SUPPORT needs to be set also for this to work. */ +/* #undef USE_WOLFSSL */ + +/* Also define to 1 (in addition to USE_WOLFSSL) when using the + (older) CyaSSL library */ +/* #undef USE_OLD_CYASSL */ + +/* The Libwebsocket version */ +#define LWS_LIBRARY_VERSION "1.6.0" + +#define LWS_LIBRARY_VERSION_MAJOR 1 +#define LWS_LIBRARY_VERSION_MINOR 6 +#define LWS_LIBRARY_VERSION_PATCH 0 +/* LWS_LIBRARY_VERSION_NUMBER looks like 1005001 for e.g. version 1.5.1 */ +#define LWS_LIBRARY_VERSION_NUMBER (LWS_LIBRARY_VERSION_MAJOR*1000000)+(LWS_LIBRARY_VERSION_MINOR*1000)+LWS_LIBRARY_VERSION_PATCH + +/* The current git commit hash that we're building from */ +/* #undef LWS_BUILD_HASH */ + +/* Build with OpenSSL support */ +/* #undef LWS_OPENSSL_SUPPORT */ + +/* The client should load and trust CA root certs it finds in the OS */ +#define LWS_SSL_CLIENT_USE_OS_CA_CERTS + +/* Sets the path where the client certs should be installed. */ +#define LWS_OPENSSL_CLIENT_CERTS "../share" + +/* Turn off websocket extensions */ +/* #undef LWS_NO_EXTENSIONS */ + +/* Enable libev io loop */ +/* #undef LWS_USE_LIBEV */ + +/* Build with support for ipv6 */ +/* #undef LWS_USE_IPV6 */ + +/* Build with support for HTTP2 */ +/* #undef LWS_USE_HTTP2 */ + +/* Turn on latency measuring code */ +/* #undef LWS_LATENCY */ + +/* Don't build the daemonizeation api */ +#define LWS_NO_DAEMONIZE + +/* Build without server support */ +#define LWS_NO_SERVER + +/* Build without client support */ +/* #undef LWS_NO_CLIENT */ + +/* If we should compile with MinGW support */ +/* #undef LWS_MINGW_SUPPORT */ + +/* Use the BSD getifaddrs that comes with libwebsocket, for uclibc support */ +#define LWS_BUILTIN_GETIFADDRS + +/* use SHA1() not internal libwebsockets_SHA1 */ +/* #undef LWS_SHA1_USE_OPENSSL_NAME */ + +/* SSL server using ECDH certificate */ +/* #undef LWS_SSL_SERVER_WITH_ECDH_CERT */ + + diff --git a/win32/include/websockets/win32helpers/getopt.h b/win32/include/websockets/win32helpers/getopt.h old mode 100644 new mode 100755 index 7137f037..5a88c2df --- a/win32/include/websockets/win32helpers/getopt.h +++ b/win32/include/websockets/win32helpers/getopt.h @@ -1,33 +1,33 @@ -#ifndef __GETOPT_H__ -#define __GETOPT_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -extern int opterr; /* if error message should be printed */ -extern int optind; /* index into parent argv vector */ -extern int optopt; /* character checked for validity */ -extern int optreset; /* reset getopt */ -extern char *optarg; /* argument associated with option */ - -struct option -{ - const char *name; - int has_arg; - int *flag; - int val; -}; - -#define no_argument 0 -#define required_argument 1 -#define optional_argument 2 - -int getopt(int, char**, char*); -int getopt_long(int, char**, char*, struct option*, int*); - -#ifdef __cplusplus -} -#endif - -#endif /* __GETOPT_H__ */ +#ifndef __GETOPT_H__ +#define __GETOPT_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +extern int opterr; /* if error message should be printed */ +extern int optind; /* index into parent argv vector */ +extern int optopt; /* character checked for validity */ +extern int optreset; /* reset getopt */ +extern char *optarg; /* argument associated with option */ + +struct option +{ + const char *name; + int has_arg; + int *flag; + int val; +}; + +#define no_argument 0 +#define required_argument 1 +#define optional_argument 2 + +int getopt(int, char**, char*); +int getopt_long(int, char**, char*, struct option*, int*); + +#ifdef __cplusplus +} +#endif + +#endif /* __GETOPT_H__ */ diff --git a/win32/include/websockets/win32helpers/gettimeofday.h b/win32/include/websockets/win32helpers/gettimeofday.h old mode 100644 new mode 100755 diff --git a/win32/include/websockets/win32helpers/websock-w32.h b/win32/include/websockets/win32helpers/websock-w32.h old mode 100644 new mode 100755 diff --git a/win32/libs/websockets.dll b/win32/libs/websockets.dll deleted file mode 100644 index 83fb7ae19e8fb26abbe41e2676ee802e6a353e9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84992 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 YxK@p0W-;@a^~m9W+R7uPAyI{*Lx diff --git a/win32/libs/websockets.lib b/win32/libs/websockets.lib index e3f13f636f2c77178da60b2bf4989cb7ce5096f0..8aba28ac95f3979fbb5da7130fa92904ab1ecedf 100644 GIT binary patch literal 162342 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

YsKt(NYv_w=gbYe8 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 X#CgWH-lQ*!>Ko4&7}a-EUx5D~fc^TM