123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- /*
- * libwebsockets-test-server - libwebsockets test implementation
- *
- * Copyright (C) 2010-2016 Andy Green <andy@warmcat.com>
- *
- * 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 <stdio.h>
- #include <stdlib.h>
- #include <getopt.h>
- #include <signal.h>
- #include <string.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <assert.h>
- #include "../lib/libwebsockets.h"
- #ifdef _WIN32
- #include <io.h>
- #include "gettimeofday.h"
- #else
- #include <syslog.h>
- #include <sys/time.h>
- #include <unistd.h>
- #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.
- */
- struct per_session_data__dumb_increment {
- int number;
- };
- struct per_session_data__lws_mirror {
- struct lws *wsi;
- int ringbuffer_tail;
- };
- struct per_session_data__echogen {
- size_t total;
- size_t total_rx;
- int fd;
- int fragsize;
- int wr;
- };
- struct per_session_data__lws_status {
- struct per_session_data__lws_status *list;
- struct timeval tv_established;
- int last;
- char ip[270];
- char user_agent[512];
- const char *pos;
- int len;
- };
- extern int
- callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user,
- void *in, size_t len);
- extern int
- callback_lws_mirror(struct lws *wsi, enum lws_callback_reasons reason,
- void *user, void *in, size_t len);
- extern int
- callback_dumb_increment(struct lws *wsi, enum lws_callback_reasons reason,
- void *user, void *in, size_t len);
- extern int
- callback_lws_echogen(struct lws *wsi, enum lws_callback_reasons reason,
- void *user, void *in, size_t len);
- extern int
- callback_lws_status(struct lws *wsi, enum lws_callback_reasons reason,
- void *user, void *in, size_t len);
- extern void
- dump_handshake_info(struct lws *wsi);
|