/* * libwebsockets-test-server - libwebsockets test implementation * * Copyright (C) 2010-2016 Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * The test apps are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. */ #if defined(_WIN32) && defined(EXTERNAL_POLL) #define WINVER 0x0600 #define _WIN32_WINNT 0x0600 #define poll(fdArray, fds, timeout) WSAPoll((LPWSAPOLLFD)(fdArray), (ULONG)(fds), (INT)(timeout)) #endif #include "lws_config.h" #include #include #include #include #include #include #include #include #include "../lib/libwebsockets.h" #ifdef _WIN32 #include #include "gettimeofday.h" #else #include #include #include #endif extern int close_testing; extern int max_poll_elements; #ifdef EXTERNAL_POLL extern struct lws_pollfd *pollfds; extern int *fd_lookup; extern int count_pollfds; #endif extern volatile int force_exit; extern struct lws_context *context; extern char *resource_path; #if defined(LWS_OPENSSL_SUPPORT) && defined(LWS_HAVE_SSL_CTX_set1_param) extern char crl_path[1024]; #endif extern void test_server_lock(int care); extern void test_server_unlock(int care); #ifndef __func__ #define __func__ __FUNCTION__ #endif struct per_session_data__http { lws_fop_fd_t fop_fd; #ifdef LWS_WITH_CGI struct lws_cgi_args args; #endif #if defined(LWS_WITH_CGI) || !defined(LWS_NO_CLIENT) int reason_bf; #endif unsigned int client_finished:1; struct lws_spa *spa; char result[500 + LWS_PRE]; int result_len; char filename[256]; long file_length; lws_filefd_type post_fd; }; /* * one of these is auto-created for each connection and a pointer to the * appropriate instance is passed to the callback in the user parameter * * for this example protocol we use it to individualize the count for each * connection. */ #if !defined(DI_HANDLED_BY_PLUGIN) struct per_session_data__dumb_increment { int number; }; #endif extern int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len); #if !defined(DI_HANDLED_BY_PLUGIN) extern int callback_dumb_increment(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len); #endif extern void dump_handshake_info(struct lws *wsi);