1
0
Fork 0
mirror of https://github.com/warmcat/libwebsockets.git synced 2025-03-09 00:00:04 +01:00

plat change to build selection by cmake

Signed-off-by: Andy Green <andy.green@linaro.org>
This commit is contained in:
Andy Green 2014-04-02 21:02:54 +08:00
parent 2c24ec0211
commit e40aa9b920
6 changed files with 198 additions and 303 deletions

View file

@ -273,6 +273,18 @@ if (NOT LWS_WITHOUT_CLIENT)
)
endif()
# select the active platform files
if (WIN32)
list(APPEND SOURCES
lib/lws-plat-win.c
)
else()
list(APPEND SOURCES
lib/lws-plat-unix.c
)
endif()
if (NOT LWS_WITHOUT_SERVER)
list(APPEND SOURCES
lib/server.c

View file

@ -53,8 +53,8 @@ int lws_ext_callback_for_each_active(struct libwebsocket *wsi, int reason,
wsi->active_extensions[n]->name, reason);
return -1;
}
if (m)
handled = 1;
if (m > handled)
handled = m;
}
return handled;
@ -194,24 +194,3 @@ lws_any_extension_handled(struct libwebsocket_context *context,
return handled;
}
void *
lws_get_extension_user_matching_ext(struct libwebsocket *wsi,
struct libwebsocket_extension *ext)
{
int n = 0;
if (wsi == NULL)
return NULL;
while (n < wsi->count_active_extensions) {
if (wsi->active_extensions[n] != ext) {
n++;
continue;
}
return wsi->active_extensions_user[n];
}
return NULL;
}

View file

@ -21,28 +21,6 @@
#include "private-libwebsockets.h"
#if defined(WIN32) || defined(_WIN32)
#include <tchar.h>
#include <mstcpip.h>
#ifdef _WIN32_WCE
#define vsnprintf _vsnprintf
#endif
#else
#ifdef LWS_BUILTIN_GETIFADDRS
#include <getifaddrs.h>
#else
#include <ifaddrs.h>
#endif
#include <syslog.h>
#include <sys/un.h>
#include <sys/socket.h>
#include <netdb.h>
#endif
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef LWS_OPENSSL_SUPPORT
int openssl_websocket_private_data_index;
#endif
@ -55,6 +33,24 @@ static int log_level = LLL_ERR | LLL_WARN | LLL_NOTICE;
static void lwsl_emit_stderr(int level, const char *line);
static void (*lwsl_emit)(int level, const char *line) = lwsl_emit_stderr;
void lws_plat_delete_socket_from_fds(struct libwebsocket_context *context,
struct libwebsocket *wsi, int m);
void lws_plat_insert_socket_into_fds(struct libwebsocket_context *context,
struct libwebsocket *wsi);
void lws_plat_service_periodic(struct libwebsocket_context *context);
int lws_plat_change_pollfd(struct libwebsocket_context *context,
struct libwebsocket *wsi, struct libwebsocket_pollfd *pfd);
int lws_plat_context_early_init(void);
void lws_plat_context_early_destroy(struct libwebsocket_context *context);
void lws_plat_context_late_destroy(struct libwebsocket_context *context);
int lws_poll_listen_fd(struct libwebsocket_pollfd *fd);
int
lws_plat_service(struct libwebsocket_context *context, int timeout_ms);
int lws_plat_init_fd_tables(struct libwebsocket_context *context);
void lws_plat_drop_app_privileges(struct lws_context_creation_info *info);
unsigned long long time_in_microseconds(void);
#ifdef LWS_USE_LIBEV
#define _LWS_EV_TAG " libev"
#else
@ -87,22 +83,6 @@ static const char * const log_level_names[] = {
struct libwebsocket *wsi, struct libwebsocket_pollfd *pollfd);
#endif
/*
* This is just used to interrupt poll waiting
* we don't have to do anything with it.
*/
#ifdef LWS_OPENSSL_SUPPORT
static void lws_sigusr2(int sig)
{
}
#endif
#if defined(WIN32) || defined(_WIN32)
#include "lws-plat-win.c"
#else
#include "lws-plat-unix.c"
#endif
/**
* lws_get_library_version: get version and git hash library built from
*
@ -234,16 +214,11 @@ void
libwebsocket_close_and_free_session(struct libwebsocket_context *context,
struct libwebsocket *wsi, enum lws_close_status reason)
{
int n;
int n, m, ret;
int old_state;
unsigned char buf[LWS_SEND_BUFFER_PRE_PADDING + 2 +
LWS_SEND_BUFFER_POST_PADDING];
#ifndef LWS_NO_EXTENSIONS
int ret;
int m;
struct lws_tokens eff_buf;
struct libwebsocket_extension *ext;
#endif
if (!wsi)
return;
@ -283,30 +258,15 @@ libwebsocket_close_and_free_session(struct libwebsocket_context *context,
}
}
#ifndef LWS_NO_EXTENSIONS
/*
* are his extensions okay with him closing? Eg he might be a mux
* parent and just his ch1 aspect is closing?
*/
for (n = 0; n < wsi->count_active_extensions; n++) {
if (!wsi->active_extensions[n]->callback)
continue;
m = wsi->active_extensions[n]->callback(context,
wsi->active_extensions[n], wsi,
LWS_EXT_CALLBACK_CHECK_OK_TO_REALLY_CLOSE,
wsi->active_extensions_user[n], NULL, 0);
/*
* if somebody vetoed actually closing him at this time....
* up to the extension to track the attempted close, let's
* just bail
*/
if (m) {
lwsl_ext("extension vetoed close\n");
return;
}
if (lws_ext_callback_for_each_active(wsi,
LWS_EXT_CALLBACK_CHECK_OK_TO_REALLY_CLOSE, NULL, 0) > 0) {
lwsl_ext("extension vetoed close\n");
return;
}
/*
@ -314,34 +274,25 @@ libwebsocket_close_and_free_session(struct libwebsocket_context *context,
* if there are problems with send, just nuke the connection
*/
ret = 1;
while (ret == 1) {
/* default to nobody has more to spill */
do {
ret = 0;
eff_buf.token = NULL;
eff_buf.token_len = 0;
/* show every extension the new incoming data */
for (n = 0; n < wsi->count_active_extensions; n++) {
m = wsi->active_extensions[n]->callback(
wsi->protocol->owning_server,
wsi->active_extensions[n], wsi,
LWS_EXT_CALLBACK_FLUSH_PENDING_TX,
wsi->active_extensions_user[n], &eff_buf, 0);
if (m < 0) {
lwsl_ext("Extension reports fatal error\n");
goto just_kill_connection;
}
if (m)
/*
* at least one extension told us he has more
* to spill, so we will go around again after
*/
ret = 1;
m = lws_ext_callback_for_each_active(wsi,
LWS_EXT_CALLBACK_FLUSH_PENDING_TX, &eff_buf, 0);
if (m < 0) {
lwsl_ext("Extension reports fatal error\n");
goto just_kill_connection;
}
if (m)
/*
* at least one extension told us he has more
* to spill, so we will go around again after
*/
ret = 1;
/* assuming they left us something to send, send it */
@ -351,8 +302,7 @@ libwebsocket_close_and_free_session(struct libwebsocket_context *context,
lwsl_debug("close: ext spill failed\n");
goto just_kill_connection;
}
}
#endif
} while (ret);
/*
* signal we are closing, libsocket_write will
@ -451,34 +401,21 @@ just_kill_connection:
} else
lwsl_debug("not calling back closed\n");
#ifndef LWS_NO_EXTENSIONS
/* deallocate any active extension contexts */
for (n = 0; n < wsi->count_active_extensions; n++) {
if (!wsi->active_extensions[n]->callback)
continue;
wsi->active_extensions[n]->callback(context,
wsi->active_extensions[n], wsi,
LWS_EXT_CALLBACK_DESTROY,
wsi->active_extensions_user[n], NULL, 0);
if (lws_ext_callback_for_each_active(wsi, LWS_EXT_CALLBACK_DESTROY, NULL, 0) < 0)
lwsl_warn("extension destruction failed\n");
#ifndef LWS_NO_EXTENSIONS
for (n = 0; n < wsi->count_active_extensions; n++)
free(wsi->active_extensions_user[n]);
}
#endif
/*
* inform all extensions in case they tracked this guy out of band
* even though not active on him specifically
*/
ext = context->extensions;
while (ext && ext->callback) {
ext->callback(context, ext, wsi,
LWS_EXT_CALLBACK_DESTROY_ANY_WSI_CLOSING,
NULL, NULL, 0);
ext++;
}
#endif
if (lws_ext_callback_for_each_extension_type(context, wsi,
LWS_EXT_CALLBACK_DESTROY_ANY_WSI_CLOSING, NULL, 0) < 0)
lwsl_warn("ext destroy wsi failed\n");
/* lwsl_info("closing fd=%d\n", wsi->sock); */
@ -640,13 +577,10 @@ lws_handle_POLLOUT_event(struct libwebsocket_context *context,
struct libwebsocket *wsi, struct libwebsocket_pollfd *pollfd)
{
int n;
#ifndef LWS_NO_EXTENSIONS
struct lws_tokens eff_buf;
int ret;
int m;
int handled = 0;
#endif
/* pending truncated sends have uber priority */
@ -658,25 +592,14 @@ lws_handle_POLLOUT_event(struct libwebsocket_context *context,
return 0;
}
#ifndef LWS_NO_EXTENSIONS
for (n = 0; n < wsi->count_active_extensions; n++) {
if (!wsi->active_extensions[n]->callback)
continue;
m = wsi->active_extensions[n]->callback(context,
wsi->active_extensions[n], wsi,
LWS_EXT_CALLBACK_IS_WRITEABLE,
wsi->active_extensions_user[n], NULL, 0);
if (m > handled)
handled = m;
}
m = lws_ext_callback_for_each_active(wsi, LWS_EXT_CALLBACK_IS_WRITEABLE,
NULL, 0);
if (handled == 1)
goto notify_action;
#ifndef LWS_NO_EXTENSIONS
if (!wsi->extension_data_pending || handled == 2)
goto user_service;
#endif
/*
* check in on the active extensions, see if they
* had pending stuff to spill... they need to get the
@ -695,24 +618,20 @@ lws_handle_POLLOUT_event(struct libwebsocket_context *context,
eff_buf.token_len = 0;
/* give every extension a chance to spill */
for (n = 0; n < wsi->count_active_extensions; n++) {
m = wsi->active_extensions[n]->callback(
wsi->protocol->owning_server,
wsi->active_extensions[n], wsi,
m = lws_ext_callback_for_each_active(wsi,
LWS_EXT_CALLBACK_PACKET_TX_PRESEND,
wsi->active_extensions_user[n], &eff_buf, 0);
if (m < 0) {
lwsl_err("ext reports fatal error\n");
return -1;
}
if (m)
/*
* at least one extension told us he has more
* to spill, so we will go around again after
*/
ret = 1;
&eff_buf, 0);
if (m < 0) {
lwsl_err("ext reports fatal error\n");
return -1;
}
if (m)
/*
* at least one extension told us he has more
* to spill, so we will go around again after
*/
ret = 1;
/* assuming they gave us something to send, send it */
@ -757,7 +676,7 @@ lws_handle_POLLOUT_event(struct libwebsocket_context *context,
return 0;
}
#ifndef LWS_NO_EXTENSIONS
wsi->extension_data_pending = 0;
user_service:
@ -773,10 +692,8 @@ user_service:
(struct ev_io *)&wsi->w_write);
#endif /* LWS_USE_LIBEV */
}
#ifndef LWS_NO_EXTENSIONS
notify_action:
#endif
notify_action:
if (wsi->mode == LWS_CONNMODE_WS_CLIENT)
n = LWS_CALLBACK_CLIENT_WRITEABLE;
else
@ -793,20 +710,12 @@ int
libwebsocket_service_timeout_check(struct libwebsocket_context *context,
struct libwebsocket *wsi, unsigned int sec)
{
#ifndef LWS_NO_EXTENSIONS
int n;
/*
* if extensions want in on it (eg, we are a mux parent)
* give them a chance to service child timeouts
*/
for (n = 0; n < wsi->count_active_extensions; n++)
wsi->active_extensions[n]->callback(
context, wsi->active_extensions[n],
wsi, LWS_EXT_CALLBACK_1HZ,
wsi->active_extensions_user[n], NULL, sec);
#endif
if (lws_ext_callback_for_each_active(wsi, LWS_EXT_CALLBACK_1HZ, NULL, sec) < 0)
return 0;
if (!wsi->pending_timeout)
return 0;
@ -815,11 +724,10 @@ libwebsocket_service_timeout_check(struct libwebsocket_context *context,
* if we went beyond the allowed time, kill the
* connection
*/
if (sec > wsi->pending_timeout_limit) {
lwsl_info("TIMEDOUT WAITING\n");
libwebsocket_close_and_free_session(context,
wsi, LWS_CLOSE_STATUS_NOSTATUS);
wsi, LWS_CLOSE_STATUS_NOSTATUS);
return 1;
}
@ -861,10 +769,7 @@ libwebsocket_service_fd(struct libwebsocket_context *context,
int timed_out = 0;
int our_fd = 0;
char draining_flow = 0;
#ifndef LWS_NO_EXTENSIONS
int more = 1;
#endif
int more;
struct lws_tokens eff_buf;
if (context->listen_service_fd)
@ -1065,27 +970,18 @@ read_pending:
eff_buf.token = (char *)context->service_buffer;
drain:
#ifndef LWS_NO_EXTENSIONS
more = 1;
while (more) {
do {
more = 0;
m = lws_ext_callback_for_each_active(wsi,
LWS_EXT_CALLBACK_PACKET_RX_PREPARSE, &eff_buf, 0);
if (m < 0)
goto close_and_handled;
if (m)
more = 1;
for (n = 0; n < wsi->count_active_extensions; n++) {
m = wsi->active_extensions[n]->callback(context,
wsi->active_extensions[n], wsi,
LWS_EXT_CALLBACK_PACKET_RX_PREPARSE,
wsi->active_extensions_user[n],
&eff_buf, 0);
if (m < 0) {
lwsl_ext(
"Extension reports fatal error\n");
goto close_and_handled;
}
if (m)
more = 1;
}
#endif
/* service incoming data */
if (eff_buf.token_len) {
@ -1098,11 +994,11 @@ drain:
goto handled;
}
}
#ifndef LWS_NO_EXTENSIONS
eff_buf.token = NULL;
eff_buf.token_len = 0;
}
#endif
} while (more);
if (draining_flow && wsi->u.ws.rxflow_buffer &&
wsi->u.ws.rxflow_pos == wsi->u.ws.rxflow_len) {
lwsl_info("flow buffer: drained\n");
@ -1152,10 +1048,6 @@ LWS_VISIBLE void
libwebsocket_context_destroy(struct libwebsocket_context *context)
{
int n;
#ifndef LWS_NO_EXTENSIONS
int m;
struct libwebsocket_extension *ext;
#endif /* ndef LWS_NO_EXTENSIONS */
struct libwebsocket_protocols *protocol = context->protocols;
#ifdef LWS_LATENCY
@ -1173,23 +1065,16 @@ libwebsocket_context_destroy(struct libwebsocket_context *context)
n--;
}
#ifndef LWS_NO_EXTENSIONS
/*
* give all extensions a chance to clean up any per-context
* allocations they might have made
*/
ext = context->extensions;
m = LWS_EXT_CALLBACK_CLIENT_CONTEXT_DESTRUCT;
if (context->listen_port)
m = LWS_EXT_CALLBACK_SERVER_CONTEXT_DESTRUCT;
while (ext && ext->callback) {
ext->callback(context, ext, NULL,
(enum libwebsocket_extension_callback_reasons)m,
NULL, NULL, 0);
ext++;
}
#endif /* ndef LWS_NO_EXTENSIONS */
if (context->listen_port) {
if (lws_ext_callback_for_each_extension_type(context, NULL, LWS_EXT_CALLBACK_SERVER_CONTEXT_DESTRUCT, NULL, 0) < 0)
return;
} else
if (lws_ext_callback_for_each_extension_type(context, NULL, LWS_EXT_CALLBACK_CLIENT_CONTEXT_DESTRUCT, NULL, 0) < 0)
return;
/*
* inform all the protocols that they are done and will have no more
@ -1344,25 +1229,10 @@ LWS_VISIBLE int
libwebsocket_callback_on_writable(struct libwebsocket_context *context,
struct libwebsocket *wsi)
{
#ifndef LWS_NO_EXTENSIONS
int n;
int handled = 0;
/* maybe an extension will take care of it for us */
for (n = 0; n < wsi->count_active_extensions; n++) {
if (!wsi->active_extensions[n]->callback)
continue;
handled |= wsi->active_extensions[n]->callback(context,
wsi->active_extensions[n], wsi,
LWS_EXT_CALLBACK_REQUEST_ON_WRITEABLE,
wsi->active_extensions_user[n], NULL, 0);
}
if (handled)
if (lws_ext_callback_for_each_active(wsi,
LWS_EXT_CALLBACK_REQUEST_ON_WRITEABLE, NULL, 0))
return 1;
#endif
if (wsi->position_in_fds_table < 0) {
lwsl_err("%s: failed to find socket %d\n", __func__, wsi->sock);
return -1;
@ -1715,10 +1585,6 @@ libwebsocket_create_context(struct lws_context_creation_info *info)
struct sockaddr_in serv_addr4;
struct sockaddr *v;
#endif
#ifndef LWS_NO_EXTENSIONS
int m;
struct libwebsocket_extension *ext;
#endif
#ifdef LWS_OPENSSL_SUPPORT
SSL_METHOD *method;
@ -2212,9 +2078,6 @@ libwebsocket_create_context(struct lws_context_creation_info *info)
}
memset(wsi, 0, sizeof(struct libwebsocket));
wsi->sock = sockfd;
#ifndef LWS_NO_EXTENSIONS
wsi->count_active_extensions = 0;
#endif
wsi->mode = LWS_CONNMODE_SERVER_LISTENER;
insert_wsi_socket_into_fds(context, wsi);
@ -2257,27 +2120,21 @@ libwebsocket_create_context(struct lws_context_creation_info *info)
NULL, LWS_CALLBACK_PROTOCOL_INIT, NULL, NULL, 0);
}
#ifndef LWS_NO_EXTENSIONS
/*
* give all extensions a chance to create any per-context
* allocations they need
*/
m = LWS_EXT_CALLBACK_CLIENT_CONTEXT_CONSTRUCT;
if (info->port != CONTEXT_PORT_NO_LISTEN)
m = LWS_EXT_CALLBACK_SERVER_CONTEXT_CONSTRUCT;
if (info->extensions) {
ext = info->extensions;
while (ext->callback) {
lwsl_ext(" Extension: %s\n", ext->name);
ext->callback(context, ext, NULL,
(enum libwebsocket_extension_callback_reasons)m,
NULL, NULL, 0);
ext++;
}
}
#endif
if (info->port != CONTEXT_PORT_NO_LISTEN) {
if (lws_ext_callback_for_each_extension_type(context, NULL,
LWS_EXT_CALLBACK_SERVER_CONTEXT_CONSTRUCT,
NULL, 0) < 0)
goto bail;
} else
if (lws_ext_callback_for_each_extension_type(context, NULL,
LWS_EXT_CALLBACK_CLIENT_CONTEXT_CONSTRUCT,
NULL, 0) < 0)
goto bail;
return context;

View file

@ -1,8 +1,10 @@
#include "private-libwebsockets.h"
/*
* included from libwebsockets.c for unix builds
*/
static unsigned long long time_in_microseconds(void)
unsigned long long time_in_microseconds(void)
{
struct timeval tv;
gettimeofday(&tv, NULL);
@ -38,11 +40,21 @@ LWS_VISIBLE int lws_send_pipe_choked(struct libwebsocket *wsi)
return 0;
}
static int lws_poll_listen_fd(struct libwebsocket_pollfd *fd)
LWS_VISIBLE int
lws_poll_listen_fd(struct libwebsocket_pollfd *fd)
{
return poll(fd, 1, 0);
}
/*
* This is just used to interrupt poll waiting
* we don't have to do anything with it.
*/
#ifdef LWS_OPENSSL_SUPPORT
static void lws_sigusr2(int sig)
{
}
#endif
#ifdef LWS_USE_LIBEV
LWS_VISIBLE void
@ -224,7 +236,8 @@ lws_plat_service(struct libwebsocket_context *context, int timeout_ms)
return 0;
}
int lws_plat_set_socket_options(struct libwebsocket_context *context, int fd)
LWS_VISIBLE int
lws_plat_set_socket_options(struct libwebsocket_context *context, int fd)
{
int optval = 1;
socklen_t optlen = sizeof(optval);
@ -280,7 +293,8 @@ int lws_plat_set_socket_options(struct libwebsocket_context *context, int fd)
return 0;
}
static void lws_plat_drop_app_privileges(struct lws_context_creation_info *info)
LWS_VISIBLE void
lws_plat_drop_app_privileges(struct lws_context_creation_info *info)
{
if (info->gid != -1)
if (setgid(info->gid))
@ -290,7 +304,8 @@ static void lws_plat_drop_app_privileges(struct lws_context_creation_info *info)
lwsl_warn("setuid: %s\n", strerror(LWS_ERRNO));
}
static int lws_plat_init_fd_tables(struct libwebsocket_context *context)
LWS_VISIBLE int
lws_plat_init_fd_tables(struct libwebsocket_context *context)
{
#ifdef LWS_USE_LIBEV
if (LWS_LIBEV_ENABLED(context)) {
@ -325,7 +340,8 @@ static void sigpipe_handler(int x)
}
static int lws_plat_context_early_init(void)
LWS_VISIBLE int
lws_plat_context_early_init(void)
{
sigset_t mask;
@ -340,11 +356,13 @@ static int lws_plat_context_early_init(void)
return 0;
}
static void lws_plat_context_early_destroy(struct libwebsocket_context *context)
LWS_VISIBLE void
lws_plat_context_early_destroy(struct libwebsocket_context *context)
{
}
static void lws_plat_context_late_destroy(struct libwebsocket_context *context)
LWS_VISIBLE void
lws_plat_context_late_destroy(struct libwebsocket_context *context)
{
close(context->dummy_pipe_fds[0]);
close(context->dummy_pipe_fds[1]);
@ -353,7 +371,7 @@ static void lws_plat_context_late_destroy(struct libwebsocket_context *context)
/* cast a struct sockaddr_in6 * into addr for ipv6 */
int
LWS_VISIBLE int
interface_to_sa(struct libwebsocket_context *context,
const char *ifname, struct sockaddr_in *addr, size_t addrlen)
{
@ -413,7 +431,8 @@ interface_to_sa(struct libwebsocket_context *context,
return rc;
}
void lws_plat_insert_socket_into_fds(struct libwebsocket_context *context,
LWS_VISIBLE void
lws_plat_insert_socket_into_fds(struct libwebsocket_context *context,
struct libwebsocket *wsi)
{
#ifdef LWS_USE_LIBEV
@ -423,12 +442,14 @@ void lws_plat_insert_socket_into_fds(struct libwebsocket_context *context,
context->fds[context->fds_count++].revents = 0;
}
void lws_plat_delete_socket_from_fds(struct libwebsocket_context *context,
LWS_VISIBLE void
lws_plat_delete_socket_from_fds(struct libwebsocket_context *context,
struct libwebsocket *wsi, int m)
{
}
static void lws_plat_service_periodic(struct libwebsocket_context *context)
LWS_VISIBLE void
lws_plat_service_periodic(struct libwebsocket_context *context)
{
/* if our parent went down, don't linger around */
if (context->started_with_parent &&
@ -436,13 +457,15 @@ static void lws_plat_service_periodic(struct libwebsocket_context *context)
kill(getpid(), SIGTERM);
}
static int lws_plat_change_pollfd(struct libwebsocket_context *context,
LWS_VISIBLE int
lws_plat_change_pollfd(struct libwebsocket_context *context,
struct libwebsocket *wsi, struct libwebsocket_pollfd *pfd)
{
return 0;
}
int lws_plat_open_file(const char* filename, unsigned long* filelen)
LWS_VISIBLE int
lws_plat_open_file(const char* filename, unsigned long* filelen)
{
struct stat stat_buf;
int ret = open(filename, O_RDONLY);

View file

@ -1,4 +1,6 @@
static unsigned long long
#include "private-libwebsockets.h"
unsigned long long
time_in_microseconds()
{
#define DELTA_EPOCH_IN_MICROSECS 11644473600000000ULL
@ -23,7 +25,7 @@ time_in_microseconds()
}
#ifdef _WIN32_WCE
static inline time_t time(time_t *t)
time_t time(time_t *t)
{
time_t ret = time_in_microseconds() / 1000000;
*t = ret;
@ -146,7 +148,8 @@ lws_plat_service(struct libwebsocket_context *context, int timeout_ms)
return libwebsocket_service_fd(context, pfd);
}
int lws_plat_set_socket_options(struct libwebsocket_context *context, int fd)
LWS_VISIBLE int
lws_plat_set_socket_options(struct libwebsocket_context *context, int fd)
{
int optval = 1;
socklen_t optlen = sizeof(optval);
@ -181,11 +184,13 @@ int lws_plat_set_socket_options(struct libwebsocket_context *context, int fd)
return 0;
}
static void lws_plat_drop_app_privileges(struct lws_context_creation_info *info)
LWS_VISIBLE void
lws_plat_drop_app_privileges(struct lws_context_creation_info *info)
{
}
static int lws_plat_init_fd_tables(struct libwebsocket_context *context)
LWS_VISIBLE int
lws_plat_init_fd_tables(struct libwebsocket_context *context)
{
context->events = (WSAEVENT *)malloc(sizeof(WSAEVENT) *
(context->max_fds + 1));
@ -203,7 +208,8 @@ static int lws_plat_init_fd_tables(struct libwebsocket_context *context)
return 0;
}
static int lws_plat_context_early_init(void)
LWS_VISIBLE int
lws_plat_context_early_init(void)
{
WORD wVersionRequested;
WSADATA wsaData;
@ -224,7 +230,8 @@ static int lws_plat_context_early_init(void)
return 1;
}
static void lws_plat_context_early_destroy(struct libwebsocket_context *context)
LWS_VISIBLE void
lws_plat_context_early_destroy(struct libwebsocket_context *context)
{
if (context->events) {
WSACloseEvent(context->events[0]);
@ -232,19 +239,21 @@ static void lws_plat_context_early_destroy(struct libwebsocket_context *context)
}
}
static void lws_plat_context_late_destroy(struct libwebsocket_context *context)
LWS_VISIBLE void
lws_plat_context_late_destroy(struct libwebsocket_context *context)
{
WSACleanup();
}
int
LWS_VISIBLE int
interface_to_sa(struct libwebsocket_context *context,
const char *ifname, struct sockaddr_in *addr, size_t addrlen)
{
return -1;
}
void lws_plat_insert_socket_into_fds(struct libwebsocket_context *context,
LWS_VISIBLE void
lws_plat_insert_socket_into_fds(struct libwebsocket_context *context,
struct libwebsocket *wsi)
{
context->fds[context->fds_count++].revents = 0;
@ -252,18 +261,21 @@ void lws_plat_insert_socket_into_fds(struct libwebsocket_context *context,
WSAEventSelect(wsi->sock, context->events[context->fds_count], LWS_POLLIN);
}
static void lws_plat_delete_socket_from_fds(struct libwebsocket_context *context,
LWS_VISIBLE void
lws_plat_delete_socket_from_fds(struct libwebsocket_context *context,
struct libwebsocket *wsi, int m)
{
WSACloseEvent(context->events[m + 1]);
context->events[m + 1] = context->events[context->fds_count + 1];
}
static void lws_plat_service_periodic(struct libwebsocket_context *context)
LWS_VISIBLE void
lws_plat_service_periodic(struct libwebsocket_context *context)
{
}
static int lws_plat_change_pollfd(struct libwebsocket_context *context,
LWS_VISIBLE int
lws_plat_change_pollfd(struct libwebsocket_context *context,
struct libwebsocket *wsi, struct libwebsocket_pollfd *pfd)
{
long networkevents = LWS_POLLOUT | LWS_POLLHUP;
@ -281,7 +293,8 @@ static int lws_plat_change_pollfd(struct libwebsocket_context *context,
return 1;
}
HANDLE lws_plat_open_file(const char* filename, unsigned long* filelen)
LWS_VISIBLE HANDLE
lws_plat_open_file(const char* filename, unsigned long* filelen)
{
HANDLE ret;
WCHAR buffer[MAX_PATH];

View file

@ -26,17 +26,19 @@
#if defined(WIN32) || defined(_WIN32)
#define inline __inline
#include <tchar.h>
#else
#include <mstcpip.h>
#ifdef _WIN32_WCE
#define vsnprintf _vsnprintf
#endif
#else /* not WIN32 */
#include "config.h"
#ifdef LWS_BUILTIN_GETIFADDRS
#include <getifaddrs.h>
#else
#include <ifaddrs.h>
#endif
#include <sys/un.h>
#include <sys/socket.h>
#include <netdb.h>
#endif
#endif /* not WIN32 */
#endif /* not CMAKE */
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#include <stdio.h>
@ -90,6 +92,15 @@
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#ifdef LWS_BUILTIN_GETIFADDRS
#include <getifaddrs.h>
#else
#include <ifaddrs.h>
#endif
#include <sys/syslog.h>
#include <sys/un.h>
#include <sys/socket.h>
#include <netdb.h>
#ifndef LWS_NO_FORK
#ifdef HAVE_SYS_PRCTL_H
#include <sys/prctl.h>