Implemented fixes allowing libwebsockets to be built under Windows using MinGM/MSYS
Improvemed patches to address travis and appveyor build errors Reduced WINVER and _WIN32_WINNT to 0x0501 to be less restrictive Refined CMakeLists.txt to allow for normal Windows and MinGW-specific OpenSSL certificate generation Simplified include path to gettimeofday.h Removed unnecessary list(APPEND LWS_LIBRARIES zlib_internal) export Added back #include <windows.h> to gettimeofday.c to fix build for normal Windows Made sure that pollfd gets defined on libwebsockets side when _WIN32_WINNT < 0x0600 Made sure that WINVER and _WIN32_WINNT don't get overridden by libwebsockets headers when already set to something greater than 0x0501 Added missing declaration of WSAPoll function for WINVER < 0x0600 in libwebsockets.h, eliminated invalid usages of pollfd instead of libwebsocket_pollfd in test-server.c Cleaned up duplicate content in gettimeofday.c, removed header inclusions from gettimeofday.h and fixed include order in test-echo.c, test-ping.c and test-server.c to enable build with normal Windows and MinGW Re-enabled debug_level in test-echo.c and made sure that the call to lws_set_log_level() is also active under Windows (just like in test-server.c); replaced all WIN32 occurrences by _WIN32 in test-echo.c, test-ping.c, and test-server.c Removed build-msys.sh and added new section about how to build libwebsockets using MinGW to README.build.md
This commit is contained in:
parent
1662c624ef
commit
b820e2c2cc
16 changed files with 163 additions and 90 deletions
|
@ -211,6 +211,7 @@ endif()
|
||||||
|
|
||||||
if (MINGW)
|
if (MINGW)
|
||||||
set(LWS_MINGW_SUPPORT 1)
|
set(LWS_MINGW_SUPPORT 1)
|
||||||
|
set(CMAKE_C_FLAGS "-D__USE_MINGW_ANSI_STDIO ${CMAKE_C_FLAGS}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
include_directories("${PROJECT_BINARY_DIR}")
|
include_directories("${PROJECT_BINARY_DIR}")
|
||||||
|
@ -736,27 +737,34 @@ if (NOT LWS_WITHOUT_TESTAPPS)
|
||||||
set(TEST_SERVER_SSL_CERT "${PROJECT_BINARY_DIR}/libwebsockets-test-server.pem")
|
set(TEST_SERVER_SSL_CERT "${PROJECT_BINARY_DIR}/libwebsockets-test-server.pem")
|
||||||
|
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
file(WRITE "${PROJECT_BINARY_DIR}/openssl_input.txt"
|
if (MINGW)
|
||||||
"GB\n"
|
message("cmd = \"${OPENSSL_EXECUTABLE}\" req -new -newkey rsa:1024 -days 10000 -nodes -x509 -subj \"/C=GB/ST=Erewhon/L=All around/O=libwebsockets-test/CN=localhost\" -keyout \"${TEST_SERVER_SSL_KEY}\" -out \"${TEST_SERVER_SSL_CERT}\"")
|
||||||
"Erewhon\n"
|
execute_process(
|
||||||
"All around\n"
|
COMMAND "${OPENSSL_EXECUTABLE}" req -new -newkey rsa:1024 -days 10000 -nodes -x509 -subj "/C=GB/ST=Erewhon/L=All around/O=libwebsockets-test/CN=localhost" -keyout "${TEST_SERVER_SSL_KEY}" -out "${TEST_SERVER_SSL_CERT}"
|
||||||
"libwebsockets-test\n"
|
RESULT_VARIABLE OPENSSL_RETURN_CODE)
|
||||||
"localhost\n"
|
else()
|
||||||
"none@invalid.org\n\n"
|
file(WRITE "${PROJECT_BINARY_DIR}/openssl_input.txt"
|
||||||
)
|
"GB\n"
|
||||||
|
"Erewhon\n"
|
||||||
|
"All around\n"
|
||||||
|
"libwebsockets-test\n"
|
||||||
|
"localhost\n"
|
||||||
|
"none@invalid.org\n\n"
|
||||||
|
)
|
||||||
|
|
||||||
# The "type" command is a bit picky with paths.
|
# The "type" command is a bit picky with paths.
|
||||||
file(TO_NATIVE_PATH "${PROJECT_BINARY_DIR}/openssl_input.txt" OPENSSL_INPUT_WIN_PATH)
|
file(TO_NATIVE_PATH "${PROJECT_BINARY_DIR}/openssl_input.txt" OPENSSL_INPUT_WIN_PATH)
|
||||||
message("OPENSSL_INPUT_WIN_PATH = ${OPENSSL_INPUT_WIN_PATH}")
|
message("OPENSSL_INPUT_WIN_PATH = ${OPENSSL_INPUT_WIN_PATH}")
|
||||||
message("cmd = \"${OPENSSL_EXECUTABLE}\" req -new -newkey rsa:1024 -days 10000 -nodes -x509 -keyout \"${TEST_SERVER_SSL_KEY}\" -out \"${TEST_SERVER_SSL_CERT}\"")
|
message("cmd = \"${OPENSSL_EXECUTABLE}\" req -new -newkey rsa:1024 -days 10000 -nodes -x509 -keyout \"${TEST_SERVER_SSL_KEY}\" -out \"${TEST_SERVER_SSL_CERT}\"")
|
||||||
|
|
||||||
execute_process(
|
execute_process(
|
||||||
COMMAND cmd /c type "${OPENSSL_INPUT_WIN_PATH}"
|
COMMAND cmd /c type "${OPENSSL_INPUT_WIN_PATH}"
|
||||||
COMMAND "${OPENSSL_EXECUTABLE}" req -new -newkey rsa:1024 -days 10000 -nodes -x509 -keyout "${TEST_SERVER_SSL_KEY}" -out "${TEST_SERVER_SSL_CERT}"
|
COMMAND "${OPENSSL_EXECUTABLE}" req -new -newkey rsa:1024 -days 10000 -nodes -x509 -keyout "${TEST_SERVER_SSL_KEY}" -out "${TEST_SERVER_SSL_CERT}"
|
||||||
RESULT_VARIABLE OPENSSL_RETURN_CODE
|
RESULT_VARIABLE OPENSSL_RETURN_CODE
|
||||||
OUTPUT_QUIET ERROR_QUIET)
|
OUTPUT_QUIET ERROR_QUIET)
|
||||||
|
|
||||||
message("\n")
|
message("\n")
|
||||||
|
endif()
|
||||||
|
|
||||||
if (OPENSSL_RETURN_CODE)
|
if (OPENSSL_RETURN_CODE)
|
||||||
message(WARNING "!!! Failed to generate SSL certificate for Test Server using cmd.exe !!!:\nOpenSSL return code = ${OPENSSL_RETURN_CODE}")
|
message(WARNING "!!! Failed to generate SSL certificate for Test Server using cmd.exe !!!:\nOpenSSL return code = ${OPENSSL_RETURN_CODE}")
|
||||||
|
@ -983,7 +991,9 @@ endif()
|
||||||
message("---------------------------------------------------------------------")
|
message("---------------------------------------------------------------------")
|
||||||
message(" Settings: (For more help do cmake -LH <srcpath>)")
|
message(" Settings: (For more help do cmake -LH <srcpath>)")
|
||||||
message("---------------------------------------------------------------------")
|
message("---------------------------------------------------------------------")
|
||||||
message(" LWS_WITH_SSL = ${LWS_WITH_SSL} (SSL Support)")
|
message(" LWS_WITH_STATIC = ${LWS_WITH_STATIC}")
|
||||||
|
message(" LWS_WITH_SHARED = ${LWS_WITH_SHARED}")
|
||||||
|
message(" LWS_WITH_SSL = ${LWS_WITH_SSL} (SSL Support)")
|
||||||
message(" LWS_SSL_CLIENT_USE_OS_CA_CERTS = ${LWS_SSL_CLIENT_USE_OS_CA_CERTS}")
|
message(" LWS_SSL_CLIENT_USE_OS_CA_CERTS = ${LWS_SSL_CLIENT_USE_OS_CA_CERTS}")
|
||||||
message(" LWS_USE_WOLFSSL = ${LWS_USE_WOLFSSL} (wolfSSL/CyaSSL replacement for OpenSSL)")
|
message(" LWS_USE_WOLFSSL = ${LWS_USE_WOLFSSL} (wolfSSL/CyaSSL replacement for OpenSSL)")
|
||||||
if (LWS_USE_WOLFSSL)
|
if (LWS_USE_WOLFSSL)
|
||||||
|
|
|
@ -12,7 +12,8 @@ simply remove your build directory.
|
||||||
Libwebsockets has been tested to build successfully on the following platforms
|
Libwebsockets has been tested to build successfully on the following platforms
|
||||||
with SSL support (both OpenSSL/wolfSSL):
|
with SSL support (both OpenSSL/wolfSSL):
|
||||||
|
|
||||||
- Windows
|
- Windows (Visual Studio)
|
||||||
|
- Windows (MinGW)
|
||||||
- Linux (x86 and ARM)
|
- Linux (x86 and ARM)
|
||||||
- OSX
|
- OSX
|
||||||
- NetBSD
|
- NetBSD
|
||||||
|
@ -91,7 +92,6 @@ Building on Unix:
|
||||||
$ make
|
$ make
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
Quirk of cmake
|
Quirk of cmake
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
|
@ -99,14 +99,18 @@ When changing cmake options, for some reason the only way to get it to see the
|
||||||
changes sometimes is delete the contents of your build directory and do the
|
changes sometimes is delete the contents of your build directory and do the
|
||||||
cmake from scratch.
|
cmake from scratch.
|
||||||
|
|
||||||
|
|
||||||
Building on Windows (Visual Studio)
|
Building on Windows (Visual Studio)
|
||||||
-----------------------------------
|
-----------------------------------
|
||||||
1. Install CMake 2.6 or greater: http://cmake.org/cmake/resources/software.html
|
1. Install CMake 2.6 or greater: http://cmake.org/cmake/resources/software.html
|
||||||
|
|
||||||
2. Install OpenSSL binaries. http://www.openssl.org/related/binaries.html
|
2. Install OpenSSL binaries. http://www.openssl.org/related/binaries.html
|
||||||
(Preferably in the default location to make it easier for CMake to find them)
|
|
||||||
|
|
||||||
|
(**NOTE**: Preferably in the default location to make it easier for CMake to find them)
|
||||||
|
|
||||||
|
**NOTE2**:
|
||||||
|
Be sure that OPENSSL_CONF environment variable is defined and points at
|
||||||
|
<OpenSSL install location>\bin\openssl.cfg
|
||||||
|
|
||||||
3. Generate the Visual studio project by opening the Visual Studio cmd prompt:
|
3. Generate the Visual studio project by opening the Visual Studio cmd prompt:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
@ -117,10 +121,81 @@ Building on Windows (Visual Studio)
|
||||||
```
|
```
|
||||||
|
|
||||||
(**NOTE**: There is also a cmake-gui available on Windows if you prefer that)
|
(**NOTE**: There is also a cmake-gui available on Windows if you prefer that)
|
||||||
|
|
||||||
|
**NOTE2**:
|
||||||
|
See this link to find out the version number corresponding to your Visual Studio edition:
|
||||||
|
http://superuser.com/a/194065
|
||||||
|
|
||||||
4. Now you should have a generated Visual Studio Solution in your
|
4. Now you should have a generated Visual Studio Solution in your
|
||||||
`<path to src>/build` directory, which can be used to build.
|
`<path to src>/build` directory, which can be used to build.
|
||||||
|
|
||||||
|
Building on Windows (MinGW)
|
||||||
|
---------------------------
|
||||||
|
1. Install MinGW: http://sourceforge.net/projects/mingw/files
|
||||||
|
|
||||||
|
(**NOTE**: Preferably in the default location C:\MinGW)
|
||||||
|
|
||||||
|
2. Fix up MinGW headers
|
||||||
|
|
||||||
|
a) Add the following lines to C:\MinGW\include\winsock2.h:
|
||||||
|
|
||||||
|
#if(_WIN32_WINNT >= 0x0600)
|
||||||
|
|
||||||
|
typedef struct pollfd {
|
||||||
|
|
||||||
|
SOCKET fd;
|
||||||
|
SHORT events;
|
||||||
|
SHORT revents;
|
||||||
|
|
||||||
|
} WSAPOLLFD, *PWSAPOLLFD, FAR *LPWSAPOLLFD;
|
||||||
|
|
||||||
|
WINSOCK_API_LINKAGE int WSAAPI WSAPoll(LPWSAPOLLFD fdArray, ULONG fds, INT timeout);
|
||||||
|
|
||||||
|
#endif // (_WIN32_WINNT >= 0x0600)
|
||||||
|
|
||||||
|
b) Create C:\MinGW\include\mstcpip.h and copy and paste the content from following link into it:
|
||||||
|
|
||||||
|
http://wine-unstable.sourcearchive.com/documentation/1.1.32/mstcpip_8h-source.html
|
||||||
|
|
||||||
|
3. Install CMake 2.6 or greater: http://cmake.org/cmake/resources/software.html
|
||||||
|
|
||||||
|
4. Install OpenSSL binaries. http://www.openssl.org/related/binaries.html
|
||||||
|
|
||||||
|
(**NOTE**: Preferably in the default location to make it easier for CMake to find them)
|
||||||
|
|
||||||
|
**NOTE2**:
|
||||||
|
Be sure that OPENSSL_CONF environment variable is defined and points at
|
||||||
|
<OpenSSL install location>\bin\openssl.cfg
|
||||||
|
|
||||||
|
5. Generate the build files (default is Make files) using MSYS shell:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ cd /drive/path/to/src
|
||||||
|
$ mkdir build
|
||||||
|
$ cd build
|
||||||
|
$ cmake -G "MSYS Makefiles" -DCMAKE_INSTALL_PREFIX=C:/MinGW ..
|
||||||
|
```
|
||||||
|
|
||||||
|
(**NOTE**: The `build/`` directory can have any name and be located anywhere
|
||||||
|
on your filesystem, and that the argument `..` given to cmake is simply
|
||||||
|
the source directory of **libwebsockets** containing the [CMakeLists.txt](CMakeLists.txt)
|
||||||
|
project file. All examples in this file assumes you use "..")
|
||||||
|
|
||||||
|
**NOTE2**:
|
||||||
|
To generate build files allowing to create libwebsockets binaries with debug information
|
||||||
|
set the CMAKE_BUILD_TYPE flag to DEBUG:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ cmake -G "MSYS Makefiles" -DCMAKE_INSTALL_PREFIX=C:/MinGW -DCMAKE_BUILD_TYPE=DEBUG ..
|
||||||
|
```
|
||||||
|
|
||||||
|
6. Finally you can build using the generated Makefile and get the results deployed into your MinGW installation:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ make
|
||||||
|
$ make install
|
||||||
|
```
|
||||||
|
|
||||||
Setting compile options
|
Setting compile options
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
|
@ -184,7 +259,6 @@ cmake .. -DLWS_USE_CYASSL=1 \
|
||||||
|
|
||||||
**NOTE**: On windows use the .lib file extension for `LWS_CYASSL_LIBRARIES` instead.
|
**NOTE**: On windows use the .lib file extension for `LWS_CYASSL_LIBRARIES` instead.
|
||||||
|
|
||||||
|
|
||||||
Reproducing HTTP2.0 tests
|
Reproducing HTTP2.0 tests
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
|
@ -239,7 +313,6 @@ need to provide the cross libraries otherwise.
|
||||||
Additional information on cross compilation with CMake:
|
Additional information on cross compilation with CMake:
|
||||||
http://www.vtk.org/Wiki/CMake_Cross_Compiling
|
http://www.vtk.org/Wiki/CMake_Cross_Compiling
|
||||||
|
|
||||||
|
|
||||||
Memory efficiency
|
Memory efficiency
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
|
|
@ -253,7 +253,7 @@ struct libwebsocket *libwebsocket_client_connect_2(
|
||||||
goto failed;
|
goto failed;
|
||||||
wsi->u.hdr.ah->c_port = context->http_proxy_port;
|
wsi->u.hdr.ah->c_port = context->http_proxy_port;
|
||||||
|
|
||||||
n = send(wsi->sock, context->service_buffer, plen, MSG_NOSIGNAL);
|
n = send(wsi->sock, (char *)context->service_buffer, plen, MSG_NOSIGNAL);
|
||||||
if (n < 0) {
|
if (n < 0) {
|
||||||
lwsl_debug("ERROR writing to proxy socket\n");
|
lwsl_debug("ERROR writing to proxy socket\n");
|
||||||
goto failed;
|
goto failed;
|
||||||
|
|
|
@ -83,7 +83,7 @@ int lws_client_socket_service(struct libwebsocket_context *context,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
n = recv(wsi->sock, context->service_buffer,
|
n = recv(wsi->sock, (char *)context->service_buffer,
|
||||||
sizeof(context->service_buffer), 0);
|
sizeof(context->service_buffer), 0);
|
||||||
if (n < 0) {
|
if (n < 0) {
|
||||||
|
|
||||||
|
|
|
@ -76,9 +76,6 @@ libwebsocket_create_context(struct lws_context_creation_info *info)
|
||||||
{
|
{
|
||||||
struct libwebsocket_context *context = NULL;
|
struct libwebsocket_context *context = NULL;
|
||||||
char *p;
|
char *p;
|
||||||
#ifdef _WIN32
|
|
||||||
int i;
|
|
||||||
#endif
|
|
||||||
int pid_daemon = get_daemonize_pid();
|
int pid_daemon = get_daemonize_pid();
|
||||||
|
|
||||||
lwsl_notice("Initial logging level %d\n", log_level);
|
lwsl_notice("Initial logging level %d\n", log_level);
|
||||||
|
|
|
@ -33,7 +33,12 @@ extern "C" {
|
||||||
#include "lws_config.h"
|
#include "lws_config.h"
|
||||||
|
|
||||||
#if defined(WIN32) || defined(_WIN32)
|
#if defined(WIN32) || defined(_WIN32)
|
||||||
|
#if (WINVER < 0x0501)
|
||||||
|
#undef WINVER
|
||||||
|
#undef _WIN32_WINNT
|
||||||
|
#define WINVER 0x0501
|
||||||
|
#define _WIN32_WINNT WINVER
|
||||||
|
#endif
|
||||||
#ifndef WIN32_LEAN_AND_MEAN
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#endif
|
#endif
|
||||||
|
@ -238,12 +243,14 @@ struct libwebsocket_pollargs {
|
||||||
int prev_events; // the previous event mask
|
int prev_events; // the previous event mask
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
|
#if defined(_WIN32) && (_WIN32_WINNT < 0x0600)
|
||||||
struct libwebsocket_pollfd {
|
struct libwebsocket_pollfd {
|
||||||
SOCKET fd;
|
SOCKET fd;
|
||||||
SHORT events;
|
SHORT events;
|
||||||
SHORT revents;
|
SHORT revents;
|
||||||
};
|
};
|
||||||
|
WINSOCK_API_LINKAGE int WSAAPI WSAPoll(struct libwebsocket_pollfd fdArray[], ULONG fds, INT timeout);
|
||||||
#else
|
#else
|
||||||
#define libwebsocket_pollfd pollfd
|
#define libwebsocket_pollfd pollfd
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -581,7 +581,7 @@ lws_ssl_capable_read_no_ssl(struct libwebsocket_context *context,
|
||||||
{
|
{
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
n = recv(wsi->sock, buf, len, 0);
|
n = recv(wsi->sock, (char *)buf, len, 0);
|
||||||
if (n >= 0)
|
if (n >= 0)
|
||||||
return n;
|
return n;
|
||||||
|
|
||||||
|
@ -599,7 +599,7 @@ lws_ssl_capable_write_no_ssl(struct libwebsocket *wsi, unsigned char *buf, int l
|
||||||
{
|
{
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
n = send(wsi->sock, buf, len, MSG_NOSIGNAL);
|
n = send(wsi->sock, (char *)buf, len, MSG_NOSIGNAL);
|
||||||
if (n >= 0)
|
if (n >= 0)
|
||||||
return n;
|
return n;
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,12 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(WIN32) || defined(_WIN32)
|
#if defined(WIN32) || defined(_WIN32)
|
||||||
|
#if (WINVER < 0x0501)
|
||||||
|
#undef WINVER
|
||||||
|
#undef _WIN32_WINNT
|
||||||
|
#define WINVER 0x0501
|
||||||
|
#define _WIN32_WINNT WINVER
|
||||||
|
#endif
|
||||||
#define LWS_NO_DAEMONIZE
|
#define LWS_NO_DAEMONIZE
|
||||||
#define LWS_ERRNO WSAGetLastError()
|
#define LWS_ERRNO WSAGetLastError()
|
||||||
#define LWS_EAGAIN WSAEWOULDBLOCK
|
#define LWS_EAGAIN WSAEWOULDBLOCK
|
||||||
|
|
|
@ -605,7 +605,7 @@ lws_server_socket_service_ssl(struct libwebsocket_context *context,
|
||||||
|
|
||||||
lws_latency_pre(context, wsi);
|
lws_latency_pre(context, wsi);
|
||||||
|
|
||||||
n = recv(wsi->sock, context->service_buffer,
|
n = recv(wsi->sock, (char *)context->service_buffer,
|
||||||
sizeof(context->service_buffer), MSG_PEEK);
|
sizeof(context->service_buffer), MSG_PEEK);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -29,14 +29,17 @@
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
|
||||||
|
#include "../lib/libwebsockets.h"
|
||||||
|
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#else
|
||||||
|
#include "gettimeofday.h"
|
||||||
|
#include <process.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "../lib/libwebsockets.h"
|
|
||||||
|
|
||||||
static volatile int force_exit = 0;
|
static volatile int force_exit = 0;
|
||||||
static int versa, state;
|
static int versa, state;
|
||||||
|
|
||||||
|
@ -189,10 +192,10 @@ int main(int argc, char **argv)
|
||||||
struct libwebsocket_context *context;
|
struct libwebsocket_context *context;
|
||||||
int opts = 0;
|
int opts = 0;
|
||||||
char interface_name[128] = "";
|
char interface_name[128] = "";
|
||||||
const char *interface = NULL;
|
const char *_interface = NULL;
|
||||||
char ssl_cert[256] = LOCAL_RESOURCE_PATH"/libwebsockets-test-server.pem";
|
char ssl_cert[256] = LOCAL_RESOURCE_PATH"/libwebsockets-test-server.pem";
|
||||||
char ssl_key[256] = LOCAL_RESOURCE_PATH"/libwebsockets-test-server.key.pem";
|
char ssl_key[256] = LOCAL_RESOURCE_PATH"/libwebsockets-test-server.key.pem";
|
||||||
#ifndef WIN32
|
#ifndef _WIN32
|
||||||
int syslog_options = LOG_PID | LOG_PERROR;
|
int syslog_options = LOG_PID | LOG_PERROR;
|
||||||
#endif
|
#endif
|
||||||
int client = 0;
|
int client = 0;
|
||||||
|
@ -253,7 +256,7 @@ int main(int argc, char **argv)
|
||||||
#ifndef LWS_NO_DAEMONIZE
|
#ifndef LWS_NO_DAEMONIZE
|
||||||
case 'D':
|
case 'D':
|
||||||
daemonize = 1;
|
daemonize = 1;
|
||||||
#ifndef WIN32
|
#ifndef _WIN32
|
||||||
syslog_options &= ~LOG_PERROR;
|
syslog_options &= ~LOG_PERROR;
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
@ -284,7 +287,7 @@ int main(int argc, char **argv)
|
||||||
case 'i':
|
case 'i':
|
||||||
strncpy(interface_name, optarg, sizeof interface_name);
|
strncpy(interface_name, optarg, sizeof interface_name);
|
||||||
interface_name[(sizeof interface_name) - 1] = '\0';
|
interface_name[(sizeof interface_name) - 1] = '\0';
|
||||||
interface = interface_name;
|
_interface = interface_name;
|
||||||
break;
|
break;
|
||||||
case '?':
|
case '?':
|
||||||
case 'h':
|
case 'h':
|
||||||
|
@ -323,15 +326,15 @@ int main(int argc, char **argv)
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifndef _WIN32
|
||||||
#else
|
|
||||||
/* we will only try to log things according to our debug_level */
|
/* we will only try to log things according to our debug_level */
|
||||||
setlogmask(LOG_UPTO (LOG_DEBUG));
|
setlogmask(LOG_UPTO (LOG_DEBUG));
|
||||||
openlog("lwsts", syslog_options, LOG_DAEMON);
|
openlog("lwsts", syslog_options, LOG_DAEMON);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* tell the library what debug level to emit and to send it to syslog */
|
/* tell the library what debug level to emit and to send it to syslog */
|
||||||
lws_set_log_level(debug_level, lwsl_emit_syslog);
|
lws_set_log_level(debug_level, lwsl_emit_syslog);
|
||||||
#endif
|
|
||||||
lwsl_notice("libwebsockets echo test - "
|
lwsl_notice("libwebsockets echo test - "
|
||||||
"(C) Copyright 2010-2015 Andy Green <andy@warmcat.com> - "
|
"(C) Copyright 2010-2015 Andy Green <andy@warmcat.com> - "
|
||||||
"licensed under LGPL2.1\n");
|
"licensed under LGPL2.1\n");
|
||||||
|
@ -357,7 +360,7 @@ int main(int argc, char **argv)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
info.port = listen_port;
|
info.port = listen_port;
|
||||||
info.iface = interface;
|
info.iface = _interface;
|
||||||
info.protocols = protocols;
|
info.protocols = protocols;
|
||||||
#ifndef LWS_NO_EXTENSIONS
|
#ifndef LWS_NO_EXTENSIONS
|
||||||
info.extensions = libwebsocket_get_internal_extensions();
|
info.extensions = libwebsocket_get_internal_extensions();
|
||||||
|
@ -422,8 +425,7 @@ bail:
|
||||||
libwebsocket_context_destroy(context);
|
libwebsocket_context_destroy(context);
|
||||||
|
|
||||||
lwsl_notice("libwebsockets-test-echo exited cleanly\n");
|
lwsl_notice("libwebsockets-test-echo exited cleanly\n");
|
||||||
#ifdef WIN32
|
#ifndef _WIN32
|
||||||
#else
|
|
||||||
closelog();
|
closelog();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,8 @@
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#include "../lib/libwebsockets.h"
|
||||||
|
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
@ -33,10 +35,10 @@
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
#include <poll.h>
|
#include <poll.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#else
|
||||||
|
#include "gettimeofday.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "../lib/libwebsockets.h"
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* this is specified in the 04 standard, control frames can only have small
|
* this is specified in the 04 standard, control frames can only have small
|
||||||
* payload length styles
|
* payload length styles
|
||||||
|
@ -312,7 +314,7 @@ static struct option options[] = {
|
||||||
{ NULL, 0, 0, 0 }
|
{ NULL, 0, 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifndef _WIN32
|
||||||
static void
|
static void
|
||||||
signal_handler(int sig, siginfo_t *si, void *v)
|
signal_handler(int sig, siginfo_t *si, void *v)
|
||||||
{
|
{
|
||||||
|
@ -331,7 +333,7 @@ int main(int argc, char **argv)
|
||||||
struct libwebsocket_context *context;
|
struct libwebsocket_context *context;
|
||||||
char protocol_name[256];
|
char protocol_name[256];
|
||||||
char ip[30];
|
char ip[30];
|
||||||
#ifndef WIN32
|
#ifndef _WIN32
|
||||||
struct sigaction sa;
|
struct sigaction sa;
|
||||||
struct winsize w;
|
struct winsize w;
|
||||||
#endif
|
#endif
|
||||||
|
@ -414,7 +416,7 @@ int main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifndef _WIN32
|
||||||
if (isatty(STDOUT_FILENO))
|
if (isatty(STDOUT_FILENO))
|
||||||
if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &w) != -1)
|
if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &w) != -1)
|
||||||
if (w.ws_col > 0)
|
if (w.ws_col > 0)
|
||||||
|
@ -456,7 +458,7 @@ int main(int argc, char **argv)
|
||||||
fprintf(stderr, "Websocket PING %s (%s) %d bytes of data.\n",
|
fprintf(stderr, "Websocket PING %s (%s) %d bytes of data.\n",
|
||||||
peer_name, ip, size);
|
peer_name, ip, size);
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifndef _WIN32
|
||||||
/* set the ^C handler */
|
/* set the ^C handler */
|
||||||
sa.sa_sigaction = signal_handler;
|
sa.sa_sigaction = signal_handler;
|
||||||
sa.sa_flags = SA_SIGINFO;
|
sa.sa_flags = SA_SIGINFO;
|
||||||
|
|
|
@ -29,24 +29,25 @@
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
|
#include "../lib/libwebsockets.h"
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include <io.h>
|
#include <io.h>
|
||||||
#ifdef EXTERNAL_POLL
|
#ifdef EXTERNAL_POLL
|
||||||
#define poll WSAPoll
|
#define poll WSAPoll
|
||||||
#endif
|
#endif
|
||||||
|
#include "gettimeofday.h"
|
||||||
#else
|
#else
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "../lib/libwebsockets.h"
|
|
||||||
|
|
||||||
static int close_testing;
|
static int close_testing;
|
||||||
int max_poll_elements;
|
int max_poll_elements;
|
||||||
|
|
||||||
#ifdef EXTERNAL_POLL
|
#ifdef EXTERNAL_POLL
|
||||||
struct pollfd *pollfds;
|
struct libwebsocket_pollfd *pollfds;
|
||||||
int *fd_lookup;
|
int *fd_lookup;
|
||||||
int count_pollfds;
|
int count_pollfds;
|
||||||
#endif
|
#endif
|
||||||
|
@ -203,7 +204,7 @@ static int callback_http(struct libwebsocket_context *context,
|
||||||
|
|
||||||
p = buffer + LWS_SEND_BUFFER_PRE_PADDING;
|
p = buffer + LWS_SEND_BUFFER_PRE_PADDING;
|
||||||
end = p + sizeof(buffer) - LWS_SEND_BUFFER_PRE_PADDING;
|
end = p + sizeof(buffer) - LWS_SEND_BUFFER_PRE_PADDING;
|
||||||
#ifdef WIN32
|
#ifdef _WIN32
|
||||||
pss->fd = open(leaf_path, O_RDONLY | _O_BINARY);
|
pss->fd = open(leaf_path, O_RDONLY | _O_BINARY);
|
||||||
#else
|
#else
|
||||||
pss->fd = open(leaf_path, O_RDONLY);
|
pss->fd = open(leaf_path, O_RDONLY);
|
||||||
|
@ -783,7 +784,7 @@ int main(int argc, char **argv)
|
||||||
int opts = 0;
|
int opts = 0;
|
||||||
char interface_name[128] = "";
|
char interface_name[128] = "";
|
||||||
const char *iface = NULL;
|
const char *iface = NULL;
|
||||||
#ifndef WIN32
|
#ifndef _WIN32
|
||||||
int syslog_options = LOG_PID | LOG_PERROR;
|
int syslog_options = LOG_PID | LOG_PERROR;
|
||||||
#endif
|
#endif
|
||||||
unsigned int ms, oldms = 0;
|
unsigned int ms, oldms = 0;
|
||||||
|
@ -808,7 +809,7 @@ int main(int argc, char **argv)
|
||||||
#ifndef LWS_NO_DAEMONIZE
|
#ifndef LWS_NO_DAEMONIZE
|
||||||
case 'D':
|
case 'D':
|
||||||
daemonize = 1;
|
daemonize = 1;
|
||||||
#ifndef WIN32
|
#ifndef _WIN32
|
||||||
syslog_options &= ~LOG_PERROR;
|
syslog_options &= ~LOG_PERROR;
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
@ -863,7 +864,7 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
signal(SIGINT, sighandler);
|
signal(SIGINT, sighandler);
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifndef _WIN32
|
||||||
/* we will only try to log things according to our debug_level */
|
/* we will only try to log things according to our debug_level */
|
||||||
setlogmask(LOG_UPTO (LOG_DEBUG));
|
setlogmask(LOG_UPTO (LOG_DEBUG));
|
||||||
openlog("lwsts", syslog_options, LOG_DAEMON);
|
openlog("lwsts", syslog_options, LOG_DAEMON);
|
||||||
|
@ -879,7 +880,7 @@ int main(int argc, char **argv)
|
||||||
printf("Using resource path \"%s\"\n", resource_path);
|
printf("Using resource path \"%s\"\n", resource_path);
|
||||||
#ifdef EXTERNAL_POLL
|
#ifdef EXTERNAL_POLL
|
||||||
max_poll_elements = getdtablesize();
|
max_poll_elements = getdtablesize();
|
||||||
pollfds = malloc(max_poll_elements * sizeof (struct pollfd));
|
pollfds = malloc(max_poll_elements * sizeof (struct libwebsocket_pollfd));
|
||||||
fd_lookup = malloc(max_poll_elements * sizeof (int));
|
fd_lookup = malloc(max_poll_elements * sizeof (int));
|
||||||
if (pollfds == NULL || fd_lookup == NULL) {
|
if (pollfds == NULL || fd_lookup == NULL) {
|
||||||
lwsl_err("Out of memory pollfds=%d\n", max_poll_elements);
|
lwsl_err("Out of memory pollfds=%d\n", max_poll_elements);
|
||||||
|
@ -985,7 +986,7 @@ done:
|
||||||
|
|
||||||
lwsl_notice("libwebsockets-test-server exited cleanly\n");
|
lwsl_notice("libwebsockets-test-server exited cleanly\n");
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifndef _WIN32
|
||||||
closelog();
|
closelog();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -1,23 +1,7 @@
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <windows.h> //I've omitted context line
|
#include <windows.h> //I've omitted context line
|
||||||
|
|
||||||
#if defined(_MSC_VER) || defined(_MSC_EXTENSIONS)
|
#include "gettimeofday.h"
|
||||||
#define DELTA_EPOCH_IN_MICROSECS 11644473600000000Ui64
|
|
||||||
#else
|
|
||||||
#define DELTA_EPOCH_IN_MICROSECS 11644473600000000ULL
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __MINGW32__
|
|
||||||
#else
|
|
||||||
#ifdef __MINGW64__
|
|
||||||
#else
|
|
||||||
struct timezone
|
|
||||||
{
|
|
||||||
int tz_minuteswest; /* minutes W of Greenwich */
|
|
||||||
int tz_dsttime; /* type of dst correction */
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int gettimeofday(struct timeval *tv, struct timezone *tz)
|
int gettimeofday(struct timeval *tv, struct timezone *tz)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,15 +1,6 @@
|
||||||
#ifndef _GET_TIME_OF_DAY_H
|
#ifndef _GET_TIME_OF_DAY_H
|
||||||
#define _GET_TIME_OF_DAY_H
|
#define _GET_TIME_OF_DAY_H
|
||||||
|
|
||||||
#ifdef __MINGW64__
|
|
||||||
#else
|
|
||||||
#ifdef __MINGW32__
|
|
||||||
#else
|
|
||||||
#include < time.h >
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <windows.h> //I've omitted context line.
|
|
||||||
#if defined(_MSC_VER) || defined(_MSC_EXTENSIONS)
|
#if defined(_MSC_VER) || defined(_MSC_EXTENSIONS)
|
||||||
#define DELTA_EPOCH_IN_MICROSECS 11644473600000000Ui64
|
#define DELTA_EPOCH_IN_MICROSECS 11644473600000000Ui64
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ((__GNUC__-0) * 10 + __GNUC_MINOR__-0 >= 33) && !defined(NO_VIZ)
|
#if ((__GNUC__-0) * 10 + __GNUC_MINOR__-0 >= 33) && !defined(NO_VIZ) && !defined(_WIN32)
|
||||||
# define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
|
# define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
|
||||||
#else
|
#else
|
||||||
# define ZLIB_INTERNAL
|
# define ZLIB_INTERNAL
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
#ifndef ZUTIL_H
|
#ifndef ZUTIL_H
|
||||||
#define ZUTIL_H
|
#define ZUTIL_H
|
||||||
|
|
||||||
#if ((__GNUC__-0) * 10 + __GNUC_MINOR__-0 >= 33) && !defined(NO_VIZ)
|
#if ((__GNUC__-0) * 10 + __GNUC_MINOR__-0 >= 33) && !defined(NO_VIZ) && !defined(_WIN32)
|
||||||
# define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
|
# define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
|
||||||
#else
|
#else
|
||||||
# define ZLIB_INTERNAL
|
# define ZLIB_INTERNAL
|
||||||
|
|
Loading…
Add table
Reference in a new issue