Compare commits

..

60 commits

Author SHA1 Message Date
Sergey Kovalevich
02ad98dbd0 Subject: Fixed value of LIBWEBSOCKETS_LIBRARIES_STATIC 2017-05-30 09:05:48 +08:00
Andy Green
c36ac16ff5 LICENSE: clarify exceptions also apply to LGPL self-refernences
via Mike Atamas, Counsel for Epic Games
2017-05-19 09:28:53 +08:00
Andy Green
123572a921 windows: align choked trunc checking with unix 2017-04-18 15:18:56 +08:00
Gecko
d8b7e892fa Subject: Save copy of ah pointer even with WS client so that HTTP
error can be captured by calling lws_http_client_http_response.
2017-04-10 12:39:21 +08:00
Andy Green
1788dc5558 boilerplate: add back missing Lesser that cut-and-pasted itself around 2017-04-06 23:14:03 +08:00
Martin Milata
ea2596be2d Subject: ssl: fix OpenSSL client method detection 2017-04-06 23:13:56 +08:00
Andy Green
8553ecfb3a ssl: OpenSSL v1.1 deprecated TLSv1_2_client_method 2017-04-06 09:02:58 +08:00
Andy Green
61ef337671 pollout: handle request for pollout during pollout service 2017-04-05 08:31:33 +08:00
Andy Green
9494cc646a logs: reduce ah err to info 2017-04-02 13:03:51 +08:00
Andy Green
c304876941 service: always restrict rx to serve_buf_size 2017-03-28 08:53:02 +08:00
Andy Green
39a3a5854d pmd: handle case we are already on drain list
Provide internal helper for adding to list that takes care of the
case we are already on the list.

https://github.com/warmcat/libwebsockets/issues/847
2017-03-26 10:11:39 +08:00
Andy Green
584e7339c7 pmd: align client rx sm with server one 2017-03-25 08:50:32 +08:00
Andy Green
b22ef6775b docs 2017-03-20 19:37:47 +08:00
Andy Green
316b0293e9 ext: pmd: improve dealing with partial input usage with drain
https://github.com/warmcat/libwebsockets/issues/841
2017-03-20 19:35:26 +08:00
Michael Behrns-Miller [case-ubuntu]
9207bc51bb Subject: Buffer index protection in the case where client does not
receive content length from HTTP server
2017-03-03 05:42:47 +08:00
Whisperbyte
9892280467 docs: mac: add info from github 2017-03-01 18:00:00 +08:00
Silas Parker
a5f64f9f4d cosmetic fix trailing newline on log 2017-02-28 18:39:21 +08:00
Andy Green
a218d779b6 client: take care of rx close during pending partial same as server does
https://github.com/warmcat/libwebsockets/issues/816
2017-02-28 18:38:38 +08:00
Martin Milata
7ad81d6cdd gcc format strings: couple more 2017-02-22 07:14:06 +08:00
Yuchen Xie
7fb607720d Fix typo 2017-02-18 15:55:16 +08:00
Yongwen Zhuang
de22418879 Correct Cross compiling commandline 2017-02-15 18:18:01 +08:00
Andy Green
d317a96b27 v2.1.1 2017-02-15 18:03:12 +08:00
Silas Parker
e2fcf47f03 fix close packet index coding
https://github.com/warmcat/libwebsockets/issues/792
2017-02-14 23:25:15 +08:00
Andy Green
b95e7fe466 gcc format strings: http2 2017-02-05 22:46:39 +08:00
Andy Green
0b7ca30ed1 gcc- format strings: debug and extra plugins 2017-02-05 22:32:07 +08:00
Martin Milata
b03b17fd0b Subject: gcc format strings: Make GCC check format strings, fix found problems 2017-02-05 22:12:57 +08:00
Sven Hoffmann
a238984d1b post processing: fix problem where hex cant straddle block correctly 2017-02-05 22:12:33 +08:00
Tobias
109d66c365 ignore leading spaces when checking for a suitable subprotocol
My Browsers send as Subprotocols e.g. chat, superchat, mySubprotocol (with spaces after the ,). Libwebsockets now checked if ' mySubprotocol' was equal to 'mySubprotocol' which failed. With this fix the leading space is ignored and uses 'mySubprotocol' for comparision.
2017-01-17 06:28:27 +08:00
Andy Green
da6f03b423 ssl: wolfssl doesn't have clear options
https://github.com/warmcat/libwebsockets/issues/741
2017-01-10 09:16:49 +08:00
Hai Vu
c9d165bbcc ssl-correct-option-clear-availability-version
https://github.com/warmcat/libwebsockets/issues/744
2017-01-10 09:16:41 +08:00
Andy Green
8283659047 polarssl: turn off missing tlsext 2017-01-07 10:24:50 +08:00
Andy Green
c447e1f9f3 openssl: deal with missing OPENSSL_NO_TLSEXT on ancient versions 2017-01-07 10:24:42 +08:00
Denis Osvald
9706dd23a2 server: check listen(2) return value
The `listen` call can fail with EADDRINUSE after bind() succeeds, for
example because another process called listen on that port in the
meantime, or under some circumstances with IPv6-mapped-IPv4. This was
causing EINVAL on accept, with an infinite loop in case of libuv.

A reproducible example was to run nc -l -p 5555 ( OpenBSD netcat (Debian
patchlevel 1)) before starting test-server

Signed-off-by: Denis Osvald <denis.osvald@sartura.hr>
2017-01-03 02:04:11 +08:00
namowen
837e7fdd14 lws_plat_service_tsi: accessing context before checking for NULL
https://github.com/warmcat/libwebsockets/issues/730
2016-12-24 08:03:04 +08:00
Namowen
d2cb05f1f6 echo: fix debug build
https://github.com/warmcat/libwebsockets/issues/716#issuecomment-267377856
2016-12-16 07:05:29 +08:00
Andy Green
d170ed0623 test-client: fix broken protocol names 2016-12-15 13:42:44 +08:00
Andy Green
39807c1d10 client ssl hostname check: trim any port on host header 2016-12-15 13:27:13 +08:00
Andy Green
6dce477aef ipv6-allow-binding-to-ipv6-address-in-iface
ipv4 and ipv6 binding to a named interface works OK.  ipv4 binding to an IP also
works, but we need some extra ipv6 magic to identify the ipv6 interface from an
ipv6 address.

This patch based on code from "user3546716" at
http://stackoverflow.com/questions/13504934/binding-sockets-to-ipv6-addresses

adds the necessary magic.

https://github.com/warmcat/libwebsockets/issues/717
2016-12-15 10:09:55 +08:00
Andy Green
cf8b922df5 client: if NULL protocol vhost same linked list entry
Lws maintains a linked-list of wsi that are on the same vhost protocol...
it walks it to perform ..._all_protocol() type apis.

Client connections also participate in this list, but in the case the
selected protocol is not given during negotation (a legal case where
the server default protocol is selected) we missed adding the new
ws negotiated client wsi to the list.

This patch makes sure we add the wsi to the vhost protocols[0] list
in that case.

https://github.com/warmcat/libwebsockets/issues/716
2016-12-15 08:38:35 +08:00
Andy Green
266819a1f5 client: avoid possible NULL deref on error path
https://github.com/warmcat/libwebsockets/issues/672
2016-12-12 20:38:32 +08:00
daren-qterics
e618359d4f ssl destroy: change ordering of ssl destroy to later than vhost destroy
https://github.com/warmcat/libwebsockets/issues/711
2016-12-10 09:13:08 +08:00
Andy Green
04fee5f75f clean: usused accidental global wsi
https://github.com/warmcat/libwebsockets/issues/708
2016-12-10 09:13:08 +08:00
Andy Green
384ee53a36 lwsgt: fix check against forgot password flow defeating existing pw check
https://github.com/warmcat/libwebsockets/issues/706

This fixes a problem where the check for the existing pw was
skipped when a logged-in user is changing his password.

It's not good but because the user has to be logged in, it only affected
the situation someone changes his password on his logged in session.
2016-12-10 09:13:08 +08:00
Bablooos
c01bbb2bbc Update CMakeLists.txt for BSD + libdl
Fixing build failure of libwebsockets-test-fraggle  on FreeBSD when LWS_WITH_PLUGINS.
Solution: FreeBSD has no libdl
2016-12-10 09:13:08 +08:00
Andy Green
d104d624ec ws-server: restrict returned Sec-Websocket-Protocol to the chosen name only
https://libwebsockets.org/pipermail/libwebsockets/2016-November/002948.html

Updated to fix a problem with no protocol

https://github.com/warmcat/libwebsockets/issues/705
2016-12-10 09:13:04 +08:00
Andy Green
60b3a027d9 generic-sessions: move auth level check to after mount protocol selection 2016-11-26 20:47:34 +08:00
Iblis Lin
c8bb24cf57 server: portable option for setsockopt
From linux ipv6(7) manual (section `Note`):

        SOL_IP, SOL_IPV6, SOL_ICMPV6 and other SOL_* socket options are
        nonportable variants of IPPROTO_*.  See also ip(7).

Ref: http://man7.org/linux/man-pages/man7/ipv6.7.html
2016-11-23 23:40:04 +08:00
sjames1958gm
0bef3a8b01 client stash: update path variable to larger size 2016-11-22 09:01:57 +08:00
Andy Green
c2cd260311 lws_socket_bind: use lws_sockfd_type 2016-11-16 09:00:45 +08:00
Andy Green
386bd4550b client: protect againt losing ah by lws_client_connect_2 2016-11-15 17:00:55 +08:00
Andy Green
56826dbfd7 post file upload: dont lose sight of end of upload just because we hit end of incoming post data 2016-11-14 18:16:36 +08:00
Rainer Poisel
9d061e1efd Better support for MINW32 2016-11-09 08:34:27 +08:00
Yannick Kiekens
1e2e150ec4 From 7f84bc3e864b52eb13c670362a4b53bc3505393e Mon Sep 17 00:00:00 2001
Subject: [PATCH] Fix typo in lws_create_context documentation
2016-11-03 17:57:13 +08:00
Andy Green
5fb327754a adjust_timeout: with default lws_plat_service_tsi allow beings passed 0 timeout
Some people are calling service with zero timeout, taking care of
not busywaiting by some other external arrangements.

Adapt the forced service signalling to survive this.
2016-10-10 23:21:48 +08:00
Joerg Pommnitz
e2fcb94147 some compilers need void param explicitly 2016-10-10 20:06:06 +08:00
Yuchen Xie
5df8bf9d83 Correct the library name of LIBHUBBUB_LIBRARIES
It should be `hubbub` in `find_library` to make the function work.
2016-10-10 20:03:53 +08:00
Andy Green
6670c6f953 docs: explain lws_write handling of truncated sends better 2016-10-08 18:09:18 +08:00
Denis Osvald
549b7ad023 publicly document lws_service_fd timeout servicing
Signed-off-by: Denis Osvald <denis.osvald@sartura.hr>
2016-10-07 17:35:12 +08:00
Denis Osvald
af8692e36f test-server-extpoll: add 1-per-second timeout servicing
Signed-off-by: Denis Osvald <denis.osvald@sartura.hr>
2016-10-07 17:35:08 +08:00
Denis Osvald
6b7f30ef64 test-server-extpoll: check for forced service before looping again
Signed-off-by: Denis Osvald <denis.osvald@sartura.hr>
2016-10-07 17:04:19 +08:00
289 changed files with 31663 additions and 17423 deletions

2
.gitignore vendored
View file

@ -1,4 +1,5 @@
#Ignore build files
Makefile
config.h
config.log
config.status
@ -22,7 +23,6 @@ win32port/zlib/Release*/
*.suo
*.su
*.m4
*.a
missing
depcomp
install-sh

View file

@ -11,10 +11,10 @@ env:
- LWS_METHOD=noext CMAKE_ARGS="-DLWS_WITHOUT_EXTENSIONS=ON"
- LWS_METHOD=libev CMAKE_ARGS="-DLWS_WITH_LIBEV=ON"
- LWS_METHOD=noipv6 CMAKE_ARGS="-DLWS_IPV6=OFF"
- LWS_METHOD=http2 CMAKE_ARGS="-DLWS_WITH_HTTP2=ON"
- LWS_METHOD=nossl CMAKE_ARGS="-DLWS_WITH_SSL=OFF"
- LWS_METHOD=nodaemon CMAKE_ARGS="-DLWS_WITHOUT_DAEMONIZE=ON"
- LWS_METHOD=cgi CMAKE_ARGS="-DLWS_WITH_CGI=ON"
- LWS_METHOD=nologs CMAKE_ARGS="-DLWS_WITH_NO_LOGS=ON"
os:
- linux

View file

@ -9,12 +9,12 @@ project(libwebsockets C)
set(PACKAGE "libwebsockets")
set(CPACK_PACKAGE_NAME "${PACKAGE}")
set(CPACK_PACKAGE_VERSION_MAJOR "2")
set(CPACK_PACKAGE_VERSION_MINOR "3")
set(CPACK_PACKAGE_VERSION_PATCH "0")
set(CPACK_PACKAGE_VERSION_MINOR "1")
set(CPACK_PACKAGE_VERSION_PATCH "1")
set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
set(CPACK_PACKAGE_VENDOR "andy@warmcat.com")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PACKAGE} ${PACKAGE_VERSION}")
set(SOVERSION "11")
set(SOVERSION "9")
if(NOT CPACK_GENERATOR)
if(UNIX)
set(CPACK_GENERATOR "TGZ")
@ -69,13 +69,11 @@ endif()
option(LWS_WITH_STATIC "Build the static version of the library" ON)
option(LWS_WITH_SHARED "Build the shared version of the library" ON)
option(LWS_WITH_SSL "Include SSL support (default OpenSSL, wolfSSL if LWS_USE_WOLFSSL is set)" ON)
option(LWS_USE_BORINGSSL "Use BoringSSL replacement for OpenSSL" OFF)
option(LWS_USE_CYASSL "Use CyaSSL replacement for OpenSSL. When setting this, you also need to specify LWS_CYASSL_LIBRARIES and LWS_CYASSL_INCLUDE_DIRS" OFF)
option(LWS_USE_WOLFSSL "Use wolfSSL replacement for OpenSSL. When setting this, you also need to specify LWS_WOLFSSL_LIBRARIES and LWS_WOLFSSL_INCLUDE_DIRS" OFF)
option(LWS_WITH_ZLIB "Include zlib support (required for extensions)" ON)
option(LWS_WITH_LIBEV "Compile with support for libev" OFF)
option(LWS_WITH_LIBUV "Compile with support for libuv" OFF)
option(LWS_WITH_LIBEVENT "Compile with support for libevent" OFF)
option(LWS_USE_BUNDLED_ZLIB "Use bundled zlib version (Windows only)" ${LWS_USE_BUNDLED_ZLIB_DEFAULT})
option(LWS_SSL_CLIENT_USE_OS_CA_CERTS "SSL support should make use of the OS-installed CA root certs" ON)
option(LWS_WITHOUT_BUILTIN_GETIFADDRS "Don't use the BSD getifaddrs implementation from libwebsockets if it is missing (this will result in a compilation error) ... The default is to assume that your libc provides it. On some systems such as uclibc it doesn't exist." OFF)
@ -95,10 +93,11 @@ option(LWS_WITH_LATENCY "Build latency measuring code into the library" OFF)
option(LWS_WITHOUT_DAEMONIZE "Don't build the daemonization api" ON)
option(LWS_IPV6 "Compile with support for ipv6" OFF)
option(LWS_UNIX_SOCK "Compile with support for UNIX domain socket" OFF)
#option(LWS_WITH_HTTP2 "Compile with support for http2" OFF)
option(LWS_WITH_HTTP2 "Compile with support for http2" OFF)
option(LWS_MBED3 "Platform is MBED3" OFF)
option(LWS_SSL_SERVER_WITH_ECDH_CERT "Include SSL server use ECDH certificate" OFF)
option(LWS_WITH_CGI "Include CGI (spawn process with network-connected stdin/out/err) APIs" OFF)
option(LWS_WITH_HTTP_PROXY "Support for rewriting HTTP proxying (requires libhubbub)" OFF)
option(LWS_WITH_HTTP_PROXY "Support for rewriting HTTP proxying" OFF)
option(LWS_WITH_LWSWS "Libwebsockets Webserver" OFF)
option(LWS_WITH_PLUGINS "Support plugins for protocols and extensions" OFF)
option(LWS_WITH_ACCESS_LOG "Support generating Apache-compatible access logs" OFF)
@ -109,16 +108,8 @@ option(LWS_WITH_GENERIC_SESSIONS "With the Generic Sessions plugin" OFF)
option(LWS_WITH_SQLITE3 "Require SQLITE3 support" OFF)
option(LWS_WITH_SMTP "Provide SMTP support" OFF)
option(LWS_WITH_ESP8266 "Build for ESP8266" OFF)
option(LWS_WITH_ESP32 "Build for ESP32" OFF)
option(LWS_PLAT_OPTEE "Build for OPTEE" OFF)
option(LWS_WITH_NO_LOGS "Disable all logging from being compiled in" OFF)
option(LWS_STATIC_PIC "Build the static version of the library with position-independent code" OFF)
option(LWS_WITH_RANGES "Support http ranges (RFC7233)" ON)
option(LWS_FALLBACK_GETHOSTBYNAME "Also try to do dns resolution using gethostbyname if getaddrinfo fails" OFF)
option(LWS_WITH_ZIP_FOPS "Support serving pre-zipped files" ON)
option(LWS_AVOID_SIGPIPE_IGN "Android 7+ seems to need this" OFF)
option(LWS_WITH_STATS "Keep statistics of lws internal operations" OFF)
option(LWS_WITH_SOCKS5 "Allow use of SOCKS5 proxy on client connections" OFF)
if (LWS_WITH_LWSWS)
message(STATUS "LWS_WITH_LWSWS --> Enabling LWS_WITH_PLUGINS and LWS_WITH_LIBUV")
@ -150,6 +141,21 @@ message(STATUS "LWS_WITH_SMTP --> Enabling LWS_WITH_LIBUV")
set(LWS_WITH_LIBUV 1)
endif()
if (DEFINED YOTTA_WEBSOCKETS_VERSION_STRING)
set(LWS_WITH_SHARED OFF)
set(LWS_WITH_SSL OFF)
set(LWS_WITH_ZLIB OFF)
set(LWS_WITHOUT_CLIENT ON)
set(LWS_WITHOUT_TESTAPPS ON)
set(LWS_WITHOUT_EXTENSIONS ON)
set(LWS_WITH_PLUGINS OFF)
set(LWS_MBED3 ON)
# this implies no pthreads in the lib
set(LWS_MAX_SMP 1)
endif()
if (LWS_WITH_ESP8266)
set(LWS_WITH_SHARED OFF)
set(LWS_WITH_SSL OFF)
@ -158,29 +164,11 @@ if (LWS_WITH_ESP8266)
set(LWS_WITHOUT_TESTAPPS ON)
set(LWS_WITHOUT_EXTENSIONS ON)
set(LWS_WITH_PLUGINS OFF)
set(LWS_WITH_RANGES OFF)
# this implies no pthreads in the lib
set(LWS_MAX_SMP 1)
set(LWS_HAVE_MALLOC 1)
set(LWS_HAVE_REALLOC 1)
set(LWS_HAVE_GETIFADDRS 1)
set(LWS_WITH_ZIP_FOPS 0)
endif()
if (LWS_WITH_ESP32)
set(LWS_WITH_SHARED OFF)
set(LWS_WITH_SSL ON)
# set(LWS_WITHOUT_CLIENT ON)
set(LWS_WITHOUT_TESTAPPS ON)
set(LWS_WITHOUT_EXTENSIONS ON)
set(LWS_WITH_PLUGINS OFF)
set(LWS_WITH_RANGES ON)
# this implies no pthreads in the lib
set(LWS_MAX_SMP 1)
set(LWS_HAVE_MALLOC 1)
set(LWS_HAVE_REALLOC 1)
set(LWS_HAVE_GETIFADDRS 1)
set(LWS_WITH_ZIP_FOPS 1)
endif()
@ -241,8 +229,6 @@ set(LWS_LIBUV_LIBRARIES CACHE PATH "Path to the libuv library")
set(LWS_LIBUV_INCLUDE_DIRS CACHE PATH "Path to the libuv include directory")
set(LWS_SQLITE3_LIBRARIES CACHE PATH "Path to the sqlite3 library")
set(LWS_SQLITE3_INCLUDE_DIRS CACHE PATH "Path to the sqlite3 include directory")
set(LWS_LIBEVENT_INCLUDE_DIRS CACHE PATH "Path to the libevent include directory")
set(LWS_LIBEVENT_LIBRARIES CACHE PATH "Path to the libevent library")
if (NOT LWS_WITH_SSL)
@ -252,9 +238,7 @@ endif()
if (LWS_WITH_SSL AND NOT LWS_USE_WOLFSSL)
if ("${LWS_OPENSSL_LIBRARIES}" STREQUAL "" OR "${LWS_OPENSSL_INCLUDE_DIRS}" STREQUAL "")
else()
if (NOT LWS_WITH_ESP32)
set(OPENSSL_LIBRARIES ${LWS_OPENSSL_LIBRARIES})
endif()
set(OPENSSL_LIBRARIES ${LWS_OPENSSL_LIBRARIES})
set(OPENSSL_INCLUDE_DIRS ${LWS_OPENSSL_INCLUDE_DIRS})
set(OPENSSL_FOUND 1)
endif()
@ -280,6 +264,19 @@ if (LWS_WITH_SSL AND LWS_USE_WOLFSSL)
endif()
endif()
if (LWS_WITH_SSL AND LWS_USE_MBEDTLS)
if ("${LWS_MBEDTLS_LIBRARIES}" STREQUAL "" OR "${LWS_MBEDTLS_INCLUDE_DIRS}" STREQUAL "")
if (NOT MBEDTLS_FOUND)
message(FATAL_ERROR "You must set LWS_MBEDTLS_LIBRARIES and LWS_MBEDTLS_INCLUDE_DIRS when LWS_USE_MBEDTLS is turned on.")
endif()
else()
set(MBEDTLS_LIBRARIES ${LWS_MBEDTLS_LIBRARIES})
set(MBEDTLS_INCLUDE_DIRS ${LWS_MBEDTLS_INCLUDE_DIRS})
set(MBEDTLS_FOUND 1)
endif()
set(USE_MBEDTLS 1)
endif()
if (LWS_WITH_ZLIB AND NOT LWS_USE_BUNDLED_ZLIB)
if ("${LWS_ZLIB_LIBRARIES}" STREQUAL "" OR "${LWS_ZLIB_INCLUDE_DIRS}" STREQUAL "")
else()
@ -307,15 +304,6 @@ if (LWS_WITH_LIBUV)
endif()
endif()
if (LWS_WITH_LIBEVENT)
if ("${LWS_LIBEVENT_LIBRARIES}" STREQUAL "" OR "${LWS_LIBEVENT_INCLUDE_DIRS}" STREQUAL "")
else()
set(LIBEVENT_LIBRARIES ${LWS_LIBEVENT_LIBRARIES})
set(LIBEVENT_INCLUDE_DIRS ${LWS_LIBEVENT_INCLUDE_DIRS})
set(LIBEVENT_FOUND 1)
endif()
endif()
if (LWS_WITH_SQLITE3)
if ("${LWS_SQLITE3_LIBRARIES}" STREQUAL "" OR "${LWS_SQLITE3_INCLUDE_DIRS}" STREQUAL "")
else()
@ -326,14 +314,19 @@ if (LWS_WITH_SQLITE3)
endif()
# FIXME: This must be runtime-only option.
# The base dir where the test-apps look for the SSL certs.
set(LWS_OPENSSL_CLIENT_CERTS ../share CACHE PATH "Server SSL certificate directory")
if (WIN32)
set(LWS_OPENSSL_CLIENT_CERTS . CACHE PATH "Client SSL certificate directory")
if (LWS_UNIX_SOCK)
if (LWS_IPV6)
set(LWS_IPV6 OFF)
message(WARNING "IPv6 does not currently work on Windows!")
endif()
if (LWS_UNIX_SOCK)
set(LWS_UNIX_SOCK OFF)
message(WARNING "Windows does not support UNIX domain sockets")
message(WARNING "Windows does not support UNIX domain sockets")
endif()
else()
set(LWS_OPENSSL_CLIENT_CERTS /etc/pki/tls/certs/ CACHE PATH "Client SSL certificate directory")
@ -375,10 +368,6 @@ if (LWS_WITH_LIBUV)
set(LWS_USE_LIBUV 1)
endif()
if (LWS_WITH_LIBEVENT)
set(LWS_USE_LIBEVENT 1)
endif()
if (LWS_IPV6)
set(LWS_USE_IPV6 1)
endif()
@ -392,13 +381,16 @@ if (LWS_WITH_HTTP2)
endif()
if ("${LWS_MAX_SMP}" STREQUAL "")
set(LWS_MAX_SMP 1)
set(LWS_MAX_SMP 32)
endif()
if (LWS_WITH_ESP8266)
set(CMAKE_C_FLAGS "-nostdlib ${CMAKE_C_FLAGS}")
endif()
#if (LWS_MBED3)
# set(CMAKE_C_FLAGS "-D_DEBUG ${CMAKE_C_FLAGS}")
#endif()
if (MINGW)
set(LWS_MINGW_SUPPORT 1)
@ -470,9 +462,6 @@ CHECK_FUNCTION_EXISTS(snprintf LWS_HAVE_SNPRINTF)
CHECK_FUNCTION_EXISTS(_snprintf LWS_HAVE__SNPRINTF)
CHECK_FUNCTION_EXISTS(_vsnprintf LWS_HAVE__VSNPRINTF)
CHECK_FUNCTION_EXISTS(getloadavg LWS_HAVE_GETLOADAVG)
CHECK_FUNCTION_EXISTS(atoll LWS_HAVE_ATOLL)
CHECK_FUNCTION_EXISTS(_atoi64 LWS_HAVE__ATOI64)
CHECK_FUNCTION_EXISTS(_stat32i64 LWS_HAVE__STAT32I64)
if (NOT LWS_HAVE_GETIFADDRS)
if (LWS_WITHOUT_BUILTIN_GETIFADDRS)
@ -498,9 +487,6 @@ CHECK_INCLUDE_FILE(sys/stat.h LWS_HAVE_SYS_STAT_H)
CHECK_INCLUDE_FILE(sys/types.h LWS_HAVE_SYS_TYPES_H)
CHECK_INCLUDE_FILE(unistd.h LWS_HAVE_UNISTD_H)
CHECK_INCLUDE_FILE(vfork.h LWS_HAVE_VFORK_H)
CHECK_INCLUDE_FILE(sys/capability.h LWS_HAVE_SYS_CAPABILITY_H)
CHECK_LIBRARY_EXISTS(cap cap_set_flag "" LWS_HAVE_LIBCAP)
if (LWS_WITH_LIBUV)
CHECK_INCLUDE_FILE(uv-version.h LWS_HAVE_UV_VERSION_H)
@ -517,12 +503,6 @@ set(LWS_HAVE_WORKING_VFORK LWS_HAVE_VFORK)
CHECK_INCLUDE_FILES("stdlib.h;stdarg.h;string.h;float.h" STDC_HEADERS)
CHECK_C_SOURCE_COMPILES("#include <stdint.h>
int main(void) {
intptr_t test = 1;
return 0;
}" LWS_HAS_INTPTR_T)
# These don't work Cross...
#CHECK_TYPE_SIZE(pid_t PID_T_SIZE)
#CHECK_TYPE_SIZE(size_t SIZE_T_SIZE)
@ -611,23 +591,17 @@ if (WIN32)
list(APPEND SOURCES
lib/lws-plat-win.c)
else()
if (LWS_WITH_ESP8266)
if (LWS_MBED3)
list(APPEND SOURCES
lib/lws-plat-esp8266.c)
lib/lws-plat-mbed3.cpp
lib/lws-plat-mbed3.c)
else()
if (LWS_PLAT_OPTEE)
if (LWS_WITH_ESP8266)
list(APPEND SOURCES
lib/lws-plat-optee.c)
lib/lws-plat-esp8266.c)
else()
if (LWS_WITH_ESP32)
list(APPEND SOURCES
lib/lws-plat-esp32.c
lib/romfs.c)
else()
list(APPEND SOURCES
lib/lws-plat-unix.c)
endif()
list(APPEND SOURCES
lib/lws-plat-unix.c)
endif()
endif()
endif()
@ -661,11 +635,6 @@ if (LWS_WITH_LIBUV)
lib/libuv.c)
endif()
if (LWS_WITH_LIBEVENT)
list(APPEND SOURCES
lib/libevent.c)
endif()
if (LWS_WITH_LEJP)
list(APPEND SOURCES
lib/lejp.c)
@ -683,20 +652,6 @@ if (LWS_WITH_SMTP)
lib/smtp.c)
endif()
if (LWS_WITH_RANGES)
list(APPEND SOURCES
lib/ranges.c)
endif()
if (LWS_WITH_ZIP_FOPS)
if (LWS_WITH_ZLIB)
list(APPEND SOURCES
lib/fops-zip.c)
else()
message(FATAL_ERROR "Pre-zipped file support (LWS_WITH_ZIP_FOPS) requires ZLIB (LWS_WITH_ZLIB)")
endif()
endif()
# Add helper files for Windows.
if (WIN32)
set(WIN32_HELPERS_PATH win32port/win32helpers)
@ -741,7 +696,7 @@ if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR (CMAKE_C_COMPILER_ID
endif ()
if ((CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) AND NOT LWS_WITHOUT_TESTAPPS)
if (UNIX AND LWS_MAX_SMP GREATER 1)
if (UNIX)
# jeez clang understands -pthread but dies if he sees it at link time!
# http://stackoverflow.com/questions/2391194/what-is-gs-pthread-equiv-in-clang
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread" )
@ -779,17 +734,6 @@ if (LWS_WITH_STATIC)
PROPERTIES
OUTPUT_NAME websockets_static)
endif()
add_custom_command(
TARGET websockets
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/lib/libwebsockets.h
${CMAKE_CURRENT_BINARY_DIR}/include/libwebsockets.h
)
add_custom_command(
TARGET websockets
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/lws_config.h
${CMAKE_CURRENT_BINARY_DIR}/include/lws_config.h
)
endif()
if (LWS_WITH_SHARED)
@ -817,19 +761,6 @@ if (LWS_WITH_SHARED)
if (APPLE)
set_property(TARGET websockets_shared PROPERTY MACOSX_RPATH YES)
endif()
add_custom_command(
TARGET websockets_shared
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/lib/libwebsockets.h
${CMAKE_CURRENT_BINARY_DIR}/include/libwebsockets.h
)
add_custom_command(
TARGET websockets_shared
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/lws_config.h
${CMAKE_CURRENT_BINARY_DIR}/include/lws_config.h
)
endif()
# Set the so version of the lib.
@ -923,23 +854,17 @@ if (LWS_WITH_SSL)
endif()
if (NOT chose_ssl)
if (NOT OPENSSL_FOUND AND NOT LWS_USE_BORINGSSL)
if (NOT OPENSSL_FOUND)
# TODO: Add support for STATIC also.
if (NOT LWS_WITH_ESP32)
find_package(OpenSSL REQUIRED)
endif()
set(OPENSSL_INCLUDE_DIRS "${OPENSSL_INCLUDE_DIR}")
endif()
message("OpenSSL include dir: ${OPENSSL_INCLUDE_DIRS}")
if (NOT LWS_WITH_ESP32)
message("OpenSSL libraries: ${OPENSSL_LIBRARIES}")
endif()
message("OpenSSL libraries: ${OPENSSL_LIBRARIES}")
include_directories("${OPENSSL_INCLUDE_DIRS}")
if (NOT LWS_WITH_ESP32)
list(APPEND LIB_LIST ${OPENSSL_LIBRARIES})
endif()
list(APPEND LIB_LIST ${OPENSSL_LIBRARIES})
# older (0.98) Openssl lacks this
set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIRS})
@ -980,20 +905,6 @@ if (LWS_WITH_LIBUV)
list(APPEND LIB_LIST ${LIBUV_LIBRARIES})
endif()
if (LWS_WITH_LIBEVENT)
if (NOT LIBEVENT_FOUND)
find_path(LIBEVENT_INCLUDE_DIRS NAMES event2/event.h)
find_library(LIBEVENT_LIBRARIES NAMES event)
if(LIBEVENT_INCLUDE_DIRS AND LIBEVENT_LIBRARIES)
set(LIBEVENT_FOUND 1)
endif()
endif()
message("libevent include dir: ${LIBEVENT_INCLUDE_DIRS}")
message("libevent libraries: ${LIBEVENT_LIBRARIES}")
include_directories("${LIBEVENT_INCLUDE_DIRS}")
list(APPEND LIB_LIST ${LIBEVENT_LIBRARIES})
endif(LWS_WITH_LIBEVENT)
if (LWS_WITH_SQLITE3)
if (NOT SQLITE3_FOUND)
find_path(SQLITE3_INCLUDE_DIRS NAMES sqlite3.h)
@ -1021,19 +932,13 @@ endif()
if (WINCE)
list(APPEND LIB_LIST ws2.lib)
elseif (WIN32)
list(APPEND LIB_LIST ws2_32.lib userenv.lib psapi.lib iphlpapi.lib)
list(APPEND LIB_LIST ws2_32.lib)
endif()
if (UNIX)
list(APPEND LIB_LIST m)
endif()
if (LWS_HAVE_LIBCAP)
list(APPEND LIB_LIST cap )
endif()
# Setup the linking for all libs.
foreach (lib ${LWS_LIBRARIES})
target_link_libraries(${lib} ${LIB_LIST})
@ -1042,14 +947,9 @@ endforeach()
set (temp ${CMAKE_REQUIRED_LIBRARIES})
set(CMAKE_REQUIRED_LIBRARIES ${LIB_LIST})
CHECK_FUNCTION_EXISTS(SSL_CTX_set1_param LWS_HAVE_SSL_CTX_set1_param)
CHECK_FUNCTION_EXISTS(SSL_set_info_callback LWS_HAVE_SSL_SET_INFO_CALLBACK)
CHECK_FUNCTION_EXISTS(X509_VERIFY_PARAM_set1_host LWS_HAVE_X509_VERIFY_PARAM_set1_host)
if (LWS_WITH_ESP32)
set(LWS_HAVE_TLS_CLIENT_METHOD 1)
else()
CHECK_FUNCTION_EXISTS(TLS_client_method LWS_HAVE_TLS_CLIENT_METHOD)
CHECK_FUNCTION_EXISTS(TLSv1_2_client_method LWS_HAVE_TLSV1_2_CLIENT_METHOD)
endif()
set(CMAKE_REQUIRED_LIBRARIES ${temp})
# Generate the lws_config.h that includes all the public compilation settings.
configure_file(
@ -1061,94 +961,6 @@ configure_file(
"${PROJECT_SOURCE_DIR}/lws_config_private.h.in"
"${PROJECT_BINARY_DIR}/lws_config_private.h")
# Generate self-signed SSL certs for the test-server.
if (LWS_WITH_SSL AND NOT LWS_USE_WOLFSSL)
message("Searching for OpenSSL executable and dlls")
find_package(OpenSSLbins)
message("OpenSSL executable: ${OPENSSL_EXECUTABLE}")
if (OPENSSL_EXECUTABLE MATCHES "^$")
set(OPENSSL_EXECUTABLE openssl)
endif()
if (NOT OPENSSL_EXECUTABLE)
set(OPENSSL_EXECUTABLE openssl)
endif()
endif()
set(GENCERTS 0)
if (LWS_WITH_SSL AND OPENSSL_EXECUTABLE AND NOT LWS_WITHOUT_TEST_SERVER)
set(GENCERTS 1)
endif()
if (LWS_WITH_ESP32)
set(GENCERTS 1)
endif()
message(" GENCERTS = ${GENCERTS}")
if (GENCERTS)
message("Generating SSL Certificates for the test-server...")
set(TEST_SERVER_SSL_KEY "${PROJECT_BINARY_DIR}/libwebsockets-test-server.key.pem")
set(TEST_SERVER_SSL_CERT "${PROJECT_BINARY_DIR}/libwebsockets-test-server.pem")
if (WIN32)
if (MINGW)
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}\"")
execute_process(
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}"
RESULT_VARIABLE OPENSSL_RETURN_CODE)
else()
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.
file(TO_NATIVE_PATH "${PROJECT_BINARY_DIR}/openssl_input.txt" 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}\"")
execute_process(
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}"
RESULT_VARIABLE OPENSSL_RETURN_CODE
OUTPUT_QUIET ERROR_QUIET)
message("\n")
endif()
if (OPENSSL_RETURN_CODE)
message(WARNING "!!! Failed to generate SSL certificate for Test Server using cmd.exe !!!:\nOpenSSL return code = ${OPENSSL_RETURN_CODE}")
else()
message("SUCCSESFULLY generated SSL certificate")
endif()
else()
# Unix.
execute_process(
COMMAND printf "GB\\nErewhon\\nAll around\\nlibwebsockets-test\\n\\nlocalhost\\nnone@invalid.org\\n"
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
# OUTPUT_QUIET ERROR_QUIET
)
if (OPENSSL_RETURN_CODE)
message(WARNING "!!! Failed to generate SSL certificate for Test Server!!!:\nOpenSSL return code = ${OPENSSL_RETURN_CODE}")
else()
message("SUCCESSFULLY generated SSL certificate")
endif()
endif()
list(APPEND TEST_SERVER_DATA
"${TEST_SERVER_SSL_KEY}"
"${TEST_SERVER_SSL_CERT}")
endif()
#
@ -1229,6 +1041,12 @@ if (NOT LWS_WITHOUT_TESTAPPS)
list(APPEND TEST_APP_LIST ${TEST_NAME})
endmacro()
if (LWS_WITH_SSL AND NOT LWS_USE_WOLFSSL)
message("Searching for OpenSSL executable and dlls")
find_package(OpenSSLbins)
message("OpenSSL executable: ${OPENSSL_EXECUTABLE}")
endif()
if (UNIX AND LWS_WITH_PLUGINS)
set(CMAKE_C_FLAGS "-fPIC ${CMAKE_C_FLAGS}")
if(NOT(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD"))
@ -1236,9 +1054,6 @@ if (NOT LWS_WITHOUT_TESTAPPS)
endif()
endif()
if (NOT LWS_WITHOUT_SERVER)
#
# test-server
@ -1247,9 +1062,9 @@ if (NOT LWS_WITHOUT_TESTAPPS)
create_test_app(test-server "test-server/test-server.c"
"test-server/test-server-http.c"
"test-server/test-server-dumb-increment.c"
""
""
"")
"test-server/test-server-mirror.c"
"test-server/test-server-status.c"
"test-server/test-server-echogen.c")
if (UNIX)
create_test_app(test-fuzxy "test-server/fuzxy.c"
""
@ -1258,14 +1073,14 @@ if (NOT LWS_WITHOUT_TESTAPPS)
""
"")
endif()
if (UNIX AND NOT ((CMAKE_C_COMPILER_ID MATCHES "Clang") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang")) AND LWS_MAX_SMP GREATER 1)
if (UNIX AND NOT ((CMAKE_C_COMPILER_ID MATCHES "Clang") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang")))
create_test_app(test-server-pthreads
"test-server/test-server-pthreads.c"
"test-server/test-server-http.c"
"test-server/test-server-dumb-increment.c"
""
""
"")
"test-server/test-server-mirror.c"
"test-server/test-server-status.c"
"test-server/test-server-echogen.c")
endif()
if (NOT ((CMAKE_C_COMPILER_ID MATCHES "Clang") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
AND LWS_WITH_LIBEV)
@ -1273,31 +1088,19 @@ if (NOT LWS_WITHOUT_TESTAPPS)
"test-server/test-server-libev.c"
"test-server/test-server-http.c"
"test-server/test-server-dumb-increment.c"
""
""
"")
# libev generates a big mess of warnings with gcc, maintainers blame gcc
set_source_files_properties( test-server/test-server-libev.c PROPERTIES COMPILE_FLAGS "-Wno-error" )
"test-server/test-server-mirror.c"
"test-server/test-server-status.c"
"test-server/test-server-echogen.c")
endif()
if (NOT ((CMAKE_C_COMPILER_ID MATCHES "Clang") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
AND LWS_WITH_LIBUV)
create_test_app(test-server-libuv
"test-server/test-server-libuv.c"
"test-server/test-server-http.c"
""
""
""
"")
endif()
if (NOT ((CMAKE_C_COMPILER_ID MATCHES "Clang") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
AND LWS_WITH_LIBEVENT)
create_test_app(test-server-libevent
"test-server/test-server-libevent.c"
"test-server/test-server-http.c"
"test-server/test-server-dumb-increment.c"
""
""
"")
"test-server/test-server-mirror.c"
"test-server/test-server-status.c"
"test-server/test-server-echogen.c")
endif()
endif()
@ -1308,9 +1111,9 @@ if (NOT LWS_WITHOUT_TESTAPPS)
create_test_app(test-server-extpoll "test-server/test-server.c"
"test-server/test-server-http.c"
"test-server/test-server-dumb-increment.c"
""
""
"")
"test-server/test-server-mirror.c"
"test-server/test-server-status.c"
"test-server/test-server-echogen.c")
# Set defines for this executable only.
set_property(
TARGET test-server-extpoll
@ -1343,11 +1146,73 @@ if (NOT LWS_WITHOUT_TESTAPPS)
set(TEST_SERVER_DATA
"${PROJECT_SOURCE_DIR}/test-server/favicon.ico"
"${PROJECT_SOURCE_DIR}/test-server/leaf.jpg"
"${PROJECT_SOURCE_DIR}/test-server/candide.zip"
"${PROJECT_SOURCE_DIR}/test-server/libwebsockets.org-logo.png"
"${PROJECT_SOURCE_DIR}/test-server/lws-common.js"
"${PROJECT_SOURCE_DIR}/test-server/test.html")
# Generate self-signed SSL certs for the test-server.
if (LWS_WITH_SSL AND OPENSSL_EXECUTABLE AND NOT LWS_WITHOUT_TEST_SERVER)
message("Generating SSL Certificates for the test-server...")
set(TEST_SERVER_SSL_KEY "${PROJECT_BINARY_DIR}/libwebsockets-test-server.key.pem")
set(TEST_SERVER_SSL_CERT "${PROJECT_BINARY_DIR}/libwebsockets-test-server.pem")
if (WIN32)
if (MINGW)
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}\"")
execute_process(
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}"
RESULT_VARIABLE OPENSSL_RETURN_CODE)
else()
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.
file(TO_NATIVE_PATH "${PROJECT_BINARY_DIR}/openssl_input.txt" 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}\"")
execute_process(
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}"
RESULT_VARIABLE OPENSSL_RETURN_CODE
OUTPUT_QUIET ERROR_QUIET)
message("\n")
endif()
if (OPENSSL_RETURN_CODE)
message(WARNING "!!! Failed to generate SSL certificate for Test Server using cmd.exe !!!:\nOpenSSL return code = ${OPENSSL_RETURN_CODE}")
else()
message("SUCCSESFULLY generated SSL certificate")
endif()
else()
# Unix.
execute_process(
COMMAND printf "GB\\nErewhon\\nAll around\\nlibwebsockets-test\\n\\nlocalhost\\nnone@invalid.org\\n"
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
OUTPUT_QUIET ERROR_QUIET)
if (OPENSSL_RETURN_CODE)
message(WARNING "!!! Failed to generate SSL certificate for Test Server!!!:\nOpenSSL return code = ${OPENSSL_RETURN_CODE}")
else()
message("SUCCESSFULLY generated SSL certificate")
endif()
endif()
list(APPEND TEST_SERVER_DATA
"${TEST_SERVER_SSL_KEY}"
"${TEST_SERVER_SSL_CERT}")
endif()
add_custom_command(TARGET test-server
POST_BUILD
COMMAND "${CMAKE_COMMAND}" -E make_directory "$<TARGET_FILE_DIR:test-server>/../share/libwebsockets-test-server")
@ -1443,8 +1308,6 @@ if (NOT LWS_WITHOUT_TESTAPPS)
endmacro()
create_plugin(protocol_lws_meta
"plugins/protocol_lws_meta.c" "" "")
create_plugin(protocol_dumb_increment
"plugins/protocol_dumb_increment.c" "" "")
create_plugin(protocol_lws_mirror
@ -1455,10 +1318,6 @@ if (NOT LWS_WITHOUT_TESTAPPS)
"plugins/protocol_post_demo.c" "" "")
create_plugin(protocol_lws_table_dirlisting
"plugins/generic-table/protocol_table_dirlisting.c" "" "")
if (NOT WIN32)
create_plugin(protocol_lws_raw_test
"plugins/protocol_lws_raw_test.c" "" "")
endif()
if (LWS_WITH_SERVER_STATUS)
create_plugin(protocol_lws_server_status
@ -1569,26 +1428,6 @@ Cflags: -I\${includedir}"
install(FILES "${PROJECT_BINARY_DIR}/libwebsockets.pc"
DESTINATION lib${LIB_SUFFIX}/pkgconfig)
file(WRITE "${PROJECT_BINARY_DIR}/libwebsockets_static.pc"
"prefix=\"${CMAKE_INSTALL_PREFIX}\"
exec_prefix=\${prefix}
libdir=\${exec_prefix}/lib${LIB_SUFFIX}
includedir=\${prefix}/include
Name: libwebsockets_static
Description: Websockets server and client static library
Version: ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}
Libs: -L\${libdir} -lwebsockets_static
Libs.private:
Cflags: -I\${includedir}"
)
install(FILES "${PROJECT_BINARY_DIR}/libwebsockets_static.pc"
DESTINATION lib${LIB_SUFFIX}/pkgconfig)
endif(UNIX)
#
@ -1658,8 +1497,8 @@ set(CPACK_COMPONENT_LIBRARIES_DISPLAY_NAME "Libraries")
set(CPACK_COMPONENT_DEV_DISPLAY_NAME "Development files")
# Install test apps.
if (NOT LWS_WITHOUT_TESTAPPS)
install(TARGETS ${TEST_APP_LIST}
if (NOT LWS_WITHOUT_TESTAPPS AND NOT LWS_WITHOUT_CLIENT)
install(TARGETS test-client ${TEST_APP_LIST}
RUNTIME DESTINATION ${LWS_INSTALL_EXAMPLES_DIR}
COMPONENT examples)
set(CPACK_COMPONENT_EXAMPLES_DISPLAY_NAME "Example files")
@ -1675,10 +1514,6 @@ endif()
if (NOT LWS_WITHOUT_TESTAPPS AND NOT LWS_WITHOUT_SERVER)
install(FILES ${TEST_SERVER_DATA}
DESTINATION share/libwebsockets-test-server
COMPONENT examples)
install(FILES "${PROJECT_SOURCE_DIR}/test-server/private/index.html"
DESTINATION share/libwebsockets-test-server/private
COMPONENT examples)
if (LWS_WITH_CGI)
set(CGI_TEST_SCRIPT "${PROJECT_SOURCE_DIR}/test-server/lws-cgi-test.sh")
@ -1784,10 +1619,10 @@ message(" LWS_WITH_LATENCY = ${LWS_WITH_LATENCY}")
message(" LWS_WITHOUT_DAEMONIZE = ${LWS_WITHOUT_DAEMONIZE}")
message(" LWS_USE_LIBEV = ${LWS_USE_LIBEV}")
message(" LWS_USE_LIBUV = ${LWS_USE_LIBUV}")
message(" LWS_USE_LIBEVENT = ${LWS_USE_LIBEVENT}")
message(" LWS_IPV6 = ${LWS_IPV6}")
message(" LWS_UNIX_SOCK = ${LWS_UNIX_SOCK}")
message(" LWS_WITH_HTTP2 = ${LWS_WITH_HTTP2}")
message(" LWS_MBED3 = ${LWS_MBED3}")
message(" LWS_SSL_SERVER_WITH_ECDH_CERT = ${LWS_SSL_SERVER_WITH_ECDH_CERT}")
message(" LWS_MAX_SMP = ${LWS_MAX_SMP}")
message(" LWS_WITH_CGI = ${LWS_WITH_CGI}")
@ -1803,19 +1638,7 @@ message(" LWS_WITH_LEJP_CONF = ${LWS_WITH_LEJP_CONF}")
message(" LWS_WITH_SMTP = ${LWS_WITH_SMTP}")
message(" LWS_WITH_GENERIC_SESSIONS = ${LWS_WITH_GENERIC_SESSIONS}")
message(" LWS_STATIC_PIC = ${LWS_STATIC_PIC}")
message(" LWS_WITH_RANGES = ${LWS_WITH_RANGES}")
message(" LWS_PLAT_OPTEE = ${LWS_PLAT_OPTEE}")
message(" LWS_WITH_ESP32 = ${LWS_WITH_ESP32}")
message(" LWS_WITH_ZIP_FOPS = ${LWS_WITH_ZIP_FOPS}")
message(" LWS_AVOID_SIGPIPE_IGN = ${LWS_AVOID_SIGPIPE_IGN}")
message(" LWS_WITH_STATS = ${LWS_WITH_STATS}")
message(" LWS_WITH_SOCKS5 = ${LWS_WITH_SOCKS5}")
message(" LWS_HAVE_SYS_CAPABILITY_H = ${LWS_HAVE_SYS_CAPABILITY_H}")
message(" LWS_HAVE_LIBCAP = ${LWS_HAVE_LIBCAP}")
message(" LWS_HAVE_ATOLL = ${LWS_HAVE_ATOLL}")
message(" LWS_HAVE__ATOI64 = ${LWS_HAVE__ATOI64}")
message(" LWS_HAVE_STAT32I64 = ${LWS_HAVE_STAT32I64}")
message(" LWS_HAS_INTPTR_T = ${LWS_HAS_INTPTR_T}")
message("---------------------------------------------------------------------")

32
Kconfig
View file

@ -1,32 +0,0 @@
menu "Libwebsockets"
config LWS_MODEL_NAME
string "Model name of device firmware is for"
default "lws"
config LWS_IS_FACTORY_APPLICATION
bool "Is this application is designed for the FACTORY flash slot"
default "n"
config LWS_OTA_SERVER_FQDN
depends on LWS_IS_FACTORY_APPLICATION
string "Domain name of OTA update server, eg, warmcat.com"
default ""
config LWS_OTA_SERVER_BASE_URL
depends on LWS_IS_FACTORY_APPLICATION
string "Base URL on OTA update server, eg, /esp32-ota (model is added)"
default "/esp32-ota"
config LWS_OTA_SERVER_UPLOAD_USER
depends on LWS_IS_FACTORY_APPLICATION
string "User to scp to upload server with"
default "root"
config LWS_OTA_SERVER_UPLOAD_PATH
depends on LWS_IS_FACTORY_APPLICATION
string "Path served in upload server (eg, \"/var/www/libwebsockets.org\""
default "/var/www/libwebsockets.org"
endmenu

View file

@ -13,7 +13,7 @@ create elaborate clean scripts to get a clean source tree, instead you
simply remove your build directory.
Libwebsockets has been tested to build successfully on the following platforms
with SSL support (for OpenSSL/wolfSSL/BoringSSL):
with SSL support (both OpenSSL/wolfSSL):
- Windows (Visual Studio)
- Windows (MinGW)
@ -122,25 +122,12 @@ and libnsl, and only builds in 64bit mode.
$ make
```
@section lcap Linux Capabilities
On Linux, lws now lets you retain selected root capabilities when dropping
privileges. If libcap-dev or similar package is installed providing
sys/capabilities.h, and libcap or similar package is installed providing
libcap.so, CMake will enable the capability features.
The context creation info struct .caps[] and .count_caps members can then
be set by user code to enable selected root capabilities to survive the
transition to running under an unprivileged user.
@section cmq Quirk of cmake
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
cmake from scratch.
deleting build/CMakeCache.txt may be enough.
@section cmw Building on Windows (Visual Studio)
@ -189,7 +176,7 @@ deleting build/CMakeCache.txt may be enough.
2. Fix up MinGW headers
a) If still necessary, sdd the following lines to C:\MinGW\include\winsock2.h:
a) Add the following lines to C:\MinGW\include\winsock2.h:
```
#if(_WIN32_WINNT >= 0x0600)
@ -205,16 +192,9 @@ deleting build/CMakeCache.txt may be enough.
#endif // (_WIN32_WINNT >= 0x0600)
```
Update crtdefs.h line 47 to say:
```
typedef __int64 ssize_t;
```
b) Create C:\MinGW\include\mstcpip.h and copy and paste the content from following link into it:
https://github.com/Alexpux/mingw-w64/blob/master/mingw-w64-headers/include/mstcpip.h
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
@ -251,19 +231,51 @@ deleting build/CMakeCache.txt may be enough.
$ make install
```
@section optee Building for OP-TEE
@section mbed3 Building on mbed3
OP-TEE is a "Secure World" Trusted Execution Environment.
MBED3 is a non-posix embedded OS targeted on Cortex M class chips.
Although lws is only part of the necessary picture to have an https-enabled
TA, it does support OP-TEE as a platform and if you provide the other
pieces, does work very well.
https://www.mbed.com/
Select it in cmake with `-DLWS_PLAT_OPTEE=1`
It's quite unlike any other Posixy platform since the OS is linked statically
in with lws to form one binary.
At the minute server-only is supported and due to bugs in mbed3 network support,
the port is of alpha quality. However it can serve the test html, favicon.ico
and logo png and may be able to make ws connections. The binary for that
including the OS, test app, lws and all the assets is only 117KB.
0) Today mbed3 only properly works on FRDM K64F $35 Freescale Dev Board with
1MB Flash, 256KB SRAM and Ethernet.
http://www.freescale.com/products/arm-processors/kinetis-cortex-m/k-series/k6x-ethernet-mcus/freescale-freedom-development-platform-for-kinetis-k64-k63-and-k24-mcus:FRDM-K64F
1) Get a working mbed3 environment with arm-none-eabi-cs toolchain
(available in Fedora, Ubuntu and other distros)
2) Confirm you can build things using yotta by following the getting started guide here
https://docs.mbed.com/docs/getting-started-mbed-os/en/latest/
3)
git clone https://github.com/warmcat/lws-test-server
and cd into it
4) mkdir -p yotta_modules ; cd yotta_modules
5) git clone https://github.com/warmcat/libwebsockets ; mv libwebsockets websockets ; cd ..
6) yotta target frdm-k64f-gcc
7) yotta install
8) yotta build
@section cmco Setting compile options
To set compile time flags you can either use one of the CMake gui applications
or do it via the command line.
@ -323,26 +335,6 @@ this to work.
**NOTE**: On windows use the .lib file extension for `LWS_CYASSL_LIBRARIES` instead.
@section esp32 Building for ESP32
Step 1, get ESP-IDF with lws integrated as a component
```
$ git clone --int --recursive https://github.com/lws-team/lws-esp-idf
```
Step 2: Get Application including the test plugins
```
$ git clone https://github.com/lws-team/lws-esp32
```
Set your IDF_PATH to point to the esp-idf you downloaded in 1)
There's docs for how to build the lws-esp32 test app and reproduce it in the README.md here
https://github.com/lws-team/lws-esp32/blob/master/README.md
@section extplugins Building plugins outside of lws itself

View file

@ -120,34 +120,6 @@ the send pipe on the connection is choked but no ack will ever come, so the
dead connection will never become writeable. To cover that, you can use TCP
keepalives (see later in this document) or pings.
@section gzip Serving from inside a zip file
Lws now supports serving gzipped files from inside a zip container. Thanks to
Per Bothner for contributing the code.
This has the advtantage that if the client can accept GZIP encoding, lws can
simply send the gzip-compressed file from inside the zip file with no further
processing, saving time and bandwidth.
In the case the client can't understand gzip compression, lws automatically
decompressed the file and sends it normally.
Clients with limited storage and RAM will find this useful; the memory needed
for the inflate case is constrained so that only one input buffer at a time
is ever in memory.
To use this feature, ensure LWS_WITH_ZIP_FOPS is enabled at CMake (it is by
default).
`libwebsockets-test-server-v2.0` includes a mount using this technology
already, run that test server and navigate to http://localhost:7681/ziptest/candide.html
This will serve the book Candide in html, together with two jpgs, all from
inside a .zip file in /usr/[local/]share-libwebsockets-test-server/candide.zip
Usage is otherwise automatic, if you arrange a mount that points to the zipfile,
eg, "/ziptest" -> "mypath/test.zip", then URLs like `/ziptest/index.html` will be
servied from `index.html` inside `mypath/test.zip`
@section frags Fragmented messages
@ -375,187 +347,25 @@ and then can use helpers to also leverage these platform-independent
file handling apis
```
lws_fop_fd_t
`lws_plat_file_open`(struct lws_plat_file_ops *fops, const char *filename,
lws_fop_flags_t *flags)
int
`lws_plat_file_close`(lws_fop_fd_t fop_fd)
static inline lws_filefd_type
`lws_plat_file_open`(struct lws *wsi, const char *filename, unsigned long *filelen, int flags)
unsigned long
`lws_plat_file_seek_cur`(lws_fop_fd_t fop_fd, lws_fileofs_t offset)
static inline int
`lws_plat_file_close`(struct lws *wsi, lws_filefd_type fd)
int
`lws_plat_file_read`(lws_fop_fd_t fop_fd, lws_filepos_t *amount,
uint8_t *buf, lws_filepos_t len)
static inline unsigned long
`lws_plat_file_seek_cur`(struct lws *wsi, lws_filefd_type fd, long offset_from_cur_pos)
int
`lws_plat_file_write`(lws_fop_fd_t fop_fd, lws_filepos_t *amount,
uint8_t *buf, lws_filepos_t len )
static inline int
`lws_plat_file_read`(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
static inline int
`lws_plat_file_write`(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
```
Generic helpers are provided which provide access to generic fops information or
call through to the above fops
```
lws_filepos_t
lws_vfs_tell(lws_fop_fd_t fop_fd);
lws_filepos_t
lws_vfs_get_length(lws_fop_fd_t fop_fd);
uint32_t
lws_vfs_get_mod_time(lws_fop_fd_t fop_fd);
lws_fileofs_t
lws_vfs_file_seek_set(lws_fop_fd_t fop_fd, lws_fileofs_t offset);
lws_fileofs_t
lws_vfs_file_seek_end(lws_fop_fd_t fop_fd, lws_fileofs_t offset);
```
The user code can also override or subclass the file operations, to either
wrap or replace them. An example is shown in test server.
### Changes from v2.1 and before fops
There are several changes:
1) Pre-2.2 fops directly used platform file descriptors. Current fops returns and accepts a wrapper type lws_fop_fd_t which is a pointer to a malloc'd struct containing information specific to the filesystem implementation.
2) Pre-2.2 fops bound the fops to a wsi. This is completely removed, you just give a pointer to the fops struct that applies to this file when you open it. Afterwards, the operations in the fops just need the lws_fop_fd_t returned from the open.
3) Everything is wrapped in typedefs. See lws-plat-unix.c for examples of how to implement.
4) Position in the file, File Length, and a copy of Flags left after open are now generically held in the fop_fd.
VFS implementation must set and manage this generic information now. See the implementations in lws-plat-unix.c for
examples.
5) The file length is no longer set at a pointer provided by the open() fop. The api `lws_vfs_get_length()` is provided to
get the file length after open.
6) If your file namespace is virtual, ie, is not reachable by platform fops directly, you must set LWS_FOP_FLAG_VIRTUAL
on the flags during open.
7) There is an optional `mod_time` uint32_t member in the generic fop_fd. If you are able to set it during open, you
should indicate it by setting `LWS_FOP_FLAG_MOD_TIME_VALID` on the flags.
@section rawfd RAW file descriptor polling
LWS allows you to include generic platform file descriptors in the lws service / poll / event loop.
Open your fd normally and then
```
lws_sock_file_fd_type u;
u.filefd = your_open_file_fd;
if (!lws_adopt_descriptor_vhost(vhost, 0, u,
"protocol-name-to-bind-to",
optional_wsi_parent_or_NULL)) {
// failed
}
// OK
```
A wsi is created for the file fd that acts like other wsi, you will get these
callbacks on the named protocol
```
LWS_CALLBACK_RAW_ADOPT_FILE
LWS_CALLBACK_RAW_RX_FILE
LWS_CALLBACK_RAW_WRITEABLE_FILE
LWS_CALLBACK_RAW_CLOSE_FILE
```
starting with LWS_CALLBACK_RAW_ADOPT_FILE.
`protocol-lws-raw-test` plugin provides a method for testing this with
`libwebsockets-test-server-v2.0`:
The plugin creates a FIFO on your system called "/tmp/lws-test-raw"
You can feed it data through the FIFO like this
```
$ sudo sh -c "echo hello > /tmp/lws-test-raw"
```
This plugin simply prints the data. But it does it through the lws event
loop / service poll.
@section rawsrvsocket RAW server socket descriptor polling
You can also enable your vhost to accept RAW socket connections, in addition to
HTTP[s] and WS[s]. If the first bytes written on the connection are not a
valid HTTP method, then the connection switches to RAW mode.
This is disabled by default, you enable it by setting the `.options` flag
LWS_SERVER_OPTION_FALLBACK_TO_RAW when creating the vhost.
RAW mode socket connections receive the following callbacks
```
LWS_CALLBACK_RAW_ADOPT
LWS_CALLBACK_RAW_RX
LWS_CALLBACK_RAW_WRITEABLE
LWS_CALLBACK_RAW_CLOSE
```
You can control which protocol on your vhost handles these RAW mode
incoming connections by marking the selected protocol with a pvo `raw`, eg
```
"protocol-lws-raw-test": {
"status": "ok",
"raw": "1"
},
```
The "raw" pvo marks this protocol as being used for RAW connections.
`protocol-lws-raw-test` plugin provides a method for testing this with
`libwebsockets-test-server-v2.0`:
Run libwebsockets-test-server-v2.0 and connect to it by telnet, eg
```
$ telnet 127.0.0.1 7681
```
type something that isn't a valid HTTP method and enter, before the
connection times out. The connection will switch to RAW mode using this
protocol, and pass the unused rx as a raw RX callback.
The test protocol echos back what was typed on telnet to telnet.
@section rawclientsocket RAW client socket descriptor polling
You can now also open RAW socket connections in client mode.
Follow the usual method for creating a client connection, but set the
`info.method` to "RAW". When the connection is made, the wsi will be
converted to RAW mode and operate using the same callbacks as the
server RAW sockets described above.
The libwebsockets-test-client supports this using raw:// URLS. To
test, open a netcat listener in one window
```
$ nc -l 9999
```
and in another window, connect to it using the test client
```
$ libwebsockets-test-client raw://127.0.0.1:9999
```
The connection should succeed, and text typed in the netcat window (including a CRLF)
will be received in the client.
@section ecdh ECDH Support
ECDH Certs are now supported. Enable the CMake option
@ -568,32 +378,6 @@ ECDH Certs are now supported. Enable the CMake option
to build in support and select it at runtime.
@section sslinfo SSL info callbacks
OpenSSL allows you to receive callbacks for various events defined in a
bitmask in openssl/ssl.h. The events include stuff like TLS Alerts.
By default, lws doesn't register for these callbacks.
However if you set the info.ssl_info_event_mask to nonzero (ie, set some
of the bits in it like `SSL_CB_ALERT` at vhost creation time, then
connections to that vhost will call back using LWS_CALLBACK_SSL_INFO
for the wsi, and the `in` parameter will be pointing to a struct of
related args:
```
struct lws_ssl_info {
int where;
int ret;
};
```
The default callback handler in lws has a handler for LWS_CALLBACK_SSL_INFO
which prints the related information, You can test it using the switch
-S -s on `libwebsockets-test-server-v2.0`.
Returning nonzero from the callback will close the wsi.
@section smp SMP / Multithreaded service
SMP support is integrated into LWS without any internal threading. It's
@ -888,40 +672,6 @@ This allocation is only deleted / replaced when the connection accesses a
URL region with a different protocol (or the default protocols[0] if no
CALLBACK area matches it).
@section BINDTODEV SO_BIND_TO_DEVICE
The .bind_iface flag in the context / vhost creation struct lets you
declare that you want all traffic for listen and transport on that
vhost to be strictly bound to the network interface named in .iface.
This Linux-only feature requires SO_BIND_TO_DEVICE, which in turn
requires CAP_NET_RAW capability... root has this capability.
However this feature needs to apply the binding also to accepted
sockets during normal operation, which implies the server must run
the whole time as root.
You can avoid this by using the Linux capabilities feature to have
the unprivileged user inherit just the CAP_NET_RAW capability.
You can confirm this with the test server
```
$ sudo /usr/local/bin/libwebsockets-test-server -u agreen -i eno1 -k
```
The part that ensures the capability is inherited by the unprivileged
user is
```
#if defined(LWS_HAVE_SYS_CAPABILITY_H) && defined(LWS_HAVE_LIBCAP)
info.caps[0] = CAP_NET_RAW;
info.count_caps = 1;
#endif
```
@section dim Dimming webpage when connection lost
The lws test plugins' html provides useful feedback on the webpage about if it

View file

@ -1,23 +0,0 @@
ESP32 Support
=============
Lws provides a "factory" application
https://github.com/warmcat/lws-esp32-factory
and a test application which implements the generic lws server test apps
https://github.com/warmcat/lws-esp32-test-server-demos
The behaviours of the generic factory are are quite rich, and cover uploading SSL certs through factory and user configuration, AP selection and passphrase entry, and managing a switch to allow the user to force entry to user setup mode at boot subsequently.
The factory app comes with partitioning for a 1MB factory partition containing that app and data, and a single 2.9MB OTA partition containing the main app.
The factory app is able to do OTA updates for both the factory and OTA partition slots; updating the factory slot first writes the new image to the OTA slot and copies it into place at the next boot, after which the user can reload the OTA slot.
State|Image|AP SSID|Port|URL|Mode
---|---|---|---|---|---
Factory Reset or Uninitialized|Factory|AP: ESP_012345|80|http://192.168.4.1|factory.html - to set certificates and serial
User configuration|Factory|AP: config-model-serial|443|https://192.168.4.1|index.html - user set up his AP information
Operation|OTA|Station only|443|https://model-serial.local|OTA application

View file

@ -1,192 +0,0 @@
# lws-meta protocol
lws-meta is a lightweight ws subprotocol that accepts other ws connections
to the same server inside it and multiplexes their access to the connection.
```
Client Server
conn1: \ / :conn1
conn2: = mux ------ lws-meta ws protocol ----- mux = :conn2
conn3: / \ :conn3
```
You may have n client ws connections back to the server, but you now
only have one tcp connection (and one SSL wrapper if using SSL) instead
of n of those.
If you currently make multiple ws connections back to the server, so you
can have different protocols active in one webpage, this if for you.
- The subprotocol code for the connections inside a lws-meta connection
need zero changes from being a normal ws connection. It is unaware
it is inside an lws-meta parent connection.
- The traffic on the lws-meta connection is indistinguishable from
standard ws traffic, so intermediaries won't object to it
- The multiplexing is done in the protocol, **not by an extension**. So
it's compatible with all browsers.
- Javascript helper code is provided to very simply use lws-meta
protocol instead of direct connections. The lws test server has
been converted to use this by default.
# Converting your server
1) include the provided lws-meta plugin (plugins/protocl_lws_meta.c) as an
active protocol for your server. You can do that using runtime plugins, or
include the plugin sources into your server at build-time. The lws test
server uses the latter approach.
That's all you need to do on the server side.
# Converting your browser JS
1) import lws-common.js
2) Instantiate a parent lws-meta connection object
```
var lws_meta = new lws_meta_ws();
```
3) Connect the lws-meta object to your server
```
lws_meta.new_parent(get_appropriate_ws_url("?mirror=" + mirror_name));
```
4) Convert your actual ws connections to go via the lws_meta object
```
var my_ws = lws_meta.new_ws("", "dumb-increment-protocol");
```
The first arg is the URL path, the second arg is the ws protocol you want.
That's it. my_ws will get `onopen()`, `onmessage()` etc calls as before.
# lws-meta wire protocol
lws-meta works by adding some bytes at the start of a message indicating
which channel the message applies to.
Channel messages are atomic on the wire. The reason is if we tried to
intersperse other channel fragments between one channels message fragments,
an intermediary would observe violations of the ws framing rule about
having to start a message with TEXT or BINARY, and use only CONTINUATION
for the subsequent fragments. Eg
```
[ ch1 TEXT NOFIN ] [ ch2 BINARY FIN ] [ ch1 CONTINUATION FIN ]
```
is illegal to an observer that doesn't understand lws-meta headers in the
packet payloads. So to avoid this situation, only complete messages may
be sent from one subchannel in each direction at a time.
Consequently, only the first fragment of each message is modified to
have the extra two bytes identifying the subchannel it is aimed at, since
the rest of the message from the same subchannel is defined to follow.
If it makes latencies, modify the protocol sending large messages to
send smaller messages, so the transmission of messages from other channels
can be sent inbetween the smaller messages.
## lws-meta commands
1) CSTRING indicates a string terminated by 0x00 byte
2) Channel IDs are sent with 0x20 added to them, to guarantee valid UTF-8
### 0x41: RX: LWS_META_CMD_OPEN_SUBCHANNEL
- CSTRING: protocol name
- CSTRING: url
- CSTRING: cookie (7 bytes max)
Client is requesting to open a new channel with the given protocol name,
at the given url. The cookie (eg, channel name) is only used in
LWS_META_CMD_OPEN_RESULT, when the channel id is assigned, so it is
applied to the right channel.
### 0x42: TX: LWS_META_CMD_OPEN_RESULT
- CSTRING cookie
- BYTE channel id (0 indicates failed)
- CSTRING: selected protocol name
The server is informing the client of the results of a previous
open request. The cookie the client sent to identify the request
is returned along with a channel id to be used subsequently. If
the channel ID is 0 (after subtracting the transport offset of
0x20) then the open request has failed.
### 0x43: TX: LWS_META_CMD_CLOSE_NOTIFY
- BYTE channel id
- BYTE: payload length + 0x20
- BYTE: close code MSB
- BYTE: close code LSB
- PAYLOAD: payload (< 123 bytes)
Server notifies the client that a child has closed, for whatever reason.
### 0x44: RX: LWS_META_CMD_CLOSE_RQ
- BYTE: channel id
- BYTE: payload length + 0x20
- BYTE: close code MSB
- BYTE: close code LSB
- PAYLOAD: payload (< 123 bytes)
The client requests to close a child connection
### 0x45: TX: LWS_META_CMD_WRITE
- BYTE: channel id
Normal write of payload n from lws-meta perspective is actually
LWS_META_CMD_WRITE, channel id, then (n - 2) bytes of payload
The command only appears at the start of a message, continuations do
not have the command.
## Protocol Notes
- Once the subchannel is up, overhead is only +2 bytes per message
- Close reasons are supported in both directions
- Ping and Pong are only supported at the lws-meta level, using normal ws ping and pong packets.
- Only the final close of the tcp lws-meta connection itself goes out as
a normal ws close frame. Subchannels close is done in a normal TEXT
message using LWS_META_CMD_CLOSE_RQ and then the close packet payload.
This is so intermediaries do not mistake subchannel closures for the
tcp / ws link going down.
Messages that start with LWS_META_CMD_OPEN_SUBCHANNEL only contain those
commands but may contain any number of them for the whole duration of the
message. The lws-meta js support collects child open requests made before
the parent lws-meta connection is open, and dumps them all in a single
message when it does open.
Messages that start with LWS_META_CMD_OPEN_RESULT or LWS_META_CMD_CLOSE_NOTIFY
only contain those two commands, but they may contain any number of them
for the whole duration of the message.
# Current Implemention Limitations
- only server side is supported in lws. The client side JS for
a browser is supported.
- max number of child connections per parent at the moment is 8
- child connection URL paramter when opening the connection is
ignored
- there is no ah attached when the child connections are
established inside the lws-meta parent. So header access
functions will fail.

View file

@ -79,20 +79,6 @@ on port 7681, non-SSL is provided. To set it up
# sudo lwsws
```
@section lwsogo Other Global Options
- `reject-service-keywords` allows you to return an HTTP error code and message of your choice
if a keyword is found in the user agent
```
"reject-service-keywords": [{
"scumbot": "404 Not Found"
}]
```
- `timeout-secs` lets you set the global timeout for various network-related
operations in lws, in seconds. It defaults to 5.
@section lwswsv Lwsws Vhosts
One server can run many vhosts, where SSL is in use SNI is used to match
@ -292,20 +278,6 @@ Mount protocols are used to control what kind of translation happens
```
would cause the url /git/myrepo to pass "myrepo" to the cgi /var/www/cgi-bin/cgit and send the results to the client.
- http:// or https:// these perform reverse proxying, serving the remote origin content from the mountpoint. Eg
```
{
"mountpoint": "/proxytest",
"origin": "https://libwebsockets.org"
}
```
This will cause your local url `/proxytest` to serve content fetched from libwebsockets.org over ssl; whether it's served from your server using ssl is unrelated and depends how you configured your local server. Notice if you will use the proxying feature, `LWS_WITH_HTTP_PROXY` is required to be enabled at cmake, and for `https` proxy origins, your lwsws configuration must include `"init-ssl": "1"` and the vhost with the proxy mount must have `"enable-client-ssl": "1"`, even if you are not using ssl to serve.
`/proxytest/abc`, or `/proxytest/abc?def=ghi` etc map to the origin + the part past `/proxytest`, so links and img src urls etc work as do all urls under the origin path.
In addition link and src urls in the document are rewritten so / or the origin url part are rewritten to the mountpoint part.
@section lwswsomo Lwsws Other mount options
@ -387,36 +359,6 @@ If you provide an extra mimetype entry
Then any file is served, if the mimetype was not known then it is served without a
Content-Type: header.
7) A mount can be protected by HTTP Basic Auth. This only makes sense when using
https, since otherwise the password can be sniffed.
You can add a `basic-auth` entry on a mount like this
```
{
"mountpoint": "/basic-auth",
"origin": "file://_lws_ddir_/libwebsockets-test-server/private",
"basic-auth": "/var/www/balogins-private"
}
```
Before serving anything, lws will signal to the browser that a username / password
combination is required, and it will pop up a dialog. When the user has filled it
in, lwsws checks the user:password string against the text file named in the `basic-auth`
entry.
The file should contain user:pass one per line
```
testuser:testpass
myuser:hispass
```
The file should be readable by lwsws, and for a little bit of extra security not
have a file suffix, so lws would reject to serve it even if it could find it on
a mount.
@section lwswspl Lwsws Plugins
Protcols and extensions may also be provided from "plugins", these are
@ -468,7 +410,7 @@ Enable the protocol like this on a vhost's ws-protocols section
"update-ms": "5000"
}
```
`"update-ms"` is used to control how often updated JSON is sent on a ws link.
"update-ms" is used to control how often updated JSON is sent on a ws link.
And map the provided HTML into the vhost in the mounts section
```
@ -479,78 +421,23 @@ And map the provided HTML into the vhost in the mounts section
}
```
You might choose to put it on its own vhost which has "interface": "lo", so it's not
externally visible, or use the Basic Auth support to require authentication to
access it.
externally visible.
`"hide-vhosts": "{0 | 1}"` lets you control if information about your vhosts is included.
Since this includes mounts, you might not want to leak that information, mount names,
etc.
`"filespath":"{path}"` lets you give a server filepath which is read and sent to the browser
on each refresh. For example, you can provide server temperature information on most
Linux systems by giving an appropriate path down /sys.
This may be given multiple times.
@section lwswsreload Lwsws Configuration Reload
You may send lwsws a `HUP` signal, by, eg
```
$ sudo killall -HUP lwsws
```
This causes lwsws to "deprecate" the existing lwsws process, and remove and close all of
its listen sockets, but otherwise allowing it to continue to run, until all
of its open connections close.
When a deprecated lwsws process has no open connections left, it is destroyed
automatically.
After sending the SIGHUP to the main lwsws process, a new lwsws process, which can
pick up the newly-available listen sockets, and use the current configuration
files, is automatically started.
The new configuration may differ from the original one in arbitrary ways, the new
context is created from scratch each time without reference to the original one.
Notes
1) Protocols that provide a "shared world" like mirror will have as many "worlds"
as there are lwsws processes still active. People connected to a deprecated lwsws
process remain connected to the existing peers.
But any new connections will apply to the new lwsws process, which does not share
per-vhost "shared world" data with the deprecated process. That means no new
connections on the deprecated context, ie a "shrinking world" for those guys, and a
"growing world" for people who connect after the SIGHUP.
2) The new lwsws process owes nothing to the previous one. It starts with fresh
plugins, fresh configuration, fresh root privileges if that how you start it.
The plugins may have been updated in arbitrary ways including struct size changes
etc, and lwsws or lws may also have been updated arbitrarily.
3) A root parent process is left up that is not able to do anything except
respond to SIGHUP or SIGTERM. Actual serving and network listening etc happens
in child processes which use the privileges set in the lwsws config files.
@section lwswssysd Lwsws Integration with Systemd
lwsws needs a service file like this as `/usr/lib/systemd/system/lwsws.service`
```
[Unit]
Description=Libwebsockets Web Server
After=syslog.target
[Service]
ExecStart=/usr/local/bin/lwsws
ExecReload=/usr/bin/killall -s SIGHUP lwsws ; sleep 1 ; /usr/local/bin/lwsws
StandardError=null
[Install]
WantedBy=multi-user.target
[Unit]
Description=Libwebsockets Web Server
After=syslog.target
[Service]
ExecStart=/usr/local/bin/lwsws
StandardError=null
[Install]
WantedBy=multi-user.target
```
You can find this prepared in `./lwsws/usr-lib-systemd-system-lwsws.service`
@ -576,26 +463,3 @@ Prepare the log directory like this
sudo mkdir /var/log/lwsws
sudo chmod 700 /var/log/lwsws
```
@section lwswsgdb Debugging lwsws with gdb
Hopefully you won't need to debug lwsws itself, but you may want to debug your plugins. start lwsws like this to have everything running under gdb
```
sudo gdb -ex "set follow-fork-mode child" -ex "run" --args /usr/local/bin/lwsws
```
this will give nice backtraces in lwsws itself and in plugins, if they were built with symbols.
@section lwswsvgd Running lwsws under valgrind
You can just run lwsws under galgrind as usual and get valid results. However the results / analysis part of valgrind runs
after the plugins have removed themselves, this means valgrind backtraces into plugin code is opaque, without
source-level info because the dynamic library is gone.
There's a simple workaround, use LD_PRELOAD=<plugin.so> before running lwsws, this has the loader bring the plugin
in before executing lwsws as if it was a direct dependency. That means it's still mapped until the whole process
exits after valgtind has done its thing.

View file

@ -5,15 +5,9 @@
libwebsockets
-------------
News
----
v2.3 is out... see the changelog https://github.com/warmcat/libwebsockets/blob/v2.3-stable/changelog
ESP32 is now supported in lws! Download the
- factory https://github.com/warmcat/lws-esp32-factory and
- test server app https://github.com/warmcat/lws-esp32-test-server-demos
| News |
------
| ESP8266 is now supported in lws! See https://github.com/warmcat/libwebsockets/blob/master/README.esp8266.md |
This is the libwebsockets C library for lightweight websocket clients and

View file

@ -103,13 +103,6 @@ same.
[test-server.c](test-server/test-server.c) is all that is needed to use libwebsockets for
serving both the script html over http and websockets.
@section lwstsdynvhost Dynamic Vhosts
You can send libwebsockets-test-server or libwebsockets-test-server-v2.0 a SIGUSR1
to toggle the creation and destruction of an identical second vhost on port + 1.
This is intended as a test and demonstration for how to bring up and remove
vhosts dynamically.
@section wscl Testing websocket client support

View file

@ -22,8 +22,8 @@ install:
- mkdir c:\assets\libuv
- 7z x -oc:\assets\libuv win-libuv.zip
# - appveyor DownloadFile https://slproweb.com/download/Win32OpenSSL-1_0_2h.exe
# - appveyor DownloadFile https://libwebsockets.org:444/Win32OpenSSL-1_0_2L.exe
# - Win32OpenSSL-1_0_2L.exe /silent /verysilent /sp- /suppressmsgboxes
- appveyor DownloadFile https://libwebsockets.org:444/Win32OpenSSL-1_0_2h.exe
- Win32OpenSSL-1_0_2h.exe /silent /verysilent /sp- /suppressmsgboxes
- appveyor DownloadFile https://libwebsockets.org:444/nsis-3.0rc1-setup.exe
- cmd /c start /wait nsis-3.0rc1-setup.exe /S /D=C:\nsis
- appveyor DownloadFile https://libwebsockets.org:444/sqlite-dll-win32-x86-3130000.zip
@ -39,20 +39,18 @@ build_script:
- cmake --build . --config Release
# TODO: Keeps breaking Windows build, should be rewritten using CPack properly instead...
after_build:
- 7z a lws.zip %APPVEYOR_BUILD_FOLDER%\build\lib\Release\websockets.lib %APPVEYOR_BUILD_FOLDER%\build\lib\Release\websockets.exp %APPVEYOR_BUILD_FOLDER%\build\bin\Release\websockets.dll %APPVEYOR_BUILD_FOLDER%\lib\libwebsockets.h %APPVEYOR_BUILD_FOLDER%\build\lws_config.h %APPVEYOR_BUILD_FOLDER%\build\bin\Release\*.exe
#after_build:
# - cd ..
# - cd win32port
# - makensis -DVERSION=%APPVEYOR_BUILD_VERSION% libwebsockets.nsi
artifacts:
- path: lws.zip
name: lws.zip
type: Zip
- name: Installer
path: 'win32port/libwebsockets-*-install.exe'
#cache:
# - C:\OpenSSL-Win32
cache:
- C:\OpenSSL-Win32
matrix:
fast_finish: true

View file

@ -6,7 +6,7 @@ N=1
OS=`uname`
for i in '1.1.1' '1.1.2' '1.1.3' '1.1.4' '1.1.5' '1.1.6' '1.1.7' '1.1.8' '1.2.1' '1.2.2' '1.2.3' '1.2.4' '1.2.5' '1.2.6' '1.2.7' '1.2.8' '2.1' '2.2' '2.3' '2.4' '2.5' '2.6' '2.7' '2.8' '2.9' '2.10' '2.11' '3.1' '3.2' '3.3' '3.4' '3.5' '3.6' '3.7' '4.1.1' '4.1.2' '4.1.3' '4.1.4' '4.1.5' '4.2.1' '4.2.2' '4.2.3' '4.2.4' '4.2.5' '5.1' '5.2' '5.3' '5.4' '5.5' '5.6' '5.7' '5.8' '5.9' '5.10' '5.11' '5.12' '5.13' '5.14' '5.15' '5.16' '5.17' '5.18' '5.19' '5.20' '6.1.1' '6.1.2' '6.1.3' '6.2.1' '6.2.2' '6.2.3' '6.2.4' '6.3.1' '6.3.2' '6.4.1' '6.4.2' '6.4.3' '6.4.4' '6.5.1' '6.5.2' '6.5.3' '6.5.4' '6.5.5' '6.6.1' '6.6.2' '6.6.3' '6.6.4' '6.6.5' '6.6.6' '6.6.7' '6.6.8' '6.6.9' '6.6.10' '6.6.11' '6.7.1' '6.7.2' '6.7.3' '6.7.4' '6.8.1' '6.8.2' '6.9.1' '6.9.2' '6.9.3' '6.9.4' '6.10.1' '6.10.2' '6.10.3' '6.11.1' '6.11.2' '6.11.3' '6.11.4' '6.11.5' '6.12.1' '6.12.2' '6.12.3' '6.12.4' '6.12.5' '6.12.6' '6.12.7' '6.12.8' '6.13.1' '6.13.2' '6.13.3' '6.13.4' '6.13.5' '6.14.1' '6.14.2' '6.14.3' '6.14.4' '6.14.5' '6.14.6' '6.14.7' '6.14.8' '6.14.9' '6.14.10' '6.15.1' '6.16.1' '6.16.2' '6.16.3' '6.17.1' '6.17.2' '6.17.3' '6.17.4' '6.17.5' '6.18.1' '6.18.2' '6.18.3' '6.18.4' '6.18.5' '6.19.1' '6.19.2' '6.19.3' '6.19.4' '6.19.5' '6.20.1' '6.20.2' '6.20.3' '6.20.4' '6.20.5' '6.20.6' '6.20.7' '6.21.1' '6.21.2' '6.21.3' '6.21.4' '6.21.5' '6.21.6' '6.21.7' '6.21.8' '6.22.1' '6.22.2' '6.22.3' '6.22.4' '6.22.5' '6.22.6' '6.22.7' '6.22.8' '6.22.9' '6.22.10' '6.22.11' '6.22.12' '6.22.13' '6.22.14' '6.22.15' '6.22.16' '6.22.17' '6.22.18' '6.22.19' '6.22.20' '6.22.21' '6.22.22' '6.22.23' '6.22.24' '6.22.25' '6.22.26' '6.22.27' '6.22.28' '6.22.29' '6.22.30' '6.22.31' '6.22.32' '6.22.33' '6.22.34' '6.23.1' '6.23.2' '6.23.3' '6.23.4' '6.23.5' '6.23.6' '6.23.7' '7.1.1' '7.1.2' '7.1.3' '7.1.4' '7.1.5' '7.1.6' '7.3.1' '7.3.2' '7.3.3' '7.3.4' '7.3.5' '7.3.6' '7.5.1' '7.7.1' '7.7.2' '7.7.3' '7.7.4' '7.7.5' '7.7.6' '7.7.7' '7.7.8' '7.7.9' '7.7.10' '7.7.11' '7.7.12' '7.7.13' '7.9.1' '7.9.2' '7.9.3' '7.9.4' '7.9.5' '7.9.6' '7.9.7' '7.9.8' '7.9.9' '7.9.10' '7.9.11' '7.9.12' '7.9.13' '7.13.1' '7.13.2' '9.1.1' '9.1.2' '9.1.3' '9.1.4' '9.1.5' '9.1.6' '9.2.1' '9.2.2' '9.2.3' '9.2.4' '9.2.5' '9.2.6' '9.3.1' '9.3.2' '9.3.3' '9.3.4' '9.3.5' '9.3.6' '9.3.7' '9.3.8' '9.3.9' '9.4.1' '9.4.2' '9.4.3' '9.4.4' '9.4.5' '9.4.6' '9.4.7' '9.4.8' '9.4.9' '9.5.1' '9.5.2' '9.5.3' '9.5.4' '9.5.5' '9.5.6' '9.6.1' '9.6.2' '9.6.3' '9.6.4' '9.6.5' '9.6.6' '9.7.1' '9.7.2' '9.7.3' '9.7.4' '9.7.5' '9.7.6' '9.8.1' '9.8.2' '9.8.3' '9.8.4' '9.8.5' '9.8.6' '10.1.1' '12.1.1' '12.1.2' '12.1.3' '12.1.4' '12.1.5' '12.1.6' '12.1.7' '12.1.8' '12.1.9' '12.1.10' '12.1.11' '12.1.12' '12.1.13' '12.1.14' '12.1.15' '12.1.16' '12.1.17' '12.1.18' '12.2.1' '12.2.2' '12.2.3' '12.2.4' '12.2.5' '12.2.6' '12.2.7' '12.2.8' '12.2.9' '12.2.10' '12.2.11' '12.2.12' '12.2.13' '12.2.14' '12.2.15' '12.2.16' '12.2.17' '12.2.18' '12.3.1' '12.3.2' '12.3.3' '12.3.4' '12.3.5' '12.3.6' '12.3.7' '12.3.8' '12.3.9' '12.3.10' '12.3.11' '12.3.12' '12.3.13' '12.3.14' '12.3.15' '12.3.16' '12.3.17' '12.3.18' '12.4.1' '12.4.2' '12.4.3' '12.4.4' '12.4.5' '12.4.6' '12.4.7' '12.4.8' '12.4.9' '12.4.10' '12.4.11' '12.4.12' '12.4.13' '12.4.14' '12.4.15' '12.4.16' '12.4.17' '12.4.18' '12.5.1' '12.5.2' '12.5.3' '12.5.4' '12.5.5' '12.5.6' '12.5.7' '12.5.8' '12.5.9' '12.5.10' '12.5.11' '12.5.12' '12.5.13' '12.5.14' '12.5.15' '12.5.16' '12.5.17' '12.5.18' '13.1.1' '13.1.2' '13.1.3' '13.1.4' '13.1.5' '13.1.6' '13.1.7' '13.1.8' '13.1.9' '13.1.10' '13.1.11' '13.1.12' '13.1.13' '13.1.14' '13.1.15' '13.1.16' '13.1.17' '13.1.18' '13.2.1' '13.2.2' '13.2.3' '13.2.4' '13.2.5' '13.2.6' '13.2.7' '13.2.8' '13.2.9' '13.2.10' '13.2.11' '13.2.12' '13.2.13' '13.2.14' '13.2.15' '13.2.16' '13.2.17' '13.2.18' '13.3.1' '13.3.2' '13.3.3' '13.3.4' '13.3.5' '13.3.6' '13.3.7' '13.3.8' '13.3.9' '13.3.10' '13.3.11' '13.3.12' '13.3.13' '13.3.14' '13.3.15' '13.3.16' '13.3.17' '13.3.18' '13.4.1' '13.4.2' '13.4.3' '13.4.4' '13.4.5' '13.4.6' '13.4.7' '13.4.8' '13.4.9' '13.4.10' '13.4.11' '13.4.12' '13.4.13' '13.4.14' '13.4.15' '13.4.16' '13.4.17' '13.4.18' '13.5.1' '13.5.2' '13.5.3' '13.5.4' '13.5.5' '13.5.6' '13.5.7' '13.5.8' '13.5.9' '13.5.10' '13.5.11' '13.5.12' '13.5.13' '13.5.14' '13.5.15' '13.5.16' '13.5.17' '13.5.18' '13.6.1' '13.6.2' '13.6.3' '13.6.4' '13.6.5' '13.6.6' '13.6.7' '13.6.8' '13.6.9' '13.6.10' '13.6.11' '13.6.12' '13.6.13' '13.6.14' '13.6.15' '13.6.16' '13.6.17' '13.6.18' '13.7.1' '13.7.2' '13.7.3' '13.7.4' '13.7.5' '13.7.6' '13.7.7' '13.7.8' '13.7.9' '13.7.10' '13.7.11' '13.7.12' '13.7.13' '13.7.14' '13.7.15' '13.7.16' '13.7.17' '13.7.18' ; do
libwebsockets-test-echo --client 127.0.0.1 --port 9001 -u "/runCase?case=$N&agent=libwebsockets" -v -n 1 &
libwebsockets-test-echo --client localhost --port 9001 -u "/runCase?case=$N&agent=libwebsockets" -v -n 1 &
C=99
while [ $C -gt 8 ] ; do

392
changelog
View file

@ -1,110 +1,358 @@
Changelog
---------
v2.3.0
v2.1.1
======
- ESP32 OpenSSL support for client and server
commit e2fcf47f0350a7f7beba64e96191b02acb754406
Author: Silas Parker <skyhisi@user.github.invalid.com>
Date: Tue Feb 14 23:25:15 2017 +0800
- ESP32 4 x WLAN credential slots may be configured
fix close packet index coding
https://github.com/warmcat/libwebsockets/issues/792
- Libevent event loop support
commit b95e7fe4666105d474c87a7114cfefac4338bbbb
Author: Andy Green <andy@warmcat.com>
Date: Sun Feb 5 22:46:39 2017 +0800
- SOCKS5 proxy support
gcc format strings: http2
- lws_meta protocol for websocket connection multiplexing
commit 0b7ca30ed154861558065797e7562a30a340daa7
Author: Andy Green <andy@warmcat.com>
Date: Sun Feb 5 22:13:16 2017 +0800
- lws_vhost_destroy() added... allows dynamic removal of listening
vhosts. Vhosts with shared listen sockets adopt the listen socket
automatically if the owner is destroyed.
gcc- format strings: debug and extra plugins
- IPv6 on Windows
commit b03b17fd0ba2c967be213cf465301b57acf03f43
Author: Martin Milata <martin@martinmilata.cz>
Date: Sun Feb 5 22:12:57 2017 +0800
- Improved CGI handling suitable for general CGI scripting, eg, PHP
Subject: gcc format strings: Make GCC check format strings, fix found problems
- Convert even the "old style" test servers to use statically included
plugin sources
commit a238984d1b6e3422ff8dada49d45c4a130bbd48e
Author: Sven Hoffmann <sven@fredda.eu>
Date: Sun Feb 5 22:12:33 2017 +0800
- LWS_WITH_STATS cmake option dumps resource usage and timing information
every few seconds to debug log, including latency information about
delay from asking for writeable callback to getting it
post processing: fix problem where hex cant straddle block correctly
- Large (> 2GB) files may be served
commit 109d66c365a39b3ecdca1a5bccd722820e7bdd6a
Author: Tobias <tobias@codeatelier.com>
Date: Tue Jan 17 06:28:27 2017 +0800
- LWS_WITH_HTTP_PROXY Cmake option adds proxying mounts
ignore leading spaces when checking for a suitable subprotocol
My Browsers send as Subprotocols e.g. chat, superchat, mySubprotocol (with spaces after the ,). Libwebsockets now checked if ' mySubprotocol' was equal to 'mySubprotocol' which failed. With this fix the leading space is ignored and uses 'mySubprotocol' for comparision.
- Workaround for libev build by disabling -Werror on the test app
commit da6f03b423d33f8f95fe939d8d5150ceddb43b8a
Author: Andy Green <andy@warmcat.com>
Date: Tue Jan 10 09:16:49 2017 +0800
- HTTP2 support disabled since no way to serve websockets on it
ssl: wolfssl doesn't have clear options
https://github.com/warmcat/libwebsockets/issues/741
commit c9d165bbcc8cf91f0170f16b6ec2e16b208432c7
Author: Hai Vu <twoask@github.invalid.com>
Date: Tue Jan 10 09:16:41 2017 +0800
v2.2.0
======
ssl-correct-option-clear-availability-version
https://github.com/warmcat/libwebsockets/issues/744
Major new features
commit 82836590471c3949fe3a36fbcd1c52ceaf82fd0f
Author: Andy Green <andy@warmcat.com>
Date: Sat Jan 7 10:24:50 2017 +0800
- A mount can be protected by Basic Auth... in lwsws it looks like this
polarssl: turn off missing tlsext
```
{
"mountpoint": "/basic-auth",
"origin": "file://_lws_ddir_/libwebsockets-test-server/private",
"basic-auth": "/var/www/balogins-private"
}
```
commit c447e1f9f3b39fadc1822aa2c7100c02934a5844
Author: Andy Green <andy@warmcat.com>
Date: Sat Jan 7 10:24:42 2017 +0800
The text file named in `basic-auth` contains user:password information
one per line.
openssl: deal with missing OPENSSL_NO_TLSEXT on ancient versions
See README.lwsws.md for more information.
commit 9706dd23a232c715a6077059dbe83caff390f5a9
Author: Denis Osvald <denis.osvald@sartura.hr>
Date: Mon Jan 2 17:33:26 2017 +0100
- RFC7233 RANGES support in lws server... both single and multipart.
This allows seeking for multimedia file serving and download resume.
It's enabled by default but can be disabled by CMake option.
server: check listen(2) return value
The `listen` call can fail with EADDRINUSE after bind() succeeds, for
example because another process called listen on that port in the
meantime, or under some circumstances with IPv6-mapped-IPv4. This was
causing EINVAL on accept, with an infinite loop in case of libuv.
A reproducible example was to run nc -l -p 5555 ( OpenBSD netcat (Debian
patchlevel 1)) before starting test-server
Signed-off-by: Denis Osvald <denis.osvald@sartura.hr>
- On Linux, lwsws can reload configuration without dropping ongoing
connections, when sent a SIGHUP. The old configuration drops its
listen sockets so the new configuration can listen on them.
New connections connect to the server instance with the new
configuration. When all old connections eventually close, the old
instance automatically exits. This is equivalent to
`systemctl reload apache`
commit 837e7fdd1422438d7232ee0bb829b98aba0229c3
Author: namowen <namowen@github.invalid.com>
Date: Sat Dec 24 08:03:04 2016 +0800
- New `adopt` api allow adoption including SSL negotiation and
for raw sockets and file descriptors.
lws_plat_service_tsi: accessing context before checking for NULL
https://github.com/warmcat/libwebsockets/issues/730
- Chunked transfer encoding supported for client and server
commit d2cb05f1f6807d120e3b9098096ad23862137a27
Author: Namowen <namowen@github.invalid.com>
Date: Fri Dec 16 07:05:29 2016 +0800
- Adaptations to allow operations inside OPTEE Secure World
echo: fix debug build
https://github.com/warmcat/libwebsockets/issues/716#issuecomment-267377856
- ESP32 initial port - able to do all test server functions. See
README.build.md
commit d170ed06234a7ad055c2a8c82497a13dd1706685
Author: Andy Green <andy@warmcat.com>
Date: Thu Dec 15 13:28:48 2016 +0800
- Serving gzipped files from inside a ZIP file is supported... this
includes directly serving the gzipped content if the client
indicated it could accept it (ie, almost all browsers) saving
bandwidth and time. For clients that can't accept it, lws
automatically decompresses and serves the content in memory-
efficient chunks. Only a few hundred bytes of heap are needed
to serve any size file from inside the zip. See README.coding.md
test-client: fix broken protocol names
- RAW file descriptors may now be adopted into the lws event loop,
independent of event backend (including poll service).
See README.coding.md
commit 39807c1d10a6358af7628207021d0d93207d706e
Author: Andy Green <andy@warmcat.com>
Date: Thu Dec 15 13:27:13 2016 +0800
- RAW server socket descriptors may now be enabled on the vhost if
the first thing sent on the connection is not a valid http method.
The user code can associate these with a specific protocol per
vhost, and RAW-specific callbacks appear there for creation, rx,
writable and close. See libwebsockets-test-server-v2.0 for an example.
See README.coding.md
client ssl hostname check: trim any port on host header
commit 6dce477aef000041b9ad2a6b5e1716cfa3ef298a
Author: Andy Green <andy@warmcat.com>
Date: Thu Dec 15 10:09:55 2016 +0800
ipv6-allow-binding-to-ipv6-address-in-iface
ipv4 and ipv6 binding to a named interface works OK. ipv4 binding to an IP also
works, but we need some extra ipv6 magic to identify the ipv6 interface from an
ipv6 address.
This patch based on code from "user3546716" at
http://stackoverflow.com/questions/13504934/binding-sockets-to-ipv6-addresses
adds the necessary magic.
https://github.com/warmcat/libwebsockets/issues/717
commit cf8b922df52730efadfbc794239ca214f2c9afba
Author: Andy Green <andy@warmcat.com>
Date: Thu Dec 15 08:38:35 2016 +0800
client: if NULL protocol vhost same linked list entry
Lws maintains a linked-list of wsi that are on the same vhost protocol...
it walks it to perform ..._all_protocol() type apis.
Client connections also participate in this list, but in the case the
selected protocol is not given during negotation (a legal case where
the server default protocol is selected) we missed adding the new
ws negotiated client wsi to the list.
This patch makes sure we add the wsi to the vhost protocols[0] list
in that case.
https://github.com/warmcat/libwebsockets/issues/716
commit 266819a1f5fe031ce4448279fb4c497c8e1b55aa
Author: Andy Green <andy@warmcat.com>
Date: Mon Dec 12 20:38:32 2016 +0800
client: avoid possible NULL deref on error path
https://github.com/warmcat/libwebsockets/issues/672
commit e618359d4fc6587221f96ce284c872928d38056c
Author: daren-qterics <daren-qterics@github.invalid.com>
Date: Sat Dec 10 08:55:18 2016 +0800
ssl destroy: change ordering of ssl destroy to later than vhost destroy
https://github.com/warmcat/libwebsockets/issues/711
commit 04fee5f75f423664cdee64ba7a75615a9fd2b6e4
Author: Andy Green <andy@warmcat.com>
Date: Fri Dec 9 07:07:32 2016 +0800
clean: usused accidental global wsi
https://github.com/warmcat/libwebsockets/issues/708
commit 384ee53a36f95696a8a457b8160da05ca203f425
Author: Andy Green <andy@warmcat.com>
Date: Thu Dec 8 17:36:51 2016 +0800
lwsgt: fix check against forgot password flow defeating existing pw check
https://github.com/warmcat/libwebsockets/issues/706
This fixes a problem where the check for the existing pw was
skipped when a logged-in user is changing his password.
It's not good but because the user has to be logged in, it only affected
the situation someone changes his password on his logged in session.
commit c01bbb2bbcd7b00d14440b7f66cd5058dd811f75
Author: Bablooos <beetle@gambler.ru>
Date: Tue Nov 29 20:45:14 2016 +0800
Update CMakeLists.txt for BSD + libdl
Fixing build failure of libwebsockets-test-fraggle on FreeBSD when LWS_WITH_PLUGINS.
Solution: FreeBSD has no libdl
commit d104d624ec9f7619660838f86ae8a58ba453bc42
Author: Andy Green <andy@warmcat.com>
Date: Sat Dec 10 09:13:04 2016 +0800
ws-server: restrict returned Sec-Websocket-Protocol to the chosen name only
https://libwebsockets.org/pipermail/libwebsockets/2016-November/002948.html
Updated to fix a problem with no protocol
https://github.com/warmcat/libwebsockets/issues/705
commit 60b3a027d9cae0fa15e15547fb0a5539c48997a1
Author: Andy Green <andy@warmcat.com>
Date: Sat Nov 26 20:47:34 2016 +0800
generic-sessions: move auth level check to after mount protocol selection
commit c8bb24cf57954e0b1cedd65ecc575dfde53c5742
Author: Iblis Lin <iblis@hs.ntnu.edu.tw>
Date: Wed Nov 23 23:02:13 2016 +0800
server: portable option for setsockopt
From linux ipv6(7) manual (section `Note`):
SOL_IP, SOL_IPV6, SOL_ICMPV6 and other SOL_* socket options are
nonportable variants of IPPROTO_*. See also ip(7).
Ref: http://man7.org/linux/man-pages/man7/ipv6.7.html
commit 0bef3a8b01e401b6a6051d07c8f162a3dc148bb3
Author: sjames1958gm <sajames1958@gmail.com>
Date: Mon Nov 21 09:23:17 2016 -0600
client stash: update path variable to larger size
commit c2cd260311b2123a29bae17e151575457e8599b8
Author: Andy Green <andy@warmcat.com>
Date: Wed Nov 16 09:00:45 2016 +0800
lws_socket_bind: use lws_sockfd_type
commit 386bd4550bbcbb3e271113c2b69e1f116d0f2c25
Author: Andy Green <andy@warmcat.com>
Date: Tue Nov 15 17:00:55 2016 +0800
client: protect againt losing ah by lws_client_connect_2
commit 56826dbfd75c304f5466045646aaba1010539086
Author: Andy Green <andy@warmcat.com>
Date: Mon Nov 14 18:16:36 2016 +0800
post file upload: dont lose sight of end of upload just because we hit end of incoming post data
commit 9d061e1efd0af1f943bf6a848231bd4d1a2b5566
Author: Rainer Poisel <rainer.poisel@logicals.com>
Date: Wed Nov 9 08:34:27 2016 +0800
Better support for MINW32
commit 1e2e150ec4957f58dfbb8202725ba4e24fc19556
Author: Yannick Kiekens <yannickkiekens@gmail.com>
Date: Thu Nov 3 10:03:18 2016 +0100
From 7f84bc3e864b52eb13c670362a4b53bc3505393e Mon Sep 17 00:00:00 2001
Subject: [PATCH] Fix typo in lws_create_context documentation
commit 5fb327754ab4d202fca903dd5bd6b546b340eecb
Author: Andy Green <andy@warmcat.com>
Date: Mon Oct 10 23:21:48 2016 +0800
adjust_timeout: with default lws_plat_service_tsi allow beings passed 0 timeout
Some people are calling service with zero timeout, taking care of
not busywaiting by some other external arrangements.
Adapt the forced service signalling to survive this.
commit e2fcb9414785162d5affbf0aa87ab2fc06e64ded
Author: Joerg Pommnitz <pommnitz@yahoo.com>
Date: Mon Oct 10 20:06:06 2016 +0800
some compilers need void param explicitly
commit 5df8bf9d83299b1ec94e13aa9fa7ea5566750e66
Author: Yuchen Xie <yuchen.xie@live.com>
Date: Mon Oct 10 19:04:46 2016 +0800
Correct the library name of LIBHUBBUB_LIBRARIES
It should be `hubbub` in `find_library` to make the function work.
commit 6670c6f953288379d008ac9d6ba2bd1475ccf106
Author: Andy Green <andy@warmcat.com>
Date: Sat Oct 8 18:09:18 2016 +0800
docs: explain lws_write handling of truncated sends better
commit 549b7ad02321e6e0db2df2fd33125ecd0dd7e692
Author: Denis Osvald <denis.osvald@sartura.hr>
Date: Fri Oct 7 11:27:46 2016 +0200
publicly document lws_service_fd timeout servicing
Signed-off-by: Denis Osvald <denis.osvald@sartura.hr>
commit af8692e36f49b02725eeaa025988cb168c78e93b
Author: Denis Osvald <denis.osvald@sartura.hr>
Date: Thu Oct 6 15:45:25 2016 +0200
test-server-extpoll: add 1-per-second timeout servicing
Signed-off-by: Denis Osvald <denis.osvald@sartura.hr>
Adapt the forced service signalling to survive this.
commit e2fcb9414785162d5affbf0aa87ab2fc06e64ded
Author: Joerg Pommnitz <pommnitz@yahoo.com>
Date: Mon Oct 10 20:06:06 2016 +0800
some compilers need void param explicitly
commit 5df8bf9d83299b1ec94e13aa9fa7ea5566750e66
Author: Yuchen Xie <yuchen.xie@live.com>
Date: Mon Oct 10 19:04:46 2016 +0800
Correct the library name of LIBHUBBUB_LIBRARIES
It should be `hubbub` in `find_library` to make the function work.
commit 6670c6f953288379d008ac9d6ba2bd1475ccf106
Author: Andy Green <andy@warmcat.com>
Date: Sat Oct 8 18:09:18 2016 +0800
docs: explain lws_write handling of truncated sends better
commit 549b7ad02321e6e0db2df2fd33125ecd0dd7e692
Author: Denis Osvald <denis.osvald@sartura.hr>
Date: Fri Oct 7 11:27:46 2016 +0200
publicly document lws_service_fd timeout servicing
Signed-off-by: Denis Osvald <denis.osvald@sartura.hr>
commit af8692e36f49b02725eeaa025988cb168c78e93b
Author: Denis Osvald <denis.osvald@sartura.hr>
Date: Thu Oct 6 15:45:25 2016 +0200
test-server-extpoll: add 1-per-second timeout servicing
Signed-off-by: Denis Osvald <denis.osvald@sartura.hr>
- RAW client connections are now possible using the method "RAW".
After connection, the socket is associated to the protocol
named in the client connection info and RAW-specific callbacks
appear there for creation, rx, writable and close.
See libwebsockets-test-client (with raw://) for an example.
See README.coding.md
v2.1.0

View file

@ -1,41 +0,0 @@
COMPONENT_ADD_INCLUDEDIRS := ../../../../../../../../../../../../../../../../../../$(COMPONENT_BUILD_DIR)/include
COMPONENT_OWNBUILDTARGET:= 1
CROSS_PATH1:=$(shell which xtensa-esp32-elf-gcc )
CROSS_PATH:= $(shell dirname $(CROSS_PATH1) )/..
#-DLWS_USE_BORINGSSL=1 \
# -DOPENSSL_ROOT_DIR="${PWD}/../../boringssl" \
# -DOPENSSL_LIBRARIES="${PWD}/../../boringssl/build/ssl/libssl.a;${PWD}/../../boringssl/build/crypto/libcrypto.a" \
# -DOPENSSL_INCLUDE_DIRS="${PWD}/../../boringssl/include" \
# -DNDEBUG=1 after cflags
# -DOPENSSL_LIBRARIES=x \
# -DCOMPONENT_PATH=$(COMPONENT_PATH) \
.PHONY: build
build:
cd $(COMPONENT_BUILD_DIR) ; \
echo "doing lws cmake" ; \
cmake $(COMPONENT_PATH) -DLWS_C_FLAGS="$(CFLAGS) -DNDEBUG=1" \
-DIDF_PATH=$(IDF_PATH) \
-DCROSS_PATH=$(CROSS_PATH) \
-DBUILD_DIR_BASE=$(BUILD_DIR_BASE) \
-DCMAKE_TOOLCHAIN_FILE=$(COMPONENT_PATH)/cross-esp32.cmake \
-DCMAKE_BUILD_TYPE=RELEASE \
-DOPENSSL_INCLUDE_DIR=${IDF_PATH}/components/openssl/include \
-DLWS_WITH_STATS=0 \
-DZLIB_LIBRARY=$(BUILD_DIR_BASE)/zlib/libzlib.a \
-DZLIB_INCLUDE_DIR=$(COMPONENT_PATH)/../zlib \
-DLWS_WITH_ESP32=1 ;\
make && \
cp ${COMPONENT_BUILD_DIR}/lib/libwebsockets.a ${COMPONENT_BUILD_DIR}/liblibwebsockets.a
clean: myclean
myclean:
rm -rf ./build
INCLUDES := $(INCLUDES) -I build/

View file

@ -1,32 +0,0 @@
#
# CMake Toolchain file for crosscompiling on ARM.
#
# This can be used when running cmake in the following way:
# cd build/
# cmake .. -DCMAKE_TOOLCHAIN_FILE=../cross-arm-linux-gnueabihf.cmake
#
# Target operating system name.
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
# Name of C compiler.
set(CMAKE_C_COMPILER "aarch64-linux-gnu-gcc")
set(CMAKE_CXX_COMPILER "aarch64-linux-gnu-g++")
#-nostdlib
SET(CMAKE_C_FLAGS "-DGCC_VER=\"\\\"$(GCC_VER)\\\"\" -DARM64=1 -D__LP64__=1 -Os -g3 -fpie -mstrict-align -DOPTEE_DEV_KIT=../../../optee_os/out/arm-plat-hikey/export-ta_arm64/include -fPIC -ffunction-sections -fdata-sections" CACHE STRING "" FORCE)
# Where to look for the target environment. (More paths can be added here)
set(CMAKE_FIND_ROOT_PATH "/projects/aist-tb/arm64-tc/")
# Adjust the default behavior of the FIND_XXX() commands:
# search programs in the host environment only.
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# Search headers and libraries in the target environment only.
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

View file

@ -1,46 +0,0 @@
#
# CMake Toolchain file for crosscompiling on ARM.
#
# This can be used when running cmake in the following way:
# cd build/
# cmake .. -DCMAKE_TOOLCHAIN_FILE=../cross-arm-linux-gnueabihf.cmake
#
# Target operating system name.
set(CMAKE_SYSTEM_NAME Linux)
# Name of C compiler.
set(CMAKE_C_COMPILER "${CROSS_PATH}/bin/xtensa-esp32-elf-gcc")
set(CMAKE_AR "${CROSS_PATH}/bin/xtensa-esp32-elf-ar")
set(CMAKE_RANLIB "${CROSS_PATH}/bin/xtensa-esp32-elf-ranlib")
set(CMAKE_LINKER "${CROSS_PATH}/bin/xtensa-esp32-elf-ld")
SET(CMAKE_C_FLAGS "-nostdlib -Wall -Werror \
-I${BUILD_DIR_BASE}/include \
-I${IDF_PATH}/components/mdns/include \
-I${IDF_PATH}/components/driver/include \
-I${IDF_PATH}/components/spi_flash/include \
-I${IDF_PATH}/components/nvs_flash/include \
-I${IDF_PATH}/components/tcpip_adapter/include \
-I${IDF_PATH}/components/lwip/include/lwip/posix \
-I${IDF_PATH}/components/lwip/include/lwip \
-I${IDF_PATH}/components/lwip/include/lwip/port \
-I${IDF_PATH}/components/esp32/include/ \
-I${IDF_PATH}/components/bootloader_support/include/ \
-I${IDF_PATH}/components/app_update/include/ \
-I$(IDF_PATH)/components/soc/esp32/include/ \
${LWS_C_FLAGS} -Os \
-I${IDF_PATH}/components/nvs_flash/test_nvs_host \
-I${IDF_PATH}/components/freertos/include" CACHE STRING "" FORCE)
# Where to look for the target environment. (More paths can be added here)
set(CMAKE_FIND_ROOT_PATH "${CROSS_PATH}")
# Adjust the default behavior of the FIND_XXX() commands:
# search programs in the host environment only.
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# Search headers and libraries in the target environment only.
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

109
doc/html/annotated.html Normal file
View file

@ -0,0 +1,109 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Data Structures</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('annotated.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="headertitle">
<div class="title">Data Structures</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock">Here are the data structures with brief descriptions:</div><div class="directory">
<table class="directory">
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__cgi__args.html" target="_self">lws_cgi_args</a></td><td class="desc"></td></tr>
<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__client__connect__info.html" target="_self">lws_client_connect_info</a></td><td class="desc"></td></tr>
<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classlws__conn.html" target="_self">lws_conn</a></td><td class="desc"></td></tr>
<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classlws__conn__listener.html" target="_self">lws_conn_listener</a></td><td class="desc"></td></tr>
<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__context__creation__info.html" target="_self">lws_context_creation_info</a></td><td class="desc"></td></tr>
<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__email.html" target="_self">lws_email</a></td><td class="desc"></td></tr>
<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__ext__option__arg.html" target="_self">lws_ext_option_arg</a></td><td class="desc"></td></tr>
<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__ext__options.html" target="_self">lws_ext_options</a></td><td class="desc"></td></tr>
<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__extension.html" target="_self">lws_extension</a></td><td class="desc"></td></tr>
<tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__gs__event__args.html" target="_self">lws_gs_event_args</a></td><td class="desc"></td></tr>
<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__http__mount.html" target="_self">lws_http_mount</a></td><td class="desc"></td></tr>
<tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__plat__file__ops.html" target="_self">lws_plat_file_ops</a></td><td class="desc"></td></tr>
<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__plugin.html" target="_self">lws_plugin</a></td><td class="desc"></td></tr>
<tr id="row_13_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__plugin__capability.html" target="_self">lws_plugin_capability</a></td><td class="desc"></td></tr>
<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__polarssl__context.html" target="_self">lws_polarssl_context</a></td><td class="desc"></td></tr>
<tr id="row_15_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__pollargs.html" target="_self">lws_pollargs</a></td><td class="desc"></td></tr>
<tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__pollfd.html" target="_self">lws_pollfd</a></td><td class="desc"></td></tr>
<tr id="row_17_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__process__html__args.html" target="_self">lws_process_html_args</a></td><td class="desc"></td></tr>
<tr id="row_18_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__process__html__state.html" target="_self">lws_process_html_state</a></td><td class="desc"></td></tr>
<tr id="row_19_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__protocol__vhost__options.html" target="_self">lws_protocol_vhost_options</a></td><td class="desc"></td></tr>
<tr id="row_20_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__protocols.html" target="_self">lws_protocols</a></td><td class="desc"></td></tr>
<tr id="row_21_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__session__info.html" target="_self">lws_session_info</a></td><td class="desc"></td></tr>
<tr id="row_22_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__token__limits.html" target="_self">lws_token_limits</a></td><td class="desc"></td></tr>
<tr id="row_23_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__tokens.html" target="_self">lws_tokens</a></td><td class="desc"></td></tr>
<tr id="row_24_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlwsgw__hash.html" target="_self">lwsgw_hash</a></td><td class="desc"></td></tr>
<tr id="row_25_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlwsgw__hash__bin.html" target="_self">lwsgw_hash_bin</a></td><td class="desc"></td></tr>
<tr id="row_26_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structpollfd.html" target="_self">pollfd</a></td><td class="desc"></td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

30
doc/html/annotated_dup.js Normal file
View file

@ -0,0 +1,30 @@
var annotated_dup =
[
[ "lws_cgi_args", "structlws__cgi__args.html", "structlws__cgi__args" ],
[ "lws_client_connect_info", "structlws__client__connect__info.html", "structlws__client__connect__info" ],
[ "lws_conn", "classlws__conn.html", "classlws__conn" ],
[ "lws_conn_listener", "classlws__conn__listener.html", "classlws__conn__listener" ],
[ "lws_context_creation_info", "structlws__context__creation__info.html", "structlws__context__creation__info" ],
[ "lws_email", "structlws__email.html", "structlws__email" ],
[ "lws_ext_option_arg", "structlws__ext__option__arg.html", "structlws__ext__option__arg" ],
[ "lws_ext_options", "structlws__ext__options.html", "structlws__ext__options" ],
[ "lws_extension", "structlws__extension.html", "structlws__extension" ],
[ "lws_gs_event_args", "structlws__gs__event__args.html", "structlws__gs__event__args" ],
[ "lws_http_mount", "structlws__http__mount.html", "structlws__http__mount" ],
[ "lws_plat_file_ops", "structlws__plat__file__ops.html", "structlws__plat__file__ops" ],
[ "lws_plugin", "structlws__plugin.html", "structlws__plugin" ],
[ "lws_plugin_capability", "structlws__plugin__capability.html", "structlws__plugin__capability" ],
[ "lws_polarssl_context", "structlws__polarssl__context.html", "structlws__polarssl__context" ],
[ "lws_pollargs", "structlws__pollargs.html", "structlws__pollargs" ],
[ "lws_pollfd", "structlws__pollfd.html", "structlws__pollfd" ],
[ "lws_process_html_args", "structlws__process__html__args.html", "structlws__process__html__args" ],
[ "lws_process_html_state", "structlws__process__html__state.html", "structlws__process__html__state" ],
[ "lws_protocol_vhost_options", "structlws__protocol__vhost__options.html", "structlws__protocol__vhost__options" ],
[ "lws_protocols", "structlws__protocols.html", "structlws__protocols" ],
[ "lws_session_info", "structlws__session__info.html", "structlws__session__info" ],
[ "lws_token_limits", "structlws__token__limits.html", "structlws__token__limits" ],
[ "lws_tokens", "structlws__tokens.html", "structlws__tokens" ],
[ "lwsgw_hash", "structlwsgw__hash.html", "structlwsgw__hash" ],
[ "lwsgw_hash_bin", "structlwsgw__hash__bin.html", "structlwsgw__hash__bin" ],
[ "pollfd", "structpollfd.html", "structpollfd" ]
];

BIN
doc/html/bc_s.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 676 B

BIN
doc/html/bdwn.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 B

92
doc/html/classes.html Normal file
View file

@ -0,0 +1,92 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Data Structure Index</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('classes.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="headertitle">
<div class="title">Data Structure Index</div> </div>
</div><!--header-->
<div class="contents">
<div class="qindex"><a class="qindex" href="#letter_l">l</a>&#160;|&#160;<a class="qindex" href="#letter_p">p</a></div>
<table class="classindex">
<tr><td rowspan="2" valign="bottom"><a name="letter_l"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;l&#160;&#160;</div></td></tr></table>
</td><td valign="top"><a class="el" href="structlws__email.html">lws_email</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__plugin.html">lws_plugin</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__protocol__vhost__options.html">lws_protocol_vhost_options</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_p"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;p&#160;&#160;</div></td></tr></table>
</td></tr>
<tr><td valign="top"><a class="el" href="structlws__ext__option__arg.html">lws_ext_option_arg</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__plugin__capability.html">lws_plugin_capability</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__protocols.html">lws_protocols</a>&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="structlws__cgi__args.html">lws_cgi_args</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__ext__options.html">lws_ext_options</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__polarssl__context.html">lws_polarssl_context</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__session__info.html">lws_session_info</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structpollfd.html">pollfd</a>&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="structlws__client__connect__info.html">lws_client_connect_info</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__extension.html">lws_extension</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__pollargs.html">lws_pollargs</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__token__limits.html">lws_token_limits</a>&#160;&#160;&#160;</td><td></td></tr>
<tr><td valign="top"><a class="el" href="classlws__conn.html">lws_conn</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__gs__event__args.html">lws_gs_event_args</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__pollfd.html">lws_pollfd</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__tokens.html">lws_tokens</a>&#160;&#160;&#160;</td><td></td></tr>
<tr><td valign="top"><a class="el" href="classlws__conn__listener.html">lws_conn_listener</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__http__mount.html">lws_http_mount</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__process__html__args.html">lws_process_html_args</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlwsgw__hash.html">lwsgw_hash</a>&#160;&#160;&#160;</td><td></td></tr>
<tr><td valign="top"><a class="el" href="structlws__context__creation__info.html">lws_context_creation_info</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__plat__file__ops.html">lws_plat_file_ops</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__process__html__state.html">lws_process_html_state</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlwsgw__hash__bin.html">lwsgw_hash_bin</a>&#160;&#160;&#160;</td><td></td></tr>
<tr><td></td><td></td><td></td><td></td><td></td></tr>
</table>
<div class="qindex"><a class="qindex" href="#letter_l">l</a>&#160;|&#160;<a class="qindex" href="#letter_p">p</a></div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,134 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: lws_conn Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('classlws__conn.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pub-attribs">Data Fields</a> </div>
<div class="headertitle">
<div class="title">lws_conn Class Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="dynheader">
Inheritance diagram for lws_conn:</div>
<div class="dyncontent">
<div class="center">
<img src="classlws__conn.png" usemap="#lws_5Fconn_map" alt=""/>
<map id="lws_5Fconn_map" name="lws_5Fconn_map">
<area href="classlws__conn__listener.html" alt="lws_conn_listener" shape="rect" coords="0,56,113,80"/>
</map>
</div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:afe73e53da2070f659ad6e7fd14878c7e"><td class="memItemLeft" align="right" valign="top"><a id="afe73e53da2070f659ad6e7fd14878c7e"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>set_wsi</b> (struct lws *_wsi)</td></tr>
<tr class="separator:afe73e53da2070f659ad6e7fd14878c7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aef530971372f55e862f2e09bc98f1029"><td class="memItemLeft" align="right" valign="top"><a id="aef530971372f55e862f2e09bc98f1029"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>actual_onRX</b> (Socket *s)</td></tr>
<tr class="separator:aef530971372f55e862f2e09bc98f1029"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aba42bdd763a36c3a331b62410969b6ba"><td class="memItemLeft" align="right" valign="top"><a id="aba42bdd763a36c3a331b62410969b6ba"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>onRX</b> (Socket *s)</td></tr>
<tr class="separator:aba42bdd763a36c3a331b62410969b6ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4fb477fad697ce1faf8ec7a884ea6c6b"><td class="memItemLeft" align="right" valign="top"><a id="a4fb477fad697ce1faf8ec7a884ea6c6b"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>onError</b> (Socket *s, socket_error_t err)</td></tr>
<tr class="separator:a4fb477fad697ce1faf8ec7a884ea6c6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a49f87612c6a3098cd1587f8382b8c85b"><td class="memItemLeft" align="right" valign="top"><a id="a49f87612c6a3098cd1587f8382b8c85b"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>onDisconnect</b> (TCPStream *s)</td></tr>
<tr class="separator:a49f87612c6a3098cd1587f8382b8c85b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aad7d2406618e560114650a91c729a596"><td class="memItemLeft" align="right" valign="top"><a id="aad7d2406618e560114650a91c729a596"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>onSent</b> (Socket *s, uint16_t len)</td></tr>
<tr class="separator:aad7d2406618e560114650a91c729a596"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:accc57581269c554291dac840ed135231"><td class="memItemLeft" align="right" valign="top"><a id="accc57581269c554291dac840ed135231"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>serialized_writeable</b> (struct lws *wsi)</td></tr>
<tr class="separator:accc57581269c554291dac840ed135231"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
Data Fields</h2></td></tr>
<tr class="memitem:a5cad031b6b779da42b37f4007cae541b"><td class="memItemLeft" align="right" valign="top"><a id="a5cad031b6b779da42b37f4007cae541b"></a>
TCPStream *&#160;</td><td class="memItemRight" valign="bottom"><b>ts</b></td></tr>
<tr class="separator:a5cad031b6b779da42b37f4007cae541b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7e504bd449ffb51c7ab1d2126613ebc3"><td class="memItemLeft" align="right" valign="top"><a id="a7e504bd449ffb51c7ab1d2126613ebc3"></a>
struct lws *&#160;</td><td class="memItemRight" valign="bottom"><b>wsi</b></td></tr>
<tr class="separator:a7e504bd449ffb51c7ab1d2126613ebc3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8e1fdd467b7f66fc438dc70ae979b938"><td class="memItemLeft" align="right" valign="top"><a id="a8e1fdd467b7f66fc438dc70ae979b938"></a>
char&#160;</td><td class="memItemRight" valign="bottom"><b>writeable</b></td></tr>
<tr class="separator:a8e1fdd467b7f66fc438dc70ae979b938"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5226010afdf5421f279454e5cbb282a4"><td class="memItemLeft" align="right" valign="top"><a id="a5226010afdf5421f279454e5cbb282a4"></a>
char&#160;</td><td class="memItemRight" valign="bottom"><b>awaiting_on_writeable</b></td></tr>
<tr class="separator:a5226010afdf5421f279454e5cbb282a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>lib/<a class="el" href="libwebsockets_8h_source.html">libwebsockets.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="classlws__conn.html">lws_conn</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,15 @@
var classlws__conn =
[
[ "lws_conn", "classlws__conn.html#af0e213af91d53d1e1aef70ed7816191f", null ],
[ "actual_onRX", "classlws__conn.html#aef530971372f55e862f2e09bc98f1029", null ],
[ "onDisconnect", "classlws__conn.html#a49f87612c6a3098cd1587f8382b8c85b", null ],
[ "onError", "classlws__conn.html#a4fb477fad697ce1faf8ec7a884ea6c6b", null ],
[ "onRX", "classlws__conn.html#aba42bdd763a36c3a331b62410969b6ba", null ],
[ "onSent", "classlws__conn.html#aad7d2406618e560114650a91c729a596", null ],
[ "serialized_writeable", "classlws__conn.html#accc57581269c554291dac840ed135231", null ],
[ "set_wsi", "classlws__conn.html#afe73e53da2070f659ad6e7fd14878c7e", null ],
[ "awaiting_on_writeable", "classlws__conn.html#a5226010afdf5421f279454e5cbb282a4", null ],
[ "ts", "classlws__conn.html#a5cad031b6b779da42b37f4007cae541b", null ],
[ "writeable", "classlws__conn.html#a8e1fdd467b7f66fc438dc70ae979b938", null ],
[ "wsi", "classlws__conn.html#a7e504bd449ffb51c7ab1d2126613ebc3", null ]
];

BIN
doc/html/classlws__conn.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 480 B

View file

@ -0,0 +1,266 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: lws_conn_listener Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('classlws__conn__listener.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pub-attribs">Data Fields</a> &#124;
<a href="#pro-methods">Protected Member Functions</a> </div>
<div class="headertitle">
<div class="title">lws_conn_listener Class Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="dynheader">
Inheritance diagram for lws_conn_listener:</div>
<div class="dyncontent">
<div class="center">
<img src="classlws__conn__listener.png" usemap="#lws_5Fconn_5Flistener_map" alt=""/>
<map id="lws_5Fconn_5Flistener_map" name="lws_5Fconn_5Flistener_map">
<area href="classlws__conn.html" alt="lws_conn" shape="rect" coords="0,0,113,24"/>
</map>
</div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a3c19c314f2ea2b758407b4041e4c4010"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classlws__conn__listener.html#a3c19c314f2ea2b758407b4041e4c4010">start</a> (const uint16_t port)</td></tr>
<tr class="separator:a3c19c314f2ea2b758407b4041e4c4010"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
Data Fields</h2></td></tr>
<tr class="memitem:aa7076f8965bb9df268798fd9a0283374"><td class="memItemLeft" align="right" valign="top"><a id="aa7076f8965bb9df268798fd9a0283374"></a>
TCPListener&#160;</td><td class="memItemRight" valign="bottom"><b>srv</b></td></tr>
<tr class="separator:aa7076f8965bb9df268798fd9a0283374"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
Protected Member Functions</h2></td></tr>
<tr class="memitem:ab3bc839797ba14554ac70ad09fd155c7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classlws__conn__listener.html#ab3bc839797ba14554ac70ad09fd155c7">onRX</a> (Socket *s)</td></tr>
<tr class="separator:ab3bc839797ba14554ac70ad09fd155c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a271ac4f8ad5770b3bc96cce5b265b72c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classlws__conn__listener.html#a271ac4f8ad5770b3bc96cce5b265b72c">onError</a> (Socket *s, socket_error_t err)</td></tr>
<tr class="separator:a271ac4f8ad5770b3bc96cce5b265b72c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab432a456c3a961ec562e06141897806b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classlws__conn__listener.html#ab432a456c3a961ec562e06141897806b">onIncoming</a> (TCPListener *s, void *impl)</td></tr>
<tr class="separator:ab432a456c3a961ec562e06141897806b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aab3c7bf550a8f15d20f1e093125c2e60"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classlws__conn__listener.html#aab3c7bf550a8f15d20f1e093125c2e60">onDisconnect</a> (TCPStream *s)</td></tr>
<tr class="separator:aab3c7bf550a8f15d20f1e093125c2e60"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="aab3c7bf550a8f15d20f1e093125c2e60"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aab3c7bf550a8f15d20f1e093125c2e60">&#9670;&nbsp;</a></span>onDisconnect()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void lws_conn_listener::onDisconnect </td>
<td>(</td>
<td class="paramtype">TCPStream *&#160;</td>
<td class="paramname"><em>s</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>disconnection </p>
</div>
</div>
<a id="a271ac4f8ad5770b3bc96cce5b265b72c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a271ac4f8ad5770b3bc96cce5b265b72c">&#9670;&nbsp;</a></span>onError()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void lws_conn_listener::onError </td>
<td>(</td>
<td class="paramtype">Socket *&#160;</td>
<td class="paramname"><em>s</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">socket_error_t&#160;</td>
<td class="paramname"><em>err</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>if error occurs </p>
</div>
</div>
<a id="ab432a456c3a961ec562e06141897806b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab432a456c3a961ec562e06141897806b">&#9670;&nbsp;</a></span>onIncoming()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void lws_conn_listener::onIncoming </td>
<td>(</td>
<td class="paramtype">TCPListener *&#160;</td>
<td class="paramname"><em>s</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>impl</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>new connection </p>
</div>
</div>
<a id="ab3bc839797ba14554ac70ad09fd155c7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab3bc839797ba14554ac70ad09fd155c7">&#9670;&nbsp;</a></span>onRX()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void lws_conn_listener::onRX </td>
<td>(</td>
<td class="paramtype">Socket *&#160;</td>
<td class="paramname"><em>s</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>incoming data ready </p>
</div>
</div>
<a id="a3c19c314f2ea2b758407b4041e4c4010"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3c19c314f2ea2b758407b4041e4c4010">&#9670;&nbsp;</a></span>start()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lws_conn_listener::start </td>
<td>(</td>
<td class="paramtype">const uint16_t&#160;</td>
<td class="paramname"><em>port</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>start listening </p>
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>lib/<a class="el" href="libwebsockets_8h_source.html">libwebsockets.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="classlws__conn__listener.html">lws_conn_listener</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,10 @@
var classlws__conn__listener =
[
[ "lws_conn_listener", "classlws__conn__listener.html#ac82c8696a36a2f386b4094490d300dee", null ],
[ "onDisconnect", "classlws__conn__listener.html#aab3c7bf550a8f15d20f1e093125c2e60", null ],
[ "onError", "classlws__conn__listener.html#a271ac4f8ad5770b3bc96cce5b265b72c", null ],
[ "onIncoming", "classlws__conn__listener.html#ab432a456c3a961ec562e06141897806b", null ],
[ "onRX", "classlws__conn__listener.html#ab3bc839797ba14554ac70ad09fd155c7", null ],
[ "start", "classlws__conn__listener.html#a3c19c314f2ea2b758407b4041e4c4010", null ],
[ "srv", "classlws__conn__listener.html#aa7076f8965bb9df268798fd9a0283374", null ]
];

Binary file not shown.

After

Width:  |  Height:  |  Size: 477 B

BIN
doc/html/closed.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 B

86
doc/html/deprecated.html Normal file
View file

@ -0,0 +1,86 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Deprecated List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('deprecated.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="headertitle">
<div class="title">Deprecated List </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><dl class="reflist">
<dt><a class="anchor" id="_deprecated000002"></a>Global <a class="el" href="group__client.html#ga4af0a20108a95e8b6d94dd4d80055ff3">lws_client_connect</a> (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) LWS_WARN_DEPRECATED</dt>
<dd>DEPRECATED use lws_client_connect_via_info </dd>
<dt><a class="anchor" id="_deprecated000003"></a>Global <a class="el" href="group__client.html#gac6a8558b4410961a880241c2ac1271e2">lws_client_connect_extended</a> (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_WARN_DEPRECATED</dt>
<dd>DEPRECATED use lws_client_connect_via_info </dd>
<dt><a class="anchor" id="_deprecated000001"></a>Global <a class="el" href="group__context-and-vhost.html#ga8db03e19a372e34ac25cf21af894a02c">lws_vhost_get</a> (struct lws *wsi) LWS_WARN_DEPRECATED</dt>
<dd>deprecated: use <a class="el" href="group__context-and-vhost.html#ga06e77ce2916f8bc9826ef8d9d68e3932">lws_get_vhost()</a> </dd>
</dl>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,85 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: lib Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('dir_97aefd0d527b934f1d99a682da8fe6a9.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="headertitle">
<div class="title">lib Directory Reference</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
Files</h2></td></tr>
<tr class="memitem:libwebsockets_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="libwebsockets_8h.html">libwebsockets.h</a> <a href="libwebsockets_8h_source.html">[code]</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_97aefd0d527b934f1d99a682da8fe6a9.html">lib</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,4 @@
var dir_97aefd0d527b934f1d99a682da8fe6a9 =
[
[ "libwebsockets.h", "libwebsockets_8h.html", "libwebsockets_8h" ]
];

View file

@ -0,0 +1,79 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: doc-assets Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('dir_e8731c315d086bdbd43ee7d72e0ed36b.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="headertitle">
<div class="title">doc-assets Directory Reference</div> </div>
</div><!--header-->
<div class="contents">
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_e8731c315d086bdbd43ee7d72e0ed36b.html">doc-assets</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

BIN
doc/html/doc.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 746 B

1596
doc/html/doxygen.css Normal file

File diff suppressed because it is too large Load diff

BIN
doc/html/doxygen.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

97
doc/html/dynsections.js Normal file
View file

@ -0,0 +1,97 @@
function toggleVisibility(linkObj)
{
var base = $(linkObj).attr('id');
var summary = $('#'+base+'-summary');
var content = $('#'+base+'-content');
var trigger = $('#'+base+'-trigger');
var src=$(trigger).attr('src');
if (content.is(':visible')===true) {
content.hide();
summary.show();
$(linkObj).addClass('closed').removeClass('opened');
$(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
} else {
content.show();
summary.hide();
$(linkObj).removeClass('closed').addClass('opened');
$(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
}
return false;
}
function updateStripes()
{
$('table.directory tr').
removeClass('even').filter(':visible:even').addClass('even');
}
function toggleLevel(level)
{
$('table.directory tr').each(function() {
var l = this.id.split('_').length-1;
var i = $('#img'+this.id.substring(3));
var a = $('#arr'+this.id.substring(3));
if (l<level+1) {
i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
a.html('&#9660;');
$(this).show();
} else if (l==level+1) {
i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
a.html('&#9658;');
$(this).show();
} else {
$(this).hide();
}
});
updateStripes();
}
function toggleFolder(id)
{
// the clicked row
var currentRow = $('#row_'+id);
// all rows after the clicked row
var rows = currentRow.nextAll("tr");
var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
// only match elements AFTER this one (can't hide elements before)
var childRows = rows.filter(function() { return this.id.match(re); });
// first row is visible we are HIDING
if (childRows.filter(':first').is(':visible')===true) {
// replace down arrow by right arrow for current row
var currentRowSpans = currentRow.find("span");
currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
currentRowSpans.filter(".arrow").html('&#9658;');
rows.filter("[id^=row_"+id+"]").hide(); // hide all children
} else { // we are SHOWING
// replace right arrow by down arrow for current row
var currentRowSpans = currentRow.find("span");
currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
currentRowSpans.filter(".arrow").html('&#9660;');
// replace down arrows by right arrows for child rows
var childRowsSpans = childRows.find("span");
childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
childRowsSpans.filter(".arrow").html('&#9658;');
childRows.show(); //show all children
}
updateStripes();
}
function toggleInherit(id)
{
var rows = $('tr.inherit.'+id);
var img = $('tr.inherit_header.'+id+' img');
var src = $(img).attr('src');
if (rows.filter(':first').is(':visible')===true) {
rows.css('display','none');
$(img).attr('src',src.substring(0,src.length-8)+'closed.png');
} else {
rows.css('display','table-row'); // using show() causes jump in firefox
$(img).attr('src',src.substring(0,src.length-10)+'open.png');
}
}

84
doc/html/files.html Normal file
View file

@ -0,0 +1,84 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: File List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('files.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="headertitle">
<div class="title">File List</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock">Here is a list of all documented files with brief descriptions:</div><div class="directory">
<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span id="img_0_" class="iconfopen" onclick="toggleFolder('0_')">&#160;</span><a class="el" href="dir_97aefd0d527b934f1d99a682da8fe6a9.html" target="_self">lib</a></td><td class="desc"></td></tr>
<tr id="row_0_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="libwebsockets_8h_source.html"><span class="icondoc"></span></a><a class="el" href="libwebsockets_8h.html" target="_self">libwebsockets.h</a></td><td class="desc"></td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

4
doc/html/files.js Normal file
View file

@ -0,0 +1,4 @@
var files =
[
[ "lib", "dir_97aefd0d527b934f1d99a682da8fe6a9.html", "dir_97aefd0d527b934f1d99a682da8fe6a9" ]
];

BIN
doc/html/folderclosed.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 616 B

BIN
doc/html/folderopen.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 597 B

621
doc/html/functions.html Normal file
View file

@ -0,0 +1,621 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Data Fields</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('functions.html','');});
</script>
<div id="doc-content">
<div class="contents">
<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
<h3><a id="index__"></a>- _ -</h3><ul>
<li>_unused
: <a class="el" href="structlws__client__connect__info.html#ad47f50d1633dc5df74548606c9a66d73">lws_client_connect_info</a>
, <a class="el" href="structlws__context__creation__info.html#afce3b59950eca3203faa07381bbed5d7">lws_context_creation_info</a>
</li>
</ul>
<h3><a id="index_a"></a>- a -</h3><ul>
<li>address
: <a class="el" href="structlws__client__connect__info.html#aa364094f94ef1bcaaabbd9161971d502">lws_client_connect_info</a>
</li>
<li>api_magic
: <a class="el" href="structlws__plugin__capability.html#a523c7cde6f15bba345f56493dcf6b32a">lws_plugin_capability</a>
</li>
<li>auth_mask
: <a class="el" href="structlws__http__mount.html#a614364c770b0bd4db464ad65cddab477">lws_http_mount</a>
</li>
</ul>
<h3><a id="index_b"></a>- b -</h3><ul>
<li>bin
: <a class="el" href="structlwsgw__hash__bin.html#ac92f50d9471058525d110597a4e0de6b">lwsgw_hash_bin</a>
</li>
</ul>
<h3><a id="index_c"></a>- c -</h3><ul>
<li>ca
: <a class="el" href="structlws__polarssl__context.html#a1872f2ea24878d807ae20ca8513674af">lws_polarssl_context</a>
</li>
<li>cache_intermediaries
: <a class="el" href="structlws__http__mount.html#aabec1a326780aafe11b977000983be0c">lws_http_mount</a>
</li>
<li>cache_max_age
: <a class="el" href="structlws__http__mount.html#a4283e30ea89d27ae7d061ad760d1d146">lws_http_mount</a>
</li>
<li>cache_reusable
: <a class="el" href="structlws__http__mount.html#a8316dd183ffbef50419a5a4968d35d84">lws_http_mount</a>
</li>
<li>cache_revalidate
: <a class="el" href="structlws__http__mount.html#ae137203040c6153694bd88a708da5395">lws_http_mount</a>
</li>
<li>callback
: <a class="el" href="structlws__extension.html#afa21f3b3c8c2c9212a276c52b680c3af">lws_extension</a>
, <a class="el" href="structlws__protocols.html#acabf94c1a9bfe7be0387fbb0e0c56b2d">lws_protocols</a>
</li>
<li>caps
: <a class="el" href="structlws__plugin.html#ac7f1fdfe8cf8a21f8ee9720c21934a3f">lws_plugin</a>
</li>
<li>certificate
: <a class="el" href="structlws__polarssl__context.html#ae7e11c9129ff71c7ee71b3b2e320ff27">lws_polarssl_context</a>
</li>
<li>cgi_timeout
: <a class="el" href="structlws__http__mount.html#a4a7239d6d4c03986e6e1a72abb6c83aa">lws_http_mount</a>
</li>
<li>cgienv
: <a class="el" href="structlws__http__mount.html#ae7b5c0f4c5408061e6ea3a8d281f45af">lws_http_mount</a>
</li>
<li>ch
: <a class="el" href="structlws__cgi__args.html#adeee220b29aeacc34632c38e50f0f5a5">lws_cgi_args</a>
</li>
<li>client_exts
: <a class="el" href="structlws__client__connect__info.html#a7732b996e977393c3e1076be2a8ded6c">lws_client_connect_info</a>
</li>
<li>client_offer
: <a class="el" href="structlws__extension.html#a36b06c213aedb02bf9a402651751855b">lws_extension</a>
</li>
<li>close
: <a class="el" href="structlws__plat__file__ops.html#a034ec96f2fbaf52b4aa3e82d20795f7b">lws_plat_file_ops</a>
</li>
<li>content
: <a class="el" href="structlws__email.html#a6fff03c5a5d369a2aa3cab0c897b1bed">lws_email</a>
</li>
<li>context
: <a class="el" href="structlws__client__connect__info.html#afe999d133cc240a0bfd02aade0514cfd">lws_client_connect_info</a>
</li>
<li>count_extensions
: <a class="el" href="structlws__plugin__capability.html#abcf51db969522fdda9aaf902e65739d3">lws_plugin_capability</a>
</li>
<li>count_protocols
: <a class="el" href="structlws__plugin__capability.html#ae38f7cf1246b9ca3af3cbf9d46b7090f">lws_plugin_capability</a>
</li>
<li>count_threads
: <a class="el" href="structlws__context__creation__info.html#ae52f3237e144e9ddcab5e2cf91d1e419">lws_context_creation_info</a>
</li>
<li>count_vars
: <a class="el" href="structlws__process__html__state.html#adcafd17704775b4bbeea9561fb340968">lws_process_html_state</a>
</li>
</ul>
<h3><a id="index_d"></a>- d -</h3><ul>
<li>data
: <a class="el" href="structlws__cgi__args.html#a8ac842084688c02f3f94694ef700d8f7">lws_cgi_args</a>
, <a class="el" href="structlws__email.html#add1341456045382c183f4c763bdea6bc">lws_email</a>
, <a class="el" href="structlws__process__html__state.html#af21119890fdfebe28fb5c4dabfc1bdf5">lws_process_html_state</a>
</li>
<li>def
: <a class="el" href="structlws__http__mount.html#ae90d1efe7178199fad39de2926902ee4">lws_http_mount</a>
</li>
</ul>
<h3><a id="index_e"></a>- e -</h3><ul>
<li>ecdh_curve
: <a class="el" href="structlws__context__creation__info.html#afa5d4e7d9f86b58a1c6fac14f0a5f5f9">lws_context_creation_info</a>
</li>
<li>email
: <a class="el" href="structlws__gs__event__args.html#acd17e4f9f91f7f9a8f0fbf0744a3a463">lws_gs_event_args</a>
, <a class="el" href="structlws__session__info.html#a94b813cfc6b0da4b182659de30038ad3">lws_session_info</a>
</li>
<li>email_buf
: <a class="el" href="structlws__email.html#a8f34ec0643a817be67ef4276aeb7fb82">lws_email</a>
</li>
<li>email_client
: <a class="el" href="structlws__email.html#a01f31934166dc6d01e8a375012f8ad1e">lws_email</a>
</li>
<li>email_connect_req
: <a class="el" href="structlws__email.html#a5f53d4c5a1e34b0dcaa8787e2eabb1b3">lws_email</a>
</li>
<li>email_connect_started
: <a class="el" href="structlws__email.html#a9747ca85597788c2d118d287df47b7c1">lws_email</a>
</li>
<li>email_from
: <a class="el" href="structlws__email.html#af7f0ae934347d81071f63a963301f9e2">lws_email</a>
</li>
<li>email_helo
: <a class="el" href="structlws__email.html#a939e5d7ee0339a16de73bde71ab4d4d9">lws_email</a>
</li>
<li>email_smtp_ip
: <a class="el" href="structlws__email.html#a472ae23fc9fca6599e5c512bc21458d2">lws_email</a>
</li>
<li>email_to
: <a class="el" href="structlws__email.html#a6453a8b92b3de6d2c2101af3edce685e">lws_email</a>
</li>
<li>estate
: <a class="el" href="structlws__email.html#ac6115d3cbef2e8bac62cc00895bf5fd3">lws_email</a>
</li>
<li>event
: <a class="el" href="structlws__gs__event__args.html#a477274f8ca22ba7411b9285b9dc8dd06">lws_gs_event_args</a>
</li>
<li>events
: <a class="el" href="structlws__pollargs.html#a00bbffea9f55de342783e32d71ce1de6">lws_pollargs</a>
, <a class="el" href="structlws__pollfd.html#ac393db6fc7fb6ed8fe7ca20936908ee9">lws_pollfd</a>
, <a class="el" href="structpollfd.html#ac9b2f2c5b1f9a7487eb57e67cd4960ef">pollfd</a>
</li>
<li>extensions
: <a class="el" href="structlws__context__creation__info.html#a4a3d1155fc52f5048b481884f6fb947c">lws_context_creation_info</a>
, <a class="el" href="structlws__plugin__capability.html#a7936f0eb93d79dea76b903d0f8a5f623">lws_plugin_capability</a>
</li>
<li>extra_mimetypes
: <a class="el" href="structlws__http__mount.html#a4437423df85ee3dbcae0e15974c89ec7">lws_http_mount</a>
</li>
</ul>
<h3><a id="index_f"></a>- f -</h3><ul>
<li>fd
: <a class="el" href="structlws__pollargs.html#af14a48ef4e78128aef9a76902b104a81">lws_pollargs</a>
, <a class="el" href="structlws__pollfd.html#a714cf5ca90b41926117fdde9fa6542be">lws_pollfd</a>
, <a class="el" href="structpollfd.html#af084f089bdece61d177f85782d6673d0">pollfd</a>
</li>
<li>fd_limit_per_thread
: <a class="el" href="structlws__context__creation__info.html#a45e63e24c88289e0c8352377ef4d3646">lws_context_creation_info</a>
</li>
<li>final
: <a class="el" href="structlws__process__html__args.html#a362547891ee0d693f3900a1f807ea475">lws_process_html_args</a>
</li>
</ul>
<h3><a id="index_g"></a>- g -</h3><ul>
<li>gid
: <a class="el" href="structlws__context__creation__info.html#a9c9d22437de92c197f3cee52912b2c03">lws_context_creation_info</a>
</li>
</ul>
<h3><a id="index_h"></a>- h -</h3><ul>
<li>hdr_state
: <a class="el" href="structlws__cgi__args.html#a741c11b9aa05997ec45a3400d7fb7739">lws_cgi_args</a>
</li>
<li>headers
: <a class="el" href="structlws__context__creation__info.html#a8ca0ec6b8675c13849bbdcdc0d50c9a3">lws_context_creation_info</a>
</li>
<li>host
: <a class="el" href="structlws__client__connect__info.html#a9b36d47c3422329df32c21040a35ebc7">lws_client_connect_info</a>
</li>
<li>http_proxy_address
: <a class="el" href="structlws__context__creation__info.html#aef917c0b23976a264d2474901b4f5aa3">lws_context_creation_info</a>
</li>
<li>http_proxy_port
: <a class="el" href="structlws__context__creation__info.html#a7b59f2bdc869871e7bde232db94f5ca6">lws_context_creation_info</a>
</li>
</ul>
<h3><a id="index_i"></a>- i -</h3><ul>
<li>id
: <a class="el" href="structlws__protocols.html#a6b632018590c2b1bbe43fbab6d5e6fac">lws_protocols</a>
, <a class="el" href="structlwsgw__hash.html#a29435f5cf78747d4257695b0f141d164">lwsgw_hash</a>
</li>
<li>ietf_version_or_minus_one
: <a class="el" href="structlws__client__connect__info.html#a69abb5aeed755750b9755e5c91db6895">lws_client_connect_info</a>
</li>
<li>iface
: <a class="el" href="structlws__context__creation__info.html#a75434932bb5df54665ea678eb8ac104a">lws_context_creation_info</a>
</li>
<li>interpret
: <a class="el" href="structlws__http__mount.html#a11ea62b952710d59733dbcf9794a5773">lws_http_mount</a>
</li>
<li>ip
: <a class="el" href="structlws__session__info.html#a53eed02325e8717a53297391e3e98fac">lws_session_info</a>
</li>
</ul>
<h3><a id="index_k"></a>- k -</h3><ul>
<li>ka_interval
: <a class="el" href="structlws__context__creation__info.html#a381342a398883d6204955ff3c1849ddd">lws_context_creation_info</a>
</li>
<li>ka_probes
: <a class="el" href="structlws__context__creation__info.html#a3baab4285c679fbe027c2504621d7410">lws_context_creation_info</a>
</li>
<li>ka_time
: <a class="el" href="structlws__context__creation__info.html#ac583ce92b8e1c949cb6fef6bfe713d56">lws_context_creation_info</a>
</li>
<li>keepalive_timeout
: <a class="el" href="structlws__context__creation__info.html#a81697c6b763b5ef3ee52862bc70b07d6">lws_context_creation_info</a>
</li>
<li>key
: <a class="el" href="structlws__polarssl__context.html#a919c33af37aab170f828d954de1fa270">lws_polarssl_context</a>
</li>
</ul>
<h3><a id="index_l"></a>- l -</h3><ul>
<li>l
: <a class="el" href="structlws__plugin.html#a4ef37a43653715b6c69cbf8a7be747f4">lws_plugin</a>
</li>
<li>len
: <a class="el" href="structlws__cgi__args.html#a36e5c256433c187bd0eaa9c1ca667f1d">lws_cgi_args</a>
, <a class="el" href="structlws__ext__option__arg.html#af37f0b6caa7735af51a1ac12b68d5bc5">lws_ext_option_arg</a>
, <a class="el" href="structlws__process__html__args.html#a754513f2311241cabb0cd1c90d7307ef">lws_process_html_args</a>
</li>
<li>lib
: <a class="el" href="structlws__plugin.html#af9e1042dc1de5b9d202c2f5fd1834330">lws_plugin</a>
</li>
<li>list
: <a class="el" href="structlws__plugin.html#a65dffd68fd267ce17b988790d1d35f22">lws_plugin</a>
</li>
<li>log_filepath
: <a class="el" href="structlws__context__creation__info.html#ad0e95ba721f7bd2b676719f8093c23a2">lws_context_creation_info</a>
</li>
<li>loop
: <a class="el" href="structlws__email.html#ab5fbf121195a8e67509c78a42cfbe168">lws_email</a>
</li>
</ul>
<h3><a id="index_m"></a>- m -</h3><ul>
<li>mask
: <a class="el" href="structlws__session__info.html#afb924864b70f40372920688a5c1c895e">lws_session_info</a>
</li>
<li>max_content_size
: <a class="el" href="structlws__email.html#a7bbc1964889c984b3da723c86a210e05">lws_email</a>
</li>
<li>max_http_header_data
: <a class="el" href="structlws__context__creation__info.html#a0cdfd3c484689ba6f0f2cc91b38ce948">lws_context_creation_info</a>
</li>
<li>max_http_header_data2
: <a class="el" href="structlws__context__creation__info.html#aa8d9e85e137f35fb006f2e4a53f0887a">lws_context_creation_info</a>
</li>
<li>max_http_header_pool
: <a class="el" href="structlws__context__creation__info.html#a0b154e79abc1167ba4ac3539f4af6720">lws_context_creation_info</a>
</li>
<li>max_len
: <a class="el" href="structlws__process__html__args.html#a8be7fd396a1942ea2449a2fda990ff99">lws_process_html_args</a>
</li>
<li>method
: <a class="el" href="structlws__client__connect__info.html#aa9e8e3da4e783a0651b0dea62c2dd1db">lws_client_connect_info</a>
</li>
<li>mount_next
: <a class="el" href="structlws__http__mount.html#a0109baf93f23c07c824c997c3533ee44">lws_http_mount</a>
</li>
<li>mountpoint
: <a class="el" href="structlws__http__mount.html#aa2391bfcada0b7a290b3c6651f64586c">lws_http_mount</a>
</li>
<li>mountpoint_len
: <a class="el" href="structlws__http__mount.html#ac8489b60b8f969eb19c9abbdeac90743">lws_http_mount</a>
</li>
<li>mounts
: <a class="el" href="structlws__context__creation__info.html#a13ffbb0d010309669611f8c4eda7d7f8">lws_context_creation_info</a>
</li>
</ul>
<h3><a id="index_n"></a>- n -</h3><ul>
<li>name
: <a class="el" href="structlws__ext__options.html#a1769e4a9805bbdda227821e9578ddc7e">lws_ext_options</a>
, <a class="el" href="structlws__extension.html#a1e5018c883d85176f5c2152176843f9e">lws_extension</a>
, <a class="el" href="structlws__plugin.html#af4ac8fcb79e10e0c2d960e1804d98105">lws_plugin</a>
, <a class="el" href="structlws__protocol__vhost__options.html#acf9db77f8eb64cd4e314be9b43d8a8b9">lws_protocol_vhost_options</a>
, <a class="el" href="structlws__protocols.html#a0e63edb457a613c3fa4271e0a8f19624">lws_protocols</a>
</li>
<li>next
: <a class="el" href="structlws__protocol__vhost__options.html#abc714ddb4171756fc8196e9823a1e21c">lws_protocol_vhost_options</a>
</li>
</ul>
<h3><a id="index_o"></a>- o -</h3><ul>
<li>on_get_body
: <a class="el" href="structlws__email.html#a2aff78c8e04db243052aa91b4d87e987">lws_email</a>
</li>
<li>on_next
: <a class="el" href="structlws__email.html#ad8dc60353ee246d84dd59ec0591e9719">lws_email</a>
</li>
<li>on_sent
: <a class="el" href="structlws__email.html#a39ef6263d58eb40cca417c8697b227d8">lws_email</a>
</li>
<li>onDisconnect()
: <a class="el" href="classlws__conn__listener.html#aab3c7bf550a8f15d20f1e093125c2e60">lws_conn_listener</a>
</li>
<li>onError()
: <a class="el" href="classlws__conn__listener.html#a271ac4f8ad5770b3bc96cce5b265b72c">lws_conn_listener</a>
</li>
<li>onIncoming()
: <a class="el" href="classlws__conn__listener.html#ab432a456c3a961ec562e06141897806b">lws_conn_listener</a>
</li>
<li>onRX()
: <a class="el" href="classlws__conn__listener.html#ab3bc839797ba14554ac70ad09fd155c7">lws_conn_listener</a>
</li>
<li>open
: <a class="el" href="structlws__plat__file__ops.html#ad37a97abc68d0af967cef874f4d8df32">lws_plat_file_ops</a>
</li>
<li>option_index
: <a class="el" href="structlws__ext__option__arg.html#af57fffcfa253dfa8d98681ac1fb1785f">lws_ext_option_arg</a>
</li>
<li>option_name
: <a class="el" href="structlws__ext__option__arg.html#a0a320c56b79271b8f059eeaad9423ac9">lws_ext_option_arg</a>
</li>
<li>options
: <a class="el" href="structlws__context__creation__info.html#a9d3b17a25e1fbc772f21eb4959a82724">lws_context_creation_info</a>
, <a class="el" href="structlws__protocol__vhost__options.html#afd99fbc90be51ea2465b550c2ec47822">lws_protocol_vhost_options</a>
</li>
<li>origin
: <a class="el" href="structlws__client__connect__info.html#a8595f83e64147cb687b6418cf500dd4c">lws_client_connect_info</a>
, <a class="el" href="structlws__http__mount.html#a21d86fd6043ec00e121ababbc29af39a">lws_http_mount</a>
</li>
<li>origin_protocol
: <a class="el" href="structlws__http__mount.html#a6a9b1492a0b9749e39bd19932717a0b7">lws_http_mount</a>
</li>
</ul>
<h3><a id="index_p"></a>- p -</h3><ul>
<li>p
: <a class="el" href="structlws__process__html__args.html#a11859d8bedd379fbf64543b25c65fe14">lws_process_html_args</a>
</li>
<li>parent_wsi
: <a class="el" href="structlws__client__connect__info.html#a6843a60e1050b10db9d98d7eeb45f587">lws_client_connect_info</a>
</li>
<li>path
: <a class="el" href="structlws__client__connect__info.html#a76a8388733f114fb8fd3643874781185">lws_client_connect_info</a>
</li>
<li>per_session_data_size
: <a class="el" href="structlws__protocols.html#a9bbd85f591ffb4259711cb5acbb05bea">lws_protocols</a>
</li>
<li>plugin_dirs
: <a class="el" href="structlws__context__creation__info.html#a8122cfc0810bafe51edb3ba6bf9a1251">lws_context_creation_info</a>
</li>
<li>port
: <a class="el" href="structlws__client__connect__info.html#a1af124d81c3c22a46d39387c5bc3d6b9">lws_client_connect_info</a>
, <a class="el" href="structlws__context__creation__info.html#a424a5ce268d6903e42243be94487ab85">lws_context_creation_info</a>
</li>
<li>pos
: <a class="el" href="structlws__process__html__state.html#a53234f2948812c7208a256f9f5b23c20">lws_process_html_state</a>
</li>
<li>prev_events
: <a class="el" href="structlws__pollargs.html#a437fec0de5cf264371e1ab5a401e86d8">lws_pollargs</a>
</li>
<li>protocol
: <a class="el" href="structlws__client__connect__info.html#aba35adfb74845a5fd0c3dc141cbdddd2">lws_client_connect_info</a>
, <a class="el" href="structlws__http__mount.html#a05347d92c3d379809564bd4f3eab259b">lws_http_mount</a>
</li>
<li>protocols
: <a class="el" href="structlws__context__creation__info.html#abb90ffb3e6d6db2db20f529d61bd9122">lws_context_creation_info</a>
, <a class="el" href="structlws__plugin__capability.html#a6a4d9d01e770f378ddadc77b37522033">lws_plugin_capability</a>
</li>
<li>provided_client_ssl_ctx
: <a class="el" href="structlws__context__creation__info.html#a1654d41bea6fb2f619b57e6a264b26a4">lws_context_creation_info</a>
</li>
<li>pt_serv_buf_size
: <a class="el" href="structlws__context__creation__info.html#a57f88c0745adbd1d6b9b619b8de30209">lws_context_creation_info</a>
</li>
<li>pvo
: <a class="el" href="structlws__context__creation__info.html#a999866fcd15dbd621773436f97190458">lws_context_creation_info</a>
</li>
<li>pwsi
: <a class="el" href="structlws__client__connect__info.html#a065063b5117ecd0a59567c97f04bda2e">lws_client_connect_info</a>
</li>
</ul>
<h3><a id="index_r"></a>- r -</h3><ul>
<li>read
: <a class="el" href="structlws__plat__file__ops.html#a01f483807a9862736b17ba9ed5110c40">lws_plat_file_ops</a>
</li>
<li>replace
: <a class="el" href="structlws__process__html__state.html#a693d2fb45378afee5da29b539c1ea644">lws_process_html_state</a>
</li>
<li>revents
: <a class="el" href="structlws__pollfd.html#ae7cecfe7511c59d4a3a44f876d030932">lws_pollfd</a>
, <a class="el" href="structpollfd.html#aafb457d11cac415faf0e1e2b825118c2">pollfd</a>
</li>
<li>rx_buffer_size
: <a class="el" href="structlws__protocols.html#a0d1d4996d81b2f5e125bcec981e461c5">lws_protocols</a>
</li>
</ul>
<h3><a id="index_s"></a>- s -</h3><ul>
<li>seek_cur
: <a class="el" href="structlws__plat__file__ops.html#abfcda19b003dcc13c61ff9e2bb4ff869">lws_plat_file_ops</a>
</li>
<li>server_string
: <a class="el" href="structlws__context__creation__info.html#a137a9b9de4f6a7993fed8746d551e616">lws_context_creation_info</a>
</li>
<li>session
: <a class="el" href="structlws__session__info.html#a4353b5dd19400b2b15edfd7cee1e4cd5">lws_session_info</a>
</li>
<li>ssl_ca_filepath
: <a class="el" href="structlws__context__creation__info.html#a4f8e65c3a059d3b586fafa9ef3282c29">lws_context_creation_info</a>
</li>
<li>ssl_cert_filepath
: <a class="el" href="structlws__context__creation__info.html#ac62b0f0e8e402412ba5011d15c244103">lws_context_creation_info</a>
</li>
<li>ssl_cipher_list
: <a class="el" href="structlws__context__creation__info.html#a3e1516fd7fed26bfa77c0246ed26c2eb">lws_context_creation_info</a>
</li>
<li>ssl_connection
: <a class="el" href="structlws__client__connect__info.html#a9862297827639238a7a0b4054c3ddf3d">lws_client_connect_info</a>
</li>
<li>ssl_options_clear
: <a class="el" href="structlws__context__creation__info.html#adb0bc0b28cd7d90ab306723d8ffa96fa">lws_context_creation_info</a>
</li>
<li>ssl_options_set
: <a class="el" href="structlws__context__creation__info.html#a704940261951ced6b5d8191bd8b9bb2d">lws_context_creation_info</a>
</li>
<li>ssl_private_key_filepath
: <a class="el" href="structlws__context__creation__info.html#ab9ec8893e0f7843cf5d783d2f350ef14">lws_context_creation_info</a>
</li>
<li>ssl_private_key_password
: <a class="el" href="structlws__context__creation__info.html#af3fb447be15c4fcb01d3285a6678ab54">lws_context_creation_info</a>
</li>
<li>start()
: <a class="el" href="classlws__conn__listener.html#a3c19c314f2ea2b758407b4041e4c4010">lws_conn_listener</a>
, <a class="el" href="structlws__ext__option__arg.html#a0b1f7b30c3ceaf5f1bf9d105c24568d1">lws_ext_option_arg</a>
, <a class="el" href="structlws__process__html__state.html#af0732884ef891e24fe5fa237ebaa21a3">lws_process_html_state</a>
</li>
<li>stdwsi
: <a class="el" href="structlws__cgi__args.html#a4ccc1058e7e914a26eef31ab2ad46aa1">lws_cgi_args</a>
</li>
<li>swallow
: <a class="el" href="structlws__process__html__state.html#a71982bc1cbd8cf876ca0f545144404eb">lws_process_html_state</a>
</li>
</ul>
<h3><a id="index_t"></a>- t -</h3><ul>
<li>timeout_email
: <a class="el" href="structlws__email.html#a77723e2f2b940b1c879ef5e1cd88c2be">lws_email</a>
</li>
<li>timeout_secs
: <a class="el" href="structlws__context__creation__info.html#a6cfa3d51df2def3349a5cbf0d712822d">lws_context_creation_info</a>
</li>
<li>token
: <a class="el" href="structlws__tokens.html#a9f3635412bc71a5cb78e9862b55f10cd">lws_tokens</a>
</li>
<li>token_len
: <a class="el" href="structlws__tokens.html#a855b7375d1d58516c0ecd4b60e9a7766">lws_tokens</a>
</li>
<li>token_limit
: <a class="el" href="structlws__token__limits.html#a6ec712306cbf8585bce7a56758a3ceff">lws_token_limits</a>
</li>
<li>token_limits
: <a class="el" href="structlws__context__creation__info.html#ac8a75b7b259a3c3a5fbb4219a3f06c29">lws_context_creation_info</a>
</li>
<li>type
: <a class="el" href="structlws__ext__options.html#a7c4dbd62dbeba63a9d50d2306bd1cc61">lws_ext_options</a>
</li>
</ul>
<h3><a id="index_u"></a>- u -</h3><ul>
<li>uid
: <a class="el" href="structlws__context__creation__info.html#ac105b4180008cb3e672d57beead8382e">lws_context_creation_info</a>
</li>
<li>uri_replace_from
: <a class="el" href="structlws__client__connect__info.html#a03c305fdca809667b6a9a83b3edfd83a">lws_client_connect_info</a>
</li>
<li>uri_replace_to
: <a class="el" href="structlws__client__connect__info.html#a9959ba103d3d2484e559a9f7879eebe3">lws_client_connect_info</a>
</li>
<li>user
: <a class="el" href="structlws__context__creation__info.html#a0e9d94cdfb893d777b4a4db81e7b5ac0">lws_context_creation_info</a>
, <a class="el" href="structlws__protocols.html#a3cbd903ad076736ae934a54cae36580e">lws_protocols</a>
</li>
<li>userdata
: <a class="el" href="structlws__client__connect__info.html#a9831b9f9ab54a1aec4bb15324f1c3836">lws_client_connect_info</a>
</li>
<li>username
: <a class="el" href="structlws__gs__event__args.html#a2bec693d8a43730d487004a44326178b">lws_gs_event_args</a>
, <a class="el" href="structlws__session__info.html#a3d57a70b6e7181d95a8bec429b1a7697">lws_session_info</a>
</li>
</ul>
<h3><a id="index_v"></a>- v -</h3><ul>
<li>value
: <a class="el" href="structlws__protocol__vhost__options.html#a0640a92513c70ee6b9b295a9ad1658e7">lws_protocol_vhost_options</a>
</li>
<li>vars
: <a class="el" href="structlws__process__html__state.html#a3b113e00c03a2fded51b1c85ff5bf077">lws_process_html_state</a>
</li>
<li>vhost
: <a class="el" href="structlws__client__connect__info.html#a3893181d728f326f9f5b47c1459cb8be">lws_client_connect_info</a>
</li>
<li>vhost_name
: <a class="el" href="structlws__context__creation__info.html#ad50db098a208f045f7811207d2bee4b9">lws_context_creation_info</a>
</li>
</ul>
<h3><a id="index_w"></a>- w -</h3><ul>
<li>write
: <a class="el" href="structlws__plat__file__ops.html#a1fae8330ee94649a3551e31a30809793">lws_plat_file_ops</a>
</li>
<li>ws_ping_pong_interval
: <a class="el" href="structlws__context__creation__info.html#a33a1a25a7df3793f59047e20dd580078">lws_context_creation_info</a>
</li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,91 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Data Fields - Functions</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('functions_func.html','');});
</script>
<div id="doc-content">
<div class="contents">
&#160;<ul>
<li>onDisconnect()
: <a class="el" href="classlws__conn__listener.html#aab3c7bf550a8f15d20f1e093125c2e60">lws_conn_listener</a>
</li>
<li>onError()
: <a class="el" href="classlws__conn__listener.html#a271ac4f8ad5770b3bc96cce5b265b72c">lws_conn_listener</a>
</li>
<li>onIncoming()
: <a class="el" href="classlws__conn__listener.html#ab432a456c3a961ec562e06141897806b">lws_conn_listener</a>
</li>
<li>onRX()
: <a class="el" href="classlws__conn__listener.html#ab3bc839797ba14554ac70ad09fd155c7">lws_conn_listener</a>
</li>
<li>start()
: <a class="el" href="classlws__conn__listener.html#a3c19c314f2ea2b758407b4041e4c4010">lws_conn_listener</a>
</li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,608 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Data Fields - Variables</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('functions_vars.html','');});
</script>
<div id="doc-content">
<div class="contents">
&#160;
<h3><a id="index__"></a>- _ -</h3><ul>
<li>_unused
: <a class="el" href="structlws__client__connect__info.html#ad47f50d1633dc5df74548606c9a66d73">lws_client_connect_info</a>
, <a class="el" href="structlws__context__creation__info.html#afce3b59950eca3203faa07381bbed5d7">lws_context_creation_info</a>
</li>
</ul>
<h3><a id="index_a"></a>- a -</h3><ul>
<li>address
: <a class="el" href="structlws__client__connect__info.html#aa364094f94ef1bcaaabbd9161971d502">lws_client_connect_info</a>
</li>
<li>api_magic
: <a class="el" href="structlws__plugin__capability.html#a523c7cde6f15bba345f56493dcf6b32a">lws_plugin_capability</a>
</li>
<li>auth_mask
: <a class="el" href="structlws__http__mount.html#a614364c770b0bd4db464ad65cddab477">lws_http_mount</a>
</li>
</ul>
<h3><a id="index_b"></a>- b -</h3><ul>
<li>bin
: <a class="el" href="structlwsgw__hash__bin.html#ac92f50d9471058525d110597a4e0de6b">lwsgw_hash_bin</a>
</li>
</ul>
<h3><a id="index_c"></a>- c -</h3><ul>
<li>ca
: <a class="el" href="structlws__polarssl__context.html#a1872f2ea24878d807ae20ca8513674af">lws_polarssl_context</a>
</li>
<li>cache_intermediaries
: <a class="el" href="structlws__http__mount.html#aabec1a326780aafe11b977000983be0c">lws_http_mount</a>
</li>
<li>cache_max_age
: <a class="el" href="structlws__http__mount.html#a4283e30ea89d27ae7d061ad760d1d146">lws_http_mount</a>
</li>
<li>cache_reusable
: <a class="el" href="structlws__http__mount.html#a8316dd183ffbef50419a5a4968d35d84">lws_http_mount</a>
</li>
<li>cache_revalidate
: <a class="el" href="structlws__http__mount.html#ae137203040c6153694bd88a708da5395">lws_http_mount</a>
</li>
<li>callback
: <a class="el" href="structlws__extension.html#afa21f3b3c8c2c9212a276c52b680c3af">lws_extension</a>
, <a class="el" href="structlws__protocols.html#acabf94c1a9bfe7be0387fbb0e0c56b2d">lws_protocols</a>
</li>
<li>caps
: <a class="el" href="structlws__plugin.html#ac7f1fdfe8cf8a21f8ee9720c21934a3f">lws_plugin</a>
</li>
<li>certificate
: <a class="el" href="structlws__polarssl__context.html#ae7e11c9129ff71c7ee71b3b2e320ff27">lws_polarssl_context</a>
</li>
<li>cgi_timeout
: <a class="el" href="structlws__http__mount.html#a4a7239d6d4c03986e6e1a72abb6c83aa">lws_http_mount</a>
</li>
<li>cgienv
: <a class="el" href="structlws__http__mount.html#ae7b5c0f4c5408061e6ea3a8d281f45af">lws_http_mount</a>
</li>
<li>ch
: <a class="el" href="structlws__cgi__args.html#adeee220b29aeacc34632c38e50f0f5a5">lws_cgi_args</a>
</li>
<li>client_exts
: <a class="el" href="structlws__client__connect__info.html#a7732b996e977393c3e1076be2a8ded6c">lws_client_connect_info</a>
</li>
<li>client_offer
: <a class="el" href="structlws__extension.html#a36b06c213aedb02bf9a402651751855b">lws_extension</a>
</li>
<li>close
: <a class="el" href="structlws__plat__file__ops.html#a034ec96f2fbaf52b4aa3e82d20795f7b">lws_plat_file_ops</a>
</li>
<li>content
: <a class="el" href="structlws__email.html#a6fff03c5a5d369a2aa3cab0c897b1bed">lws_email</a>
</li>
<li>context
: <a class="el" href="structlws__client__connect__info.html#afe999d133cc240a0bfd02aade0514cfd">lws_client_connect_info</a>
</li>
<li>count_extensions
: <a class="el" href="structlws__plugin__capability.html#abcf51db969522fdda9aaf902e65739d3">lws_plugin_capability</a>
</li>
<li>count_protocols
: <a class="el" href="structlws__plugin__capability.html#ae38f7cf1246b9ca3af3cbf9d46b7090f">lws_plugin_capability</a>
</li>
<li>count_threads
: <a class="el" href="structlws__context__creation__info.html#ae52f3237e144e9ddcab5e2cf91d1e419">lws_context_creation_info</a>
</li>
<li>count_vars
: <a class="el" href="structlws__process__html__state.html#adcafd17704775b4bbeea9561fb340968">lws_process_html_state</a>
</li>
</ul>
<h3><a id="index_d"></a>- d -</h3><ul>
<li>data
: <a class="el" href="structlws__cgi__args.html#a8ac842084688c02f3f94694ef700d8f7">lws_cgi_args</a>
, <a class="el" href="structlws__email.html#add1341456045382c183f4c763bdea6bc">lws_email</a>
, <a class="el" href="structlws__process__html__state.html#af21119890fdfebe28fb5c4dabfc1bdf5">lws_process_html_state</a>
</li>
<li>def
: <a class="el" href="structlws__http__mount.html#ae90d1efe7178199fad39de2926902ee4">lws_http_mount</a>
</li>
</ul>
<h3><a id="index_e"></a>- e -</h3><ul>
<li>ecdh_curve
: <a class="el" href="structlws__context__creation__info.html#afa5d4e7d9f86b58a1c6fac14f0a5f5f9">lws_context_creation_info</a>
</li>
<li>email
: <a class="el" href="structlws__gs__event__args.html#acd17e4f9f91f7f9a8f0fbf0744a3a463">lws_gs_event_args</a>
, <a class="el" href="structlws__session__info.html#a94b813cfc6b0da4b182659de30038ad3">lws_session_info</a>
</li>
<li>email_buf
: <a class="el" href="structlws__email.html#a8f34ec0643a817be67ef4276aeb7fb82">lws_email</a>
</li>
<li>email_client
: <a class="el" href="structlws__email.html#a01f31934166dc6d01e8a375012f8ad1e">lws_email</a>
</li>
<li>email_connect_req
: <a class="el" href="structlws__email.html#a5f53d4c5a1e34b0dcaa8787e2eabb1b3">lws_email</a>
</li>
<li>email_connect_started
: <a class="el" href="structlws__email.html#a9747ca85597788c2d118d287df47b7c1">lws_email</a>
</li>
<li>email_from
: <a class="el" href="structlws__email.html#af7f0ae934347d81071f63a963301f9e2">lws_email</a>
</li>
<li>email_helo
: <a class="el" href="structlws__email.html#a939e5d7ee0339a16de73bde71ab4d4d9">lws_email</a>
</li>
<li>email_smtp_ip
: <a class="el" href="structlws__email.html#a472ae23fc9fca6599e5c512bc21458d2">lws_email</a>
</li>
<li>email_to
: <a class="el" href="structlws__email.html#a6453a8b92b3de6d2c2101af3edce685e">lws_email</a>
</li>
<li>estate
: <a class="el" href="structlws__email.html#ac6115d3cbef2e8bac62cc00895bf5fd3">lws_email</a>
</li>
<li>event
: <a class="el" href="structlws__gs__event__args.html#a477274f8ca22ba7411b9285b9dc8dd06">lws_gs_event_args</a>
</li>
<li>events
: <a class="el" href="structlws__pollargs.html#a00bbffea9f55de342783e32d71ce1de6">lws_pollargs</a>
, <a class="el" href="structlws__pollfd.html#ac393db6fc7fb6ed8fe7ca20936908ee9">lws_pollfd</a>
, <a class="el" href="structpollfd.html#ac9b2f2c5b1f9a7487eb57e67cd4960ef">pollfd</a>
</li>
<li>extensions
: <a class="el" href="structlws__context__creation__info.html#a4a3d1155fc52f5048b481884f6fb947c">lws_context_creation_info</a>
, <a class="el" href="structlws__plugin__capability.html#a7936f0eb93d79dea76b903d0f8a5f623">lws_plugin_capability</a>
</li>
<li>extra_mimetypes
: <a class="el" href="structlws__http__mount.html#a4437423df85ee3dbcae0e15974c89ec7">lws_http_mount</a>
</li>
</ul>
<h3><a id="index_f"></a>- f -</h3><ul>
<li>fd
: <a class="el" href="structlws__pollargs.html#af14a48ef4e78128aef9a76902b104a81">lws_pollargs</a>
, <a class="el" href="structlws__pollfd.html#a714cf5ca90b41926117fdde9fa6542be">lws_pollfd</a>
, <a class="el" href="structpollfd.html#af084f089bdece61d177f85782d6673d0">pollfd</a>
</li>
<li>fd_limit_per_thread
: <a class="el" href="structlws__context__creation__info.html#a45e63e24c88289e0c8352377ef4d3646">lws_context_creation_info</a>
</li>
<li>final
: <a class="el" href="structlws__process__html__args.html#a362547891ee0d693f3900a1f807ea475">lws_process_html_args</a>
</li>
</ul>
<h3><a id="index_g"></a>- g -</h3><ul>
<li>gid
: <a class="el" href="structlws__context__creation__info.html#a9c9d22437de92c197f3cee52912b2c03">lws_context_creation_info</a>
</li>
</ul>
<h3><a id="index_h"></a>- h -</h3><ul>
<li>hdr_state
: <a class="el" href="structlws__cgi__args.html#a741c11b9aa05997ec45a3400d7fb7739">lws_cgi_args</a>
</li>
<li>headers
: <a class="el" href="structlws__context__creation__info.html#a8ca0ec6b8675c13849bbdcdc0d50c9a3">lws_context_creation_info</a>
</li>
<li>host
: <a class="el" href="structlws__client__connect__info.html#a9b36d47c3422329df32c21040a35ebc7">lws_client_connect_info</a>
</li>
<li>http_proxy_address
: <a class="el" href="structlws__context__creation__info.html#aef917c0b23976a264d2474901b4f5aa3">lws_context_creation_info</a>
</li>
<li>http_proxy_port
: <a class="el" href="structlws__context__creation__info.html#a7b59f2bdc869871e7bde232db94f5ca6">lws_context_creation_info</a>
</li>
</ul>
<h3><a id="index_i"></a>- i -</h3><ul>
<li>id
: <a class="el" href="structlws__protocols.html#a6b632018590c2b1bbe43fbab6d5e6fac">lws_protocols</a>
, <a class="el" href="structlwsgw__hash.html#a29435f5cf78747d4257695b0f141d164">lwsgw_hash</a>
</li>
<li>ietf_version_or_minus_one
: <a class="el" href="structlws__client__connect__info.html#a69abb5aeed755750b9755e5c91db6895">lws_client_connect_info</a>
</li>
<li>iface
: <a class="el" href="structlws__context__creation__info.html#a75434932bb5df54665ea678eb8ac104a">lws_context_creation_info</a>
</li>
<li>interpret
: <a class="el" href="structlws__http__mount.html#a11ea62b952710d59733dbcf9794a5773">lws_http_mount</a>
</li>
<li>ip
: <a class="el" href="structlws__session__info.html#a53eed02325e8717a53297391e3e98fac">lws_session_info</a>
</li>
</ul>
<h3><a id="index_k"></a>- k -</h3><ul>
<li>ka_interval
: <a class="el" href="structlws__context__creation__info.html#a381342a398883d6204955ff3c1849ddd">lws_context_creation_info</a>
</li>
<li>ka_probes
: <a class="el" href="structlws__context__creation__info.html#a3baab4285c679fbe027c2504621d7410">lws_context_creation_info</a>
</li>
<li>ka_time
: <a class="el" href="structlws__context__creation__info.html#ac583ce92b8e1c949cb6fef6bfe713d56">lws_context_creation_info</a>
</li>
<li>keepalive_timeout
: <a class="el" href="structlws__context__creation__info.html#a81697c6b763b5ef3ee52862bc70b07d6">lws_context_creation_info</a>
</li>
<li>key
: <a class="el" href="structlws__polarssl__context.html#a919c33af37aab170f828d954de1fa270">lws_polarssl_context</a>
</li>
</ul>
<h3><a id="index_l"></a>- l -</h3><ul>
<li>l
: <a class="el" href="structlws__plugin.html#a4ef37a43653715b6c69cbf8a7be747f4">lws_plugin</a>
</li>
<li>len
: <a class="el" href="structlws__cgi__args.html#a36e5c256433c187bd0eaa9c1ca667f1d">lws_cgi_args</a>
, <a class="el" href="structlws__ext__option__arg.html#af37f0b6caa7735af51a1ac12b68d5bc5">lws_ext_option_arg</a>
, <a class="el" href="structlws__process__html__args.html#a754513f2311241cabb0cd1c90d7307ef">lws_process_html_args</a>
</li>
<li>lib
: <a class="el" href="structlws__plugin.html#af9e1042dc1de5b9d202c2f5fd1834330">lws_plugin</a>
</li>
<li>list
: <a class="el" href="structlws__plugin.html#a65dffd68fd267ce17b988790d1d35f22">lws_plugin</a>
</li>
<li>log_filepath
: <a class="el" href="structlws__context__creation__info.html#ad0e95ba721f7bd2b676719f8093c23a2">lws_context_creation_info</a>
</li>
<li>loop
: <a class="el" href="structlws__email.html#ab5fbf121195a8e67509c78a42cfbe168">lws_email</a>
</li>
</ul>
<h3><a id="index_m"></a>- m -</h3><ul>
<li>mask
: <a class="el" href="structlws__session__info.html#afb924864b70f40372920688a5c1c895e">lws_session_info</a>
</li>
<li>max_content_size
: <a class="el" href="structlws__email.html#a7bbc1964889c984b3da723c86a210e05">lws_email</a>
</li>
<li>max_http_header_data
: <a class="el" href="structlws__context__creation__info.html#a0cdfd3c484689ba6f0f2cc91b38ce948">lws_context_creation_info</a>
</li>
<li>max_http_header_data2
: <a class="el" href="structlws__context__creation__info.html#aa8d9e85e137f35fb006f2e4a53f0887a">lws_context_creation_info</a>
</li>
<li>max_http_header_pool
: <a class="el" href="structlws__context__creation__info.html#a0b154e79abc1167ba4ac3539f4af6720">lws_context_creation_info</a>
</li>
<li>max_len
: <a class="el" href="structlws__process__html__args.html#a8be7fd396a1942ea2449a2fda990ff99">lws_process_html_args</a>
</li>
<li>method
: <a class="el" href="structlws__client__connect__info.html#aa9e8e3da4e783a0651b0dea62c2dd1db">lws_client_connect_info</a>
</li>
<li>mount_next
: <a class="el" href="structlws__http__mount.html#a0109baf93f23c07c824c997c3533ee44">lws_http_mount</a>
</li>
<li>mountpoint
: <a class="el" href="structlws__http__mount.html#aa2391bfcada0b7a290b3c6651f64586c">lws_http_mount</a>
</li>
<li>mountpoint_len
: <a class="el" href="structlws__http__mount.html#ac8489b60b8f969eb19c9abbdeac90743">lws_http_mount</a>
</li>
<li>mounts
: <a class="el" href="structlws__context__creation__info.html#a13ffbb0d010309669611f8c4eda7d7f8">lws_context_creation_info</a>
</li>
</ul>
<h3><a id="index_n"></a>- n -</h3><ul>
<li>name
: <a class="el" href="structlws__ext__options.html#a1769e4a9805bbdda227821e9578ddc7e">lws_ext_options</a>
, <a class="el" href="structlws__extension.html#a1e5018c883d85176f5c2152176843f9e">lws_extension</a>
, <a class="el" href="structlws__plugin.html#af4ac8fcb79e10e0c2d960e1804d98105">lws_plugin</a>
, <a class="el" href="structlws__protocol__vhost__options.html#acf9db77f8eb64cd4e314be9b43d8a8b9">lws_protocol_vhost_options</a>
, <a class="el" href="structlws__protocols.html#a0e63edb457a613c3fa4271e0a8f19624">lws_protocols</a>
</li>
<li>next
: <a class="el" href="structlws__protocol__vhost__options.html#abc714ddb4171756fc8196e9823a1e21c">lws_protocol_vhost_options</a>
</li>
</ul>
<h3><a id="index_o"></a>- o -</h3><ul>
<li>on_get_body
: <a class="el" href="structlws__email.html#a2aff78c8e04db243052aa91b4d87e987">lws_email</a>
</li>
<li>on_next
: <a class="el" href="structlws__email.html#ad8dc60353ee246d84dd59ec0591e9719">lws_email</a>
</li>
<li>on_sent
: <a class="el" href="structlws__email.html#a39ef6263d58eb40cca417c8697b227d8">lws_email</a>
</li>
<li>open
: <a class="el" href="structlws__plat__file__ops.html#ad37a97abc68d0af967cef874f4d8df32">lws_plat_file_ops</a>
</li>
<li>option_index
: <a class="el" href="structlws__ext__option__arg.html#af57fffcfa253dfa8d98681ac1fb1785f">lws_ext_option_arg</a>
</li>
<li>option_name
: <a class="el" href="structlws__ext__option__arg.html#a0a320c56b79271b8f059eeaad9423ac9">lws_ext_option_arg</a>
</li>
<li>options
: <a class="el" href="structlws__context__creation__info.html#a9d3b17a25e1fbc772f21eb4959a82724">lws_context_creation_info</a>
, <a class="el" href="structlws__protocol__vhost__options.html#afd99fbc90be51ea2465b550c2ec47822">lws_protocol_vhost_options</a>
</li>
<li>origin
: <a class="el" href="structlws__client__connect__info.html#a8595f83e64147cb687b6418cf500dd4c">lws_client_connect_info</a>
, <a class="el" href="structlws__http__mount.html#a21d86fd6043ec00e121ababbc29af39a">lws_http_mount</a>
</li>
<li>origin_protocol
: <a class="el" href="structlws__http__mount.html#a6a9b1492a0b9749e39bd19932717a0b7">lws_http_mount</a>
</li>
</ul>
<h3><a id="index_p"></a>- p -</h3><ul>
<li>p
: <a class="el" href="structlws__process__html__args.html#a11859d8bedd379fbf64543b25c65fe14">lws_process_html_args</a>
</li>
<li>parent_wsi
: <a class="el" href="structlws__client__connect__info.html#a6843a60e1050b10db9d98d7eeb45f587">lws_client_connect_info</a>
</li>
<li>path
: <a class="el" href="structlws__client__connect__info.html#a76a8388733f114fb8fd3643874781185">lws_client_connect_info</a>
</li>
<li>per_session_data_size
: <a class="el" href="structlws__protocols.html#a9bbd85f591ffb4259711cb5acbb05bea">lws_protocols</a>
</li>
<li>plugin_dirs
: <a class="el" href="structlws__context__creation__info.html#a8122cfc0810bafe51edb3ba6bf9a1251">lws_context_creation_info</a>
</li>
<li>port
: <a class="el" href="structlws__client__connect__info.html#a1af124d81c3c22a46d39387c5bc3d6b9">lws_client_connect_info</a>
, <a class="el" href="structlws__context__creation__info.html#a424a5ce268d6903e42243be94487ab85">lws_context_creation_info</a>
</li>
<li>pos
: <a class="el" href="structlws__process__html__state.html#a53234f2948812c7208a256f9f5b23c20">lws_process_html_state</a>
</li>
<li>prev_events
: <a class="el" href="structlws__pollargs.html#a437fec0de5cf264371e1ab5a401e86d8">lws_pollargs</a>
</li>
<li>protocol
: <a class="el" href="structlws__client__connect__info.html#aba35adfb74845a5fd0c3dc141cbdddd2">lws_client_connect_info</a>
, <a class="el" href="structlws__http__mount.html#a05347d92c3d379809564bd4f3eab259b">lws_http_mount</a>
</li>
<li>protocols
: <a class="el" href="structlws__context__creation__info.html#abb90ffb3e6d6db2db20f529d61bd9122">lws_context_creation_info</a>
, <a class="el" href="structlws__plugin__capability.html#a6a4d9d01e770f378ddadc77b37522033">lws_plugin_capability</a>
</li>
<li>provided_client_ssl_ctx
: <a class="el" href="structlws__context__creation__info.html#a1654d41bea6fb2f619b57e6a264b26a4">lws_context_creation_info</a>
</li>
<li>pt_serv_buf_size
: <a class="el" href="structlws__context__creation__info.html#a57f88c0745adbd1d6b9b619b8de30209">lws_context_creation_info</a>
</li>
<li>pvo
: <a class="el" href="structlws__context__creation__info.html#a999866fcd15dbd621773436f97190458">lws_context_creation_info</a>
</li>
<li>pwsi
: <a class="el" href="structlws__client__connect__info.html#a065063b5117ecd0a59567c97f04bda2e">lws_client_connect_info</a>
</li>
</ul>
<h3><a id="index_r"></a>- r -</h3><ul>
<li>read
: <a class="el" href="structlws__plat__file__ops.html#a01f483807a9862736b17ba9ed5110c40">lws_plat_file_ops</a>
</li>
<li>replace
: <a class="el" href="structlws__process__html__state.html#a693d2fb45378afee5da29b539c1ea644">lws_process_html_state</a>
</li>
<li>revents
: <a class="el" href="structlws__pollfd.html#ae7cecfe7511c59d4a3a44f876d030932">lws_pollfd</a>
, <a class="el" href="structpollfd.html#aafb457d11cac415faf0e1e2b825118c2">pollfd</a>
</li>
<li>rx_buffer_size
: <a class="el" href="structlws__protocols.html#a0d1d4996d81b2f5e125bcec981e461c5">lws_protocols</a>
</li>
</ul>
<h3><a id="index_s"></a>- s -</h3><ul>
<li>seek_cur
: <a class="el" href="structlws__plat__file__ops.html#abfcda19b003dcc13c61ff9e2bb4ff869">lws_plat_file_ops</a>
</li>
<li>server_string
: <a class="el" href="structlws__context__creation__info.html#a137a9b9de4f6a7993fed8746d551e616">lws_context_creation_info</a>
</li>
<li>session
: <a class="el" href="structlws__session__info.html#a4353b5dd19400b2b15edfd7cee1e4cd5">lws_session_info</a>
</li>
<li>ssl_ca_filepath
: <a class="el" href="structlws__context__creation__info.html#a4f8e65c3a059d3b586fafa9ef3282c29">lws_context_creation_info</a>
</li>
<li>ssl_cert_filepath
: <a class="el" href="structlws__context__creation__info.html#ac62b0f0e8e402412ba5011d15c244103">lws_context_creation_info</a>
</li>
<li>ssl_cipher_list
: <a class="el" href="structlws__context__creation__info.html#a3e1516fd7fed26bfa77c0246ed26c2eb">lws_context_creation_info</a>
</li>
<li>ssl_connection
: <a class="el" href="structlws__client__connect__info.html#a9862297827639238a7a0b4054c3ddf3d">lws_client_connect_info</a>
</li>
<li>ssl_options_clear
: <a class="el" href="structlws__context__creation__info.html#adb0bc0b28cd7d90ab306723d8ffa96fa">lws_context_creation_info</a>
</li>
<li>ssl_options_set
: <a class="el" href="structlws__context__creation__info.html#a704940261951ced6b5d8191bd8b9bb2d">lws_context_creation_info</a>
</li>
<li>ssl_private_key_filepath
: <a class="el" href="structlws__context__creation__info.html#ab9ec8893e0f7843cf5d783d2f350ef14">lws_context_creation_info</a>
</li>
<li>ssl_private_key_password
: <a class="el" href="structlws__context__creation__info.html#af3fb447be15c4fcb01d3285a6678ab54">lws_context_creation_info</a>
</li>
<li>start
: <a class="el" href="structlws__ext__option__arg.html#a0b1f7b30c3ceaf5f1bf9d105c24568d1">lws_ext_option_arg</a>
, <a class="el" href="structlws__process__html__state.html#af0732884ef891e24fe5fa237ebaa21a3">lws_process_html_state</a>
</li>
<li>stdwsi
: <a class="el" href="structlws__cgi__args.html#a4ccc1058e7e914a26eef31ab2ad46aa1">lws_cgi_args</a>
</li>
<li>swallow
: <a class="el" href="structlws__process__html__state.html#a71982bc1cbd8cf876ca0f545144404eb">lws_process_html_state</a>
</li>
</ul>
<h3><a id="index_t"></a>- t -</h3><ul>
<li>timeout_email
: <a class="el" href="structlws__email.html#a77723e2f2b940b1c879ef5e1cd88c2be">lws_email</a>
</li>
<li>timeout_secs
: <a class="el" href="structlws__context__creation__info.html#a6cfa3d51df2def3349a5cbf0d712822d">lws_context_creation_info</a>
</li>
<li>token
: <a class="el" href="structlws__tokens.html#a9f3635412bc71a5cb78e9862b55f10cd">lws_tokens</a>
</li>
<li>token_len
: <a class="el" href="structlws__tokens.html#a855b7375d1d58516c0ecd4b60e9a7766">lws_tokens</a>
</li>
<li>token_limit
: <a class="el" href="structlws__token__limits.html#a6ec712306cbf8585bce7a56758a3ceff">lws_token_limits</a>
</li>
<li>token_limits
: <a class="el" href="structlws__context__creation__info.html#ac8a75b7b259a3c3a5fbb4219a3f06c29">lws_context_creation_info</a>
</li>
<li>type
: <a class="el" href="structlws__ext__options.html#a7c4dbd62dbeba63a9d50d2306bd1cc61">lws_ext_options</a>
</li>
</ul>
<h3><a id="index_u"></a>- u -</h3><ul>
<li>uid
: <a class="el" href="structlws__context__creation__info.html#ac105b4180008cb3e672d57beead8382e">lws_context_creation_info</a>
</li>
<li>uri_replace_from
: <a class="el" href="structlws__client__connect__info.html#a03c305fdca809667b6a9a83b3edfd83a">lws_client_connect_info</a>
</li>
<li>uri_replace_to
: <a class="el" href="structlws__client__connect__info.html#a9959ba103d3d2484e559a9f7879eebe3">lws_client_connect_info</a>
</li>
<li>user
: <a class="el" href="structlws__context__creation__info.html#a0e9d94cdfb893d777b4a4db81e7b5ac0">lws_context_creation_info</a>
, <a class="el" href="structlws__protocols.html#a3cbd903ad076736ae934a54cae36580e">lws_protocols</a>
</li>
<li>userdata
: <a class="el" href="structlws__client__connect__info.html#a9831b9f9ab54a1aec4bb15324f1c3836">lws_client_connect_info</a>
</li>
<li>username
: <a class="el" href="structlws__gs__event__args.html#a2bec693d8a43730d487004a44326178b">lws_gs_event_args</a>
, <a class="el" href="structlws__session__info.html#a3d57a70b6e7181d95a8bec429b1a7697">lws_session_info</a>
</li>
</ul>
<h3><a id="index_v"></a>- v -</h3><ul>
<li>value
: <a class="el" href="structlws__protocol__vhost__options.html#a0640a92513c70ee6b9b295a9ad1658e7">lws_protocol_vhost_options</a>
</li>
<li>vars
: <a class="el" href="structlws__process__html__state.html#a3b113e00c03a2fded51b1c85ff5bf077">lws_process_html_state</a>
</li>
<li>vhost
: <a class="el" href="structlws__client__connect__info.html#a3893181d728f326f9f5b47c1459cb8be">lws_client_connect_info</a>
</li>
<li>vhost_name
: <a class="el" href="structlws__context__creation__info.html#ad50db098a208f045f7811207d2bee4b9">lws_context_creation_info</a>
</li>
</ul>
<h3><a id="index_w"></a>- w -</h3><ul>
<li>write
: <a class="el" href="structlws__plat__file__ops.html#a1fae8330ee94649a3551e31a30809793">lws_plat_file_ops</a>
</li>
<li>ws_ping_pong_interval
: <a class="el" href="structlws__context__creation__info.html#a33a1a25a7df3793f59047e20dd580078">lws_context_creation_info</a>
</li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

87
doc/html/globals.html Normal file
View file

@ -0,0 +1,87 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Globals</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('globals.html','');});
</script>
<div id="doc-content">
<div class="contents">
<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
<h3><a id="index_e"></a>- e -</h3><ul>
<li>EXTARG_DEC
: <a class="el" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea1c86adf924c8786a12bee9687094673e">libwebsockets.h</a>
</li>
<li>EXTARG_NONE
: <a class="el" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89eaabcf56c456c1ff6e81dc82586a16f14c">libwebsockets.h</a>
</li>
<li>EXTARG_OPT_DEC
: <a class="el" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea5265abe3e1c3f64412f2affe7bffd880">libwebsockets.h</a>
</li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

5
doc/html/globals_dup.js Normal file
View file

@ -0,0 +1,5 @@
var globals_dup =
[
[ "e", "globals.html", null ],
[ "l", "globals_l.html", null ]
];

109
doc/html/globals_enum.html Normal file
View file

@ -0,0 +1,109 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Globals</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('globals_enum.html','');});
</script>
<div id="doc-content">
<div class="contents">
&#160;<ul>
<li>lws_callback_reasons
: <a class="el" href="group__usercb.html#gad62860e19975ba4c4af401c3cdb6abf7">libwebsockets.h</a>
</li>
<li>lws_client_connect_ssl_connection_flags
: <a class="el" href="group__client.html#ga96f3dbad54b2853969cfa933d66871ce">libwebsockets.h</a>
</li>
<li>lws_close_status
: <a class="el" href="group__wsclose.html#gae399c571df32ba532c0ca67da9284985">libwebsockets.h</a>
</li>
<li>lws_context_options
: <a class="el" href="group__context-and-vhost.html#ga41c2d763f78cc248df3b9f8645dbd2a5">libwebsockets.h</a>
</li>
<li>lws_ext_options_types
: <a class="el" href="group__extensions.html#gacc9f55936dc165257a2e1f7d47bce89e">libwebsockets.h</a>
</li>
<li>lws_gs_event
: <a class="el" href="group__generic-sessions.html#gaa93946b3d921072209d5cd8cdfa5332e">libwebsockets.h</a>
</li>
<li>lws_mount_protocols
: <a class="el" href="group__vhost-mounts.html#ga31eca18e50cb4357480f2fcad36ff437">libwebsockets.h</a>
</li>
<li>lws_spa_fileupload_states
: <a class="el" href="group__form-parsing.html#ga41a74a822771d3dce89751aa3bce28ae">libwebsockets.h</a>
</li>
<li>lws_write_protocol
: <a class="el" href="group__sending-data.html#ga98b099cf8c1c7e38ad78501f270e193d">libwebsockets.h</a>
</li>
<li>lwsgs_auth_bits
: <a class="el" href="group__generic-sessions.html#ga7c2dc7bfb4ccb91c5d771f9e9ea237e1">libwebsockets.h</a>
</li>
<li>lwsgs_smtp_states
: <a class="el" href="group__smtp.html#ga116be79bf44f9dc2a97f46e051fe4dc0">libwebsockets.h</a>
</li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

406
doc/html/globals_eval.html Normal file
View file

@ -0,0 +1,406 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Globals</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('globals_eval.html','');});
</script>
<div id="doc-content">
<div class="contents">
&#160;
<h3><a id="index_e"></a>- e -</h3><ul>
<li>EXTARG_DEC
: <a class="el" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea1c86adf924c8786a12bee9687094673e">libwebsockets.h</a>
</li>
<li>EXTARG_NONE
: <a class="el" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89eaabcf56c456c1ff6e81dc82586a16f14c">libwebsockets.h</a>
</li>
<li>EXTARG_OPT_DEC
: <a class="el" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea5265abe3e1c3f64412f2affe7bffd880">libwebsockets.h</a>
</li>
</ul>
<h3><a id="index_l"></a>- l -</h3><ul>
<li>LGSSMTP_CONNECTED
: <a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d">libwebsockets.h</a>
</li>
<li>LGSSMTP_CONNECTING
: <a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933">libwebsockets.h</a>
</li>
<li>LGSSMTP_IDLE
: <a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c">libwebsockets.h</a>
</li>
<li>LGSSMTP_SENT_BODY
: <a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69">libwebsockets.h</a>
</li>
<li>LGSSMTP_SENT_DATA
: <a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14">libwebsockets.h</a>
</li>
<li>LGSSMTP_SENT_FROM
: <a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab">libwebsockets.h</a>
</li>
<li>LGSSMTP_SENT_HELO
: <a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad">libwebsockets.h</a>
</li>
<li>LGSSMTP_SENT_QUIT
: <a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5">libwebsockets.h</a>
</li>
<li>LGSSMTP_SENT_TO
: <a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_ADD_POLL_FD
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ab69783a9fbf2ca71ad70706bda77b412">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CHANGE_MODE_POLL_FD
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa87d2e82fffa42c3680c7403ef94216e">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a909cc2a7018864b0b71abacc4058fd8f">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a1ce5b22039ca37ee224d00047596ea46">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLIENT_CONNECTION_ERROR
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad8c6207b0c4e732f3d507f0fb79370e8">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLIENT_ESTABLISHED
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7e12418eec9bce85735e6460176ab604">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa536e574a642ff3ab9e12bff7ba2c6a2">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLIENT_HTTP_WRITEABLE
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aeb0cec65ec82a713cd01e9ca9aeeb5e6">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLIENT_RECEIVE
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7abbbe7a0a67c5866ca9109d46823fc5b1">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLIENT_RECEIVE_PONG
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a136a7cec11c3afd13245623bd84e76c9">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLIENT_WRITEABLE
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8e8b2e6dbeac76d8d126947d2166a514">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLOSED
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a48a9590e5e18c7920282e094a0bfd9d8">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLOSED_HTTP
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a838b18d255c1b94a533287ba302a2eba">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CONFIRM_EXTENSION_OKAY
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a390da3639296660a78cc1a5dcb19037e">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_DEL_POLL_FD
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a1df60f314710236f9b53efbf468da768">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_ESTABLISHED
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a24d39bf1cfc0bad9d92da9ac1717e439">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_FILTER_HTTP_CONNECTION
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a75199176c82c1a56e4a6bbf1cc30c12c">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_FILTER_NETWORK_CONNECTION
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a026502768778b8d79d62dd0fe4375fc6">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7accd8753672d319a30b4b4c2fb775e84d">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_GET_THREAD_ID
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7adfb41c92e2522712207ef7f2462b5e34">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_HTTP
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae8d1de0bb56e03aa58cb4d44b18edd2e">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_HTTP_BODY
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac4c68e00efcf1ff7bda7ada462aff8ae">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_HTTP_BODY_COMPLETION
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2fce9a8608220f32abbf1422a5498804">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_HTTP_FILE_COMPLETION
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa627548e1296e654fcfab463ec3c9587">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_HTTP_PMO
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa5cc921b7697743017a533822a3d556a">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_HTTP_WRITEABLE
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afedadfb3cde37a8ea4c84ed535f26d09">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_LOCK_POLL
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8909732521d379179003d97ab7a05428">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_OPENSSL_CONTEXT_REQUIRES_PRIVATE_KEY
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa46f705dcf97502e95627ffde614f98b">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_OPENSSL_LOAD_EXTRA_CLIENT_VERIFY_CERTS
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae4986291b7a810fe290851d73bebeb1c">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a06006e98d27e1e884364d88317f83493">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_OPENSSL_PERFORM_CLIENT_CERT_VERIFICATION
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae5ad65d779b7eab32ab67ceff91a3bac">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_PROTOCOL_DESTROY
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a54269ca88508e6efd3afdb9d360a9caa">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_PROTOCOL_INIT
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad5d34583e3556e153eda91620b48cc49">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_RECEIVE
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a492c1b1c0ac0ed980042ee732fe2990c">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_RECEIVE_PONG
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2db02fc6e1c17ab62b52109d1aa9d738">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae9734e1d7af2abf291665ce9e4a728d3">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_SERVER_WRITEABLE
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7ec8e2e9557ee02a4fc9f7dec7e2babc">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_UNLOCK_POLL
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a0e9e3dd667c0c42cdbe1a3d921f4fd79">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_USER
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a982579753e70e59a9ea13ce628ac891a">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_WS_PEER_INITIATED_CLOSE
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac3fc5bbb55e69f90396526287ee84a51">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_WSI_CREATE
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afd8fd77a1cc9405fcb4f26915d7f2d01">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_WSI_DESTROY
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aca834dc035b7f7486f9ce40fde54fe9e">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_ABNORMAL_CLOSE
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a68b3d34bebd88547dcfa5cadba0acd6c">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_EXTENSION_REQUIRED
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_GOINGAWAY
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_INVALID_PAYLOAD
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_MESSAGE_TOO_LARGE
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_NO_STATUS
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a4b8a3b7ce6f731e5248e4b0fb64a5044">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_NORMAL
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_POLICY_VIOLATION
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_PROTOCOL_ERR
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_RESERVED
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_TLS_FAILURE
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_UNACCEPTABLE_OPCODE
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a462c99b05459df700919cfd3f53c8276">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_UNEXPECTED_CONDITION
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a1cc4562d05cba52a6dfa0697a65ade0d">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_DISABLE_IPV6
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a34ab36e68c0d593b6f19b8d5ef1240a9">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_DISABLE_OS_CA_CERTS
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a4933347a821e73c3f1e13fb6bfc7ad93">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a7fed6a527c8d5e0acac1b4179644583a">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_EXPLICIT_VHOSTS
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5accc9d0d11d1124a21659586164b0962e">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_IPV6_V6ONLY_MODIFY
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5af62887536e25e053e68741006dba46d8">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_IPV6_V6ONLY_VALUE
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aca5d42820b65eac5618ec3f0bd8a1160">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_LIBEV
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a273d9975675130de0c6dc937dde7c8a6">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_LIBUV
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aff121db04a10cf8b2c5df9d4f2b89f1e">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_PEER_CERT_NOT_REQUIRED
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5ac56a8a6590e74a8016d0fae09fb404fc">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a4832187186c4d130c68051214cd42ada">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a274ed462a1a9239eb6ddf9007f5b7092">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_SKIP_SERVER_CANONICAL_NAME
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a6582c985ee0ceaadc1d277030eae2d7c">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_SSL_ECDH
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a1b2f8bde0f62adc7ebe81b2043f34c0c">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_STS
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5ac962efd35abf6c402f9fb14aa14f5016">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_UNIX_SOCK
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a9637e9001d8c8b2521086bcafbd8a941">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_UV_NO_SIGSEGV_SIGFPE_SPIN
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a87a824b2e812f4c3e7f2c4a1ea4f8abd">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_VALIDATE_UTF8
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aa0158b4e85420811e6b0f1378c6ded0f">libwebsockets.h</a>
</li>
<li>LWS_UFS_CONTENT
: <a class="el" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aead3a958e7719ac273c3ba4f684f00c87f">libwebsockets.h</a>
</li>
<li>LWS_UFS_FINAL_CONTENT
: <a class="el" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea6ce2a55a4c3695cdb640c893d95bd3a7">libwebsockets.h</a>
</li>
<li>LWS_UFS_OPEN
: <a class="el" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83">libwebsockets.h</a>
</li>
<li>LWS_WRITE_BINARY
: <a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2">libwebsockets.h</a>
</li>
<li>LWS_WRITE_CLIENT_IGNORE_XOR_MASK
: <a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da220d8e8652d9b97fb66e476e2a60ffce">libwebsockets.h</a>
</li>
<li>LWS_WRITE_CONTINUATION
: <a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da10047eb05b5e1c298151dc47a5b44826">libwebsockets.h</a>
</li>
<li>LWS_WRITE_HTTP
: <a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e">libwebsockets.h</a>
</li>
<li>LWS_WRITE_HTTP_HEADERS
: <a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dafe5a38e940ce56708ac814627e9c0917">libwebsockets.h</a>
</li>
<li>LWS_WRITE_NO_FIN
: <a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3">libwebsockets.h</a>
</li>
<li>LWS_WRITE_TEXT
: <a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da80e8f169fda236c56bfb795ed62903db">libwebsockets.h</a>
</li>
<li>LWSGS_AUTH_ADMIN
: <a class="el" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a0657a9e846814781b128c397fe4b10bf">libwebsockets.h</a>
</li>
<li>LWSGS_AUTH_FORGOT_FLOW
: <a class="el" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a2cd8fb86e3b85c106e7711c03f0ddd0a">libwebsockets.h</a>
</li>
<li>LWSGS_AUTH_LOGGED_IN
: <a class="el" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a81e63075115dedd150265d81b8f7fa57">libwebsockets.h</a>
</li>
<li>LWSGS_AUTH_VERIFIED
: <a class="el" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a5a607e4668d20cadada62c4b8007f887">libwebsockets.h</a>
</li>
<li>LWSGSE_CREATED
: <a class="el" href="group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ea596010a165bf13473c5eea3a34cd4308">libwebsockets.h</a>
</li>
<li>LWSGSE_DELETED
: <a class="el" href="group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ead908cdc5689c5d22c9d3c8934e94dcde">libwebsockets.h</a>
</li>
<li>LWSMPRO_CALLBACK
: <a class="el" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da">libwebsockets.h</a>
</li>
<li>LWSMPRO_CGI
: <a class="el" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69">libwebsockets.h</a>
</li>
<li>LWSMPRO_FILE
: <a class="el" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2">libwebsockets.h</a>
</li>
<li>LWSMPRO_HTTP
: <a class="el" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0">libwebsockets.h</a>
</li>
<li>LWSMPRO_HTTPS
: <a class="el" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1">libwebsockets.h</a>
</li>
<li>LWSMPRO_REDIR_HTTP
: <a class="el" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970">libwebsockets.h</a>
</li>
<li>LWSMPRO_REDIR_HTTPS
: <a class="el" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67">libwebsockets.h</a>
</li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

414
doc/html/globals_func.html Normal file
View file

@ -0,0 +1,414 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Globals</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('globals_func.html','');});
</script>
<div id="doc-content">
<div class="contents">
&#160;
<h3><a id="index_l"></a>- l -</h3><ul>
<li>lws_add_http_header_by_name()
: <a class="el" href="group__HTTP-headers-create.html#ga2b36bf44405755ff51c1939303b995a8">libwebsockets.h</a>
</li>
<li>lws_add_http_header_by_token()
: <a class="el" href="group__HTTP-headers-create.html#gaf74adb761b22566ad70004882712dce1">libwebsockets.h</a>
</li>
<li>lws_add_http_header_content_length()
: <a class="el" href="group__HTTP-headers-create.html#gacc76a5babcb4dce1b01b1955aa7a2faf">libwebsockets.h</a>
</li>
<li>lws_add_http_header_status()
: <a class="el" href="group__HTTP-headers-create.html#ga29b7d6d2ddfdbaff3d8b607e7e3151b6">libwebsockets.h</a>
</li>
<li>lws_adopt_socket()
: <a class="el" href="group__sock-adopt.html#gabe71b7462afb21c767bdc67334f305af">libwebsockets.h</a>
</li>
<li>lws_adopt_socket_readbuf()
: <a class="el" href="group__sock-adopt.html#gab2d045df0f81afe00891aaed312d552b">libwebsockets.h</a>
</li>
<li>lws_b64_decode_string()
: <a class="el" href="group__sha.html#ga66316e6a5a0644a09d5a10e919dfdd8d">libwebsockets.h</a>
</li>
<li>lws_b64_encode_string()
: <a class="el" href="group__sha.html#gaf39765e4a3b413efb65e4698b2ec3575">libwebsockets.h</a>
</li>
<li>lws_callback_all_protocol()
: <a class="el" href="group__callback-when-writeable.html#gacf04bbe089f47c971c6408c5efe2ac70">libwebsockets.h</a>
</li>
<li>lws_callback_all_protocol_vhost()
: <a class="el" href="group__callback-when-writeable.html#ga13c984d8c5a44a745fd02bc2fba36053">libwebsockets.h</a>
</li>
<li>lws_callback_on_writable()
: <a class="el" href="group__callback-when-writeable.html#ga941caaa468bc507b1cae52275f58800d">libwebsockets.h</a>
</li>
<li>lws_callback_on_writable_all_protocol()
: <a class="el" href="group__callback-when-writeable.html#gabbe4655c7eeb3eb1671b2323ec6b3107">libwebsockets.h</a>
</li>
<li>lws_callback_on_writable_all_protocol_vhost()
: <a class="el" href="group__callback-when-writeable.html#ga8570860e191b62db264f2bac67354ea8">libwebsockets.h</a>
</li>
<li>lws_callback_vhost_protocols()
: <a class="el" href="group__callback-when-writeable.html#ga60939cf0c073d933fde3d17f3591caf5">libwebsockets.h</a>
</li>
<li>lws_cancel_service()
: <a class="el" href="group__service.html#ga53e3d0801dfda7960a7249dd559e68a2">libwebsockets.h</a>
</li>
<li>lws_cancel_service_pt()
: <a class="el" href="group__service.html#ga29c246707997ab7a466aa709aecd2d7b">libwebsockets.h</a>
</li>
<li>lws_canonical_hostname()
: <a class="el" href="group__net.html#gad0df22db2be9fc65a667a1e83f9a92a4">libwebsockets.h</a>
</li>
<li>lws_cgi()
: <a class="el" href="libwebsockets_8h.html#af52923473c59e643a974d65e12290831">libwebsockets.h</a>
</li>
<li>lws_cgi_kill()
: <a class="el" href="libwebsockets_8h.html#a27bb0b3cdcd0af839c928c253b521ff4">libwebsockets.h</a>
</li>
<li>lws_cgi_write_split_stdout_headers()
: <a class="el" href="libwebsockets_8h.html#a5326d3402af8429a166dd991dc65c4a2">libwebsockets.h</a>
</li>
<li>lws_chunked_html_process()
: <a class="el" href="group__html-chunked-substitution.html#ga643073f918c0a7016b690aae9793fd60">libwebsockets.h</a>
</li>
<li>lws_client_connect()
: <a class="el" href="group__client.html#ga4af0a20108a95e8b6d94dd4d80055ff3">libwebsockets.h</a>
</li>
<li>lws_client_connect_extended()
: <a class="el" href="group__client.html#gac6a8558b4410961a880241c2ac1271e2">libwebsockets.h</a>
</li>
<li>lws_client_connect_via_info()
: <a class="el" href="group__client.html#ga0c966136905f467816307cfba6deb5fd">libwebsockets.h</a>
</li>
<li>lws_close_reason()
: <a class="el" href="group__wsclose.html#gaa1c863415d1783cd8de7938aa6efa262">libwebsockets.h</a>
</li>
<li>lws_context_destroy()
: <a class="el" href="group__context-and-vhost.html#ga8ee0314028755f1ddfa9428e09b4fddb">libwebsockets.h</a>
</li>
<li>lws_context_user()
: <a class="el" href="group__context-and-vhost.html#gaeb12f934bfd178bd2132a9e73fc641da">libwebsockets.h</a>
</li>
<li>lws_create_context()
: <a class="el" href="group__context-and-vhost.html#gaf2fff58562caab7510c41eeac85a8648">libwebsockets.h</a>
</li>
<li>lws_create_vhost()
: <a class="el" href="group__context-and-vhost.html#ga0c54c667ccd9b8b3dddcd123ca72f87c">libwebsockets.h</a>
</li>
<li>lws_daemonize()
: <a class="el" href="group__misc.html#gace5171b1dbbc03ec89a98f8afdb5c9af">libwebsockets.h</a>
</li>
<li>lws_email_check()
: <a class="el" href="group__smtp.html#ga5e535e346d92a9daf00be33abf79d4eb">libwebsockets.h</a>
</li>
<li>lws_email_destroy()
: <a class="el" href="group__smtp.html#ga25298a5afc1074e13b2d5711a86432b2">libwebsockets.h</a>
</li>
<li>lws_email_init()
: <a class="el" href="group__smtp.html#ga77fc9b56a1bb39484844981ec375fc29">libwebsockets.h</a>
</li>
<li>lws_ext_parse_options()
: <a class="el" href="group__extensions.html#ga6fb3e2c3dfb9d64dc87026a4e99c128b">libwebsockets.h</a>
</li>
<li>lws_extension_callback_pm_deflate()
: <a class="el" href="group__extensions.html#ga4cdbe42d872e21a448a947714d6c607e">libwebsockets.h</a>
</li>
<li>lws_finalize_http_header()
: <a class="el" href="group__HTTP-headers-create.html#ga4887605ff2242a54db3a7fa01f6f864b">libwebsockets.h</a>
</li>
<li>lws_finalize_startup()
: <a class="el" href="group__Protocols-and-Plugins.html#ga106b37ae9c247e84d191ab09441adc43">libwebsockets.h</a>
</li>
<li>lws_frame_is_binary()
: <a class="el" href="group__wsstatus.html#gaccd9c59336efad8af0554f79cc5966fd">libwebsockets.h</a>
</li>
<li>lws_get_child()
: <a class="el" href="group__misc.html#gacae4d7b6a8d22e4c2d82ff8b12c1e234">libwebsockets.h</a>
</li>
<li>lws_get_context()
: <a class="el" href="group__misc.html#ga0af4f7d2dd375aeedcfa7eb0e1101c4b">libwebsockets.h</a>
</li>
<li>lws_get_count_threads()
: <a class="el" href="group__misc.html#ga629f48268fd1856b54b11172991b97d9">libwebsockets.h</a>
</li>
<li>lws_get_fops()
: <a class="el" href="group__fops.html#gac08aef64c4c34647ed699b24759b6b0e">libwebsockets.h</a>
</li>
<li>lws_get_library_version()
: <a class="el" href="group__misc.html#gac6abfc0b2bd5b2f09281a4432bb2f5f0">libwebsockets.h</a>
</li>
<li>lws_get_mimetype()
: <a class="el" href="group__httpft.html#gab4da87a4800413f15e7aba649fb1d77c">libwebsockets.h</a>
</li>
<li>lws_get_parent()
: <a class="el" href="group__misc.html#ga8930fe36a3f3eefe4a6a4fd499d8e899">libwebsockets.h</a>
</li>
<li>lws_get_peer_addresses()
: <a class="el" href="group__net.html#ga092e5f473b3347f03ffeef8a950080f3">libwebsockets.h</a>
</li>
<li>lws_get_peer_simple()
: <a class="el" href="group__net.html#gad01014fed09759741b6d23afccfdaacc">libwebsockets.h</a>
</li>
<li>lws_get_peer_write_allowance()
: <a class="el" href="group__callback-when-writeable.html#gac4643fe16b0940ae5b68b4ee6195cbde">libwebsockets.h</a>
</li>
<li>lws_get_protocol()
: <a class="el" href="group__Protocols-and-Plugins.html#ga72ad550786ca7976463589d347e62112">libwebsockets.h</a>
</li>
<li>lws_get_random()
: <a class="el" href="group__misc.html#ga58f906c6be0ca80efd813f694569dd4a">libwebsockets.h</a>
</li>
<li>lws_get_reserved_bits()
: <a class="el" href="group__wsstatus.html#ga3df5045656dfb6b0e63a38de2dca79d2">libwebsockets.h</a>
</li>
<li>lws_get_socket_fd()
: <a class="el" href="group__callback-when-writeable.html#gaa709e02a10558753c851e58f1e2c16ba">libwebsockets.h</a>
</li>
<li>lws_get_urlarg_by_name()
: <a class="el" href="group__HTTP-headers-read.html#ga84e9ce5e71a77501a0998ac403a984c2">libwebsockets.h</a>
</li>
<li>lws_get_vhost()
: <a class="el" href="group__context-and-vhost.html#ga06e77ce2916f8bc9826ef8d9d68e3932">libwebsockets.h</a>
</li>
<li>lws_hdr_copy()
: <a class="el" href="group__HTTP-headers-read.html#ga6ce6aa1c0155ea42b7708bed271d1c77">libwebsockets.h</a>
</li>
<li>lws_hdr_copy_fragment()
: <a class="el" href="group__HTTP-headers-read.html#gaa427cad61a9a5e3004afd65c4527b5e9">libwebsockets.h</a>
</li>
<li>lws_hdr_fragment_length()
: <a class="el" href="group__HTTP-headers-read.html#ga594f3d0ece5b09c2ccf9f98ea533bb4e">libwebsockets.h</a>
</li>
<li>lws_hdr_total_length()
: <a class="el" href="group__HTTP-headers-read.html#ga8ade0e1ffb0da7e62b989d8d867bf6c8">libwebsockets.h</a>
</li>
<li>lws_http_redirect()
: <a class="el" href="group__http.html#ga8fbf01e473ac421fc33ad9f8da8b8a25">libwebsockets.h</a>
</li>
<li>lws_http_transaction_completed()
: <a class="el" href="group__http.html#gad27aed6c66a41b2b89ffe4da2a309e8a">libwebsockets.h</a>
</li>
<li>lws_init_vhost_client_ssl()
: <a class="el" href="group__client.html#ga4f44b8230e6732816ca5cd8d1aaaf340">libwebsockets.h</a>
</li>
<li>lws_interface_to_sa()
: <a class="el" href="group__net.html#ga869d8bdffb0f2a7ce08e3ce10d6be3d8">libwebsockets.h</a>
</li>
<li>lws_is_cgi()
: <a class="el" href="group__wsstatus.html#ga4ad226d5e01024b4046f4a5a37199aa1">libwebsockets.h</a>
</li>
<li>lws_is_final_fragment()
: <a class="el" href="group__wsstatus.html#ga08e9ee165fca503fd9427d55cfecac37">libwebsockets.h</a>
</li>
<li>lws_is_ssl()
: <a class="el" href="group__wsstatus.html#ga26a140623d202dd2bf2004deb6994baa">libwebsockets.h</a>
</li>
<li>lws_json_dump_context()
: <a class="el" href="group__context-and-vhost.html#gae2134657cdd2ea7a59e13ad314e4c50d">libwebsockets.h</a>
</li>
<li>lws_json_dump_vhost()
: <a class="el" href="group__context-and-vhost.html#ga94e6cc2223c4eec316b13bcebc3628b6">libwebsockets.h</a>
</li>
<li>lws_json_purify()
: <a class="el" href="group__pur.html#gab15187efcfa256b7c928562c182b92a3">libwebsockets.h</a>
</li>
<li>lws_now_secs()
: <a class="el" href="group__misc.html#ga33bf2635033710b25f931b57ed663e1e">libwebsockets.h</a>
</li>
<li>lws_parse_uri()
: <a class="el" href="group__misc.html#ga1ec0d9faac5d3a5824d765c287c043aa">libwebsockets.h</a>
</li>
<li>lws_partial_buffered()
: <a class="el" href="group__wsstatus.html#gaeca4afc94b1f026034f99cbba37e2f85">libwebsockets.h</a>
</li>
<li>lws_plat_service_tsi()
: <a class="el" href="group__service.html#gab1ff2c19455268fa0d5b617d8057fbfc">libwebsockets.h</a>
</li>
<li>lws_protocol_get()
: <a class="el" href="group__Protocols-and-Plugins.html#ga8bbe5e65faca068845704bab911a5030">libwebsockets.h</a>
</li>
<li>lws_protocol_vh_priv_get()
: <a class="el" href="group__Protocols-and-Plugins.html#gaf3be4243443baac0f8be1fcfb4d25129">libwebsockets.h</a>
</li>
<li>lws_protocol_vh_priv_zalloc()
: <a class="el" href="group__Protocols-and-Plugins.html#gaec0c0477288ff3f83aff38d357b883d1">libwebsockets.h</a>
</li>
<li>lws_remaining_packet_payload()
: <a class="el" href="libwebsockets_8h.html#a72fe65e83b8bb03f904a1a256c673536">libwebsockets.h</a>
</li>
<li>lws_return_http_status()
: <a class="el" href="group__http.html#gac8a4a71240857dc6b2ed70456b6923f4">libwebsockets.h</a>
</li>
<li>lws_rx_flow_allow_all_protocol()
: <a class="el" href="libwebsockets_8h.html#a5e627dbf1db48170ef486edbaf268672">libwebsockets.h</a>
</li>
<li>lws_rx_flow_control()
: <a class="el" href="libwebsockets_8h.html#adf4abd01e8c43f07c6e498ce13590c3e">libwebsockets.h</a>
</li>
<li>lws_send_pipe_choked()
: <a class="el" href="group__wsstatus.html#ga2bb3655329b4651cd06f79ee3a764421">libwebsockets.h</a>
</li>
<li>lws_serve_http_file()
: <a class="el" href="group__httpft.html#gab393a06d3d2722af4c3f8b06842c80d7">libwebsockets.h</a>
</li>
<li>lws_service()
: <a class="el" href="group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8">libwebsockets.h</a>
</li>
<li>lws_service_adjust_timeout()
: <a class="el" href="group__service.html#ga4fd9d714434ca499e2b3f7dbba86f241">libwebsockets.h</a>
</li>
<li>lws_service_fd()
: <a class="el" href="group__service.html#gad82efa5466d14a9f05aa06416375b28d">libwebsockets.h</a>
</li>
<li>lws_service_fd_tsi()
: <a class="el" href="group__service.html#gaebf426eda371ba23642fc11d8e0ace6b">libwebsockets.h</a>
</li>
<li>lws_service_tsi()
: <a class="el" href="group__service.html#ga9b3cc4473fd8848e5bbee7f310712939">libwebsockets.h</a>
</li>
<li>lws_set_allocator()
: <a class="el" href="group__misc.html#gab321ed812f46f6dc7ef9e3ca6f00cf1b">libwebsockets.h</a>
</li>
<li>lws_set_extension_option()
: <a class="el" href="group__extensions.html#gae0e24e1768f83a7fb07896ce975704b9">libwebsockets.h</a>
</li>
<li>lws_set_log_level()
: <a class="el" href="group__log.html#ga244647f9e1bf0097ccdde66d74f41e26">libwebsockets.h</a>
</li>
<li>lws_set_proxy()
: <a class="el" href="group__context-and-vhost.html#ga7e9d5405547a457d86e0b4f0ae2bb1c4">libwebsockets.h</a>
</li>
<li>lws_set_timeout()
: <a class="el" href="group__timeout.html#gaced9f9237f6172fed9f730a2af51345a">libwebsockets.h</a>
</li>
<li>lws_SHA1()
: <a class="el" href="group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5">libwebsockets.h</a>
</li>
<li>lws_snprintf()
: <a class="el" href="group__misc.html#ga2163492f17db959a36967adb73d823b4">libwebsockets.h</a>
</li>
<li>lws_spa_create()
: <a class="el" href="group__form-parsing.html#ga162f86762173a2bc8c28497941d74815">libwebsockets.h</a>
</li>
<li>lws_spa_destroy()
: <a class="el" href="group__form-parsing.html#gaaa482f07dad3f04b391cccf0a814e13b">libwebsockets.h</a>
</li>
<li>lws_spa_finalize()
: <a class="el" href="group__form-parsing.html#ga83835bf250ee3d4a60f36a182f2b8d24">libwebsockets.h</a>
</li>
<li>lws_spa_get_length()
: <a class="el" href="group__form-parsing.html#ga3fbe378632f85ec9a14cc2c1687bf05f">libwebsockets.h</a>
</li>
<li>lws_spa_get_string()
: <a class="el" href="group__form-parsing.html#ga2da476217166da02704b90d3a8d4f3cd">libwebsockets.h</a>
</li>
<li>lws_spa_process()
: <a class="el" href="group__form-parsing.html#ga9ad9ebf5ea1a7108415ed7e04cb231d2">libwebsockets.h</a>
</li>
<li>lws_sql_purify()
: <a class="el" href="group__pur.html#ga9cc82f06e5ae7e71458626d7a39a5865">libwebsockets.h</a>
</li>
<li>lws_token_to_string()
: <a class="el" href="group__HTTP-headers-read.html#ga2c0597b2ef1d2cee35736c338bcbd17b">libwebsockets.h</a>
</li>
<li>lws_urldecode()
: <a class="el" href="group__urlendec.html#gaa373a9c16acdd96c395af61ab915ece3">libwebsockets.h</a>
</li>
<li>lws_urlencode()
: <a class="el" href="group__urlendec.html#gabc2888476e50e001c875c1a8abf455b7">libwebsockets.h</a>
</li>
<li>lws_vhost_get()
: <a class="el" href="group__context-and-vhost.html#ga8db03e19a372e34ac25cf21af894a02c">libwebsockets.h</a>
</li>
<li>lws_vhost_name_to_protocol()
: <a class="el" href="group__Protocols-and-Plugins.html#ga25754726d97c5f519d313e691a9fe29d">libwebsockets.h</a>
</li>
<li>lws_write()
: <a class="el" href="group__sending-data.html#gafd5fdd285a0e25ba7e3e1051deec1001">libwebsockets.h</a>
</li>
<li>lws_wsi_user()
: <a class="el" href="group__misc.html#gaa194584fff9698f3b280658f770ccd0f">libwebsockets.h</a>
</li>
<li>lwsl_emit_syslog()
: <a class="el" href="group__log.html#gab7c0fc936cc9f1eb58e2bb234c15147c">libwebsockets.h</a>
</li>
<li>lwsl_hexdump()
: <a class="el" href="group__log.html#ga898b1f03872ad019f507d4e35bbefa90">libwebsockets.h</a>
</li>
<li>lwsl_timestamp()
: <a class="el" href="group__log.html#ga42e39775c6b69b7251bdbf5a2cdd5dcd">libwebsockets.h</a>
</li>
<li>lwsws_get_config_globals()
: <a class="el" href="group__context-and-vhost.html#ga98d88c9080fd89c37114363a6474ea73">libwebsockets.h</a>
</li>
<li>lwsws_get_config_vhosts()
: <a class="el" href="group__context-and-vhost.html#ga341064721add2618ae1b29717493a212">libwebsockets.h</a>
</li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

771
doc/html/globals_l.html Normal file
View file

@ -0,0 +1,771 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Globals</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('globals_l.html','');});
</script>
<div id="doc-content">
<div class="contents">
<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
<h3><a id="index_l"></a>- l -</h3><ul>
<li>LGSSMTP_CONNECTED
: <a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d">libwebsockets.h</a>
</li>
<li>LGSSMTP_CONNECTING
: <a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933">libwebsockets.h</a>
</li>
<li>LGSSMTP_IDLE
: <a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c">libwebsockets.h</a>
</li>
<li>LGSSMTP_SENT_BODY
: <a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69">libwebsockets.h</a>
</li>
<li>LGSSMTP_SENT_DATA
: <a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14">libwebsockets.h</a>
</li>
<li>LGSSMTP_SENT_FROM
: <a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab">libwebsockets.h</a>
</li>
<li>LGSSMTP_SENT_HELO
: <a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad">libwebsockets.h</a>
</li>
<li>LGSSMTP_SENT_QUIT
: <a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5">libwebsockets.h</a>
</li>
<li>LGSSMTP_SENT_TO
: <a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83">libwebsockets.h</a>
</li>
<li>lws_add_http_header_by_name()
: <a class="el" href="group__HTTP-headers-create.html#ga2b36bf44405755ff51c1939303b995a8">libwebsockets.h</a>
</li>
<li>lws_add_http_header_by_token()
: <a class="el" href="group__HTTP-headers-create.html#gaf74adb761b22566ad70004882712dce1">libwebsockets.h</a>
</li>
<li>lws_add_http_header_content_length()
: <a class="el" href="group__HTTP-headers-create.html#gacc76a5babcb4dce1b01b1955aa7a2faf">libwebsockets.h</a>
</li>
<li>lws_add_http_header_status()
: <a class="el" href="group__HTTP-headers-create.html#ga29b7d6d2ddfdbaff3d8b607e7e3151b6">libwebsockets.h</a>
</li>
<li>lws_adopt_socket()
: <a class="el" href="group__sock-adopt.html#gabe71b7462afb21c767bdc67334f305af">libwebsockets.h</a>
</li>
<li>lws_adopt_socket_readbuf()
: <a class="el" href="group__sock-adopt.html#gab2d045df0f81afe00891aaed312d552b">libwebsockets.h</a>
</li>
<li>lws_b64_decode_string()
: <a class="el" href="group__sha.html#ga66316e6a5a0644a09d5a10e919dfdd8d">libwebsockets.h</a>
</li>
<li>lws_b64_encode_string()
: <a class="el" href="group__sha.html#gaf39765e4a3b413efb65e4698b2ec3575">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_ADD_POLL_FD
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ab69783a9fbf2ca71ad70706bda77b412">libwebsockets.h</a>
</li>
<li>lws_callback_all_protocol()
: <a class="el" href="group__callback-when-writeable.html#gacf04bbe089f47c971c6408c5efe2ac70">libwebsockets.h</a>
</li>
<li>lws_callback_all_protocol_vhost()
: <a class="el" href="group__callback-when-writeable.html#ga13c984d8c5a44a745fd02bc2fba36053">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CHANGE_MODE_POLL_FD
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa87d2e82fffa42c3680c7403ef94216e">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a909cc2a7018864b0b71abacc4058fd8f">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a1ce5b22039ca37ee224d00047596ea46">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLIENT_CONNECTION_ERROR
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad8c6207b0c4e732f3d507f0fb79370e8">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLIENT_ESTABLISHED
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7e12418eec9bce85735e6460176ab604">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa536e574a642ff3ab9e12bff7ba2c6a2">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLIENT_HTTP_WRITEABLE
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aeb0cec65ec82a713cd01e9ca9aeeb5e6">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLIENT_RECEIVE
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7abbbe7a0a67c5866ca9109d46823fc5b1">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLIENT_RECEIVE_PONG
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a136a7cec11c3afd13245623bd84e76c9">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLIENT_WRITEABLE
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8e8b2e6dbeac76d8d126947d2166a514">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLOSED
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a48a9590e5e18c7920282e094a0bfd9d8">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLOSED_HTTP
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a838b18d255c1b94a533287ba302a2eba">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CONFIRM_EXTENSION_OKAY
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a390da3639296660a78cc1a5dcb19037e">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_DEL_POLL_FD
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a1df60f314710236f9b53efbf468da768">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_ESTABLISHED
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a24d39bf1cfc0bad9d92da9ac1717e439">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_FILTER_HTTP_CONNECTION
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a75199176c82c1a56e4a6bbf1cc30c12c">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_FILTER_NETWORK_CONNECTION
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a026502768778b8d79d62dd0fe4375fc6">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7accd8753672d319a30b4b4c2fb775e84d">libwebsockets.h</a>
</li>
<li>lws_callback_function
: <a class="el" href="group__usercb.html#gad4fcb82e68d60ffacca61a3f783a0a2f">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_GET_THREAD_ID
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7adfb41c92e2522712207ef7f2462b5e34">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_HTTP
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae8d1de0bb56e03aa58cb4d44b18edd2e">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_HTTP_BODY
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac4c68e00efcf1ff7bda7ada462aff8ae">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_HTTP_BODY_COMPLETION
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2fce9a8608220f32abbf1422a5498804">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_HTTP_FILE_COMPLETION
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa627548e1296e654fcfab463ec3c9587">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_HTTP_PMO
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa5cc921b7697743017a533822a3d556a">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_HTTP_WRITEABLE
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afedadfb3cde37a8ea4c84ed535f26d09">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_LOCK_POLL
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8909732521d379179003d97ab7a05428">libwebsockets.h</a>
</li>
<li>lws_callback_on_writable()
: <a class="el" href="group__callback-when-writeable.html#ga941caaa468bc507b1cae52275f58800d">libwebsockets.h</a>
</li>
<li>lws_callback_on_writable_all_protocol()
: <a class="el" href="group__callback-when-writeable.html#gabbe4655c7eeb3eb1671b2323ec6b3107">libwebsockets.h</a>
</li>
<li>lws_callback_on_writable_all_protocol_vhost()
: <a class="el" href="group__callback-when-writeable.html#ga8570860e191b62db264f2bac67354ea8">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_OPENSSL_CONTEXT_REQUIRES_PRIVATE_KEY
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa46f705dcf97502e95627ffde614f98b">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_OPENSSL_LOAD_EXTRA_CLIENT_VERIFY_CERTS
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae4986291b7a810fe290851d73bebeb1c">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a06006e98d27e1e884364d88317f83493">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_OPENSSL_PERFORM_CLIENT_CERT_VERIFICATION
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae5ad65d779b7eab32ab67ceff91a3bac">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_PROTOCOL_DESTROY
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a54269ca88508e6efd3afdb9d360a9caa">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_PROTOCOL_INIT
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad5d34583e3556e153eda91620b48cc49">libwebsockets.h</a>
</li>
<li>lws_callback_reasons
: <a class="el" href="group__usercb.html#gad62860e19975ba4c4af401c3cdb6abf7">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_RECEIVE
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a492c1b1c0ac0ed980042ee732fe2990c">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_RECEIVE_PONG
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2db02fc6e1c17ab62b52109d1aa9d738">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae9734e1d7af2abf291665ce9e4a728d3">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_SERVER_WRITEABLE
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7ec8e2e9557ee02a4fc9f7dec7e2babc">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_UNLOCK_POLL
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a0e9e3dd667c0c42cdbe1a3d921f4fd79">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_USER
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a982579753e70e59a9ea13ce628ac891a">libwebsockets.h</a>
</li>
<li>lws_callback_vhost_protocols()
: <a class="el" href="group__callback-when-writeable.html#ga60939cf0c073d933fde3d17f3591caf5">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_WS_PEER_INITIATED_CLOSE
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac3fc5bbb55e69f90396526287ee84a51">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_WSI_CREATE
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afd8fd77a1cc9405fcb4f26915d7f2d01">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_WSI_DESTROY
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aca834dc035b7f7486f9ce40fde54fe9e">libwebsockets.h</a>
</li>
<li>lws_cancel_service()
: <a class="el" href="group__service.html#ga53e3d0801dfda7960a7249dd559e68a2">libwebsockets.h</a>
</li>
<li>lws_cancel_service_pt()
: <a class="el" href="group__service.html#ga29c246707997ab7a466aa709aecd2d7b">libwebsockets.h</a>
</li>
<li>lws_canonical_hostname()
: <a class="el" href="group__net.html#gad0df22db2be9fc65a667a1e83f9a92a4">libwebsockets.h</a>
</li>
<li>lws_cgi()
: <a class="el" href="libwebsockets_8h.html#af52923473c59e643a974d65e12290831">libwebsockets.h</a>
</li>
<li>lws_cgi_kill()
: <a class="el" href="libwebsockets_8h.html#a27bb0b3cdcd0af839c928c253b521ff4">libwebsockets.h</a>
</li>
<li>lws_cgi_write_split_stdout_headers()
: <a class="el" href="libwebsockets_8h.html#a5326d3402af8429a166dd991dc65c4a2">libwebsockets.h</a>
</li>
<li>lws_chunked_html_process()
: <a class="el" href="group__html-chunked-substitution.html#ga643073f918c0a7016b690aae9793fd60">libwebsockets.h</a>
</li>
<li>lws_client_connect()
: <a class="el" href="group__client.html#ga4af0a20108a95e8b6d94dd4d80055ff3">libwebsockets.h</a>
</li>
<li>lws_client_connect_extended()
: <a class="el" href="group__client.html#gac6a8558b4410961a880241c2ac1271e2">libwebsockets.h</a>
</li>
<li>lws_client_connect_ssl_connection_flags
: <a class="el" href="group__client.html#ga96f3dbad54b2853969cfa933d66871ce">libwebsockets.h</a>
</li>
<li>lws_client_connect_via_info()
: <a class="el" href="group__client.html#ga0c966136905f467816307cfba6deb5fd">libwebsockets.h</a>
</li>
<li>lws_close_reason()
: <a class="el" href="group__wsclose.html#gaa1c863415d1783cd8de7938aa6efa262">libwebsockets.h</a>
</li>
<li>lws_close_status
: <a class="el" href="group__wsclose.html#gae399c571df32ba532c0ca67da9284985">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_ABNORMAL_CLOSE
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a68b3d34bebd88547dcfa5cadba0acd6c">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_EXTENSION_REQUIRED
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_GOINGAWAY
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_INVALID_PAYLOAD
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_MESSAGE_TOO_LARGE
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_NO_STATUS
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a4b8a3b7ce6f731e5248e4b0fb64a5044">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_NORMAL
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_POLICY_VIOLATION
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_PROTOCOL_ERR
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_RESERVED
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_TLS_FAILURE
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_UNACCEPTABLE_OPCODE
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a462c99b05459df700919cfd3f53c8276">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_UNEXPECTED_CONDITION
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350">libwebsockets.h</a>
</li>
<li>lws_context_destroy()
: <a class="el" href="group__context-and-vhost.html#ga8ee0314028755f1ddfa9428e09b4fddb">libwebsockets.h</a>
</li>
<li>lws_context_options
: <a class="el" href="group__context-and-vhost.html#ga41c2d763f78cc248df3b9f8645dbd2a5">libwebsockets.h</a>
</li>
<li>lws_context_user()
: <a class="el" href="group__context-and-vhost.html#gaeb12f934bfd178bd2132a9e73fc641da">libwebsockets.h</a>
</li>
<li>lws_create_context()
: <a class="el" href="group__context-and-vhost.html#gaf2fff58562caab7510c41eeac85a8648">libwebsockets.h</a>
</li>
<li>lws_create_vhost()
: <a class="el" href="group__context-and-vhost.html#ga0c54c667ccd9b8b3dddcd123ca72f87c">libwebsockets.h</a>
</li>
<li>lws_daemonize()
: <a class="el" href="group__misc.html#gace5171b1dbbc03ec89a98f8afdb5c9af">libwebsockets.h</a>
</li>
<li>lws_email_check()
: <a class="el" href="group__smtp.html#ga5e535e346d92a9daf00be33abf79d4eb">libwebsockets.h</a>
</li>
<li>lws_email_destroy()
: <a class="el" href="group__smtp.html#ga25298a5afc1074e13b2d5711a86432b2">libwebsockets.h</a>
</li>
<li>lws_email_init()
: <a class="el" href="group__smtp.html#ga77fc9b56a1bb39484844981ec375fc29">libwebsockets.h</a>
</li>
<li>lws_ext_options_types
: <a class="el" href="group__extensions.html#gacc9f55936dc165257a2e1f7d47bce89e">libwebsockets.h</a>
</li>
<li>lws_ext_parse_options()
: <a class="el" href="group__extensions.html#ga6fb3e2c3dfb9d64dc87026a4e99c128b">libwebsockets.h</a>
</li>
<li>lws_extension_callback_function
: <a class="el" href="group__extensions.html#gaae7169b2cd346b34fa33d0250db2afd0">libwebsockets.h</a>
</li>
<li>lws_extension_callback_pm_deflate()
: <a class="el" href="group__extensions.html#ga4cdbe42d872e21a448a947714d6c607e">libwebsockets.h</a>
</li>
<li>lws_finalize_http_header()
: <a class="el" href="group__HTTP-headers-create.html#ga4887605ff2242a54db3a7fa01f6f864b">libwebsockets.h</a>
</li>
<li>lws_finalize_startup()
: <a class="el" href="group__Protocols-and-Plugins.html#ga106b37ae9c247e84d191ab09441adc43">libwebsockets.h</a>
</li>
<li>lws_frame_is_binary()
: <a class="el" href="group__wsstatus.html#gaccd9c59336efad8af0554f79cc5966fd">libwebsockets.h</a>
</li>
<li>lws_get_child()
: <a class="el" href="group__misc.html#gacae4d7b6a8d22e4c2d82ff8b12c1e234">libwebsockets.h</a>
</li>
<li>lws_get_context()
: <a class="el" href="group__misc.html#ga0af4f7d2dd375aeedcfa7eb0e1101c4b">libwebsockets.h</a>
</li>
<li>lws_get_count_threads()
: <a class="el" href="group__misc.html#ga629f48268fd1856b54b11172991b97d9">libwebsockets.h</a>
</li>
<li>lws_get_fops()
: <a class="el" href="group__fops.html#gac08aef64c4c34647ed699b24759b6b0e">libwebsockets.h</a>
</li>
<li>lws_get_library_version()
: <a class="el" href="group__misc.html#gac6abfc0b2bd5b2f09281a4432bb2f5f0">libwebsockets.h</a>
</li>
<li>lws_get_mimetype()
: <a class="el" href="group__httpft.html#gab4da87a4800413f15e7aba649fb1d77c">libwebsockets.h</a>
</li>
<li>lws_get_parent()
: <a class="el" href="group__misc.html#ga8930fe36a3f3eefe4a6a4fd499d8e899">libwebsockets.h</a>
</li>
<li>lws_get_peer_addresses()
: <a class="el" href="group__net.html#ga092e5f473b3347f03ffeef8a950080f3">libwebsockets.h</a>
</li>
<li>lws_get_peer_simple()
: <a class="el" href="group__net.html#gad01014fed09759741b6d23afccfdaacc">libwebsockets.h</a>
</li>
<li>lws_get_peer_write_allowance()
: <a class="el" href="group__callback-when-writeable.html#gac4643fe16b0940ae5b68b4ee6195cbde">libwebsockets.h</a>
</li>
<li>lws_get_protocol()
: <a class="el" href="group__Protocols-and-Plugins.html#ga72ad550786ca7976463589d347e62112">libwebsockets.h</a>
</li>
<li>lws_get_random()
: <a class="el" href="group__misc.html#ga58f906c6be0ca80efd813f694569dd4a">libwebsockets.h</a>
</li>
<li>lws_get_reserved_bits()
: <a class="el" href="group__wsstatus.html#ga3df5045656dfb6b0e63a38de2dca79d2">libwebsockets.h</a>
</li>
<li>lws_get_socket_fd()
: <a class="el" href="group__callback-when-writeable.html#gaa709e02a10558753c851e58f1e2c16ba">libwebsockets.h</a>
</li>
<li>lws_get_urlarg_by_name()
: <a class="el" href="group__HTTP-headers-read.html#ga84e9ce5e71a77501a0998ac403a984c2">libwebsockets.h</a>
</li>
<li>lws_get_vhost()
: <a class="el" href="group__context-and-vhost.html#ga06e77ce2916f8bc9826ef8d9d68e3932">libwebsockets.h</a>
</li>
<li>lws_gs_event
: <a class="el" href="group__generic-sessions.html#gaa93946b3d921072209d5cd8cdfa5332e">libwebsockets.h</a>
</li>
<li>lws_hdr_copy()
: <a class="el" href="group__HTTP-headers-read.html#ga6ce6aa1c0155ea42b7708bed271d1c77">libwebsockets.h</a>
</li>
<li>lws_hdr_copy_fragment()
: <a class="el" href="group__HTTP-headers-read.html#gaa427cad61a9a5e3004afd65c4527b5e9">libwebsockets.h</a>
</li>
<li>lws_hdr_fragment_length()
: <a class="el" href="group__HTTP-headers-read.html#ga594f3d0ece5b09c2ccf9f98ea533bb4e">libwebsockets.h</a>
</li>
<li>lws_hdr_total_length()
: <a class="el" href="group__HTTP-headers-read.html#ga8ade0e1ffb0da7e62b989d8d867bf6c8">libwebsockets.h</a>
</li>
<li>lws_http_redirect()
: <a class="el" href="group__http.html#ga8fbf01e473ac421fc33ad9f8da8b8a25">libwebsockets.h</a>
</li>
<li>lws_http_transaction_completed()
: <a class="el" href="group__http.html#gad27aed6c66a41b2b89ffe4da2a309e8a">libwebsockets.h</a>
</li>
<li>lws_init_vhost_client_ssl()
: <a class="el" href="group__client.html#ga4f44b8230e6732816ca5cd8d1aaaf340">libwebsockets.h</a>
</li>
<li>lws_interface_to_sa()
: <a class="el" href="group__net.html#ga869d8bdffb0f2a7ce08e3ce10d6be3d8">libwebsockets.h</a>
</li>
<li>lws_is_cgi()
: <a class="el" href="group__wsstatus.html#ga4ad226d5e01024b4046f4a5a37199aa1">libwebsockets.h</a>
</li>
<li>lws_is_final_fragment()
: <a class="el" href="group__wsstatus.html#ga08e9ee165fca503fd9427d55cfecac37">libwebsockets.h</a>
</li>
<li>lws_is_ssl()
: <a class="el" href="group__wsstatus.html#ga26a140623d202dd2bf2004deb6994baa">libwebsockets.h</a>
</li>
<li>lws_json_dump_context()
: <a class="el" href="group__context-and-vhost.html#gae2134657cdd2ea7a59e13ad314e4c50d">libwebsockets.h</a>
</li>
<li>lws_json_dump_vhost()
: <a class="el" href="group__context-and-vhost.html#ga94e6cc2223c4eec316b13bcebc3628b6">libwebsockets.h</a>
</li>
<li>lws_json_purify()
: <a class="el" href="group__pur.html#gab15187efcfa256b7c928562c182b92a3">libwebsockets.h</a>
</li>
<li>lws_mount_protocols
: <a class="el" href="group__vhost-mounts.html#ga31eca18e50cb4357480f2fcad36ff437">libwebsockets.h</a>
</li>
<li>lws_now_secs()
: <a class="el" href="group__misc.html#ga33bf2635033710b25f931b57ed663e1e">libwebsockets.h</a>
</li>
<li>lws_parse_uri()
: <a class="el" href="group__misc.html#ga1ec0d9faac5d3a5824d765c287c043aa">libwebsockets.h</a>
</li>
<li>lws_partial_buffered()
: <a class="el" href="group__wsstatus.html#gaeca4afc94b1f026034f99cbba37e2f85">libwebsockets.h</a>
</li>
<li>lws_plat_service_tsi()
: <a class="el" href="group__service.html#gab1ff2c19455268fa0d5b617d8057fbfc">libwebsockets.h</a>
</li>
<li>lws_protocol_get()
: <a class="el" href="group__Protocols-and-Plugins.html#ga8bbe5e65faca068845704bab911a5030">libwebsockets.h</a>
</li>
<li>lws_protocol_vh_priv_get()
: <a class="el" href="group__Protocols-and-Plugins.html#gaf3be4243443baac0f8be1fcfb4d25129">libwebsockets.h</a>
</li>
<li>lws_protocol_vh_priv_zalloc()
: <a class="el" href="group__Protocols-and-Plugins.html#gaec0c0477288ff3f83aff38d357b883d1">libwebsockets.h</a>
</li>
<li>lws_remaining_packet_payload()
: <a class="el" href="libwebsockets_8h.html#a72fe65e83b8bb03f904a1a256c673536">libwebsockets.h</a>
</li>
<li>lws_return_http_status()
: <a class="el" href="group__http.html#gac8a4a71240857dc6b2ed70456b6923f4">libwebsockets.h</a>
</li>
<li>lws_rx_flow_allow_all_protocol()
: <a class="el" href="libwebsockets_8h.html#a5e627dbf1db48170ef486edbaf268672">libwebsockets.h</a>
</li>
<li>lws_rx_flow_control()
: <a class="el" href="libwebsockets_8h.html#adf4abd01e8c43f07c6e498ce13590c3e">libwebsockets.h</a>
</li>
<li>lws_send_pipe_choked()
: <a class="el" href="group__wsstatus.html#ga2bb3655329b4651cd06f79ee3a764421">libwebsockets.h</a>
</li>
<li>lws_serve_http_file()
: <a class="el" href="group__httpft.html#gab393a06d3d2722af4c3f8b06842c80d7">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a1cc4562d05cba52a6dfa0697a65ade0d">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_DISABLE_IPV6
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a34ab36e68c0d593b6f19b8d5ef1240a9">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_DISABLE_OS_CA_CERTS
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a4933347a821e73c3f1e13fb6bfc7ad93">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a7fed6a527c8d5e0acac1b4179644583a">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_EXPLICIT_VHOSTS
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5accc9d0d11d1124a21659586164b0962e">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_IPV6_V6ONLY_MODIFY
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5af62887536e25e053e68741006dba46d8">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_IPV6_V6ONLY_VALUE
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aca5d42820b65eac5618ec3f0bd8a1160">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_LIBEV
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a273d9975675130de0c6dc937dde7c8a6">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_LIBUV
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aff121db04a10cf8b2c5df9d4f2b89f1e">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_PEER_CERT_NOT_REQUIRED
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5ac56a8a6590e74a8016d0fae09fb404fc">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a4832187186c4d130c68051214cd42ada">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a274ed462a1a9239eb6ddf9007f5b7092">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_SKIP_SERVER_CANONICAL_NAME
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a6582c985ee0ceaadc1d277030eae2d7c">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_SSL_ECDH
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a1b2f8bde0f62adc7ebe81b2043f34c0c">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_STS
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5ac962efd35abf6c402f9fb14aa14f5016">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_UNIX_SOCK
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a9637e9001d8c8b2521086bcafbd8a941">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_UV_NO_SIGSEGV_SIGFPE_SPIN
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a87a824b2e812f4c3e7f2c4a1ea4f8abd">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_VALIDATE_UTF8
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aa0158b4e85420811e6b0f1378c6ded0f">libwebsockets.h</a>
</li>
<li>lws_service()
: <a class="el" href="group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8">libwebsockets.h</a>
</li>
<li>lws_service_adjust_timeout()
: <a class="el" href="group__service.html#ga4fd9d714434ca499e2b3f7dbba86f241">libwebsockets.h</a>
</li>
<li>lws_service_fd()
: <a class="el" href="group__service.html#gad82efa5466d14a9f05aa06416375b28d">libwebsockets.h</a>
</li>
<li>lws_service_fd_tsi()
: <a class="el" href="group__service.html#gaebf426eda371ba23642fc11d8e0ace6b">libwebsockets.h</a>
</li>
<li>lws_service_tsi()
: <a class="el" href="group__service.html#ga9b3cc4473fd8848e5bbee7f310712939">libwebsockets.h</a>
</li>
<li>lws_set_allocator()
: <a class="el" href="group__misc.html#gab321ed812f46f6dc7ef9e3ca6f00cf1b">libwebsockets.h</a>
</li>
<li>lws_set_extension_option()
: <a class="el" href="group__extensions.html#gae0e24e1768f83a7fb07896ce975704b9">libwebsockets.h</a>
</li>
<li>lws_set_log_level()
: <a class="el" href="group__log.html#ga244647f9e1bf0097ccdde66d74f41e26">libwebsockets.h</a>
</li>
<li>lws_set_proxy()
: <a class="el" href="group__context-and-vhost.html#ga7e9d5405547a457d86e0b4f0ae2bb1c4">libwebsockets.h</a>
</li>
<li>lws_set_timeout()
: <a class="el" href="group__timeout.html#gaced9f9237f6172fed9f730a2af51345a">libwebsockets.h</a>
</li>
<li>lws_SHA1()
: <a class="el" href="group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5">libwebsockets.h</a>
</li>
<li>lws_snprintf()
: <a class="el" href="group__misc.html#ga2163492f17db959a36967adb73d823b4">libwebsockets.h</a>
</li>
<li>lws_spa_create()
: <a class="el" href="group__form-parsing.html#ga162f86762173a2bc8c28497941d74815">libwebsockets.h</a>
</li>
<li>lws_spa_destroy()
: <a class="el" href="group__form-parsing.html#gaaa482f07dad3f04b391cccf0a814e13b">libwebsockets.h</a>
</li>
<li>lws_spa_fileupload_cb
: <a class="el" href="group__form-parsing.html#ga5a70527c0861c2ffa3d29333a6aa7f8e">libwebsockets.h</a>
</li>
<li>lws_spa_fileupload_states
: <a class="el" href="group__form-parsing.html#ga41a74a822771d3dce89751aa3bce28ae">libwebsockets.h</a>
</li>
<li>lws_spa_finalize()
: <a class="el" href="group__form-parsing.html#ga83835bf250ee3d4a60f36a182f2b8d24">libwebsockets.h</a>
</li>
<li>lws_spa_get_length()
: <a class="el" href="group__form-parsing.html#ga3fbe378632f85ec9a14cc2c1687bf05f">libwebsockets.h</a>
</li>
<li>lws_spa_get_string()
: <a class="el" href="group__form-parsing.html#ga2da476217166da02704b90d3a8d4f3cd">libwebsockets.h</a>
</li>
<li>lws_spa_process()
: <a class="el" href="group__form-parsing.html#ga9ad9ebf5ea1a7108415ed7e04cb231d2">libwebsockets.h</a>
</li>
<li>lws_sql_purify()
: <a class="el" href="group__pur.html#ga9cc82f06e5ae7e71458626d7a39a5865">libwebsockets.h</a>
</li>
<li>lws_token_to_string()
: <a class="el" href="group__HTTP-headers-read.html#ga2c0597b2ef1d2cee35736c338bcbd17b">libwebsockets.h</a>
</li>
<li>LWS_UFS_CONTENT
: <a class="el" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aead3a958e7719ac273c3ba4f684f00c87f">libwebsockets.h</a>
</li>
<li>LWS_UFS_FINAL_CONTENT
: <a class="el" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea6ce2a55a4c3695cdb640c893d95bd3a7">libwebsockets.h</a>
</li>
<li>LWS_UFS_OPEN
: <a class="el" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83">libwebsockets.h</a>
</li>
<li>lws_urldecode()
: <a class="el" href="group__urlendec.html#gaa373a9c16acdd96c395af61ab915ece3">libwebsockets.h</a>
</li>
<li>lws_urlencode()
: <a class="el" href="group__urlendec.html#gabc2888476e50e001c875c1a8abf455b7">libwebsockets.h</a>
</li>
<li>lws_vhost_get()
: <a class="el" href="group__context-and-vhost.html#ga8db03e19a372e34ac25cf21af894a02c">libwebsockets.h</a>
</li>
<li>lws_vhost_name_to_protocol()
: <a class="el" href="group__Protocols-and-Plugins.html#ga25754726d97c5f519d313e691a9fe29d">libwebsockets.h</a>
</li>
<li>lws_write()
: <a class="el" href="group__sending-data.html#gafd5fdd285a0e25ba7e3e1051deec1001">libwebsockets.h</a>
</li>
<li>LWS_WRITE_BINARY
: <a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2">libwebsockets.h</a>
</li>
<li>LWS_WRITE_CLIENT_IGNORE_XOR_MASK
: <a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da220d8e8652d9b97fb66e476e2a60ffce">libwebsockets.h</a>
</li>
<li>LWS_WRITE_CONTINUATION
: <a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da10047eb05b5e1c298151dc47a5b44826">libwebsockets.h</a>
</li>
<li>LWS_WRITE_HTTP
: <a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e">libwebsockets.h</a>
</li>
<li>LWS_WRITE_HTTP_HEADERS
: <a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dafe5a38e940ce56708ac814627e9c0917">libwebsockets.h</a>
</li>
<li>LWS_WRITE_NO_FIN
: <a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3">libwebsockets.h</a>
</li>
<li>lws_write_protocol
: <a class="el" href="group__sending-data.html#ga98b099cf8c1c7e38ad78501f270e193d">libwebsockets.h</a>
</li>
<li>LWS_WRITE_TEXT
: <a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da80e8f169fda236c56bfb795ed62903db">libwebsockets.h</a>
</li>
<li>lws_wsi_user()
: <a class="el" href="group__misc.html#gaa194584fff9698f3b280658f770ccd0f">libwebsockets.h</a>
</li>
<li>LWSGS_AUTH_ADMIN
: <a class="el" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a0657a9e846814781b128c397fe4b10bf">libwebsockets.h</a>
</li>
<li>lwsgs_auth_bits
: <a class="el" href="group__generic-sessions.html#ga7c2dc7bfb4ccb91c5d771f9e9ea237e1">libwebsockets.h</a>
</li>
<li>LWSGS_AUTH_FORGOT_FLOW
: <a class="el" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a2cd8fb86e3b85c106e7711c03f0ddd0a">libwebsockets.h</a>
</li>
<li>LWSGS_AUTH_LOGGED_IN
: <a class="el" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a81e63075115dedd150265d81b8f7fa57">libwebsockets.h</a>
</li>
<li>LWSGS_AUTH_VERIFIED
: <a class="el" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a5a607e4668d20cadada62c4b8007f887">libwebsockets.h</a>
</li>
<li>lwsgs_smtp_states
: <a class="el" href="group__smtp.html#ga116be79bf44f9dc2a97f46e051fe4dc0">libwebsockets.h</a>
</li>
<li>LWSGSE_CREATED
: <a class="el" href="group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ea596010a165bf13473c5eea3a34cd4308">libwebsockets.h</a>
</li>
<li>LWSGSE_DELETED
: <a class="el" href="group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ead908cdc5689c5d22c9d3c8934e94dcde">libwebsockets.h</a>
</li>
<li>lwsl_emit_syslog()
: <a class="el" href="group__log.html#gab7c0fc936cc9f1eb58e2bb234c15147c">libwebsockets.h</a>
</li>
<li>lwsl_hexdump()
: <a class="el" href="group__log.html#ga898b1f03872ad019f507d4e35bbefa90">libwebsockets.h</a>
</li>
<li>lwsl_timestamp()
: <a class="el" href="group__log.html#ga42e39775c6b69b7251bdbf5a2cdd5dcd">libwebsockets.h</a>
</li>
<li>LWSMPRO_CALLBACK
: <a class="el" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da">libwebsockets.h</a>
</li>
<li>LWSMPRO_CGI
: <a class="el" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69">libwebsockets.h</a>
</li>
<li>LWSMPRO_FILE
: <a class="el" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2">libwebsockets.h</a>
</li>
<li>LWSMPRO_HTTP
: <a class="el" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0">libwebsockets.h</a>
</li>
<li>LWSMPRO_HTTPS
: <a class="el" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1">libwebsockets.h</a>
</li>
<li>LWSMPRO_REDIR_HTTP
: <a class="el" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970">libwebsockets.h</a>
</li>
<li>LWSMPRO_REDIR_HTTPS
: <a class="el" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67">libwebsockets.h</a>
</li>
<li>lwsws_get_config_globals()
: <a class="el" href="group__context-and-vhost.html#ga98d88c9080fd89c37114363a6474ea73">libwebsockets.h</a>
</li>
<li>lwsws_get_config_vhosts()
: <a class="el" href="group__context-and-vhost.html#ga341064721add2618ae1b29717493a212">libwebsockets.h</a>
</li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,85 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Globals</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('globals_type.html','');});
</script>
<div id="doc-content">
<div class="contents">
&#160;<ul>
<li>lws_callback_function
: <a class="el" href="group__usercb.html#gad4fcb82e68d60ffacca61a3f783a0a2f">libwebsockets.h</a>
</li>
<li>lws_extension_callback_function
: <a class="el" href="group__extensions.html#gaae7169b2cd346b34fa33d0250db2afd0">libwebsockets.h</a>
</li>
<li>lws_spa_fileupload_cb
: <a class="el" href="group__form-parsing.html#ga5a70527c0861c2ffa3d29333a6aa7f8e">libwebsockets.h</a>
</li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,386 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: HTTP headers: create</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__HTTP-headers-create.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">HTTP headers: create<div class="ingroups"><a class="el" href="group__http.html">HTTP</a></div></div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga29b7d6d2ddfdbaff3d8b607e7e3151b6"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__HTTP-headers-create.html#ga29b7d6d2ddfdbaff3d8b607e7e3151b6">lws_add_http_header_status</a> (struct lws *wsi, unsigned int code, unsigned char **p, unsigned char *end)</td></tr>
<tr class="separator:ga29b7d6d2ddfdbaff3d8b607e7e3151b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga2b36bf44405755ff51c1939303b995a8"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__HTTP-headers-create.html#ga2b36bf44405755ff51c1939303b995a8">lws_add_http_header_by_name</a> (struct lws *wsi, const unsigned char *name, const unsigned char *value, int length, unsigned char **p, unsigned char *end)</td></tr>
<tr class="separator:ga2b36bf44405755ff51c1939303b995a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf74adb761b22566ad70004882712dce1"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__HTTP-headers-create.html#gaf74adb761b22566ad70004882712dce1">lws_add_http_header_by_token</a> (struct lws *wsi, enum lws_token_indexes token, const unsigned char *value, int length, unsigned char **p, unsigned char *end)</td></tr>
<tr class="separator:gaf74adb761b22566ad70004882712dce1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gacc76a5babcb4dce1b01b1955aa7a2faf"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__HTTP-headers-create.html#gacc76a5babcb4dce1b01b1955aa7a2faf">lws_add_http_header_content_length</a> (struct lws *wsi, unsigned long content_length, unsigned char **p, unsigned char *end)</td></tr>
<tr class="separator:gacc76a5babcb4dce1b01b1955aa7a2faf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4887605ff2242a54db3a7fa01f6f864b"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__HTTP-headers-create.html#ga4887605ff2242a54db3a7fa01f6f864b">lws_finalize_http_header</a> (struct lws *wsi, unsigned char **p, unsigned char *end)</td></tr>
<tr class="separator:ga4887605ff2242a54db3a7fa01f6f864b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>HTTP headers: Create</h2>
<p>These apis allow you to create HTTP response headers in a way compatible with both HTTP/1.x and HTTP/2.</p>
<p>They each append to a buffer taking care about the buffer end, which is passed in as a pointer. When data is written to the buffer, the current position p is updated accordingly.</p>
<p>All of these apis are LWS_WARN_UNUSED_RESULT as they can run out of space and fail with nonzero return. </p>
<h2 class="groupheader">Function Documentation</h2>
<a id="ga2b36bf44405755ff51c1939303b995a8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga2b36bf44405755ff51c1939303b995a8">&#9670;&nbsp;</a></span>lws_add_http_header_by_name()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_by_name </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>name</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>value</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>length</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char **&#160;</td>
<td class="paramname"><em>p</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char *&#160;</td>
<td class="paramname"><em>end</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__HTTP-headers-create.html#ga2b36bf44405755ff51c1939303b995a8">lws_add_http_header_by_name()</a> - append named header and value</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>the connection to check </td></tr>
<tr><td class="paramname">name</td><td>the hdr name, like "my-header" </td></tr>
<tr><td class="paramname">value</td><td>the value after the = for this header </td></tr>
<tr><td class="paramname">length</td><td>the length of the value </td></tr>
<tr><td class="paramname">p</td><td>pointer to current position in buffer pointer </td></tr>
<tr><td class="paramname">end</td><td>pointer to end of buffer</td></tr>
</table>
</dd>
</dl>
<p>Appends name: value to the headers </p>
</div>
</div>
<a id="gaf74adb761b22566ad70004882712dce1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaf74adb761b22566ad70004882712dce1">&#9670;&nbsp;</a></span>lws_add_http_header_by_token()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_by_token </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">enum lws_token_indexes&#160;</td>
<td class="paramname"><em>token</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>value</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>length</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char **&#160;</td>
<td class="paramname"><em>p</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char *&#160;</td>
<td class="paramname"><em>end</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__HTTP-headers-create.html#gaf74adb761b22566ad70004882712dce1">lws_add_http_header_by_token()</a> - append given header and value</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>the connection to check </td></tr>
<tr><td class="paramname">token</td><td>the token index for the hdr </td></tr>
<tr><td class="paramname">value</td><td>the value after the = for this header </td></tr>
<tr><td class="paramname">length</td><td>the length of the value </td></tr>
<tr><td class="paramname">p</td><td>pointer to current position in buffer pointer </td></tr>
<tr><td class="paramname">end</td><td>pointer to end of buffer</td></tr>
</table>
</dd>
</dl>
<p>Appends name=value to the headers, but is able to take advantage of better HTTP/2 coding mechanisms where possible. </p>
</div>
</div>
<a id="gacc76a5babcb4dce1b01b1955aa7a2faf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gacc76a5babcb4dce1b01b1955aa7a2faf">&#9670;&nbsp;</a></span>lws_add_http_header_content_length()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_content_length </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned long&#160;</td>
<td class="paramname"><em>content_length</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char **&#160;</td>
<td class="paramname"><em>p</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char *&#160;</td>
<td class="paramname"><em>end</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__HTTP-headers-create.html#ga2b36bf44405755ff51c1939303b995a8">lws_add_http_header_by_name()</a> - append content-length helper</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>the connection to check </td></tr>
<tr><td class="paramname">content_length</td><td>the content length to use </td></tr>
<tr><td class="paramname">p</td><td>pointer to current position in buffer pointer </td></tr>
<tr><td class="paramname">end</td><td>pointer to end of buffer</td></tr>
</table>
</dd>
</dl>
<p>Appends content-length: content_length to the headers </p>
</div>
</div>
<a id="ga29b7d6d2ddfdbaff3d8b607e7e3151b6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga29b7d6d2ddfdbaff3d8b607e7e3151b6">&#9670;&nbsp;</a></span>lws_add_http_header_status()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_status </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>code</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char **&#160;</td>
<td class="paramname"><em>p</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char *&#160;</td>
<td class="paramname"><em>end</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__HTTP-headers-create.html#ga29b7d6d2ddfdbaff3d8b607e7e3151b6">lws_add_http_header_status()</a> - add the HTTP response status code</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>the connection to check </td></tr>
<tr><td class="paramname">code</td><td>an HTTP code like 200, 404 etc (see enum http_status) </td></tr>
<tr><td class="paramname">p</td><td>pointer to current position in buffer pointer </td></tr>
<tr><td class="paramname">end</td><td>pointer to end of buffer</td></tr>
</table>
</dd>
</dl>
<p>Adds the initial response code, so should be called first </p>
</div>
</div>
<a id="ga4887605ff2242a54db3a7fa01f6f864b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga4887605ff2242a54db3a7fa01f6f864b">&#9670;&nbsp;</a></span>lws_finalize_http_header()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_finalize_http_header </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char **&#160;</td>
<td class="paramname"><em>p</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char *&#160;</td>
<td class="paramname"><em>end</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__HTTP-headers-create.html#ga4887605ff2242a54db3a7fa01f6f864b">lws_finalize_http_header()</a> - terminate header block</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>the connection to check </td></tr>
<tr><td class="paramname">p</td><td>pointer to current position in buffer pointer </td></tr>
<tr><td class="paramname">end</td><td>pointer to end of buffer</td></tr>
</table>
</dd>
</dl>
<p>Indicates no more headers will be added </p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,8 @@
var group__HTTP_headers_create =
[
[ "lws_add_http_header_by_name", "group__HTTP-headers-create.html#ga2b36bf44405755ff51c1939303b995a8", null ],
[ "lws_add_http_header_by_token", "group__HTTP-headers-create.html#gaf74adb761b22566ad70004882712dce1", null ],
[ "lws_add_http_header_content_length", "group__HTTP-headers-create.html#gacc76a5babcb4dce1b01b1955aa7a2faf", null ],
[ "lws_add_http_header_status", "group__HTTP-headers-create.html#ga29b7d6d2ddfdbaff3d8b607e7e3151b6", null ],
[ "lws_finalize_http_header", "group__HTTP-headers-create.html#ga4887605ff2242a54db3a7fa01f6f864b", null ]
];

View file

@ -0,0 +1,510 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: HTTP headers: read</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__HTTP-headers-read.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">HTTP headers: read<div class="ingroups"><a class="el" href="group__http.html">HTTP</a></div></div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__tokens.html">lws_tokens</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__token__limits.html">lws_token_limits</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ga6e747906f9d76532ec118d6ef418b82e"><td class="memItemLeft" align="right" valign="top"><a id="ga6e747906f9d76532ec118d6ef418b82e"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>lws_token_indexes</b> { <br />
&#160;&#160;<b>WSI_TOKEN_GET_URI</b> = 0,
<b>WSI_TOKEN_POST_URI</b> = 1,
<b>WSI_TOKEN_OPTIONS_URI</b> = 2,
<b>WSI_TOKEN_HOST</b> = 3,
<br />
&#160;&#160;<b>WSI_TOKEN_CONNECTION</b> = 4,
<b>WSI_TOKEN_UPGRADE</b> = 5,
<b>WSI_TOKEN_ORIGIN</b> = 6,
<b>WSI_TOKEN_DRAFT</b> = 7,
<br />
&#160;&#160;<b>WSI_TOKEN_CHALLENGE</b> = 8,
<b>WSI_TOKEN_EXTENSIONS</b> = 9,
<b>WSI_TOKEN_KEY1</b> = 10,
<b>WSI_TOKEN_KEY2</b> = 11,
<br />
&#160;&#160;<b>WSI_TOKEN_PROTOCOL</b> = 12,
<b>WSI_TOKEN_ACCEPT</b> = 13,
<b>WSI_TOKEN_NONCE</b> = 14,
<b>WSI_TOKEN_HTTP</b> = 15,
<br />
&#160;&#160;<b>WSI_TOKEN_HTTP2_SETTINGS</b> = 16,
<b>WSI_TOKEN_HTTP_ACCEPT</b> = 17,
<b>WSI_TOKEN_HTTP_AC_REQUEST_HEADERS</b> = 18,
<b>WSI_TOKEN_HTTP_IF_MODIFIED_SINCE</b> = 19,
<br />
&#160;&#160;<b>WSI_TOKEN_HTTP_IF_NONE_MATCH</b> = 20,
<b>WSI_TOKEN_HTTP_ACCEPT_ENCODING</b> = 21,
<b>WSI_TOKEN_HTTP_ACCEPT_LANGUAGE</b> = 22,
<b>WSI_TOKEN_HTTP_PRAGMA</b> = 23,
<br />
&#160;&#160;<b>WSI_TOKEN_HTTP_CACHE_CONTROL</b> = 24,
<b>WSI_TOKEN_HTTP_AUTHORIZATION</b> = 25,
<b>WSI_TOKEN_HTTP_COOKIE</b> = 26,
<b>WSI_TOKEN_HTTP_CONTENT_LENGTH</b> = 27,
<br />
&#160;&#160;<b>WSI_TOKEN_HTTP_CONTENT_TYPE</b> = 28,
<b>WSI_TOKEN_HTTP_DATE</b> = 29,
<b>WSI_TOKEN_HTTP_RANGE</b> = 30,
<b>WSI_TOKEN_HTTP_REFERER</b> = 31,
<br />
&#160;&#160;<b>WSI_TOKEN_KEY</b> = 32,
<b>WSI_TOKEN_VERSION</b> = 33,
<b>WSI_TOKEN_SWORIGIN</b> = 34,
<b>WSI_TOKEN_HTTP_COLON_AUTHORITY</b> = 35,
<br />
&#160;&#160;<b>WSI_TOKEN_HTTP_COLON_METHOD</b> = 36,
<b>WSI_TOKEN_HTTP_COLON_PATH</b> = 37,
<b>WSI_TOKEN_HTTP_COLON_SCHEME</b> = 38,
<b>WSI_TOKEN_HTTP_COLON_STATUS</b> = 39,
<br />
&#160;&#160;<b>WSI_TOKEN_HTTP_ACCEPT_CHARSET</b> = 40,
<b>WSI_TOKEN_HTTP_ACCEPT_RANGES</b> = 41,
<b>WSI_TOKEN_HTTP_ACCESS_CONTROL_ALLOW_ORIGIN</b> = 42,
<b>WSI_TOKEN_HTTP_AGE</b> = 43,
<br />
&#160;&#160;<b>WSI_TOKEN_HTTP_ALLOW</b> = 44,
<b>WSI_TOKEN_HTTP_CONTENT_DISPOSITION</b> = 45,
<b>WSI_TOKEN_HTTP_CONTENT_ENCODING</b> = 46,
<b>WSI_TOKEN_HTTP_CONTENT_LANGUAGE</b> = 47,
<br />
&#160;&#160;<b>WSI_TOKEN_HTTP_CONTENT_LOCATION</b> = 48,
<b>WSI_TOKEN_HTTP_CONTENT_RANGE</b> = 49,
<b>WSI_TOKEN_HTTP_ETAG</b> = 50,
<b>WSI_TOKEN_HTTP_EXPECT</b> = 51,
<br />
&#160;&#160;<b>WSI_TOKEN_HTTP_EXPIRES</b> = 52,
<b>WSI_TOKEN_HTTP_FROM</b> = 53,
<b>WSI_TOKEN_HTTP_IF_MATCH</b> = 54,
<b>WSI_TOKEN_HTTP_IF_RANGE</b> = 55,
<br />
&#160;&#160;<b>WSI_TOKEN_HTTP_IF_UNMODIFIED_SINCE</b> = 56,
<b>WSI_TOKEN_HTTP_LAST_MODIFIED</b> = 57,
<b>WSI_TOKEN_HTTP_LINK</b> = 58,
<b>WSI_TOKEN_HTTP_LOCATION</b> = 59,
<br />
&#160;&#160;<b>WSI_TOKEN_HTTP_MAX_FORWARDS</b> = 60,
<b>WSI_TOKEN_HTTP_PROXY_AUTHENTICATE</b> = 61,
<b>WSI_TOKEN_HTTP_PROXY_AUTHORIZATION</b> = 62,
<b>WSI_TOKEN_HTTP_REFRESH</b> = 63,
<br />
&#160;&#160;<b>WSI_TOKEN_HTTP_RETRY_AFTER</b> = 64,
<b>WSI_TOKEN_HTTP_SERVER</b> = 65,
<b>WSI_TOKEN_HTTP_SET_COOKIE</b> = 66,
<b>WSI_TOKEN_HTTP_STRICT_TRANSPORT_SECURITY</b> = 67,
<br />
&#160;&#160;<b>WSI_TOKEN_HTTP_TRANSFER_ENCODING</b> = 68,
<b>WSI_TOKEN_HTTP_USER_AGENT</b> = 69,
<b>WSI_TOKEN_HTTP_VARY</b> = 70,
<b>WSI_TOKEN_HTTP_VIA</b> = 71,
<br />
&#160;&#160;<b>WSI_TOKEN_HTTP_WWW_AUTHENTICATE</b> = 72,
<b>WSI_TOKEN_PATCH_URI</b> = 73,
<b>WSI_TOKEN_PUT_URI</b> = 74,
<b>WSI_TOKEN_DELETE_URI</b> = 75,
<br />
&#160;&#160;<b>WSI_TOKEN_HTTP_URI_ARGS</b> = 76,
<b>WSI_TOKEN_PROXY</b> = 77,
<b>WSI_TOKEN_HTTP_X_REAL_IP</b> = 78,
<b>WSI_TOKEN_HTTP1_0</b> = 79,
<br />
&#160;&#160;<b>_WSI_TOKEN_CLIENT_SENT_PROTOCOLS</b>,
<b>_WSI_TOKEN_CLIENT_PEER_ADDRESS</b>,
<b>_WSI_TOKEN_CLIENT_URI</b>,
<b>_WSI_TOKEN_CLIENT_HOST</b>,
<br />
&#160;&#160;<b>_WSI_TOKEN_CLIENT_ORIGIN</b>,
<b>_WSI_TOKEN_CLIENT_METHOD</b>,
<b>WSI_TOKEN_COUNT</b>,
<b>WSI_TOKEN_NAME_PART</b>,
<br />
&#160;&#160;<b>WSI_TOKEN_SKIPPING</b>,
<b>WSI_TOKEN_SKIPPING_SAW_CR</b>,
<b>WSI_PARSING_COMPLETE</b>,
<b>WSI_INIT_TOKEN_MUXURL</b>
<br />
}</td></tr>
<tr class="separator:ga6e747906f9d76532ec118d6ef418b82e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga2c0597b2ef1d2cee35736c338bcbd17b"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN const unsigned char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__HTTP-headers-read.html#ga2c0597b2ef1d2cee35736c338bcbd17b">lws_token_to_string</a> (enum lws_token_indexes token)</td></tr>
<tr class="separator:ga2c0597b2ef1d2cee35736c338bcbd17b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga8ade0e1ffb0da7e62b989d8d867bf6c8"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__HTTP-headers-read.html#ga8ade0e1ffb0da7e62b989d8d867bf6c8">lws_hdr_total_length</a> (struct lws *wsi, enum lws_token_indexes h)</td></tr>
<tr class="separator:ga8ade0e1ffb0da7e62b989d8d867bf6c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga594f3d0ece5b09c2ccf9f98ea533bb4e"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__HTTP-headers-read.html#ga594f3d0ece5b09c2ccf9f98ea533bb4e">lws_hdr_fragment_length</a> (struct lws *wsi, enum lws_token_indexes h, int frag_idx)</td></tr>
<tr class="separator:ga594f3d0ece5b09c2ccf9f98ea533bb4e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga6ce6aa1c0155ea42b7708bed271d1c77"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__HTTP-headers-read.html#ga6ce6aa1c0155ea42b7708bed271d1c77">lws_hdr_copy</a> (struct lws *wsi, char *dest, int len, enum lws_token_indexes h)</td></tr>
<tr class="separator:ga6ce6aa1c0155ea42b7708bed271d1c77"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa427cad61a9a5e3004afd65c4527b5e9"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__HTTP-headers-read.html#gaa427cad61a9a5e3004afd65c4527b5e9">lws_hdr_copy_fragment</a> (struct lws *wsi, char *dest, int len, enum lws_token_indexes h, int frag_idx)</td></tr>
<tr class="separator:gaa427cad61a9a5e3004afd65c4527b5e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga84e9ce5e71a77501a0998ac403a984c2"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__HTTP-headers-read.html#ga84e9ce5e71a77501a0998ac403a984c2">lws_get_urlarg_by_name</a> (struct lws *wsi, const char *name, char *buf, int len)</td></tr>
<tr class="separator:ga84e9ce5e71a77501a0998ac403a984c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>HTTP header releated functions</h2>
<p>In lws the client http headers are temporarily stored in a pool, 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.</p>
<p>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)</p>
<p>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.</p>
<p>In the special case of URL arguments, like ?x=1&amp;y=2, the arguments are stored in a token named for the method, eg, WSI_TOKEN_GET_URI if it was a GET or WSI_TOKEN_POST_URI if POST. You can check the total length to confirm the method.</p>
<p>For URL arguments, each argument is stored urldecoded in a "fragment", so you can use the fragment-aware api <a class="el" href="group__HTTP-headers-read.html#gaa427cad61a9a5e3004afd65c4527b5e9">lws_hdr_copy_fragment()</a> to access each argument in turn: the fragments contain urldecoded strings like x=1 or y=2.</p>
<p>As a convenience, lws has an api that will find the fragment with a given name= part, <a class="el" href="group__HTTP-headers-read.html#ga84e9ce5e71a77501a0998ac403a984c2">lws_get_urlarg_by_name()</a>. </p>
<h2 class="groupheader">Function Documentation</h2>
<a id="ga84e9ce5e71a77501a0998ac403a984c2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga84e9ce5e71a77501a0998ac403a984c2">&#9670;&nbsp;</a></span>lws_get_urlarg_by_name()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN const char* lws_get_urlarg_by_name </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>name</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>buf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__HTTP-headers-read.html#ga84e9ce5e71a77501a0998ac403a984c2">lws_get_urlarg_by_name()</a> - return pointer to arg value if present </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>the connection to check </td></tr>
<tr><td class="paramname">name</td><td>the arg name, like "token=" </td></tr>
<tr><td class="paramname">buf</td><td>the buffer to receive the urlarg (including the name= part) </td></tr>
<tr><td class="paramname">len</td><td>the length of the buffer to receive the urlarg <pre class="fragment">Returns NULL if not found or a pointer inside buf to just after the
name= part.</pre> </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga6ce6aa1c0155ea42b7708bed271d1c77"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga6ce6aa1c0155ea42b7708bed271d1c77">&#9670;&nbsp;</a></span>lws_hdr_copy()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_hdr_copy </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>dest</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>len</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">enum lws_token_indexes&#160;</td>
<td class="paramname"><em>h</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__HTTP-headers-read.html#ga6ce6aa1c0155ea42b7708bed271d1c77">lws_hdr_copy()</a> - copy a single fragment of the given header to a buffer The buffer length len must include space for an additional terminating '\0', or it will fail returning -1.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>websocket connection </td></tr>
<tr><td class="paramname">dest</td><td>destination buffer </td></tr>
<tr><td class="paramname">len</td><td>length of destination buffer </td></tr>
<tr><td class="paramname">h</td><td>which header index we are interested in</td></tr>
</table>
</dd>
</dl>
<p>copies the whole, aggregated header, even if it was delivered in several actual headers piece by piece </p>
</div>
</div>
<a id="gaa427cad61a9a5e3004afd65c4527b5e9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaa427cad61a9a5e3004afd65c4527b5e9">&#9670;&nbsp;</a></span>lws_hdr_copy_fragment()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_hdr_copy_fragment </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>dest</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>len</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">enum lws_token_indexes&#160;</td>
<td class="paramname"><em>h</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>frag_idx</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__HTTP-headers-read.html#gaa427cad61a9a5e3004afd65c4527b5e9">lws_hdr_copy_fragment()</a> - copy a single fragment of the given header to a buffer The buffer length len must include space for an additional terminating '\0', or it will fail returning -1. If the requested fragment index is not present, it fails returning -1.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>websocket connection </td></tr>
<tr><td class="paramname">dest</td><td>destination buffer </td></tr>
<tr><td class="paramname">len</td><td>length of destination buffer </td></tr>
<tr><td class="paramname">h</td><td>which header index we are interested in </td></tr>
<tr><td class="paramname">frag_idx</td><td>which fragment of h we want to copy</td></tr>
</table>
</dd>
</dl>
<p>Normally this is only useful to parse URI arguments like ?x=1&amp;y=2, token index WSI_TOKEN_HTTP_URI_ARGS fragment 0 will contain "x=1" and fragment 1 "y=2" </p>
</div>
</div>
<a id="ga594f3d0ece5b09c2ccf9f98ea533bb4e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga594f3d0ece5b09c2ccf9f98ea533bb4e">&#9670;&nbsp;</a></span>lws_hdr_fragment_length()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_hdr_fragment_length </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">enum lws_token_indexes&#160;</td>
<td class="paramname"><em>h</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>frag_idx</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p>lws_hdr_fragment_length: report length of a single fragment of a header The returned length does not include the space for a terminating '\0'</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>websocket connection </td></tr>
<tr><td class="paramname">h</td><td>which header index we are interested in </td></tr>
<tr><td class="paramname">frag_idx</td><td>which fragment of h we want to get the length of </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga8ade0e1ffb0da7e62b989d8d867bf6c8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga8ade0e1ffb0da7e62b989d8d867bf6c8">&#9670;&nbsp;</a></span>lws_hdr_total_length()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_hdr_total_length </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">enum lws_token_indexes&#160;</td>
<td class="paramname"><em>h</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p>lws_hdr_total_length: report length of all fragments of a header totalled up The returned length does not include the space for a terminating '\0'</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>websocket connection </td></tr>
<tr><td class="paramname">h</td><td>which header index we are interested in </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga2c0597b2ef1d2cee35736c338bcbd17b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga2c0597b2ef1d2cee35736c338bcbd17b">&#9670;&nbsp;</a></span>lws_token_to_string()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN const unsigned char* lws_token_to_string </td>
<td>(</td>
<td class="paramtype">enum lws_token_indexes&#160;</td>
<td class="paramname"><em>token</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__HTTP-headers-read.html#ga2c0597b2ef1d2cee35736c338bcbd17b">lws_token_to_string()</a> - returns a textual representation of a hdr token index</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname"></td><td>token index </td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,16 @@
var group__HTTP_headers_read =
[
[ "lws_tokens", "structlws__tokens.html", [
[ "token", "structlws__tokens.html#a9f3635412bc71a5cb78e9862b55f10cd", null ],
[ "token_len", "structlws__tokens.html#a855b7375d1d58516c0ecd4b60e9a7766", null ]
] ],
[ "lws_token_limits", "structlws__token__limits.html", [
[ "token_limit", "structlws__token__limits.html#a6ec712306cbf8585bce7a56758a3ceff", null ]
] ],
[ "lws_get_urlarg_by_name", "group__HTTP-headers-read.html#ga84e9ce5e71a77501a0998ac403a984c2", null ],
[ "lws_hdr_copy", "group__HTTP-headers-read.html#ga6ce6aa1c0155ea42b7708bed271d1c77", null ],
[ "lws_hdr_copy_fragment", "group__HTTP-headers-read.html#gaa427cad61a9a5e3004afd65c4527b5e9", null ],
[ "lws_hdr_fragment_length", "group__HTTP-headers-read.html#ga594f3d0ece5b09c2ccf9f98ea533bb4e", null ],
[ "lws_hdr_total_length", "group__HTTP-headers-read.html#ga8ade0e1ffb0da7e62b989d8d867bf6c8", null ],
[ "lws_token_to_string", "group__HTTP-headers-read.html#ga2c0597b2ef1d2cee35736c338bcbd17b", null ]
];

View file

@ -0,0 +1,327 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Protocols and Plugins</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__Protocols-and-Plugins.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#groups">Modules</a> &#124;
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Protocols and Plugins</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
Modules</h2></td></tr>
<tr class="memitem:group__generic-sessions"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__generic-sessions.html">plugin: generic-sessions</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__protocols.html">lws_protocols</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__plugin__capability.html">lws_plugin_capability</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__plugin.html">lws_plugin</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:ga40994491e1567f91f579d2b444775266"><td class="memItemLeft" align="right" valign="top"><a id="ga40994491e1567f91f579d2b444775266"></a>
typedef int(*&#160;</td><td class="memItemRight" valign="bottom"><b>lws_plugin_init_func</b>) (struct lws_context *, struct <a class="el" href="structlws__plugin__capability.html">lws_plugin_capability</a> *)</td></tr>
<tr class="separator:ga40994491e1567f91f579d2b444775266"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga83f7a924ba790fa273476075a59f08b0"><td class="memItemLeft" align="right" valign="top"><a id="ga83f7a924ba790fa273476075a59f08b0"></a>
typedef int(*&#160;</td><td class="memItemRight" valign="bottom"><b>lws_plugin_destroy_func</b>) (struct lws_context *)</td></tr>
<tr class="separator:ga83f7a924ba790fa273476075a59f08b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga25754726d97c5f519d313e691a9fe29d"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN const struct <a class="el" href="structlws__protocols.html">lws_protocols</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Protocols-and-Plugins.html#ga25754726d97c5f519d313e691a9fe29d">lws_vhost_name_to_protocol</a> (struct lws_vhost *vh, const char *name)</td></tr>
<tr class="separator:ga25754726d97c5f519d313e691a9fe29d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga72ad550786ca7976463589d347e62112"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN const struct <a class="el" href="structlws__protocols.html">lws_protocols</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Protocols-and-Plugins.html#ga72ad550786ca7976463589d347e62112">lws_get_protocol</a> (struct lws *wsi)</td></tr>
<tr class="separator:ga72ad550786ca7976463589d347e62112"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga8bbe5e65faca068845704bab911a5030"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN const struct <a class="el" href="structlws__protocols.html">lws_protocols</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Protocols-and-Plugins.html#ga8bbe5e65faca068845704bab911a5030">lws_protocol_get</a> (struct lws *wsi) LWS_WARN_DEPRECATED</td></tr>
<tr class="separator:ga8bbe5e65faca068845704bab911a5030"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaec0c0477288ff3f83aff38d357b883d1"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Protocols-and-Plugins.html#gaec0c0477288ff3f83aff38d357b883d1">lws_protocol_vh_priv_zalloc</a> (struct lws_vhost *vhost, const struct <a class="el" href="structlws__protocols.html">lws_protocols</a> *prot, int size)</td></tr>
<tr class="separator:gaec0c0477288ff3f83aff38d357b883d1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf3be4243443baac0f8be1fcfb4d25129"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Protocols-and-Plugins.html#gaf3be4243443baac0f8be1fcfb4d25129">lws_protocol_vh_priv_get</a> (struct lws_vhost *vhost, const struct <a class="el" href="structlws__protocols.html">lws_protocols</a> *prot)</td></tr>
<tr class="separator:gaf3be4243443baac0f8be1fcfb4d25129"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga106b37ae9c247e84d191ab09441adc43"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Protocols-and-Plugins.html#ga106b37ae9c247e84d191ab09441adc43">lws_finalize_startup</a> (struct lws_context *context)</td></tr>
<tr class="separator:ga106b37ae9c247e84d191ab09441adc43"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>Protocol and protocol plugin -related apis</h2>
<p>Protocols bind ws protocol names to a custom callback specific to that protocol implementaion.</p>
<p>A list of protocols can be passed in at context creation time, but it is also legal to leave that NULL and add the protocols and their callback code using plugins.</p>
<p>Plugins are much preferable compared to cut and pasting code into an application each time, since they can be used standalone. </p>
<h2 class="groupheader">Function Documentation</h2>
<a id="ga106b37ae9c247e84d191ab09441adc43"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga106b37ae9c247e84d191ab09441adc43">&#9670;&nbsp;</a></span>lws_finalize_startup()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_finalize_startup </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>context</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__Protocols-and-Plugins.html#ga106b37ae9c247e84d191ab09441adc43">lws_finalize_startup()</a> - drop initial process privileges</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>lws context</td></tr>
</table>
</dd>
</dl>
<p>This is called after the end of the vhost protocol initializations, but you may choose to call it earlier </p>
</div>
</div>
<a id="ga72ad550786ca7976463589d347e62112"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga72ad550786ca7976463589d347e62112">&#9670;&nbsp;</a></span>lws_get_protocol()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN const struct <a class="el" href="structlws__protocols.html">lws_protocols</a>* lws_get_protocol </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__Protocols-and-Plugins.html#ga72ad550786ca7976463589d347e62112">lws_get_protocol()</a> - Returns a protocol pointer from a websocket connection. </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>pointer to struct websocket you want to know the protocol of</td></tr>
</table>
</dd>
</dl>
<pre class="fragment"> Some apis can act on all live connections of a given protocol,
this is how you can get a pointer to the active protocol if needed.</pre>
</div>
</div>
<a id="ga8bbe5e65faca068845704bab911a5030"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga8bbe5e65faca068845704bab911a5030">&#9670;&nbsp;</a></span>lws_protocol_get()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN const struct <a class="el" href="structlws__protocols.html">lws_protocols</a>* lws_protocol_get </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__Protocols-and-Plugins.html#ga8bbe5e65faca068845704bab911a5030">lws_protocol_get()</a> - deprecated: use lws_get_protocol </p>
</div>
</div>
<a id="gaf3be4243443baac0f8be1fcfb4d25129"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaf3be4243443baac0f8be1fcfb4d25129">&#9670;&nbsp;</a></span>lws_protocol_vh_priv_get()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN void* lws_protocol_vh_priv_get </td>
<td>(</td>
<td class="paramtype">struct lws_vhost *&#160;</td>
<td class="paramname"><em>vhost</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const struct <a class="el" href="structlws__protocols.html">lws_protocols</a> *&#160;</td>
<td class="paramname"><em>prot</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__Protocols-and-Plugins.html#gaf3be4243443baac0f8be1fcfb4d25129">lws_protocol_vh_priv_get()</a> - retreive a protocol's per-vhost storage</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">vhost</td><td>vhost the instance is related to </td></tr>
<tr><td class="paramname">prot</td><td>protocol the instance is related to</td></tr>
</table>
</dd>
</dl>
<p>Recover a pointer to the allocated per-vhost storage for the protocol created by <a class="el" href="group__Protocols-and-Plugins.html#gaec0c0477288ff3f83aff38d357b883d1">lws_protocol_vh_priv_zalloc()</a> earlier </p>
</div>
</div>
<a id="gaec0c0477288ff3f83aff38d357b883d1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaec0c0477288ff3f83aff38d357b883d1">&#9670;&nbsp;</a></span>lws_protocol_vh_priv_zalloc()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN void* lws_protocol_vh_priv_zalloc </td>
<td>(</td>
<td class="paramtype">struct lws_vhost *&#160;</td>
<td class="paramname"><em>vhost</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const struct <a class="el" href="structlws__protocols.html">lws_protocols</a> *&#160;</td>
<td class="paramname"><em>prot</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>size</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__Protocols-and-Plugins.html#gaec0c0477288ff3f83aff38d357b883d1">lws_protocol_vh_priv_zalloc()</a> - Allocate and zero down a protocol's per-vhost storage </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">vhost</td><td>vhost the instance is related to </td></tr>
<tr><td class="paramname">prot</td><td>protocol the instance is related to </td></tr>
<tr><td class="paramname">size</td><td>bytes to allocate</td></tr>
</table>
</dd>
</dl>
<p>Protocols often find it useful to allocate a per-vhost struct, this is a helper to be called in the per-vhost init LWS_CALLBACK_PROTOCOL_INIT </p>
</div>
</div>
<a id="ga25754726d97c5f519d313e691a9fe29d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga25754726d97c5f519d313e691a9fe29d">&#9670;&nbsp;</a></span>lws_vhost_name_to_protocol()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN const struct <a class="el" href="structlws__protocols.html">lws_protocols</a>* lws_vhost_name_to_protocol </td>
<td>(</td>
<td class="paramtype">struct lws_vhost *&#160;</td>
<td class="paramname"><em>vh</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>name</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__Protocols-and-Plugins.html#ga25754726d97c5f519d313e691a9fe29d">lws_vhost_name_to_protocol()</a> - get vhost's protocol object from its name</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">vh</td><td>vhost to search </td></tr>
<tr><td class="paramname">name</td><td>protocol name</td></tr>
</table>
</dd>
</dl>
<p>Returns NULL or a pointer to the vhost's protocol of the requested name </p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,32 @@
var group__Protocols_and_Plugins =
[
[ "plugin: generic-sessions", "group__generic-sessions.html", "group__generic-sessions" ],
[ "lws_protocols", "structlws__protocols.html", [
[ "callback", "structlws__protocols.html#acabf94c1a9bfe7be0387fbb0e0c56b2d", null ],
[ "id", "structlws__protocols.html#a6b632018590c2b1bbe43fbab6d5e6fac", null ],
[ "name", "structlws__protocols.html#a0e63edb457a613c3fa4271e0a8f19624", null ],
[ "per_session_data_size", "structlws__protocols.html#a9bbd85f591ffb4259711cb5acbb05bea", null ],
[ "rx_buffer_size", "structlws__protocols.html#a0d1d4996d81b2f5e125bcec981e461c5", null ],
[ "user", "structlws__protocols.html#a3cbd903ad076736ae934a54cae36580e", null ]
] ],
[ "lws_plugin_capability", "structlws__plugin__capability.html", [
[ "api_magic", "structlws__plugin__capability.html#a523c7cde6f15bba345f56493dcf6b32a", null ],
[ "count_extensions", "structlws__plugin__capability.html#abcf51db969522fdda9aaf902e65739d3", null ],
[ "count_protocols", "structlws__plugin__capability.html#ae38f7cf1246b9ca3af3cbf9d46b7090f", null ],
[ "extensions", "structlws__plugin__capability.html#a7936f0eb93d79dea76b903d0f8a5f623", null ],
[ "protocols", "structlws__plugin__capability.html#a6a4d9d01e770f378ddadc77b37522033", null ]
] ],
[ "lws_plugin", "structlws__plugin.html", [
[ "caps", "structlws__plugin.html#ac7f1fdfe8cf8a21f8ee9720c21934a3f", null ],
[ "l", "structlws__plugin.html#a4ef37a43653715b6c69cbf8a7be747f4", null ],
[ "lib", "structlws__plugin.html#af9e1042dc1de5b9d202c2f5fd1834330", null ],
[ "list", "structlws__plugin.html#a65dffd68fd267ce17b988790d1d35f22", null ],
[ "name", "structlws__plugin.html#af4ac8fcb79e10e0c2d960e1804d98105", null ]
] ],
[ "lws_finalize_startup", "group__Protocols-and-Plugins.html#ga106b37ae9c247e84d191ab09441adc43", null ],
[ "lws_get_protocol", "group__Protocols-and-Plugins.html#ga72ad550786ca7976463589d347e62112", null ],
[ "lws_protocol_get", "group__Protocols-and-Plugins.html#ga8bbe5e65faca068845704bab911a5030", null ],
[ "lws_protocol_vh_priv_get", "group__Protocols-and-Plugins.html#gaf3be4243443baac0f8be1fcfb4d25129", null ],
[ "lws_protocol_vh_priv_zalloc", "group__Protocols-and-Plugins.html#gaec0c0477288ff3f83aff38d357b883d1", null ],
[ "lws_vhost_name_to_protocol", "group__Protocols-and-Plugins.html#ga25754726d97c5f519d313e691a9fe29d", null ]
];

View file

@ -0,0 +1,444 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Callback when writeable</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__callback-when-writeable.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Callback when writeable</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga941caaa468bc507b1cae52275f58800d"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__callback-when-writeable.html#ga941caaa468bc507b1cae52275f58800d">lws_callback_on_writable</a> (struct lws *wsi)</td></tr>
<tr class="separator:ga941caaa468bc507b1cae52275f58800d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gabbe4655c7eeb3eb1671b2323ec6b3107"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__callback-when-writeable.html#gabbe4655c7eeb3eb1671b2323ec6b3107">lws_callback_on_writable_all_protocol</a> (const struct lws_context *context, const struct <a class="el" href="structlws__protocols.html">lws_protocols</a> *protocol)</td></tr>
<tr class="separator:gabbe4655c7eeb3eb1671b2323ec6b3107"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga8570860e191b62db264f2bac67354ea8"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__callback-when-writeable.html#ga8570860e191b62db264f2bac67354ea8">lws_callback_on_writable_all_protocol_vhost</a> (const struct lws_vhost *vhost, const struct <a class="el" href="structlws__protocols.html">lws_protocols</a> *protocol)</td></tr>
<tr class="separator:ga8570860e191b62db264f2bac67354ea8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gacf04bbe089f47c971c6408c5efe2ac70"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__callback-when-writeable.html#gacf04bbe089f47c971c6408c5efe2ac70">lws_callback_all_protocol</a> (struct lws_context *context, const struct <a class="el" href="structlws__protocols.html">lws_protocols</a> *protocol, int reason)</td></tr>
<tr class="separator:gacf04bbe089f47c971c6408c5efe2ac70"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga13c984d8c5a44a745fd02bc2fba36053"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__callback-when-writeable.html#ga13c984d8c5a44a745fd02bc2fba36053">lws_callback_all_protocol_vhost</a> (struct lws_vhost *vh, const struct <a class="el" href="structlws__protocols.html">lws_protocols</a> *protocol, int reason)</td></tr>
<tr class="separator:ga13c984d8c5a44a745fd02bc2fba36053"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga60939cf0c073d933fde3d17f3591caf5"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__callback-when-writeable.html#ga60939cf0c073d933fde3d17f3591caf5">lws_callback_vhost_protocols</a> (struct lws *wsi, int reason, void *in, int len)</td></tr>
<tr class="separator:ga60939cf0c073d933fde3d17f3591caf5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaad3d524a84d2be08ac85153bc158504b"><td class="memItemLeft" align="right" valign="top"><a id="gaad3d524a84d2be08ac85153bc158504b"></a>
LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b>lws_callback_http_dummy</b> (struct lws *wsi, enum <a class="el" href="group__usercb.html#gad62860e19975ba4c4af401c3cdb6abf7">lws_callback_reasons</a> reason, void *user, void *in, size_t len)</td></tr>
<tr class="separator:gaad3d524a84d2be08ac85153bc158504b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa709e02a10558753c851e58f1e2c16ba"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__callback-when-writeable.html#gaa709e02a10558753c851e58f1e2c16ba">lws_get_socket_fd</a> (struct lws *wsi)</td></tr>
<tr class="separator:gaa709e02a10558753c851e58f1e2c16ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac4643fe16b0940ae5b68b4ee6195cbde"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__callback-when-writeable.html#gac4643fe16b0940ae5b68b4ee6195cbde">lws_get_peer_write_allowance</a> (struct lws *wsi)</td></tr>
<tr class="separator:gac4643fe16b0940ae5b68b4ee6195cbde"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>Callback When Writeable</h2>
<p>lws can only write data on a connection when it is able to accept more data without blocking.</p>
<p>So a basic requirement is we should only use the <a class="el" href="group__sending-data.html#gafd5fdd285a0e25ba7e3e1051deec1001">lws_write()</a> apis when the connection we want to write on says that he can accept more data.</p>
<p>When lws cannot complete your send at the time, it will buffer the data and send it in the background, suppressing any further WRITEABLE callbacks on that connection until it completes. So it is important to write new things in a new writeable callback.</p>
<p>These apis reflect the various ways we can indicate we would like to be called back when one or more connections is writeable. </p>
<h2 class="groupheader">Function Documentation</h2>
<a id="gacf04bbe089f47c971c6408c5efe2ac70"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gacf04bbe089f47c971c6408c5efe2ac70">&#9670;&nbsp;</a></span>lws_callback_all_protocol()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_callback_all_protocol </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>context</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const struct <a class="el" href="structlws__protocols.html">lws_protocols</a> *&#160;</td>
<td class="paramname"><em>protocol</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>reason</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__callback-when-writeable.html#gacf04bbe089f47c971c6408c5efe2ac70">lws_callback_all_protocol()</a> - Callback all connections using the given protocol with the given reason</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>lws_context </td></tr>
<tr><td class="paramname">protocol</td><td>Protocol whose connections will get callbacks </td></tr>
<tr><td class="paramname">reason</td><td>Callback reason index</td></tr>
</table>
</dd>
</dl>
<ul>
<li>Which: connections using this protocol on ALL VHOSTS</li>
<li>When: when the individual connection becomes writeable</li>
<li>What: reason </li>
</ul>
</div>
</div>
<a id="ga13c984d8c5a44a745fd02bc2fba36053"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga13c984d8c5a44a745fd02bc2fba36053">&#9670;&nbsp;</a></span>lws_callback_all_protocol_vhost()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_callback_all_protocol_vhost </td>
<td>(</td>
<td class="paramtype">struct lws_vhost *&#160;</td>
<td class="paramname"><em>vh</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const struct <a class="el" href="structlws__protocols.html">lws_protocols</a> *&#160;</td>
<td class="paramname"><em>protocol</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>reason</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__callback-when-writeable.html#ga13c984d8c5a44a745fd02bc2fba36053">lws_callback_all_protocol_vhost()</a> - Callback all connections using the given protocol with the given reason</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">vh</td><td>Vhost whose connections will get callbacks </td></tr>
<tr><td class="paramname">protocol</td><td>Which protocol to match </td></tr>
<tr><td class="paramname">reason</td><td>Callback reason index</td></tr>
</table>
</dd>
</dl>
<ul>
<li>Which: connections using this protocol on GIVEN VHOST ONLY</li>
<li>When: now</li>
<li>What: reason </li>
</ul>
</div>
</div>
<a id="ga941caaa468bc507b1cae52275f58800d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga941caaa468bc507b1cae52275f58800d">&#9670;&nbsp;</a></span>lws_callback_on_writable()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_callback_on_writable </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__callback-when-writeable.html#ga941caaa468bc507b1cae52275f58800d">lws_callback_on_writable()</a> - Request a callback when this socket becomes able to be written to without blocking</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>Websocket connection instance to get callback for</td></tr>
</table>
</dd>
</dl>
<ul>
<li>Which: only this wsi</li>
<li>When: when the individual connection becomes writeable</li>
<li>What: LWS_CALLBACK_*_WRITEABLE </li>
</ul>
</div>
</div>
<a id="gabbe4655c7eeb3eb1671b2323ec6b3107"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gabbe4655c7eeb3eb1671b2323ec6b3107">&#9670;&nbsp;</a></span>lws_callback_on_writable_all_protocol()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_callback_on_writable_all_protocol </td>
<td>(</td>
<td class="paramtype">const struct lws_context *&#160;</td>
<td class="paramname"><em>context</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const struct <a class="el" href="structlws__protocols.html">lws_protocols</a> *&#160;</td>
<td class="paramname"><em>protocol</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__callback-when-writeable.html#gabbe4655c7eeb3eb1671b2323ec6b3107">lws_callback_on_writable_all_protocol()</a> - Request a callback for all connections on same vhost using the given protocol when it becomes possible to write to each socket without blocking in turn.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>lws_context </td></tr>
<tr><td class="paramname">protocol</td><td>Protocol whose connections will get callbacks</td></tr>
</table>
</dd>
</dl>
<ul>
<li>Which: connections using this protocol on ANY VHOST</li>
<li>When: when the individual connection becomes writeable</li>
<li>What: LWS_CALLBACK_*_WRITEABLE </li>
</ul>
</div>
</div>
<a id="ga8570860e191b62db264f2bac67354ea8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga8570860e191b62db264f2bac67354ea8">&#9670;&nbsp;</a></span>lws_callback_on_writable_all_protocol_vhost()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_callback_on_writable_all_protocol_vhost </td>
<td>(</td>
<td class="paramtype">const struct lws_vhost *&#160;</td>
<td class="paramname"><em>vhost</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const struct <a class="el" href="structlws__protocols.html">lws_protocols</a> *&#160;</td>
<td class="paramname"><em>protocol</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__callback-when-writeable.html#ga8570860e191b62db264f2bac67354ea8">lws_callback_on_writable_all_protocol_vhost()</a> - Request a callback for all connections using the given protocol when it becomes possible to write to each socket without blocking in turn.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">vhost</td><td>Only consider connections on this lws_vhost </td></tr>
<tr><td class="paramname">protocol</td><td>Protocol whose connections will get callbacks</td></tr>
</table>
</dd>
</dl>
<ul>
<li>Which: connections using this protocol on GIVEN VHOST ONLY</li>
<li>When: when the individual connection becomes writeable</li>
<li>What: LWS_CALLBACK_*_WRITEABLE </li>
</ul>
</div>
</div>
<a id="ga60939cf0c073d933fde3d17f3591caf5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga60939cf0c073d933fde3d17f3591caf5">&#9670;&nbsp;</a></span>lws_callback_vhost_protocols()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_callback_vhost_protocols </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>reason</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>in</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__callback-when-writeable.html#ga60939cf0c073d933fde3d17f3591caf5">lws_callback_vhost_protocols()</a> - Callback all protocols enabled on a vhost with the given reason</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>wsi whose vhost will get callbacks </td></tr>
<tr><td class="paramname">reason</td><td>Callback reason index </td></tr>
<tr><td class="paramname">in</td><td>in argument to callback </td></tr>
<tr><td class="paramname">len</td><td>len argument to callback</td></tr>
</table>
</dd>
</dl>
<ul>
<li>Which: connections using this protocol on same VHOST as wsi ONLY</li>
<li>When: now</li>
<li>What: reason </li>
</ul>
</div>
</div>
<a id="gac4643fe16b0940ae5b68b4ee6195cbde"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gac4643fe16b0940ae5b68b4ee6195cbde">&#9670;&nbsp;</a></span>lws_get_peer_write_allowance()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN size_t lws_get_peer_write_allowance </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__callback-when-writeable.html#gac4643fe16b0940ae5b68b4ee6195cbde">lws_get_peer_write_allowance()</a> - get the amount of data writeable to peer if known</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>Websocket connection instance</td></tr>
</table>
</dd>
</dl>
<p>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.</p>
<p>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.</p>
<p>This number represents the maximum you could send to the peer or intermediary on this connection right now without the protocol complaining.</p>
<p>lws manages accounting for send window updates and payload writes automatically, so this number reflects the situation at the peer or intermediary dynamically. </p>
</div>
</div>
<a id="gaa709e02a10558753c851e58f1e2c16ba"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaa709e02a10558753c851e58f1e2c16ba">&#9670;&nbsp;</a></span>lws_get_socket_fd()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_get_socket_fd </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__callback-when-writeable.html#gaa709e02a10558753c851e58f1e2c16ba">lws_get_socket_fd()</a> - returns the socket file descriptor</p>
<p>You will not need this unless you are doing something special</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>Websocket connection instance </td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,11 @@
var group__callback_when_writeable =
[
[ "lws_callback_all_protocol", "group__callback-when-writeable.html#gacf04bbe089f47c971c6408c5efe2ac70", null ],
[ "lws_callback_all_protocol_vhost", "group__callback-when-writeable.html#ga13c984d8c5a44a745fd02bc2fba36053", null ],
[ "lws_callback_on_writable", "group__callback-when-writeable.html#ga941caaa468bc507b1cae52275f58800d", null ],
[ "lws_callback_on_writable_all_protocol", "group__callback-when-writeable.html#gabbe4655c7eeb3eb1671b2323ec6b3107", null ],
[ "lws_callback_on_writable_all_protocol_vhost", "group__callback-when-writeable.html#ga8570860e191b62db264f2bac67354ea8", null ],
[ "lws_callback_vhost_protocols", "group__callback-when-writeable.html#ga60939cf0c073d933fde3d17f3591caf5", null ],
[ "lws_get_peer_write_allowance", "group__callback-when-writeable.html#gac4643fe16b0940ae5b68b4ee6195cbde", null ],
[ "lws_get_socket_fd", "group__callback-when-writeable.html#gaa709e02a10558753c851e58f1e2c16ba", null ]
];

81
doc/html/group__cgi.html Normal file
View file

@ -0,0 +1,81 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: cgi handling</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__cgi.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="headertitle">
<div class="title">cgi handling</div> </div>
</div><!--header-->
<div class="contents">
<h2>CGI handling</h2>
<p>These functions allow low-level control over stdin/out/err of the cgi.</p>
<p>However for most cases, binding the cgi to http in and out, the default lws implementation already does the right thing. </p>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

391
doc/html/group__client.html Normal file
View file

@ -0,0 +1,391 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Client</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__client.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Client</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__client__connect__info.html">lws_client_connect_info</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ga96f3dbad54b2853969cfa933d66871ce"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__client.html#ga96f3dbad54b2853969cfa933d66871ce">lws_client_connect_ssl_connection_flags</a> { <b>LCCSCF_USE_SSL</b> = (1 &lt;&lt; 0),
<b>LCCSCF_ALLOW_SELFSIGNED</b> = (1 &lt;&lt; 1),
<b>LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK</b> = (1 &lt;&lt; 2)
}</td></tr>
<tr class="separator:ga96f3dbad54b2853969cfa933d66871ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga0c966136905f467816307cfba6deb5fd"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN struct lws *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__client.html#ga0c966136905f467816307cfba6deb5fd">lws_client_connect_via_info</a> (struct <a class="el" href="structlws__client__connect__info.html">lws_client_connect_info</a> *ccinfo)</td></tr>
<tr class="separator:ga0c966136905f467816307cfba6deb5fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4af0a20108a95e8b6d94dd4d80055ff3"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN struct lws *LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__client.html#ga4af0a20108a95e8b6d94dd4d80055ff3">lws_client_connect</a> (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) LWS_WARN_DEPRECATED</td></tr>
<tr class="separator:ga4af0a20108a95e8b6d94dd4d80055ff3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac6a8558b4410961a880241c2ac1271e2"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN struct lws *LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__client.html#gac6a8558b4410961a880241c2ac1271e2">lws_client_connect_extended</a> (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_WARN_DEPRECATED</td></tr>
<tr class="separator:gac6a8558b4410961a880241c2ac1271e2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4f44b8230e6732816ca5cd8d1aaaf340"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__client.html#ga4f44b8230e6732816ca5cd8d1aaaf340">lws_init_vhost_client_ssl</a> (const struct <a class="el" href="structlws__context__creation__info.html">lws_context_creation_info</a> *info, struct lws_vhost *vhost)</td></tr>
<tr class="separator:ga4f44b8230e6732816ca5cd8d1aaaf340"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4450c34200bf9dab3beb90ef23221870"><td class="memItemLeft" align="right" valign="top"><a id="ga4450c34200bf9dab3beb90ef23221870"></a>
LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b>lws_http_client_read</b> (struct lws *wsi, char **buf, int *len)</td></tr>
<tr class="separator:ga4450c34200bf9dab3beb90ef23221870"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga26588fb345083076c14169dd5859f57a"><td class="memItemLeft" align="right" valign="top"><a id="ga26588fb345083076c14169dd5859f57a"></a>
LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><b>lws_client_http_body_pending</b> (struct lws *wsi, int something_left_to_send)</td></tr>
<tr class="separator:ga26588fb345083076c14169dd5859f57a"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>Client releated functions</h2>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a id="ga96f3dbad54b2853969cfa933d66871ce"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga96f3dbad54b2853969cfa933d66871ce">&#9670;&nbsp;</a></span>lws_client_connect_ssl_connection_flags</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="group__client.html#ga96f3dbad54b2853969cfa933d66871ce">lws_client_connect_ssl_connection_flags</a></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p>enum lws_client_connect_ssl_connection_flags - flags that may be used with struct <a class="el" href="structlws__client__connect__info.html">lws_client_connect_info</a> ssl_connection member to control if and how SSL checks apply to the client connection being created </p>
<div class="fragment"><div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>&#160; {</div><div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>&#160; LCCSCF_USE_SSL = (1 &lt;&lt; 0),</div><div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>&#160; LCCSCF_ALLOW_SELFSIGNED = (1 &lt;&lt; 1),</div><div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>&#160; LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK = (1 &lt;&lt; 2)</div><div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>&#160;};</div></div><!-- fragment -->
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="ga4af0a20108a95e8b6d94dd4d80055ff3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga4af0a20108a95e8b6d94dd4d80055ff3">&#9670;&nbsp;</a></span>lws_client_connect()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN struct lws* LWS_WARN_UNUSED_RESULT lws_client_connect </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>clients</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>address</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>port</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>ssl_connection</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>path</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>host</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>origin</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>protocol</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>ietf_version_or_minus_one</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__client.html#ga4af0a20108a95e8b6d94dd4d80055ff3">lws_client_connect()</a> - Connect to another websocket server </p><dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000002">Deprecated:</a></b></dt><dd>DEPRECATED use lws_client_connect_via_info </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">clients</td><td>Websocket context </td></tr>
<tr><td class="paramname">address</td><td>Remote server address, eg, "myserver.com" </td></tr>
<tr><td class="paramname">port</td><td>Port to connect to on the remote server, eg, 80 </td></tr>
<tr><td class="paramname">ssl_connection</td><td>0 = ws://, 1 = wss:// encrypted, 2 = wss:// allow self signed certs </td></tr>
<tr><td class="paramname">path</td><td>Websocket path on server </td></tr>
<tr><td class="paramname">host</td><td>Hostname on server </td></tr>
<tr><td class="paramname">origin</td><td>Socket origin name </td></tr>
<tr><td class="paramname">protocol</td><td>Comma-separated list of protocols being asked for from the server, or just one. The server will pick the one it likes best. If you don't want to specify a protocol, which is legal, use NULL here. </td></tr>
<tr><td class="paramname">ietf_version_or_minus_one</td><td>-1 to ask to connect using the default, latest protocol supported, or the specific protocol ordinal</td></tr>
</table>
</dd>
</dl>
<p>This function creates a connection to a remote server </p>
</div>
</div>
<a id="gac6a8558b4410961a880241c2ac1271e2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gac6a8558b4410961a880241c2ac1271e2">&#9670;&nbsp;</a></span>lws_client_connect_extended()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN struct lws* LWS_WARN_UNUSED_RESULT lws_client_connect_extended </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>clients</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>address</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>port</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>ssl_connection</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>path</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>host</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>origin</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>protocol</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>ietf_version_or_minus_one</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>userdata</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__client.html#gac6a8558b4410961a880241c2ac1271e2">lws_client_connect_extended()</a> - Connect to another websocket server </p><dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000003">Deprecated:</a></b></dt><dd>DEPRECATED use lws_client_connect_via_info </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">clients</td><td>Websocket context </td></tr>
<tr><td class="paramname">address</td><td>Remote server address, eg, "myserver.com" </td></tr>
<tr><td class="paramname">port</td><td>Port to connect to on the remote server, eg, 80 </td></tr>
<tr><td class="paramname">ssl_connection</td><td>0 = ws://, 1 = wss:// encrypted, 2 = wss:// allow self signed certs </td></tr>
<tr><td class="paramname">path</td><td>Websocket path on server </td></tr>
<tr><td class="paramname">host</td><td>Hostname on server </td></tr>
<tr><td class="paramname">origin</td><td>Socket origin name </td></tr>
<tr><td class="paramname">protocol</td><td>Comma-separated list of protocols being asked for from the server, or just one. The server will pick the one it likes best. </td></tr>
<tr><td class="paramname">ietf_version_or_minus_one</td><td>-1 to ask to connect using the default, latest protocol supported, or the specific protocol ordinal </td></tr>
<tr><td class="paramname">userdata</td><td>Pre-allocated user data <pre class="fragment"> This function creates a connection to a remote server</pre> </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga0c966136905f467816307cfba6deb5fd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga0c966136905f467816307cfba6deb5fd">&#9670;&nbsp;</a></span>lws_client_connect_via_info()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN struct lws* lws_client_connect_via_info </td>
<td>(</td>
<td class="paramtype">struct <a class="el" href="structlws__client__connect__info.html">lws_client_connect_info</a> *&#160;</td>
<td class="paramname"><em>ccinfo</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__client.html#ga0c966136905f467816307cfba6deb5fd">lws_client_connect_via_info()</a> - Connect to another websocket server </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">ccinfo</td><td>pointer to <a class="el" href="structlws__client__connect__info.html">lws_client_connect_info</a> struct <pre class="fragment"> This function creates a connection to a remote server using the
information provided in ccinfo.</pre> </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga4f44b8230e6732816ca5cd8d1aaaf340"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga4f44b8230e6732816ca5cd8d1aaaf340">&#9670;&nbsp;</a></span>lws_init_vhost_client_ssl()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_init_vhost_client_ssl </td>
<td>(</td>
<td class="paramtype">const struct <a class="el" href="structlws__context__creation__info.html">lws_context_creation_info</a> *&#160;</td>
<td class="paramname"><em>info</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">struct lws_vhost *&#160;</td>
<td class="paramname"><em>vhost</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__client.html#ga4f44b8230e6732816ca5cd8d1aaaf340">lws_init_vhost_client_ssl()</a> - also enable client SSL on an existing vhost</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">info</td><td>client ssl related info </td></tr>
<tr><td class="paramname">vhost</td><td>which vhost to initialize client ssl operations on</td></tr>
</table>
</dd>
</dl>
<p>You only need to call this if you plan on using SSL client connections on the vhost. For non-SSL client connections, it's not necessary to call this.</p>
<p>The following members of info are used during the call </p><pre class="fragment"> - options must have LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT set,
otherwise the call does nothing
- provided_client_ssl_ctx must be NULL to get a generated client
ssl context, otherwise you can pass a prepared one in by setting it
- ssl_cipher_list may be NULL or set to the client valid cipher list
- ssl_ca_filepath may be NULL or client cert filepath
- ssl_cert_filepath may be NULL or client cert filepath
- ssl_private_key_filepath may be NULL or client cert private key
</pre><p>You must create your vhost explicitly if you want to use this, so you have a pointer to the vhost. Create the context first with the option flag LWS_SERVER_OPTION_EXPLICIT_VHOSTS and then call <a class="el" href="group__context-and-vhost.html#ga0c54c667ccd9b8b3dddcd123ca72f87c">lws_create_vhost()</a> with the same info struct. </p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

28
doc/html/group__client.js Normal file
View file

@ -0,0 +1,28 @@
var group__client =
[
[ "lws_client_connect_info", "structlws__client__connect__info.html", [
[ "_unused", "structlws__client__connect__info.html#ad47f50d1633dc5df74548606c9a66d73", null ],
[ "address", "structlws__client__connect__info.html#aa364094f94ef1bcaaabbd9161971d502", null ],
[ "client_exts", "structlws__client__connect__info.html#a7732b996e977393c3e1076be2a8ded6c", null ],
[ "context", "structlws__client__connect__info.html#afe999d133cc240a0bfd02aade0514cfd", null ],
[ "host", "structlws__client__connect__info.html#a9b36d47c3422329df32c21040a35ebc7", null ],
[ "ietf_version_or_minus_one", "structlws__client__connect__info.html#a69abb5aeed755750b9755e5c91db6895", null ],
[ "method", "structlws__client__connect__info.html#aa9e8e3da4e783a0651b0dea62c2dd1db", null ],
[ "origin", "structlws__client__connect__info.html#a8595f83e64147cb687b6418cf500dd4c", null ],
[ "parent_wsi", "structlws__client__connect__info.html#a6843a60e1050b10db9d98d7eeb45f587", null ],
[ "path", "structlws__client__connect__info.html#a76a8388733f114fb8fd3643874781185", null ],
[ "port", "structlws__client__connect__info.html#a1af124d81c3c22a46d39387c5bc3d6b9", null ],
[ "protocol", "structlws__client__connect__info.html#aba35adfb74845a5fd0c3dc141cbdddd2", null ],
[ "pwsi", "structlws__client__connect__info.html#a065063b5117ecd0a59567c97f04bda2e", null ],
[ "ssl_connection", "structlws__client__connect__info.html#a9862297827639238a7a0b4054c3ddf3d", null ],
[ "uri_replace_from", "structlws__client__connect__info.html#a03c305fdca809667b6a9a83b3edfd83a", null ],
[ "uri_replace_to", "structlws__client__connect__info.html#a9959ba103d3d2484e559a9f7879eebe3", null ],
[ "userdata", "structlws__client__connect__info.html#a9831b9f9ab54a1aec4bb15324f1c3836", null ],
[ "vhost", "structlws__client__connect__info.html#a3893181d728f326f9f5b47c1459cb8be", null ]
] ],
[ "lws_client_connect_ssl_connection_flags", "group__client.html#ga96f3dbad54b2853969cfa933d66871ce", null ],
[ "lws_client_connect", "group__client.html#ga4af0a20108a95e8b6d94dd4d80055ff3", null ],
[ "lws_client_connect_extended", "group__client.html#gac6a8558b4410961a880241c2ac1271e2", null ],
[ "lws_client_connect_via_info", "group__client.html#ga0c966136905f467816307cfba6deb5fd", null ],
[ "lws_init_vhost_client_ssl", "group__client.html#ga4f44b8230e6732816ca5cd8d1aaaf340", null ]
];

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,84 @@
var group__context_and_vhost =
[
[ "Vhost mounts and options", "group__vhost-mounts.html", "group__vhost-mounts" ],
[ "lws_context_creation_info", "structlws__context__creation__info.html", [
[ "_unused", "structlws__context__creation__info.html#afce3b59950eca3203faa07381bbed5d7", null ],
[ "count_threads", "structlws__context__creation__info.html#ae52f3237e144e9ddcab5e2cf91d1e419", null ],
[ "ecdh_curve", "structlws__context__creation__info.html#afa5d4e7d9f86b58a1c6fac14f0a5f5f9", null ],
[ "extensions", "structlws__context__creation__info.html#a4a3d1155fc52f5048b481884f6fb947c", null ],
[ "fd_limit_per_thread", "structlws__context__creation__info.html#a45e63e24c88289e0c8352377ef4d3646", null ],
[ "gid", "structlws__context__creation__info.html#a9c9d22437de92c197f3cee52912b2c03", null ],
[ "headers", "structlws__context__creation__info.html#a8ca0ec6b8675c13849bbdcdc0d50c9a3", null ],
[ "http_proxy_address", "structlws__context__creation__info.html#aef917c0b23976a264d2474901b4f5aa3", null ],
[ "http_proxy_port", "structlws__context__creation__info.html#a7b59f2bdc869871e7bde232db94f5ca6", null ],
[ "iface", "structlws__context__creation__info.html#a75434932bb5df54665ea678eb8ac104a", null ],
[ "ka_interval", "structlws__context__creation__info.html#a381342a398883d6204955ff3c1849ddd", null ],
[ "ka_probes", "structlws__context__creation__info.html#a3baab4285c679fbe027c2504621d7410", null ],
[ "ka_time", "structlws__context__creation__info.html#ac583ce92b8e1c949cb6fef6bfe713d56", null ],
[ "keepalive_timeout", "structlws__context__creation__info.html#a81697c6b763b5ef3ee52862bc70b07d6", null ],
[ "log_filepath", "structlws__context__creation__info.html#ad0e95ba721f7bd2b676719f8093c23a2", null ],
[ "max_http_header_data", "structlws__context__creation__info.html#a0cdfd3c484689ba6f0f2cc91b38ce948", null ],
[ "max_http_header_data2", "structlws__context__creation__info.html#aa8d9e85e137f35fb006f2e4a53f0887a", null ],
[ "max_http_header_pool", "structlws__context__creation__info.html#a0b154e79abc1167ba4ac3539f4af6720", null ],
[ "mounts", "structlws__context__creation__info.html#a13ffbb0d010309669611f8c4eda7d7f8", null ],
[ "options", "structlws__context__creation__info.html#a9d3b17a25e1fbc772f21eb4959a82724", null ],
[ "plugin_dirs", "structlws__context__creation__info.html#a8122cfc0810bafe51edb3ba6bf9a1251", null ],
[ "port", "structlws__context__creation__info.html#a424a5ce268d6903e42243be94487ab85", null ],
[ "protocols", "structlws__context__creation__info.html#abb90ffb3e6d6db2db20f529d61bd9122", null ],
[ "provided_client_ssl_ctx", "structlws__context__creation__info.html#a1654d41bea6fb2f619b57e6a264b26a4", null ],
[ "provided_client_ssl_ctx", "structlws__context__creation__info.html#a0e790dda6202604f73a03b6149bc12bb", null ],
[ "pt_serv_buf_size", "structlws__context__creation__info.html#a57f88c0745adbd1d6b9b619b8de30209", null ],
[ "pvo", "structlws__context__creation__info.html#a999866fcd15dbd621773436f97190458", null ],
[ "server_string", "structlws__context__creation__info.html#a137a9b9de4f6a7993fed8746d551e616", null ],
[ "ssl_ca_filepath", "structlws__context__creation__info.html#a4f8e65c3a059d3b586fafa9ef3282c29", null ],
[ "ssl_cert_filepath", "structlws__context__creation__info.html#ac62b0f0e8e402412ba5011d15c244103", null ],
[ "ssl_cipher_list", "structlws__context__creation__info.html#a3e1516fd7fed26bfa77c0246ed26c2eb", null ],
[ "ssl_options_clear", "structlws__context__creation__info.html#adb0bc0b28cd7d90ab306723d8ffa96fa", null ],
[ "ssl_options_set", "structlws__context__creation__info.html#a704940261951ced6b5d8191bd8b9bb2d", null ],
[ "ssl_private_key_filepath", "structlws__context__creation__info.html#ab9ec8893e0f7843cf5d783d2f350ef14", null ],
[ "ssl_private_key_password", "structlws__context__creation__info.html#af3fb447be15c4fcb01d3285a6678ab54", null ],
[ "timeout_secs", "structlws__context__creation__info.html#a6cfa3d51df2def3349a5cbf0d712822d", null ],
[ "token_limits", "structlws__context__creation__info.html#ac8a75b7b259a3c3a5fbb4219a3f06c29", null ],
[ "uid", "structlws__context__creation__info.html#ac105b4180008cb3e672d57beead8382e", null ],
[ "user", "structlws__context__creation__info.html#a0e9d94cdfb893d777b4a4db81e7b5ac0", null ],
[ "vhost_name", "structlws__context__creation__info.html#ad50db098a208f045f7811207d2bee4b9", null ],
[ "ws_ping_pong_interval", "structlws__context__creation__info.html#a33a1a25a7df3793f59047e20dd580078", null ]
] ],
[ "lws_protocol_vhost_options", "structlws__protocol__vhost__options.html", [
[ "name", "structlws__protocol__vhost__options.html#acf9db77f8eb64cd4e314be9b43d8a8b9", null ],
[ "next", "structlws__protocol__vhost__options.html#abc714ddb4171756fc8196e9823a1e21c", null ],
[ "options", "structlws__protocol__vhost__options.html#afd99fbc90be51ea2465b550c2ec47822", null ],
[ "value", "structlws__protocol__vhost__options.html#a0640a92513c70ee6b9b295a9ad1658e7", null ]
] ],
[ "lws_context_options", "group__context-and-vhost.html#ga41c2d763f78cc248df3b9f8645dbd2a5", [
[ "LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT", "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a274ed462a1a9239eb6ddf9007f5b7092", null ],
[ "LWS_SERVER_OPTION_SKIP_SERVER_CANONICAL_NAME", "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a6582c985ee0ceaadc1d277030eae2d7c", null ],
[ "LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT", "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a1cc4562d05cba52a6dfa0697a65ade0d", null ],
[ "LWS_SERVER_OPTION_LIBEV", "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a273d9975675130de0c6dc937dde7c8a6", null ],
[ "LWS_SERVER_OPTION_DISABLE_IPV6", "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a34ab36e68c0d593b6f19b8d5ef1240a9", null ],
[ "LWS_SERVER_OPTION_DISABLE_OS_CA_CERTS", "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a4933347a821e73c3f1e13fb6bfc7ad93", null ],
[ "LWS_SERVER_OPTION_PEER_CERT_NOT_REQUIRED", "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5ac56a8a6590e74a8016d0fae09fb404fc", null ],
[ "LWS_SERVER_OPTION_VALIDATE_UTF8", "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aa0158b4e85420811e6b0f1378c6ded0f", null ],
[ "LWS_SERVER_OPTION_SSL_ECDH", "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a1b2f8bde0f62adc7ebe81b2043f34c0c", null ],
[ "LWS_SERVER_OPTION_LIBUV", "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aff121db04a10cf8b2c5df9d4f2b89f1e", null ],
[ "LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS", "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a4832187186c4d130c68051214cd42ada", null ],
[ "LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT", "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a7fed6a527c8d5e0acac1b4179644583a", null ],
[ "LWS_SERVER_OPTION_EXPLICIT_VHOSTS", "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5accc9d0d11d1124a21659586164b0962e", null ],
[ "LWS_SERVER_OPTION_UNIX_SOCK", "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a9637e9001d8c8b2521086bcafbd8a941", null ],
[ "LWS_SERVER_OPTION_STS", "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5ac962efd35abf6c402f9fb14aa14f5016", null ],
[ "LWS_SERVER_OPTION_IPV6_V6ONLY_MODIFY", "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5af62887536e25e053e68741006dba46d8", null ],
[ "LWS_SERVER_OPTION_IPV6_V6ONLY_VALUE", "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aca5d42820b65eac5618ec3f0bd8a1160", null ],
[ "LWS_SERVER_OPTION_UV_NO_SIGSEGV_SIGFPE_SPIN", "group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a87a824b2e812f4c3e7f2c4a1ea4f8abd", null ]
] ],
[ "lws_context_destroy", "group__context-and-vhost.html#ga8ee0314028755f1ddfa9428e09b4fddb", null ],
[ "lws_context_user", "group__context-and-vhost.html#gaeb12f934bfd178bd2132a9e73fc641da", null ],
[ "lws_create_context", "group__context-and-vhost.html#gaf2fff58562caab7510c41eeac85a8648", null ],
[ "lws_create_vhost", "group__context-and-vhost.html#ga0c54c667ccd9b8b3dddcd123ca72f87c", null ],
[ "lws_get_vhost", "group__context-and-vhost.html#ga06e77ce2916f8bc9826ef8d9d68e3932", null ],
[ "lws_json_dump_context", "group__context-and-vhost.html#gae2134657cdd2ea7a59e13ad314e4c50d", null ],
[ "lws_json_dump_vhost", "group__context-and-vhost.html#ga94e6cc2223c4eec316b13bcebc3628b6", null ],
[ "lws_set_proxy", "group__context-and-vhost.html#ga7e9d5405547a457d86e0b4f0ae2bb1c4", null ],
[ "lws_vhost_get", "group__context-and-vhost.html#ga8db03e19a372e34ac25cf21af894a02c", null ],
[ "lwsws_get_config_globals", "group__context-and-vhost.html#ga98d88c9080fd89c37114363a6474ea73", null ],
[ "lwsws_get_config_vhosts", "group__context-and-vhost.html#ga341064721add2618ae1b29717493a212", null ]
];

103
doc/html/group__ev.html Normal file
View file

@ -0,0 +1,103 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: libev helpers</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__ev.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">libev helpers</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:ga3fd389d64c6fa45a3c1427d2f6988741"><td class="memItemLeft" align="right" valign="top"><a id="ga3fd389d64c6fa45a3c1427d2f6988741"></a>
typedef void()&#160;</td><td class="memItemRight" valign="bottom"><b>lws_ev_signal_cb_t</b>(EV_P_ struct ev_signal *w, int revents)</td></tr>
<tr class="separator:ga3fd389d64c6fa45a3c1427d2f6988741"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga5caf14a420a2a0bd687a1fc952f8d64e"><td class="memItemLeft" align="right" valign="top"><a id="ga5caf14a420a2a0bd687a1fc952f8d64e"></a>
LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b>lws_ev_sigint_cfg</b> (struct lws_context *context, int use_ev_sigint, lws_ev_signal_cb_t *cb)</td></tr>
<tr class="separator:ga5caf14a420a2a0bd687a1fc952f8d64e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga3fdd23ded693b21853356dc9eaef5ccc"><td class="memItemLeft" align="right" valign="top"><a id="ga3fdd23ded693b21853356dc9eaef5ccc"></a>
LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b>lws_ev_initloop</b> (struct lws_context *context, struct ev_loop *loop, int tsi)</td></tr>
<tr class="separator:ga3fdd23ded693b21853356dc9eaef5ccc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaabfc0880d6a98133550c61aa01ef3563"><td class="memItemLeft" align="right" valign="top"><a id="gaabfc0880d6a98133550c61aa01ef3563"></a>
LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><b>lws_ev_sigint_cb</b> (struct ev_loop *loop, struct ev_signal *watcher, int revents)</td></tr>
<tr class="separator:gaabfc0880d6a98133550c61aa01ef3563"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>libev helpers</h2>
<p>APIs specific to libev event loop itegration </p>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,455 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Extensions</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__extensions.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Extensions</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__ext__options.html">lws_ext_options</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__ext__option__arg.html">lws_ext_option_arg</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__extension.html">lws_extension</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:gaae7169b2cd346b34fa33d0250db2afd0"><td class="memItemLeft" align="right" valign="top">typedef int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__extensions.html#gaae7169b2cd346b34fa33d0250db2afd0">lws_extension_callback_function</a>(struct lws_context *context, const struct <a class="el" href="structlws__extension.html">lws_extension</a> *ext, struct lws *wsi, enum lws_extension_callback_reasons reason, void *user, void *in, size_t len)</td></tr>
<tr class="separator:gaae7169b2cd346b34fa33d0250db2afd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:gae9993815eee72c6070300a0ae2f022d7"><td class="memItemLeft" align="right" valign="top"><a id="gae9993815eee72c6070300a0ae2f022d7"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>lws_extension_callback_reasons</b> { <br />
&#160;&#160;<b>LWS_EXT_CB_SERVER_CONTEXT_CONSTRUCT</b> = 0,
<b>LWS_EXT_CB_CLIENT_CONTEXT_CONSTRUCT</b> = 1,
<b>LWS_EXT_CB_SERVER_CONTEXT_DESTRUCT</b> = 2,
<b>LWS_EXT_CB_CLIENT_CONTEXT_DESTRUCT</b> = 3,
<br />
&#160;&#160;<b>LWS_EXT_CB_CONSTRUCT</b> = 4,
<b>LWS_EXT_CB_CLIENT_CONSTRUCT</b> = 5,
<b>LWS_EXT_CB_CHECK_OK_TO_REALLY_CLOSE</b> = 6,
<b>LWS_EXT_CB_CHECK_OK_TO_PROPOSE_EXTENSION</b> = 7,
<br />
&#160;&#160;<b>LWS_EXT_CB_DESTROY</b> = 8,
<b>LWS_EXT_CB_DESTROY_ANY_WSI_CLOSING</b> = 9,
<b>LWS_EXT_CB_ANY_WSI_ESTABLISHED</b> = 10,
<b>LWS_EXT_CB_PACKET_RX_PREPARSE</b> = 11,
<br />
&#160;&#160;<b>LWS_EXT_CB_PACKET_TX_PRESEND</b> = 12,
<b>LWS_EXT_CB_PACKET_TX_DO_SEND</b> = 13,
<b>LWS_EXT_CB_HANDSHAKE_REPLY_TX</b> = 14,
<b>LWS_EXT_CB_FLUSH_PENDING_TX</b> = 15,
<br />
&#160;&#160;<b>LWS_EXT_CB_EXTENDED_PAYLOAD_RX</b> = 16,
<b>LWS_EXT_CB_CAN_PROXY_CLIENT_CONNECTION</b> = 17,
<b>LWS_EXT_CB_1HZ</b> = 18,
<b>LWS_EXT_CB_REQUEST_ON_WRITEABLE</b> = 19,
<br />
&#160;&#160;<b>LWS_EXT_CB_IS_WRITEABLE</b> = 20,
<b>LWS_EXT_CB_PAYLOAD_TX</b> = 21,
<b>LWS_EXT_CB_PAYLOAD_RX</b> = 22,
<b>LWS_EXT_CB_OPTION_DEFAULT</b> = 23,
<br />
&#160;&#160;<b>LWS_EXT_CB_OPTION_SET</b> = 24,
<b>LWS_EXT_CB_OPTION_CONFIRM</b> = 25,
<b>LWS_EXT_CB_NAMED_OPTION_SET</b> = 26
<br />
}</td></tr>
<tr class="separator:gae9993815eee72c6070300a0ae2f022d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gacc9f55936dc165257a2e1f7d47bce89e"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__extensions.html#gacc9f55936dc165257a2e1f7d47bce89e">lws_ext_options_types</a> { <a class="el" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89eaabcf56c456c1ff6e81dc82586a16f14c">EXTARG_NONE</a>,
<a class="el" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea1c86adf924c8786a12bee9687094673e">EXTARG_DEC</a>,
<a class="el" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea5265abe3e1c3f64412f2affe7bffd880">EXTARG_OPT_DEC</a>
}</td></tr>
<tr class="separator:gacc9f55936dc165257a2e1f7d47bce89e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gae0e24e1768f83a7fb07896ce975704b9"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__extensions.html#gae0e24e1768f83a7fb07896ce975704b9">lws_set_extension_option</a> (struct lws *wsi, const char *ext_name, const char *opt_name, const char *opt_val)</td></tr>
<tr class="separator:gae0e24e1768f83a7fb07896ce975704b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga6fb3e2c3dfb9d64dc87026a4e99c128b"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__extensions.html#ga6fb3e2c3dfb9d64dc87026a4e99c128b">lws_ext_parse_options</a> (const struct <a class="el" href="structlws__extension.html">lws_extension</a> *ext, struct lws *wsi, void *ext_user, const struct <a class="el" href="structlws__ext__options.html">lws_ext_options</a> *opts, const char *o, int len)</td></tr>
<tr class="separator:ga6fb3e2c3dfb9d64dc87026a4e99c128b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4cdbe42d872e21a448a947714d6c607e"><td class="memItemLeft" align="right" valign="top">LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__extensions.html#ga4cdbe42d872e21a448a947714d6c607e">lws_extension_callback_pm_deflate</a> (struct lws_context *context, const struct <a class="el" href="structlws__extension.html">lws_extension</a> *ext, struct lws *wsi, enum lws_extension_callback_reasons reason, void *user, void *in, size_t len)</td></tr>
<tr class="separator:ga4cdbe42d872e21a448a947714d6c607e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>Extension releated functions</h2>
<p>Ws defines optional extensions, lws provides the ability to implement these in user code if so desired.</p>
<p>We provide one extensions permessage-deflate. </p>
<h2 class="groupheader">Typedef Documentation</h2>
<a id="gaae7169b2cd346b34fa33d0250db2afd0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaae7169b2cd346b34fa33d0250db2afd0">&#9670;&nbsp;</a></span>lws_extension_callback_function</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef int lws_extension_callback_function(struct lws_context *context, const struct <a class="el" href="structlws__extension.html">lws_extension</a> *ext, struct lws *wsi, enum lws_extension_callback_reasons reason, void *user, void *in, size_t len)</td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p>typedef <a class="el" href="group__extensions.html#gaae7169b2cd346b34fa33d0250db2afd0">lws_extension_callback_function()</a> - Hooks to allow extensions to operate </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>Websockets context </td></tr>
<tr><td class="paramname">ext</td><td>This extension </td></tr>
<tr><td class="paramname">wsi</td><td>Opaque websocket instance pointer </td></tr>
<tr><td class="paramname">reason</td><td>The reason for the call </td></tr>
<tr><td class="paramname">user</td><td>Pointer to ptr to per-session user data allocated by library </td></tr>
<tr><td class="paramname">in</td><td>Pointer used for some callback reasons </td></tr>
<tr><td class="paramname">len</td><td>Length set for some callback reasons <pre class="fragment"> Each extension that is active on a particular connection receives
callbacks during the connection lifetime to allow the extension to
operate on websocket data and manage itself.
Libwebsockets takes care of allocating and freeing "user" memory for
each active extension on each connection. That is what is pointed to
by the user parameter.
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_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_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_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
extension's private connection context data, in is pointing
to an lws_tokens struct, it consists of a char * pointer called
token, and an int called token_len. At entry, these are
set to point to the received buffer and set to the content
length. If the extension will grow the content, it should use
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_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:</pre> </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a id="gacc9f55936dc165257a2e1f7d47bce89e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gacc9f55936dc165257a2e1f7d47bce89e">&#9670;&nbsp;</a></span>lws_ext_options_types</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="group__extensions.html#gacc9f55936dc165257a2e1f7d47bce89e">lws_ext_options_types</a></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p>enum lws_ext_options_types </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggacc9f55936dc165257a2e1f7d47bce89eaabcf56c456c1ff6e81dc82586a16f14c"></a>EXTARG_NONE&#160;</td><td class="fielddoc"><p>does not take an argument </p>
</td></tr>
<tr><td class="fieldname"><a id="ggacc9f55936dc165257a2e1f7d47bce89ea1c86adf924c8786a12bee9687094673e"></a>EXTARG_DEC&#160;</td><td class="fielddoc"><p>requires a decimal argument </p>
</td></tr>
<tr><td class="fieldname"><a id="ggacc9f55936dc165257a2e1f7d47bce89ea5265abe3e1c3f64412f2affe7bffd880"></a>EXTARG_OPT_DEC&#160;</td><td class="fielddoc"><p>may have an optional decimal argument </p>
</td></tr>
</table>
<div class="fragment"><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; {</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; <a class="code" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89eaabcf56c456c1ff6e81dc82586a16f14c">EXTARG_NONE</a>, </div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; <a class="code" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea1c86adf924c8786a12bee9687094673e">EXTARG_DEC</a>, </div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; <a class="code" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea5265abe3e1c3f64412f2affe7bffd880">EXTARG_OPT_DEC</a> </div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; <span class="comment">/* Add new things just above here ---^</span></div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;<span class="comment"> * This is part of the ABI, don&#39;t needlessly break compatibility */</span></div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;};</div><div class="ttc" id="group__extensions_html_ggacc9f55936dc165257a2e1f7d47bce89ea5265abe3e1c3f64412f2affe7bffd880"><div class="ttname"><a href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea5265abe3e1c3f64412f2affe7bffd880">EXTARG_OPT_DEC</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1101</div></div>
<div class="ttc" id="group__extensions_html_ggacc9f55936dc165257a2e1f7d47bce89eaabcf56c456c1ff6e81dc82586a16f14c"><div class="ttname"><a href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89eaabcf56c456c1ff6e81dc82586a16f14c">EXTARG_NONE</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1099</div></div>
<div class="ttc" id="group__extensions_html_ggacc9f55936dc165257a2e1f7d47bce89ea1c86adf924c8786a12bee9687094673e"><div class="ttname"><a href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea1c86adf924c8786a12bee9687094673e">EXTARG_DEC</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1100</div></div>
</div><!-- fragment -->
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="ga6fb3e2c3dfb9d64dc87026a4e99c128b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga6fb3e2c3dfb9d64dc87026a4e99c128b">&#9670;&nbsp;</a></span>lws_ext_parse_options()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_ext_parse_options </td>
<td>(</td>
<td class="paramtype">const struct <a class="el" href="structlws__extension.html">lws_extension</a> *&#160;</td>
<td class="paramname"><em>ext</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>ext_user</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const struct <a class="el" href="structlws__ext__options.html">lws_ext_options</a> *&#160;</td>
<td class="paramname"><em>opts</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>o</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__extensions.html#ga6fb3e2c3dfb9d64dc87026a4e99c128b">lws_ext_parse_options()</a> - deal with parsing negotiated extension options</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">ext</td><td>related extension struct </td></tr>
<tr><td class="paramname">wsi</td><td>websocket connection </td></tr>
<tr><td class="paramname">ext_user</td><td>per-connection extension private data </td></tr>
<tr><td class="paramname">opts</td><td>list of supported options </td></tr>
<tr><td class="paramname">o</td><td>option string to parse </td></tr>
<tr><td class="paramname">len</td><td>length </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga4cdbe42d872e21a448a947714d6c607e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga4cdbe42d872e21a448a947714d6c607e">&#9670;&nbsp;</a></span>lws_extension_callback_pm_deflate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_EXTERN int lws_extension_callback_pm_deflate </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>context</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const struct <a class="el" href="structlws__extension.html">lws_extension</a> *&#160;</td>
<td class="paramname"><em>ext</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">enum lws_extension_callback_reasons&#160;</td>
<td class="paramname"><em>reason</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>user</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>in</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__extensions.html#ga4cdbe42d872e21a448a947714d6c607e">lws_extension_callback_pm_deflate()</a> - extension for RFC7692</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>lws context </td></tr>
<tr><td class="paramname">ext</td><td>related <a class="el" href="structlws__extension.html">lws_extension</a> struct </td></tr>
<tr><td class="paramname">wsi</td><td>websocket connection </td></tr>
<tr><td class="paramname">reason</td><td>incoming callback reason </td></tr>
<tr><td class="paramname">user</td><td>per-connection extension private data </td></tr>
<tr><td class="paramname">in</td><td>pointer parameter </td></tr>
<tr><td class="paramname">len</td><td>length parameter</td></tr>
</table>
</dd>
</dl>
<p>Built-in callback implementing RFC7692 permessage-deflate </p>
</div>
</div>
<a id="gae0e24e1768f83a7fb07896ce975704b9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gae0e24e1768f83a7fb07896ce975704b9">&#9670;&nbsp;</a></span>lws_set_extension_option()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_set_extension_option </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>ext_name</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>opt_name</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>opt_val</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__extensions.html#gae0e24e1768f83a7fb07896ce975704b9">lws_set_extension_option()</a>: set extension option if possible</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>websocket connection </td></tr>
<tr><td class="paramname">ext_name</td><td>name of ext, like "permessage-deflate" </td></tr>
<tr><td class="paramname">opt_name</td><td>name of option, like "rx_buf_size" </td></tr>
<tr><td class="paramname">opt_val</td><td>value to set option to </td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,27 @@
var group__extensions =
[
[ "lws_ext_options", "structlws__ext__options.html", [
[ "name", "structlws__ext__options.html#a1769e4a9805bbdda227821e9578ddc7e", null ],
[ "type", "structlws__ext__options.html#a7c4dbd62dbeba63a9d50d2306bd1cc61", null ]
] ],
[ "lws_ext_option_arg", "structlws__ext__option__arg.html", [
[ "len", "structlws__ext__option__arg.html#af37f0b6caa7735af51a1ac12b68d5bc5", null ],
[ "option_index", "structlws__ext__option__arg.html#af57fffcfa253dfa8d98681ac1fb1785f", null ],
[ "option_name", "structlws__ext__option__arg.html#a0a320c56b79271b8f059eeaad9423ac9", null ],
[ "start", "structlws__ext__option__arg.html#a0b1f7b30c3ceaf5f1bf9d105c24568d1", null ]
] ],
[ "lws_extension", "structlws__extension.html", [
[ "callback", "structlws__extension.html#afa21f3b3c8c2c9212a276c52b680c3af", null ],
[ "client_offer", "structlws__extension.html#a36b06c213aedb02bf9a402651751855b", null ],
[ "name", "structlws__extension.html#a1e5018c883d85176f5c2152176843f9e", null ]
] ],
[ "lws_extension_callback_function", "group__extensions.html#gaae7169b2cd346b34fa33d0250db2afd0", null ],
[ "lws_ext_options_types", "group__extensions.html#gacc9f55936dc165257a2e1f7d47bce89e", [
[ "EXTARG_NONE", "group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89eaabcf56c456c1ff6e81dc82586a16f14c", null ],
[ "EXTARG_DEC", "group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea1c86adf924c8786a12bee9687094673e", null ],
[ "EXTARG_OPT_DEC", "group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea5265abe3e1c3f64412f2affe7bffd880", null ]
] ],
[ "lws_ext_parse_options", "group__extensions.html#ga6fb3e2c3dfb9d64dc87026a4e99c128b", null ],
[ "lws_extension_callback_pm_deflate", "group__extensions.html#ga4cdbe42d872e21a448a947714d6c607e", null ],
[ "lws_set_extension_option", "group__extensions.html#gae0e24e1768f83a7fb07896ce975704b9", null ]
];

125
doc/html/group__fops.html Normal file
View file

@ -0,0 +1,125 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: file operation wrapping</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__fops.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">file operation wrapping</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__plat__file__ops.html">lws_plat_file_ops</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gac08aef64c4c34647ed699b24759b6b0e"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN struct <a class="el" href="structlws__plat__file__ops.html">lws_plat_file_ops</a> *LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fops.html#gac08aef64c4c34647ed699b24759b6b0e">lws_get_fops</a> (struct lws_context *context)</td></tr>
<tr class="separator:gac08aef64c4c34647ed699b24759b6b0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>File operation wrapping</h2>
<p>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.</p>
<p>If so, then it calls the platform handler or user overrides where present (as defined in info-&gt;fops)</p>
<p>The advantage from all this is user code can be portable for file operations without having to deal with differences between platforms. </p>
<h2 class="groupheader">Function Documentation</h2>
<a id="gac08aef64c4c34647ed699b24759b6b0e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gac08aef64c4c34647ed699b24759b6b0e">&#9670;&nbsp;</a></span>lws_get_fops()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN struct <a class="el" href="structlws__plat__file__ops.html">lws_plat_file_ops</a>* LWS_WARN_UNUSED_RESULT lws_get_fops </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>context</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__fops.html#gac08aef64c4c34647ed699b24759b6b0e">lws_get_fops()</a> - get current file ops</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>context </td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

11
doc/html/group__fops.js Normal file
View file

@ -0,0 +1,11 @@
var group__fops =
[
[ "lws_plat_file_ops", "structlws__plat__file__ops.html", [
[ "close", "structlws__plat__file__ops.html#a034ec96f2fbaf52b4aa3e82d20795f7b", null ],
[ "open", "structlws__plat__file__ops.html#ad37a97abc68d0af967cef874f4d8df32", null ],
[ "read", "structlws__plat__file__ops.html#a01f483807a9862736b17ba9ed5110c40", null ],
[ "seek_cur", "structlws__plat__file__ops.html#abfcda19b003dcc13c61ff9e2bb4ff869", null ],
[ "write", "structlws__plat__file__ops.html#a1fae8330ee94649a3551e31a30809793", null ]
] ],
[ "lws_get_fops", "group__fops.html#gac08aef64c4c34647ed699b24759b6b0e", null ]
];

View file

@ -0,0 +1,420 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Form Parsing</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__form-parsing.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Form Parsing<div class="ingroups"><a class="el" href="group__http.html">HTTP</a></div></div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:ga5a70527c0861c2ffa3d29333a6aa7f8e"><td class="memItemLeft" align="right" valign="top">typedef int(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__form-parsing.html#ga5a70527c0861c2ffa3d29333a6aa7f8e">lws_spa_fileupload_cb</a>) (void *data, const char *name, const char *filename, char *buf, int len, enum <a class="el" href="group__form-parsing.html#ga41a74a822771d3dce89751aa3bce28ae">lws_spa_fileupload_states</a> state)</td></tr>
<tr class="separator:ga5a70527c0861c2ffa3d29333a6aa7f8e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ga41a74a822771d3dce89751aa3bce28ae"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__form-parsing.html#ga41a74a822771d3dce89751aa3bce28ae">lws_spa_fileupload_states</a> { <a class="el" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aead3a958e7719ac273c3ba4f684f00c87f">LWS_UFS_CONTENT</a>,
<a class="el" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea6ce2a55a4c3695cdb640c893d95bd3a7">LWS_UFS_FINAL_CONTENT</a>,
<a class="el" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83">LWS_UFS_OPEN</a>
}</td></tr>
<tr class="separator:ga41a74a822771d3dce89751aa3bce28ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga162f86762173a2bc8c28497941d74815"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN struct lws_spa *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__form-parsing.html#ga162f86762173a2bc8c28497941d74815">lws_spa_create</a> (struct lws *wsi, const char *const *param_names, int count_params, int max_storage, <a class="el" href="group__form-parsing.html#ga5a70527c0861c2ffa3d29333a6aa7f8e">lws_spa_fileupload_cb</a> opt_cb, void *opt_data)</td></tr>
<tr class="separator:ga162f86762173a2bc8c28497941d74815"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga9ad9ebf5ea1a7108415ed7e04cb231d2"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__form-parsing.html#ga9ad9ebf5ea1a7108415ed7e04cb231d2">lws_spa_process</a> (struct lws_spa *spa, const char *in, int len)</td></tr>
<tr class="separator:ga9ad9ebf5ea1a7108415ed7e04cb231d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga83835bf250ee3d4a60f36a182f2b8d24"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__form-parsing.html#ga83835bf250ee3d4a60f36a182f2b8d24">lws_spa_finalize</a> (struct lws_spa *spa)</td></tr>
<tr class="separator:ga83835bf250ee3d4a60f36a182f2b8d24"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga3fbe378632f85ec9a14cc2c1687bf05f"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__form-parsing.html#ga3fbe378632f85ec9a14cc2c1687bf05f">lws_spa_get_length</a> (struct lws_spa *spa, int n)</td></tr>
<tr class="separator:ga3fbe378632f85ec9a14cc2c1687bf05f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga2da476217166da02704b90d3a8d4f3cd"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__form-parsing.html#ga2da476217166da02704b90d3a8d4f3cd">lws_spa_get_string</a> (struct lws_spa *spa, int n)</td></tr>
<tr class="separator:ga2da476217166da02704b90d3a8d4f3cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaaa482f07dad3f04b391cccf0a814e13b"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__form-parsing.html#gaaa482f07dad3f04b391cccf0a814e13b">lws_spa_destroy</a> (struct lws_spa *spa)</td></tr>
<tr class="separator:gaaa482f07dad3f04b391cccf0a814e13b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>POSTed form parsing functions</h2>
<p>These lws_spa (stateful post arguments) apis let you parse and urldecode POSTed form arguments, both using simple urlencoded and multipart transfer encoding.</p>
<p>It's capable of handling file uploads as well a named input parsing, and the apis are the same for both form upload styles.</p>
<p>You feed it a list of parameter names and it creates pointers to the urldecoded arguments: file upload parameters pass the file data in chunks to a user-supplied callback as they come.</p>
<p>Since it's stateful, it handles the incoming data needing more than one POST_BODY callback and has no limit on uploaded file size. </p>
<h2 class="groupheader">Typedef Documentation</h2>
<a id="ga5a70527c0861c2ffa3d29333a6aa7f8e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga5a70527c0861c2ffa3d29333a6aa7f8e">&#9670;&nbsp;</a></span>lws_spa_fileupload_cb</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef int(* lws_spa_fileupload_cb) (void *data, const char *name, const char *filename, char *buf, int len, enum <a class="el" href="group__form-parsing.html#ga41a74a822771d3dce89751aa3bce28ae">lws_spa_fileupload_states</a> state)</td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__form-parsing.html#ga5a70527c0861c2ffa3d29333a6aa7f8e">lws_spa_fileupload_cb()</a> - callback to receive file upload data</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">data</td><td>opt_data pointer set in lws_spa_create </td></tr>
<tr><td class="paramname">name</td><td>name of the form field being uploaded </td></tr>
<tr><td class="paramname">filename</td><td>original filename from client </td></tr>
<tr><td class="paramname">buf</td><td>start of data to receive </td></tr>
<tr><td class="paramname">len</td><td>length of data to receive </td></tr>
<tr><td class="paramname">state</td><td>information about how this call relates to file</td></tr>
</table>
</dd>
</dl>
<p>Notice name and filename shouldn't be trusted, as they are passed from HTTP provided by the client. </p>
</div>
</div>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a id="ga41a74a822771d3dce89751aa3bce28ae"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga41a74a822771d3dce89751aa3bce28ae">&#9670;&nbsp;</a></span>lws_spa_fileupload_states</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="group__form-parsing.html#ga41a74a822771d3dce89751aa3bce28ae">lws_spa_fileupload_states</a></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p>enum lws_spa_fileupload_states </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga41a74a822771d3dce89751aa3bce28aead3a958e7719ac273c3ba4f684f00c87f"></a>LWS_UFS_CONTENT&#160;</td><td class="fielddoc"><p>a chunk of file content has arrived </p>
</td></tr>
<tr><td class="fieldname"><a id="gga41a74a822771d3dce89751aa3bce28aea6ce2a55a4c3695cdb640c893d95bd3a7"></a>LWS_UFS_FINAL_CONTENT&#160;</td><td class="fielddoc"><p>the last chunk (possibly zero length) of file content has arrived </p>
</td></tr>
<tr><td class="fieldname"><a id="gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83"></a>LWS_UFS_OPEN&#160;</td><td class="fielddoc"><p>a new file is starting to arrive </p>
</td></tr>
</table>
<div class="fragment"><div class="line"><a name="l02824"></a><span class="lineno"> 2824</span>&#160; {</div><div class="line"><a name="l02825"></a><span class="lineno"> 2825</span>&#160; <a class="code" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aead3a958e7719ac273c3ba4f684f00c87f">LWS_UFS_CONTENT</a>,</div><div class="line"><a name="l02827"></a><span class="lineno"> 2827</span>&#160; <a class="code" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea6ce2a55a4c3695cdb640c893d95bd3a7">LWS_UFS_FINAL_CONTENT</a>,</div><div class="line"><a name="l02829"></a><span class="lineno"> 2829</span>&#160; <a class="code" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83">LWS_UFS_OPEN</a></div><div class="line"><a name="l02831"></a><span class="lineno"> 2831</span>&#160;};</div><div class="ttc" id="group__form-parsing_html_gga41a74a822771d3dce89751aa3bce28aea6ce2a55a4c3695cdb640c893d95bd3a7"><div class="ttname"><a href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea6ce2a55a4c3695cdb640c893d95bd3a7">LWS_UFS_FINAL_CONTENT</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:2827</div></div>
<div class="ttc" id="group__form-parsing_html_gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83"><div class="ttname"><a href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83">LWS_UFS_OPEN</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:2829</div></div>
<div class="ttc" id="group__form-parsing_html_gga41a74a822771d3dce89751aa3bce28aead3a958e7719ac273c3ba4f684f00c87f"><div class="ttname"><a href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aead3a958e7719ac273c3ba4f684f00c87f">LWS_UFS_CONTENT</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:2825</div></div>
</div><!-- fragment -->
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="ga162f86762173a2bc8c28497941d74815"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga162f86762173a2bc8c28497941d74815">&#9670;&nbsp;</a></span>lws_spa_create()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN struct lws_spa* lws_spa_create </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *const *&#160;</td>
<td class="paramname"><em>param_names</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>count_params</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>max_storage</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__form-parsing.html#ga5a70527c0861c2ffa3d29333a6aa7f8e">lws_spa_fileupload_cb</a>&#160;</td>
<td class="paramname"><em>opt_cb</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>opt_data</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__form-parsing.html#ga162f86762173a2bc8c28497941d74815">lws_spa_create()</a> - create urldecode parser</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>lws connection (used to find Content Type) </td></tr>
<tr><td class="paramname">param_names</td><td>array of form parameter names, like "username" </td></tr>
<tr><td class="paramname">count_params</td><td>count of param_names </td></tr>
<tr><td class="paramname">max_storage</td><td>total amount of form parameter values we can store </td></tr>
<tr><td class="paramname">opt_cb</td><td>NULL, or callback to receive file upload data. </td></tr>
<tr><td class="paramname">opt_data</td><td>NULL, or user pointer provided to opt_cb.</td></tr>
</table>
</dd>
</dl>
<p>Creates a urldecode parser and initializes it.</p>
<p>opt_cb can be NULL if you just want normal name=value parsing, however if one or more entries in your form are bulk data (file transfer), you can provide this callback and filter on the name callback parameter to treat that urldecoded data separately. The callback should return -1 in case of fatal error, and 0 if OK. </p>
</div>
</div>
<a id="gaaa482f07dad3f04b391cccf0a814e13b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaaa482f07dad3f04b391cccf0a814e13b">&#9670;&nbsp;</a></span>lws_spa_destroy()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_spa_destroy </td>
<td>(</td>
<td class="paramtype">struct lws_spa *&#160;</td>
<td class="paramname"><em>spa</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__form-parsing.html#gaaa482f07dad3f04b391cccf0a814e13b">lws_spa_destroy()</a> - destroy parser object</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">spa</td><td>the parser object previously created </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga83835bf250ee3d4a60f36a182f2b8d24"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga83835bf250ee3d4a60f36a182f2b8d24">&#9670;&nbsp;</a></span>lws_spa_finalize()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_spa_finalize </td>
<td>(</td>
<td class="paramtype">struct lws_spa *&#160;</td>
<td class="paramname"><em>spa</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__form-parsing.html#ga83835bf250ee3d4a60f36a182f2b8d24">lws_spa_finalize()</a> - indicate incoming data completed</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">spa</td><td>the parser object previously created </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga3fbe378632f85ec9a14cc2c1687bf05f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga3fbe378632f85ec9a14cc2c1687bf05f">&#9670;&nbsp;</a></span>lws_spa_get_length()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_spa_get_length </td>
<td>(</td>
<td class="paramtype">struct lws_spa *&#160;</td>
<td class="paramname"><em>spa</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>n</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__form-parsing.html#ga3fbe378632f85ec9a14cc2c1687bf05f">lws_spa_get_length()</a> - return length of parameter value</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">spa</td><td>the parser object previously created </td></tr>
<tr><td class="paramname">n</td><td>parameter ordinal to return length of value for </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga2da476217166da02704b90d3a8d4f3cd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga2da476217166da02704b90d3a8d4f3cd">&#9670;&nbsp;</a></span>lws_spa_get_string()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN const char* lws_spa_get_string </td>
<td>(</td>
<td class="paramtype">struct lws_spa *&#160;</td>
<td class="paramname"><em>spa</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>n</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__form-parsing.html#ga2da476217166da02704b90d3a8d4f3cd">lws_spa_get_string()</a> - return pointer to parameter value </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">spa</td><td>the parser object previously created </td></tr>
<tr><td class="paramname">n</td><td>parameter ordinal to return pointer to value for </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga9ad9ebf5ea1a7108415ed7e04cb231d2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga9ad9ebf5ea1a7108415ed7e04cb231d2">&#9670;&nbsp;</a></span>lws_spa_process()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_spa_process </td>
<td>(</td>
<td class="paramtype">struct lws_spa *&#160;</td>
<td class="paramname"><em>spa</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>in</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__form-parsing.html#ga9ad9ebf5ea1a7108415ed7e04cb231d2">lws_spa_process()</a> - parses a chunk of input data</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">spa</td><td>the parser object previously created </td></tr>
<tr><td class="paramname">in</td><td>incoming, urlencoded data </td></tr>
<tr><td class="paramname">len</td><td>count of bytes valid at</td></tr>
<tr><td class="paramname">in</td><td></td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,15 @@
var group__form_parsing =
[
[ "lws_spa_fileupload_cb", "group__form-parsing.html#ga5a70527c0861c2ffa3d29333a6aa7f8e", null ],
[ "lws_spa_fileupload_states", "group__form-parsing.html#ga41a74a822771d3dce89751aa3bce28ae", [
[ "LWS_UFS_CONTENT", "group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aead3a958e7719ac273c3ba4f684f00c87f", null ],
[ "LWS_UFS_FINAL_CONTENT", "group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea6ce2a55a4c3695cdb640c893d95bd3a7", null ],
[ "LWS_UFS_OPEN", "group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83", null ]
] ],
[ "lws_spa_create", "group__form-parsing.html#ga162f86762173a2bc8c28497941d74815", null ],
[ "lws_spa_destroy", "group__form-parsing.html#gaaa482f07dad3f04b391cccf0a814e13b", null ],
[ "lws_spa_finalize", "group__form-parsing.html#ga83835bf250ee3d4a60f36a182f2b8d24", null ],
[ "lws_spa_get_length", "group__form-parsing.html#ga3fbe378632f85ec9a14cc2c1687bf05f", null ],
[ "lws_spa_get_string", "group__form-parsing.html#ga2da476217166da02704b90d3a8d4f3cd", null ],
[ "lws_spa_process", "group__form-parsing.html#ga9ad9ebf5ea1a7108415ed7e04cb231d2", null ]
];

View file

@ -0,0 +1,166 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: plugin: generic-sessions</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__generic-sessions.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#enum-members">Enumerations</a> </div>
<div class="headertitle">
<div class="title">plugin: generic-sessions<div class="ingroups"><a class="el" href="group__Protocols-and-Plugins.html">Protocols and Plugins</a></div></div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlwsgw__hash__bin.html">lwsgw_hash_bin</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlwsgw__hash.html">lwsgw_hash</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__session__info.html">lws_session_info</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__gs__event__args.html">lws_gs_event_args</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ga7c2dc7bfb4ccb91c5d771f9e9ea237e1"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__generic-sessions.html#ga7c2dc7bfb4ccb91c5d771f9e9ea237e1">lwsgs_auth_bits</a> { <a class="el" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a81e63075115dedd150265d81b8f7fa57">LWSGS_AUTH_LOGGED_IN</a> = 1,
<a class="el" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a0657a9e846814781b128c397fe4b10bf">LWSGS_AUTH_ADMIN</a> = 2,
<a class="el" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a5a607e4668d20cadada62c4b8007f887">LWSGS_AUTH_VERIFIED</a> = 4,
<a class="el" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a2cd8fb86e3b85c106e7711c03f0ddd0a">LWSGS_AUTH_FORGOT_FLOW</a> = 8
}</td></tr>
<tr class="separator:ga7c2dc7bfb4ccb91c5d771f9e9ea237e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa93946b3d921072209d5cd8cdfa5332e"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__generic-sessions.html#gaa93946b3d921072209d5cd8cdfa5332e">lws_gs_event</a> { <a class="el" href="group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ea596010a165bf13473c5eea3a34cd4308">LWSGSE_CREATED</a>,
<a class="el" href="group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ead908cdc5689c5d22c9d3c8934e94dcde">LWSGSE_DELETED</a>
}</td></tr>
<tr class="separator:gaa93946b3d921072209d5cd8cdfa5332e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>Plugin Generic-sessions related</h2>
<p>generic-sessions plugin provides a reusable, generic session and login / register / forgot password framework including email verification. </p>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a id="gaa93946b3d921072209d5cd8cdfa5332e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaa93946b3d921072209d5cd8cdfa5332e">&#9670;&nbsp;</a></span>lws_gs_event</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="group__generic-sessions.html#gaa93946b3d921072209d5cd8cdfa5332e">lws_gs_event</a></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p>enum lws_gs_event </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggaa93946b3d921072209d5cd8cdfa5332ea596010a165bf13473c5eea3a34cd4308"></a>LWSGSE_CREATED&#160;</td><td class="fielddoc"><p>a new user was created </p>
</td></tr>
<tr><td class="fieldname"><a id="ggaa93946b3d921072209d5cd8cdfa5332ead908cdc5689c5d22c9d3c8934e94dcde"></a>LWSGSE_DELETED&#160;</td><td class="fielddoc"><p>an existing user was deleted </p>
</td></tr>
</table>
<div class="fragment"><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160; {</div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160; <a class="code" href="group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ea596010a165bf13473c5eea3a34cd4308">LWSGSE_CREATED</a>, </div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160; <a class="code" href="group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ead908cdc5689c5d22c9d3c8934e94dcde">LWSGSE_DELETED</a> </div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160;};</div><div class="ttc" id="group__generic-sessions_html_ggaa93946b3d921072209d5cd8cdfa5332ead908cdc5689c5d22c9d3c8934e94dcde"><div class="ttname"><a href="group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ead908cdc5689c5d22c9d3c8934e94dcde">LWSGSE_DELETED</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1462</div></div>
<div class="ttc" id="group__generic-sessions_html_ggaa93946b3d921072209d5cd8cdfa5332ea596010a165bf13473c5eea3a34cd4308"><div class="ttname"><a href="group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ea596010a165bf13473c5eea3a34cd4308">LWSGSE_CREATED</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1461</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ga7c2dc7bfb4ccb91c5d771f9e9ea237e1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga7c2dc7bfb4ccb91c5d771f9e9ea237e1">&#9670;&nbsp;</a></span>lwsgs_auth_bits</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="group__generic-sessions.html#ga7c2dc7bfb4ccb91c5d771f9e9ea237e1">lwsgs_auth_bits</a></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p>enum lwsgs_auth_bits </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a81e63075115dedd150265d81b8f7fa57"></a>LWSGS_AUTH_LOGGED_IN&#160;</td><td class="fielddoc"><p>user is logged in as somebody </p>
</td></tr>
<tr><td class="fieldname"><a id="gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a0657a9e846814781b128c397fe4b10bf"></a>LWSGS_AUTH_ADMIN&#160;</td><td class="fielddoc"><p>logged in as the admin user </p>
</td></tr>
<tr><td class="fieldname"><a id="gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a5a607e4668d20cadada62c4b8007f887"></a>LWSGS_AUTH_VERIFIED&#160;</td><td class="fielddoc"><p>user has verified his email </p>
</td></tr>
<tr><td class="fieldname"><a id="gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a2cd8fb86e3b85c106e7711c03f0ddd0a"></a>LWSGS_AUTH_FORGOT_FLOW&#160;</td><td class="fielddoc"><p>he just completed "forgot password" flow </p>
</td></tr>
</table>
<div class="fragment"><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160; {</div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160; <a class="code" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a81e63075115dedd150265d81b8f7fa57">LWSGS_AUTH_LOGGED_IN</a> = 1, </div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160; <a class="code" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a0657a9e846814781b128c397fe4b10bf">LWSGS_AUTH_ADMIN</a> = 2, </div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160; <a class="code" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a5a607e4668d20cadada62c4b8007f887">LWSGS_AUTH_VERIFIED</a> = 4, </div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160; <a class="code" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a2cd8fb86e3b85c106e7711c03f0ddd0a">LWSGS_AUTH_FORGOT_FLOW</a> = 8, </div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160;};</div><div class="ttc" id="group__generic-sessions_html_gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a5a607e4668d20cadada62c4b8007f887"><div class="ttname"><a href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a5a607e4668d20cadada62c4b8007f887">LWSGS_AUTH_VERIFIED</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1445</div></div>
<div class="ttc" id="group__generic-sessions_html_gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a2cd8fb86e3b85c106e7711c03f0ddd0a"><div class="ttname"><a href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a2cd8fb86e3b85c106e7711c03f0ddd0a">LWSGS_AUTH_FORGOT_FLOW</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1446</div></div>
<div class="ttc" id="group__generic-sessions_html_gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a0657a9e846814781b128c397fe4b10bf"><div class="ttname"><a href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a0657a9e846814781b128c397fe4b10bf">LWSGS_AUTH_ADMIN</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1444</div></div>
<div class="ttc" id="group__generic-sessions_html_gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a81e63075115dedd150265d81b8f7fa57"><div class="ttname"><a href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a81e63075115dedd150265d81b8f7fa57">LWSGS_AUTH_LOGGED_IN</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1443</div></div>
</div><!-- fragment -->
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,31 @@
var group__generic_sessions =
[
[ "lwsgw_hash_bin", "structlwsgw__hash__bin.html", [
[ "bin", "structlwsgw__hash__bin.html#ac92f50d9471058525d110597a4e0de6b", null ]
] ],
[ "lwsgw_hash", "structlwsgw__hash.html", [
[ "id", "structlwsgw__hash.html#a29435f5cf78747d4257695b0f141d164", null ]
] ],
[ "lws_session_info", "structlws__session__info.html", [
[ "email", "structlws__session__info.html#a94b813cfc6b0da4b182659de30038ad3", null ],
[ "ip", "structlws__session__info.html#a53eed02325e8717a53297391e3e98fac", null ],
[ "mask", "structlws__session__info.html#afb924864b70f40372920688a5c1c895e", null ],
[ "session", "structlws__session__info.html#a4353b5dd19400b2b15edfd7cee1e4cd5", null ],
[ "username", "structlws__session__info.html#a3d57a70b6e7181d95a8bec429b1a7697", null ]
] ],
[ "lws_gs_event_args", "structlws__gs__event__args.html", [
[ "email", "structlws__gs__event__args.html#acd17e4f9f91f7f9a8f0fbf0744a3a463", null ],
[ "event", "structlws__gs__event__args.html#a477274f8ca22ba7411b9285b9dc8dd06", null ],
[ "username", "structlws__gs__event__args.html#a2bec693d8a43730d487004a44326178b", null ]
] ],
[ "lws_gs_event", "group__generic-sessions.html#gaa93946b3d921072209d5cd8cdfa5332e", [
[ "LWSGSE_CREATED", "group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ea596010a165bf13473c5eea3a34cd4308", null ],
[ "LWSGSE_DELETED", "group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ead908cdc5689c5d22c9d3c8934e94dcde", null ]
] ],
[ "lwsgs_auth_bits", "group__generic-sessions.html#ga7c2dc7bfb4ccb91c5d771f9e9ea237e1", [
[ "LWSGS_AUTH_LOGGED_IN", "group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a81e63075115dedd150265d81b8f7fa57", null ],
[ "LWSGS_AUTH_ADMIN", "group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a0657a9e846814781b128c397fe4b10bf", null ],
[ "LWSGS_AUTH_VERIFIED", "group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a5a607e4668d20cadada62c4b8007f887", null ],
[ "LWSGS_AUTH_FORGOT_FLOW", "group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a2cd8fb86e3b85c106e7711c03f0ddd0a", null ]
] ]
];

View file

@ -0,0 +1,186 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: HTML Chunked Substitution</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__html-chunked-substitution.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">HTML Chunked Substitution<div class="ingroups"><a class="el" href="group__http.html">HTTP</a></div></div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__process__html__args.html">lws_process_html_args</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__process__html__state.html">lws_process_html_state</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:ga669d3d7ce2d5f193473f649a89b3e7ac"><td class="memItemLeft" align="right" valign="top"><a id="ga669d3d7ce2d5f193473f649a89b3e7ac"></a>
typedef const char *(*&#160;</td><td class="memItemRight" valign="bottom"><b>lws_process_html_state_cb</b>) (void *data, int index)</td></tr>
<tr class="separator:ga669d3d7ce2d5f193473f649a89b3e7ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:gabc3b93f68c8bdd857ad32913628dfa8d"><td class="memItemLeft" align="right" valign="top"><a id="gabc3b93f68c8bdd857ad32913628dfa8d"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>http_status</b> { <br />
&#160;&#160;<b>HTTP_STATUS_OK</b> = 200,
<b>HTTP_STATUS_NO_CONTENT</b> = 204,
<b>HTTP_STATUS_MOVED_PERMANENTLY</b> = 301,
<b>HTTP_STATUS_FOUND</b> = 302,
<br />
&#160;&#160;<b>HTTP_STATUS_SEE_OTHER</b> = 303,
<b>HTTP_STATUS_BAD_REQUEST</b> = 400,
<b>HTTP_STATUS_UNAUTHORIZED</b>,
<b>HTTP_STATUS_PAYMENT_REQUIRED</b>,
<br />
&#160;&#160;<b>HTTP_STATUS_FORBIDDEN</b>,
<b>HTTP_STATUS_NOT_FOUND</b>,
<b>HTTP_STATUS_METHOD_NOT_ALLOWED</b>,
<b>HTTP_STATUS_NOT_ACCEPTABLE</b>,
<br />
&#160;&#160;<b>HTTP_STATUS_PROXY_AUTH_REQUIRED</b>,
<b>HTTP_STATUS_REQUEST_TIMEOUT</b>,
<b>HTTP_STATUS_CONFLICT</b>,
<b>HTTP_STATUS_GONE</b>,
<br />
&#160;&#160;<b>HTTP_STATUS_LENGTH_REQUIRED</b>,
<b>HTTP_STATUS_PRECONDITION_FAILED</b>,
<b>HTTP_STATUS_REQ_ENTITY_TOO_LARGE</b>,
<b>HTTP_STATUS_REQ_URI_TOO_LONG</b>,
<br />
&#160;&#160;<b>HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE</b>,
<b>HTTP_STATUS_REQ_RANGE_NOT_SATISFIABLE</b>,
<b>HTTP_STATUS_EXPECTATION_FAILED</b>,
<b>HTTP_STATUS_INTERNAL_SERVER_ERROR</b> = 500,
<br />
&#160;&#160;<b>HTTP_STATUS_NOT_IMPLEMENTED</b>,
<b>HTTP_STATUS_BAD_GATEWAY</b>,
<b>HTTP_STATUS_SERVICE_UNAVAILABLE</b>,
<b>HTTP_STATUS_GATEWAY_TIMEOUT</b>,
<br />
&#160;&#160;<b>HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED</b>
<br />
}</td></tr>
<tr class="separator:gabc3b93f68c8bdd857ad32913628dfa8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga643073f918c0a7016b690aae9793fd60"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__html-chunked-substitution.html#ga643073f918c0a7016b690aae9793fd60">lws_chunked_html_process</a> (struct <a class="el" href="structlws__process__html__args.html">lws_process_html_args</a> *args, struct <a class="el" href="structlws__process__html__state.html">lws_process_html_state</a> *s)</td></tr>
<tr class="separator:ga643073f918c0a7016b690aae9793fd60"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>HTML chunked Substitution</h2>
<p>APIs for receiving chunks of text, replacing a set of variable names via a callback, and then prepending and appending HTML chunked encoding headers. </p>
<h2 class="groupheader">Function Documentation</h2>
<a id="ga643073f918c0a7016b690aae9793fd60"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga643073f918c0a7016b690aae9793fd60">&#9670;&nbsp;</a></span>lws_chunked_html_process()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_chunked_html_process </td>
<td>(</td>
<td class="paramtype">struct <a class="el" href="structlws__process__html__args.html">lws_process_html_args</a> *&#160;</td>
<td class="paramname"><em>args</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">struct <a class="el" href="structlws__process__html__state.html">lws_process_html_state</a> *&#160;</td>
<td class="paramname"><em>s</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__html-chunked-substitution.html#ga643073f918c0a7016b690aae9793fd60">lws_chunked_html_process()</a> - generic chunked substitution </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">args</td><td>buffer to process using chunked encoding </td></tr>
<tr><td class="paramname">s</td><td>current processing state </td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,19 @@
var group__html_chunked_substitution =
[
[ "lws_process_html_args", "structlws__process__html__args.html", [
[ "final", "structlws__process__html__args.html#a362547891ee0d693f3900a1f807ea475", null ],
[ "len", "structlws__process__html__args.html#a754513f2311241cabb0cd1c90d7307ef", null ],
[ "max_len", "structlws__process__html__args.html#a8be7fd396a1942ea2449a2fda990ff99", null ],
[ "p", "structlws__process__html__args.html#a11859d8bedd379fbf64543b25c65fe14", null ]
] ],
[ "lws_process_html_state", "structlws__process__html__state.html", [
[ "count_vars", "structlws__process__html__state.html#adcafd17704775b4bbeea9561fb340968", null ],
[ "data", "structlws__process__html__state.html#af21119890fdfebe28fb5c4dabfc1bdf5", null ],
[ "pos", "structlws__process__html__state.html#a53234f2948812c7208a256f9f5b23c20", null ],
[ "replace", "structlws__process__html__state.html#a693d2fb45378afee5da29b539c1ea644", null ],
[ "start", "structlws__process__html__state.html#af0732884ef891e24fe5fa237ebaa21a3", null ],
[ "swallow", "structlws__process__html__state.html#a71982bc1cbd8cf876ca0f545144404eb", null ],
[ "vars", "structlws__process__html__state.html#a3b113e00c03a2fded51b1c85ff5bf077", null ]
] ],
[ "lws_chunked_html_process", "group__html-chunked-substitution.html#ga643073f918c0a7016b690aae9793fd60", null ]
];

254
doc/html/group__http.html Normal file
View file

@ -0,0 +1,254 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: HTTP</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__http.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#groups">Modules</a> &#124;
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">HTTP</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
Modules</h2></td></tr>
<tr class="memitem:group__form-parsing"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__form-parsing.html">Form Parsing</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:group__html-chunked-substitution"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__html-chunked-substitution.html">HTML Chunked Substitution</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:group__httpft"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__httpft.html">HTTP File transfer</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:group__HTTP-headers-create"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__HTTP-headers-create.html">HTTP headers: create</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:group__HTTP-headers-read"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__HTTP-headers-read.html">HTTP headers: read</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:group__urlendec"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__urlendec.html">Urlencode and Urldecode</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__tokens.html">lws_tokens</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gac8a4a71240857dc6b2ed70456b6923f4"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__http.html#gac8a4a71240857dc6b2ed70456b6923f4">lws_return_http_status</a> (struct lws *wsi, unsigned int code, const char *html_body)</td></tr>
<tr class="separator:gac8a4a71240857dc6b2ed70456b6923f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga8fbf01e473ac421fc33ad9f8da8b8a25"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__http.html#ga8fbf01e473ac421fc33ad9f8da8b8a25">lws_http_redirect</a> (struct lws *wsi, int code, const unsigned char *loc, int len, unsigned char **p, unsigned char *end)</td></tr>
<tr class="separator:ga8fbf01e473ac421fc33ad9f8da8b8a25"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad27aed6c66a41b2b89ffe4da2a309e8a"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__http.html#gad27aed6c66a41b2b89ffe4da2a309e8a">lws_http_transaction_completed</a> (struct lws *wsi)</td></tr>
<tr class="separator:gad27aed6c66a41b2b89ffe4da2a309e8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>Modules related to handling HTTP </p>
<h2 class="groupheader">Function Documentation</h2>
<a id="ga8fbf01e473ac421fc33ad9f8da8b8a25"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga8fbf01e473ac421fc33ad9f8da8b8a25">&#9670;&nbsp;</a></span>lws_http_redirect()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_http_redirect </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>code</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>loc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>len</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char **&#160;</td>
<td class="paramname"><em>p</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char *&#160;</td>
<td class="paramname"><em>end</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__http.html#ga8fbf01e473ac421fc33ad9f8da8b8a25">lws_http_redirect()</a> - write http redirect into buffer</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>websocket connection </td></tr>
<tr><td class="paramname">code</td><td>HTTP response code (eg, 301) </td></tr>
<tr><td class="paramname">loc</td><td>where to redirect to </td></tr>
<tr><td class="paramname">len</td><td>length of loc </td></tr>
<tr><td class="paramname">p</td><td>pointer current position in buffer (updated as we write) </td></tr>
<tr><td class="paramname">end</td><td>pointer to end of buffer </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="gad27aed6c66a41b2b89ffe4da2a309e8a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gad27aed6c66a41b2b89ffe4da2a309e8a">&#9670;&nbsp;</a></span>lws_http_transaction_completed()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_http_transaction_completed </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__http.html#gad27aed6c66a41b2b89ffe4da2a309e8a">lws_http_transaction_completed()</a> - wait for new http transaction or close </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>websocket connection <pre class="fragment"> Returns 1 if the HTTP connection must close now
Returns 0 and resets connection to wait for new HTTP header /
transaction if possible</pre> </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="gac8a4a71240857dc6b2ed70456b6923f4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gac8a4a71240857dc6b2ed70456b6923f4">&#9670;&nbsp;</a></span>lws_return_http_status()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_return_http_status </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>code</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>html_body</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__http.html#gac8a4a71240857dc6b2ed70456b6923f4">lws_return_http_status()</a> - Return simple http status </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>Websocket instance (available from user callback) </td></tr>
<tr><td class="paramname">code</td><td>Status index, eg, 404 </td></tr>
<tr><td class="paramname">html_body</td><td>User-readable HTML description &lt; 1KB, or NULL <pre class="fragment"> Helper to report HTTP errors back to the client cleanly and
consistently</pre> </td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

16
doc/html/group__http.js Normal file
View file

@ -0,0 +1,16 @@
var group__http =
[
[ "Form Parsing", "group__form-parsing.html", "group__form-parsing" ],
[ "HTML Chunked Substitution", "group__html-chunked-substitution.html", "group__html-chunked-substitution" ],
[ "HTTP File transfer", "group__httpft.html", "group__httpft" ],
[ "HTTP headers: create", "group__HTTP-headers-create.html", "group__HTTP-headers-create" ],
[ "HTTP headers: read", "group__HTTP-headers-read.html", "group__HTTP-headers-read" ],
[ "Urlencode and Urldecode", "group__urlendec.html", "group__urlendec" ],
[ "lws_tokens", "structlws__tokens.html", [
[ "token", "structlws__tokens.html#a9f3635412bc71a5cb78e9862b55f10cd", null ],
[ "token_len", "structlws__tokens.html#a855b7375d1d58516c0ecd4b60e9a7766", null ]
] ],
[ "lws_http_redirect", "group__http.html#ga8fbf01e473ac421fc33ad9f8da8b8a25", null ],
[ "lws_http_transaction_completed", "group__http.html#gad27aed6c66a41b2b89ffe4da2a309e8a", null ],
[ "lws_return_http_status", "group__http.html#gac8a4a71240857dc6b2ed70456b6923f4", null ]
];

200
doc/html/group__httpft.html Normal file
View file

@ -0,0 +1,200 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: HTTP File transfer</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__httpft.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">HTTP File transfer<div class="ingroups"><a class="el" href="group__http.html">HTTP</a></div></div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gab4da87a4800413f15e7aba649fb1d77c"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__httpft.html#gab4da87a4800413f15e7aba649fb1d77c">lws_get_mimetype</a> (const char *file, const struct <a class="el" href="structlws__http__mount.html">lws_http_mount</a> *m)</td></tr>
<tr class="separator:gab4da87a4800413f15e7aba649fb1d77c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab393a06d3d2722af4c3f8b06842c80d7"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__httpft.html#gab393a06d3d2722af4c3f8b06842c80d7">lws_serve_http_file</a> (struct lws *wsi, const char *file, const char *content_type, const char *other_headers, int other_headers_len)</td></tr>
<tr class="separator:gab393a06d3d2722af4c3f8b06842c80d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga29e1123f6d56cd777b3e5bf9ca40f9e5"><td class="memItemLeft" align="right" valign="top"><a id="ga29e1123f6d56cd777b3e5bf9ca40f9e5"></a>
LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b>lws_serve_http_file_fragment</b> (struct lws *wsi)</td></tr>
<tr class="separator:ga29e1123f6d56cd777b3e5bf9ca40f9e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>APIs for sending local files in response to HTTP requests </p>
<h2 class="groupheader">Function Documentation</h2>
<a id="gab4da87a4800413f15e7aba649fb1d77c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gab4da87a4800413f15e7aba649fb1d77c">&#9670;&nbsp;</a></span>lws_get_mimetype()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN const char* lws_get_mimetype </td>
<td>(</td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>file</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const struct <a class="el" href="structlws__http__mount.html">lws_http_mount</a> *&#160;</td>
<td class="paramname"><em>m</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__httpft.html#gab4da87a4800413f15e7aba649fb1d77c">lws_get_mimetype()</a> - Determine mimetype to use from filename</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">file</td><td>filename </td></tr>
<tr><td class="paramname">m</td><td>NULL, or mount context</td></tr>
</table>
</dd>
</dl>
<p>This uses a canned list of known filetypes first, if no match and m is non-NULL, then tries a list of per-mount file suffix to mimtype mappings.</p>
<p>Returns either NULL or a pointer to the mimetype matching the file. </p>
</div>
</div>
<a id="gab393a06d3d2722af4c3f8b06842c80d7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gab393a06d3d2722af4c3f8b06842c80d7">&#9670;&nbsp;</a></span>lws_serve_http_file()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_serve_http_file </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>file</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>content_type</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>other_headers</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>other_headers_len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__httpft.html#gab393a06d3d2722af4c3f8b06842c80d7">lws_serve_http_file()</a> - Send a file back to the client using http </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>Websocket instance (available from user callback) </td></tr>
<tr><td class="paramname">file</td><td>The file to issue over http </td></tr>
<tr><td class="paramname">content_type</td><td>The http content type, eg, text/html </td></tr>
<tr><td class="paramname">other_headers</td><td>NULL or pointer to header string </td></tr>
<tr><td class="paramname">other_headers_len</td><td>length of the other headers if non-NULL <pre class="fragment"> This function is intended to be called from the callback in response
to http requests from the client. It allows the callback to issue
local files down the http link in a single step.
Returning &lt;0 indicates error and the wsi should be closed. Returning
&gt;0 indicates the file was completely sent and
lws_http_transaction_completed() called on the wsi (and close if != 0)
==0 indicates the file transfer is started and needs more service later,
the wsi should be left alone.</pre> </td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,5 @@
var group__httpft =
[
[ "lws_get_mimetype", "group__httpft.html#gab4da87a4800413f15e7aba649fb1d77c", null ],
[ "lws_serve_http_file", "group__httpft.html#gab393a06d3d2722af4c3f8b06842c80d7", null ]
];

285
doc/html/group__log.html Normal file
View file

@ -0,0 +1,285 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Logging</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__log.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Logging</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ga14542b84d2c76efa7814124bb10f9c5f"><td class="memItemLeft" align="right" valign="top"><a id="ga14542b84d2c76efa7814124bb10f9c5f"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>lws_log_levels</b> { <br />
&#160;&#160;<b>LLL_ERR</b> = 1 &lt;&lt; 0,
<b>LLL_WARN</b> = 1 &lt;&lt; 1,
<b>LLL_NOTICE</b> = 1 &lt;&lt; 2,
<b>LLL_INFO</b> = 1 &lt;&lt; 3,
<br />
&#160;&#160;<b>LLL_DEBUG</b> = 1 &lt;&lt; 4,
<b>LLL_PARSER</b> = 1 &lt;&lt; 5,
<b>LLL_HEADER</b> = 1 &lt;&lt; 6,
<b>LLL_EXT</b> = 1 &lt;&lt; 7,
<br />
&#160;&#160;<b>LLL_CLIENT</b> = 1 &lt;&lt; 8,
<b>LLL_LATENCY</b> = 1 &lt;&lt; 9,
<b>LLL_COUNT</b> = 10
<br />
}</td></tr>
<tr class="separator:ga14542b84d2c76efa7814124bb10f9c5f"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga0cdc1065ae7f003d59a3c8525acf545e"><td class="memItemLeft" align="right" valign="top"><a id="ga0cdc1065ae7f003d59a3c8525acf545e"></a>
LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><b>_lws_log</b> (int filter, const char *format,...) LWS_FORMAT(2)</td></tr>
<tr class="separator:ga0cdc1065ae7f003d59a3c8525acf545e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga74eb146969f0595e12ea835851b4588e"><td class="memItemLeft" align="right" valign="top"><a id="ga74eb146969f0595e12ea835851b4588e"></a>
LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><b>_lws_logv</b> (int filter, const char *format, va_list vl)</td></tr>
<tr class="separator:ga74eb146969f0595e12ea835851b4588e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga42e39775c6b69b7251bdbf5a2cdd5dcd"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__log.html#ga42e39775c6b69b7251bdbf5a2cdd5dcd">lwsl_timestamp</a> (int level, char *p, int len)</td></tr>
<tr class="separator:ga42e39775c6b69b7251bdbf5a2cdd5dcd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga898b1f03872ad019f507d4e35bbefa90"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__log.html#ga898b1f03872ad019f507d4e35bbefa90">lwsl_hexdump</a> (void *buf, size_t len)</td></tr>
<tr class="separator:ga898b1f03872ad019f507d4e35bbefa90"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga244647f9e1bf0097ccdde66d74f41e26"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__log.html#ga244647f9e1bf0097ccdde66d74f41e26">lws_set_log_level</a> (int level, void(*log_emit_function)(int level, const char *line))</td></tr>
<tr class="separator:ga244647f9e1bf0097ccdde66d74f41e26"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab7c0fc936cc9f1eb58e2bb234c15147c"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__log.html#gab7c0fc936cc9f1eb58e2bb234c15147c">lwsl_emit_syslog</a> (int level, const char *line)</td></tr>
<tr class="separator:gab7c0fc936cc9f1eb58e2bb234c15147c"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>Logging</h2>
<p>Lws provides flexible and filterable logging facilities, which can be used inside lws and in user code.</p>
<p>Log categories may be individually filtered bitwise, and directed to built-in sinks for syslog-compatible logging, or a user-defined function. </p>
<h2 class="groupheader">Function Documentation</h2>
<a id="ga244647f9e1bf0097ccdde66d74f41e26"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga244647f9e1bf0097ccdde66d74f41e26">&#9670;&nbsp;</a></span>lws_set_log_level()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN void lws_set_log_level </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>level</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void(*)(int level, const char *line)&#160;</td>
<td class="paramname"><em>log_emit_function</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__log.html#ga244647f9e1bf0097ccdde66d74f41e26">lws_set_log_level()</a> - Set the logging bitfield </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">level</td><td>OR together the LLL_ debug contexts you want output from </td></tr>
<tr><td class="paramname">log_emit_function</td><td>NULL to leave it as it is, or a user-supplied function to perform log string emission instead of the default stderr one.</td></tr>
</table>
</dd>
</dl>
<p>log level defaults to "err", "warn" and "notice" contexts enabled and emission on stderr. </p>
</div>
</div>
<a id="gab7c0fc936cc9f1eb58e2bb234c15147c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gab7c0fc936cc9f1eb58e2bb234c15147c">&#9670;&nbsp;</a></span>lwsl_emit_syslog()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN void lwsl_emit_syslog </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>level</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>line</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__log.html#gab7c0fc936cc9f1eb58e2bb234c15147c">lwsl_emit_syslog()</a> - helper log emit function writes to system log</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">level</td><td>one of LLL_ log level indexes </td></tr>
<tr><td class="paramname">line</td><td>log string</td></tr>
</table>
</dd>
</dl>
<p>You use this by passing the function pointer to <a class="el" href="group__log.html#ga244647f9e1bf0097ccdde66d74f41e26">lws_set_log_level()</a>, to set it as the log emit function, it is not called directly. </p>
</div>
</div>
<a id="ga898b1f03872ad019f507d4e35bbefa90"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga898b1f03872ad019f507d4e35bbefa90">&#9670;&nbsp;</a></span>lwsl_hexdump()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN void lwsl_hexdump </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>buf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__log.html#ga898b1f03872ad019f507d4e35bbefa90">lwsl_hexdump()</a> - helper to hexdump a buffer (DEBUG builds only)</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">buf</td><td>buffer start to dump </td></tr>
<tr><td class="paramname">len</td><td>length of buffer to dump </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga42e39775c6b69b7251bdbf5a2cdd5dcd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga42e39775c6b69b7251bdbf5a2cdd5dcd">&#9670;&nbsp;</a></span>lwsl_timestamp()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lwsl_timestamp </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>level</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>p</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p>lwsl_timestamp: generate logging timestamp string</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">level</td><td>logging level </td></tr>
<tr><td class="paramname">p</td><td>char * buffer to take timestamp </td></tr>
<tr><td class="paramname">len</td><td>length of p</td></tr>
</table>
</dd>
</dl>
<p>returns length written in p </p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

7
doc/html/group__log.js Normal file
View file

@ -0,0 +1,7 @@
var group__log =
[
[ "lws_set_log_level", "group__log.html#ga244647f9e1bf0097ccdde66d74f41e26", null ],
[ "lwsl_emit_syslog", "group__log.html#gab7c0fc936cc9f1eb58e2bb234c15147c", null ],
[ "lwsl_hexdump", "group__log.html#ga898b1f03872ad019f507d4e35bbefa90", null ],
[ "lwsl_timestamp", "group__log.html#ga42e39775c6b69b7251bdbf5a2cdd5dcd", null ]
];

508
doc/html/group__misc.html Normal file
View file

@ -0,0 +1,508 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Miscellaneous APIs</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__misc.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Miscellaneous APIs</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga2163492f17db959a36967adb73d823b4"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga2163492f17db959a36967adb73d823b4">lws_snprintf</a> (char *str, size_t size, const char *format,...) LWS_FORMAT(3)</td></tr>
<tr class="separator:ga2163492f17db959a36967adb73d823b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga58f906c6be0ca80efd813f694569dd4a"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga58f906c6be0ca80efd813f694569dd4a">lws_get_random</a> (struct lws_context *context, void *buf, int len)</td></tr>
<tr class="separator:ga58f906c6be0ca80efd813f694569dd4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gace5171b1dbbc03ec89a98f8afdb5c9af"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#gace5171b1dbbc03ec89a98f8afdb5c9af">lws_daemonize</a> (const char *_lock_path)</td></tr>
<tr class="separator:gace5171b1dbbc03ec89a98f8afdb5c9af"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac6abfc0b2bd5b2f09281a4432bb2f5f0"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN const char *LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#gac6abfc0b2bd5b2f09281a4432bb2f5f0">lws_get_library_version</a> (void)</td></tr>
<tr class="separator:gac6abfc0b2bd5b2f09281a4432bb2f5f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa194584fff9698f3b280658f770ccd0f"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#gaa194584fff9698f3b280658f770ccd0f">lws_wsi_user</a> (struct lws *wsi)</td></tr>
<tr class="separator:gaa194584fff9698f3b280658f770ccd0f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga1ec0d9faac5d3a5824d765c287c043aa"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga1ec0d9faac5d3a5824d765c287c043aa">lws_parse_uri</a> (char *p, const char **prot, const char **ads, int *port, const char **path)</td></tr>
<tr class="separator:ga1ec0d9faac5d3a5824d765c287c043aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga33bf2635033710b25f931b57ed663e1e"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga33bf2635033710b25f931b57ed663e1e">lws_now_secs</a> (void)</td></tr>
<tr class="separator:ga33bf2635033710b25f931b57ed663e1e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga0af4f7d2dd375aeedcfa7eb0e1101c4b"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN struct lws_context *LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga0af4f7d2dd375aeedcfa7eb0e1101c4b">lws_get_context</a> (const struct lws *wsi)</td></tr>
<tr class="separator:ga0af4f7d2dd375aeedcfa7eb0e1101c4b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga629f48268fd1856b54b11172991b97d9"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga629f48268fd1856b54b11172991b97d9">lws_get_count_threads</a> (struct lws_context *context)</td></tr>
<tr class="separator:ga629f48268fd1856b54b11172991b97d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga8930fe36a3f3eefe4a6a4fd499d8e899"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN struct lws *LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga8930fe36a3f3eefe4a6a4fd499d8e899">lws_get_parent</a> (const struct lws *wsi)</td></tr>
<tr class="separator:ga8930fe36a3f3eefe4a6a4fd499d8e899"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gacae4d7b6a8d22e4c2d82ff8b12c1e234"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN struct lws *LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#gacae4d7b6a8d22e4c2d82ff8b12c1e234">lws_get_child</a> (const struct lws *wsi)</td></tr>
<tr class="separator:gacae4d7b6a8d22e4c2d82ff8b12c1e234"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga0e705d498e8c8500649a26ba30a1e106"><td class="memItemLeft" align="right" valign="top"><a id="ga0e705d498e8c8500649a26ba30a1e106"></a>
LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b>lws_read</b> (struct lws *wsi, unsigned char *buf, size_t len)</td></tr>
<tr class="separator:ga0e705d498e8c8500649a26ba30a1e106"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab321ed812f46f6dc7ef9e3ca6f00cf1b"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#gab321ed812f46f6dc7ef9e3ca6f00cf1b">lws_set_allocator</a> (void *(*realloc)(void *ptr, size_t size))</td></tr>
<tr class="separator:gab321ed812f46f6dc7ef9e3ca6f00cf1b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>Miscellaneous APIs</h2>
<p>Various APIs outside of other categories </p>
<h2 class="groupheader">Function Documentation</h2>
<a id="gace5171b1dbbc03ec89a98f8afdb5c9af"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gace5171b1dbbc03ec89a98f8afdb5c9af">&#9670;&nbsp;</a></span>lws_daemonize()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_daemonize </td>
<td>(</td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>_lock_path</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__misc.html#gace5171b1dbbc03ec89a98f8afdb5c9af">lws_daemonize()</a>: fill a buffer with platform random data</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">_lock_path</td><td>the filepath to write the lock file</td></tr>
</table>
</dd>
</dl>
<p>Spawn lws as a background process, taking care of various things </p>
</div>
</div>
<a id="gacae4d7b6a8d22e4c2d82ff8b12c1e234"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gacae4d7b6a8d22e4c2d82ff8b12c1e234">&#9670;&nbsp;</a></span>lws_get_child()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN struct lws* LWS_WARN_UNUSED_RESULT lws_get_child </td>
<td>(</td>
<td class="paramtype">const struct lws *&#160;</td>
<td class="paramname"><em>wsi</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__misc.html#gacae4d7b6a8d22e4c2d82ff8b12c1e234">lws_get_child()</a> - get child wsi or NULL </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>lws connection</td></tr>
</table>
</dd>
</dl>
<p>Allows you to find a related wsi from the parent wsi. </p>
</div>
</div>
<a id="ga0af4f7d2dd375aeedcfa7eb0e1101c4b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga0af4f7d2dd375aeedcfa7eb0e1101c4b">&#9670;&nbsp;</a></span>lws_get_context()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN struct lws_context* LWS_WARN_UNUSED_RESULT lws_get_context </td>
<td>(</td>
<td class="paramtype">const struct lws *&#160;</td>
<td class="paramname"><em>wsi</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p>lws_get_context - Allow geting lws_context from a Websocket connection instance</p>
<p>With this function, users can access context in the callback function. Otherwise users may have to declare context as a global variable.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>Websocket connection instance </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga629f48268fd1856b54b11172991b97d9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga629f48268fd1856b54b11172991b97d9">&#9670;&nbsp;</a></span>lws_get_count_threads()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_get_count_threads </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>context</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__misc.html#ga629f48268fd1856b54b11172991b97d9">lws_get_count_threads()</a>: how many service threads the context uses</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>the lws context</td></tr>
</table>
</dd>
</dl>
<p>By default this is always 1, if you asked for more than lws can handle it will clip the number of threads. So you can use this to find out how many threads are actually in use. </p>
</div>
</div>
<a id="gac6abfc0b2bd5b2f09281a4432bb2f5f0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gac6abfc0b2bd5b2f09281a4432bb2f5f0">&#9670;&nbsp;</a></span>lws_get_library_version()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN const char* LWS_WARN_UNUSED_RESULT lws_get_library_version </td>
<td>(</td>
<td class="paramtype">void&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__misc.html#gac6abfc0b2bd5b2f09281a4432bb2f5f0">lws_get_library_version()</a>: return string describing the version of lws</p>
<p>On unix, also includes the git describe </p>
</div>
</div>
<a id="ga8930fe36a3f3eefe4a6a4fd499d8e899"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga8930fe36a3f3eefe4a6a4fd499d8e899">&#9670;&nbsp;</a></span>lws_get_parent()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN struct lws* LWS_WARN_UNUSED_RESULT lws_get_parent </td>
<td>(</td>
<td class="paramtype">const struct lws *&#160;</td>
<td class="paramname"><em>wsi</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__misc.html#ga8930fe36a3f3eefe4a6a4fd499d8e899">lws_get_parent()</a> - get parent wsi or NULL </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>lws connection</td></tr>
</table>
</dd>
</dl>
<p>Specialized wsi like cgi stdin/out/err are associated to a parent wsi, this allows you to get their parent. </p>
</div>
</div>
<a id="ga58f906c6be0ca80efd813f694569dd4a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga58f906c6be0ca80efd813f694569dd4a">&#9670;&nbsp;</a></span>lws_get_random()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_get_random </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>context</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>buf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__misc.html#ga58f906c6be0ca80efd813f694569dd4a">lws_get_random()</a>: fill a buffer with platform random data</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>the lws context </td></tr>
<tr><td class="paramname">buf</td><td>buffer to fill </td></tr>
<tr><td class="paramname">len</td><td>how much to fill</td></tr>
</table>
</dd>
</dl>
<p>This is intended to be called from the LWS_CALLBACK_RECEIVE callback if it's interested to see if the frame it's dealing with was sent in binary mode. </p>
</div>
</div>
<a id="ga33bf2635033710b25f931b57ed663e1e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga33bf2635033710b25f931b57ed663e1e">&#9670;&nbsp;</a></span>lws_now_secs()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN unsigned long lws_now_secs </td>
<td>(</td>
<td class="paramtype">void&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__misc.html#ga33bf2635033710b25f931b57ed663e1e">lws_now_secs()</a>: return seconds since 1970-1-1 </p>
</div>
</div>
<a id="ga1ec0d9faac5d3a5824d765c287c043aa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga1ec0d9faac5d3a5824d765c287c043aa">&#9670;&nbsp;</a></span>lws_parse_uri()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_parse_uri </td>
<td>(</td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>p</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char **&#160;</td>
<td class="paramname"><em>prot</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char **&#160;</td>
<td class="paramname"><em>ads</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int *&#160;</td>
<td class="paramname"><em>port</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char **&#160;</td>
<td class="paramname"><em>path</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p>lws_parse_uri: cut up prot:/ads:port/path into pieces Notice it does so by dropping '\0' into input string and the leading / on the path is consequently lost</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">p</td><td>incoming uri string.. will get written to </td></tr>
<tr><td class="paramname">prot</td><td>result pointer for protocol part (<a href="https://">https://</a>) </td></tr>
<tr><td class="paramname">ads</td><td>result pointer for address part </td></tr>
<tr><td class="paramname">port</td><td>result pointer for port part </td></tr>
<tr><td class="paramname">path</td><td>result pointer for path part </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="gab321ed812f46f6dc7ef9e3ca6f00cf1b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gab321ed812f46f6dc7ef9e3ca6f00cf1b">&#9670;&nbsp;</a></span>lws_set_allocator()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN void lws_set_allocator </td>
<td>(</td>
<td class="paramtype">void *(*)(void *ptr, size_t size)&#160;</td>
<td class="paramname"><em>realloc</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__misc.html#gab321ed812f46f6dc7ef9e3ca6f00cf1b">lws_set_allocator()</a> - custom allocator support</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">realloc</td><td>Allows you to replace the allocator (and deallocator) used by lws </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga2163492f17db959a36967adb73d823b4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga2163492f17db959a36967adb73d823b4">&#9670;&nbsp;</a></span>lws_snprintf()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_snprintf </td>
<td>(</td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>str</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>format</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>...</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__misc.html#ga2163492f17db959a36967adb73d823b4">lws_snprintf()</a>: snprintf that truncates the returned length too</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">str</td><td>destination buffer </td></tr>
<tr><td class="paramname">size</td><td>bytes left in destination buffer </td></tr>
<tr><td class="paramname">format</td><td>format string </td></tr>
<tr><td class="paramname">...</td><td>args for format</td></tr>
</table>
</dd>
</dl>
<p>This lets you correctly truncate buffers by concatenating lengths, if you reach the limit the reported length doesn't exceed the limit. </p>
</div>
</div>
<a id="gaa194584fff9698f3b280658f770ccd0f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaa194584fff9698f3b280658f770ccd0f">&#9670;&nbsp;</a></span>lws_wsi_user()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN void* lws_wsi_user </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__misc.html#gaa194584fff9698f3b280658f770ccd0f">lws_wsi_user()</a> - get the user data associated with the connection </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>lws connection</td></tr>
</table>
</dd>
</dl>
<p>Not normally needed since it's passed into the callback </p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

15
doc/html/group__misc.js Normal file
View file

@ -0,0 +1,15 @@
var group__misc =
[
[ "lws_daemonize", "group__misc.html#gace5171b1dbbc03ec89a98f8afdb5c9af", null ],
[ "lws_get_child", "group__misc.html#gacae4d7b6a8d22e4c2d82ff8b12c1e234", null ],
[ "lws_get_context", "group__misc.html#ga0af4f7d2dd375aeedcfa7eb0e1101c4b", null ],
[ "lws_get_count_threads", "group__misc.html#ga629f48268fd1856b54b11172991b97d9", null ],
[ "lws_get_library_version", "group__misc.html#gac6abfc0b2bd5b2f09281a4432bb2f5f0", null ],
[ "lws_get_parent", "group__misc.html#ga8930fe36a3f3eefe4a6a4fd499d8e899", null ],
[ "lws_get_random", "group__misc.html#ga58f906c6be0ca80efd813f694569dd4a", null ],
[ "lws_now_secs", "group__misc.html#ga33bf2635033710b25f931b57ed663e1e", null ],
[ "lws_parse_uri", "group__misc.html#ga1ec0d9faac5d3a5824d765c287c043aa", null ],
[ "lws_set_allocator", "group__misc.html#gab321ed812f46f6dc7ef9e3ca6f00cf1b", null ],
[ "lws_snprintf", "group__misc.html#ga2163492f17db959a36967adb73d823b4", null ],
[ "lws_wsi_user", "group__misc.html#gaa194584fff9698f3b280658f770ccd0f", null ]
];

291
doc/html/group__net.html Normal file
View file

@ -0,0 +1,291 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Network related helper APIs</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__net.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Network related helper APIs</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gad0df22db2be9fc65a667a1e83f9a92a4"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN const char *LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__net.html#gad0df22db2be9fc65a667a1e83f9a92a4">lws_canonical_hostname</a> (struct lws_context *context)</td></tr>
<tr class="separator:gad0df22db2be9fc65a667a1e83f9a92a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga092e5f473b3347f03ffeef8a950080f3"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__net.html#ga092e5f473b3347f03ffeef8a950080f3">lws_get_peer_addresses</a> (struct lws *wsi, lws_sockfd_type fd, char *name, int name_len, char *rip, int rip_len)</td></tr>
<tr class="separator:ga092e5f473b3347f03ffeef8a950080f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad01014fed09759741b6d23afccfdaacc"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__net.html#gad01014fed09759741b6d23afccfdaacc">lws_get_peer_simple</a> (struct lws *wsi, char *name, int namelen)</td></tr>
<tr class="separator:gad01014fed09759741b6d23afccfdaacc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga869d8bdffb0f2a7ce08e3ce10d6be3d8"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__net.html#ga869d8bdffb0f2a7ce08e3ce10d6be3d8">lws_interface_to_sa</a> (int ipv6, const char *ifname, struct sockaddr_in *addr, size_t addrlen)</td></tr>
<tr class="separator:ga869d8bdffb0f2a7ce08e3ce10d6be3d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>Network related helper APIs</h2>
<p>These wrap miscellaneous useful network-related functions </p>
<h2 class="groupheader">Function Documentation</h2>
<a id="gad0df22db2be9fc65a667a1e83f9a92a4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gad0df22db2be9fc65a667a1e83f9a92a4">&#9670;&nbsp;</a></span>lws_canonical_hostname()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN const char* LWS_WARN_UNUSED_RESULT lws_canonical_hostname </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>context</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__net.html#gad0df22db2be9fc65a667a1e83f9a92a4">lws_canonical_hostname()</a> - returns this host's hostname</p>
<p>This is typically used by client code to fill in the host parameter when making a client connection. You can only call it after the context has been created.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>Websocket context </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga092e5f473b3347f03ffeef8a950080f3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga092e5f473b3347f03ffeef8a950080f3">&#9670;&nbsp;</a></span>lws_get_peer_addresses()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN void lws_get_peer_addresses </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">lws_sockfd_type&#160;</td>
<td class="paramname"><em>fd</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>name</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>name_len</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>rip</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>rip_len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__net.html#ga092e5f473b3347f03ffeef8a950080f3">lws_get_peer_addresses()</a> - Get client address information </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>Local struct lws associated with </td></tr>
<tr><td class="paramname">fd</td><td>Connection socket descriptor </td></tr>
<tr><td class="paramname">name</td><td>Buffer to take client address name </td></tr>
<tr><td class="paramname">name_len</td><td>Length of client address name buffer </td></tr>
<tr><td class="paramname">rip</td><td>Buffer to take client address IP dotted quad </td></tr>
<tr><td class="paramname">rip_len</td><td>Length of client address IP buffer <pre class="fragment"> This function fills in name and rip with the name and IP of
the client connected with socket descriptor fd. Names may be
truncated if there is not enough room. If either cannot be
determined, they will be returned as valid zero-length strings.</pre> </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="gad01014fed09759741b6d23afccfdaacc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gad01014fed09759741b6d23afccfdaacc">&#9670;&nbsp;</a></span>lws_get_peer_simple()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN const char* lws_get_peer_simple </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>name</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>namelen</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__net.html#gad01014fed09759741b6d23afccfdaacc">lws_get_peer_simple()</a> - Get client address information without RDNS</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>Local struct lws associated with </td></tr>
<tr><td class="paramname">name</td><td>Buffer to take client address name </td></tr>
<tr><td class="paramname">namelen</td><td>Length of client address name buffer</td></tr>
</table>
</dd>
</dl>
<p>This provides a 123.123.123.123 type IP address in name from the peer that has connected to wsi </p>
</div>
</div>
<a id="ga869d8bdffb0f2a7ce08e3ce10d6be3d8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga869d8bdffb0f2a7ce08e3ce10d6be3d8">&#9670;&nbsp;</a></span>lws_interface_to_sa()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_interface_to_sa </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>ipv6</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>ifname</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">struct sockaddr_in *&#160;</td>
<td class="paramname"><em>addr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>addrlen</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__net.html#ga869d8bdffb0f2a7ce08e3ce10d6be3d8">lws_interface_to_sa()</a> - Convert interface name or IP to sockaddr struct</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">ipv6</td><td>Allow IPV6 addresses </td></tr>
<tr><td class="paramname">ifname</td><td>Interface name or IP </td></tr>
<tr><td class="paramname">addr</td><td>struct sockaddr_in * to be written </td></tr>
<tr><td class="paramname">addrlen</td><td>Length of addr</td></tr>
</table>
</dd>
</dl>
<p>This converts a textual network interface name to a sockaddr usable by other network functions </p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

7
doc/html/group__net.js Normal file
View file

@ -0,0 +1,7 @@
var group__net =
[
[ "lws_canonical_hostname", "group__net.html#gad0df22db2be9fc65a667a1e83f9a92a4", null ],
[ "lws_get_peer_addresses", "group__net.html#ga092e5f473b3347f03ffeef8a950080f3", null ],
[ "lws_get_peer_simple", "group__net.html#gad01014fed09759741b6d23afccfdaacc", null ],
[ "lws_interface_to_sa", "group__net.html#ga869d8bdffb0f2a7ce08e3ce10d6be3d8", null ]
];

184
doc/html/group__pur.html Normal file
View file

@ -0,0 +1,184 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Sanitize / purify SQL and JSON helpers</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__pur.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Sanitize / purify SQL and JSON helpers</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga9cc82f06e5ae7e71458626d7a39a5865"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pur.html#ga9cc82f06e5ae7e71458626d7a39a5865">lws_sql_purify</a> (char *escaped, const char *string, int len)</td></tr>
<tr class="separator:ga9cc82f06e5ae7e71458626d7a39a5865"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab15187efcfa256b7c928562c182b92a3"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pur.html#gab15187efcfa256b7c928562c182b92a3">lws_json_purify</a> (char *escaped, const char *string, int len)</td></tr>
<tr class="separator:gab15187efcfa256b7c928562c182b92a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>Sanitize / purify SQL and JSON helpers</h2>
<p>APIs for escaping untrusted JSON and SQL safely before use </p>
<h2 class="groupheader">Function Documentation</h2>
<a id="gab15187efcfa256b7c928562c182b92a3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gab15187efcfa256b7c928562c182b92a3">&#9670;&nbsp;</a></span>lws_json_purify()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN const char* lws_json_purify </td>
<td>(</td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>escaped</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>string</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__pur.html#gab15187efcfa256b7c928562c182b92a3">lws_json_purify()</a> - like strncpy but with escaping for json chars</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">escaped</td><td>output buffer </td></tr>
<tr><td class="paramname">string</td><td>input buffer ('/0' terminated) </td></tr>
<tr><td class="paramname">len</td><td>output buffer max length</td></tr>
</table>
</dd>
</dl>
<p>Because escaping expands the output string, it's not possible to do it in-place, ie, with escaped == string </p>
</div>
</div>
<a id="ga9cc82f06e5ae7e71458626d7a39a5865"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga9cc82f06e5ae7e71458626d7a39a5865">&#9670;&nbsp;</a></span>lws_sql_purify()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN const char* lws_sql_purify </td>
<td>(</td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>escaped</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>string</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__pur.html#ga9cc82f06e5ae7e71458626d7a39a5865">lws_sql_purify()</a> - like strncpy but with escaping for sql quotes</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">escaped</td><td>output buffer </td></tr>
<tr><td class="paramname">string</td><td>input buffer ('/0' terminated) </td></tr>
<tr><td class="paramname">len</td><td>output buffer max length</td></tr>
</table>
</dd>
</dl>
<p>Because escaping expands the output string, it's not possible to do it in-place, ie, with escaped == string </p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

5
doc/html/group__pur.js Normal file
View file

@ -0,0 +1,5 @@
var group__pur =
[
[ "lws_json_purify", "group__pur.html#gab15187efcfa256b7c928562c182b92a3", null ],
[ "lws_sql_purify", "group__pur.html#ga9cc82f06e5ae7e71458626d7a39a5865", null ]
];

View file

@ -0,0 +1,227 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Sending data</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__sending-data.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Sending data</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ga98b099cf8c1c7e38ad78501f270e193d"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sending-data.html#ga98b099cf8c1c7e38ad78501f270e193d">lws_write_protocol</a> { <br />
&#160;&#160;<a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da80e8f169fda236c56bfb795ed62903db">LWS_WRITE_TEXT</a> = 0,
<a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2">LWS_WRITE_BINARY</a> = 1,
<a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da10047eb05b5e1c298151dc47a5b44826">LWS_WRITE_CONTINUATION</a> = 2,
<a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e">LWS_WRITE_HTTP</a> = 3,
<br />
&#160;&#160;<b>LWS_WRITE_PING</b> = 5,
<b>LWS_WRITE_PONG</b> = 6,
<b>LWS_WRITE_HTTP_FINAL</b> = 7,
<a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dafe5a38e940ce56708ac814627e9c0917">LWS_WRITE_HTTP_HEADERS</a> = 8,
<br />
&#160;&#160;<a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3">LWS_WRITE_NO_FIN</a> = 0x40,
<a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da220d8e8652d9b97fb66e476e2a60ffce">LWS_WRITE_CLIENT_IGNORE_XOR_MASK</a> = 0x80
<br />
}</td></tr>
<tr class="separator:ga98b099cf8c1c7e38ad78501f270e193d"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gafd5fdd285a0e25ba7e3e1051deec1001"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sending-data.html#gafd5fdd285a0e25ba7e3e1051deec1001">lws_write</a> (struct lws *wsi, unsigned char *buf, size_t len, enum <a class="el" href="group__sending-data.html#ga98b099cf8c1c7e38ad78501f270e193d">lws_write_protocol</a> protocol)</td></tr>
<tr class="separator:gafd5fdd285a0e25ba7e3e1051deec1001"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>APIs related to writing data on a connection </p>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a id="ga98b099cf8c1c7e38ad78501f270e193d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga98b099cf8c1c7e38ad78501f270e193d">&#9670;&nbsp;</a></span>lws_write_protocol</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="group__sending-data.html#ga98b099cf8c1c7e38ad78501f270e193d">lws_write_protocol</a></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga98b099cf8c1c7e38ad78501f270e193da80e8f169fda236c56bfb795ed62903db"></a>LWS_WRITE_TEXT&#160;</td><td class="fielddoc"><p>Send a ws TEXT message,the pointer must have LWS_PRE valid memory behind it. The receiver expects only valid utf-8 in the payload </p>
</td></tr>
<tr><td class="fieldname"><a id="gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2"></a>LWS_WRITE_BINARY&#160;</td><td class="fielddoc"><p>Send a ws BINARY message, the pointer must have LWS_PRE valid memory behind it. Any sequence of bytes is valid </p>
</td></tr>
<tr><td class="fieldname"><a id="gga98b099cf8c1c7e38ad78501f270e193da10047eb05b5e1c298151dc47a5b44826"></a>LWS_WRITE_CONTINUATION&#160;</td><td class="fielddoc"><p>Continue a previous ws message, the pointer must have LWS_PRE valid memory behind it </p>
</td></tr>
<tr><td class="fieldname"><a id="gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e"></a>LWS_WRITE_HTTP&#160;</td><td class="fielddoc"><p>Send HTTP content </p>
</td></tr>
<tr><td class="fieldname"><a id="gga98b099cf8c1c7e38ad78501f270e193dafe5a38e940ce56708ac814627e9c0917"></a>LWS_WRITE_HTTP_HEADERS&#160;</td><td class="fielddoc"><p>Send http headers (http2 encodes this payload and LWS_WRITE_HTTP payload differently, http 1.x links also handle this correctly. so to be compatible with both in the future,header response part should be sent using this regardless of http version expected) </p>
</td></tr>
<tr><td class="fieldname"><a id="gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3"></a>LWS_WRITE_NO_FIN&#160;</td><td class="fielddoc"><p>This part of the message is not the end of the message </p>
</td></tr>
<tr><td class="fieldname"><a id="gga98b099cf8c1c7e38ad78501f270e193da220d8e8652d9b97fb66e476e2a60ffce"></a>LWS_WRITE_CLIENT_IGNORE_XOR_MASK&#160;</td><td class="fielddoc"><p>client packet payload goes out on wire unmunged only useful for security tests since normal servers cannot decode the content if used </p>
</td></tr>
</table>
<div class="fragment"><div class="line"><a name="l03168"></a><span class="lineno"> 3168</span>&#160; {</div><div class="line"><a name="l03169"></a><span class="lineno"> 3169</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da80e8f169fda236c56bfb795ed62903db">LWS_WRITE_TEXT</a> = 0,</div><div class="line"><a name="l03173"></a><span class="lineno"> 3173</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2">LWS_WRITE_BINARY</a> = 1,</div><div class="line"><a name="l03176"></a><span class="lineno"> 3176</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da10047eb05b5e1c298151dc47a5b44826">LWS_WRITE_CONTINUATION</a> = 2,</div><div class="line"><a name="l03179"></a><span class="lineno"> 3179</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e">LWS_WRITE_HTTP</a> = 3,</div><div class="line"><a name="l03182"></a><span class="lineno"> 3182</span>&#160; <span class="comment">/* LWS_WRITE_CLOSE is handled by lws_close_reason() */</span></div><div class="line"><a name="l03183"></a><span class="lineno"> 3183</span>&#160; LWS_WRITE_PING = 5,</div><div class="line"><a name="l03184"></a><span class="lineno"> 3184</span>&#160; LWS_WRITE_PONG = 6,</div><div class="line"><a name="l03185"></a><span class="lineno"> 3185</span>&#160;</div><div class="line"><a name="l03186"></a><span class="lineno"> 3186</span>&#160; <span class="comment">/* Same as write_http but we know this write ends the transaction */</span></div><div class="line"><a name="l03187"></a><span class="lineno"> 3187</span>&#160; LWS_WRITE_HTTP_FINAL = 7,</div><div class="line"><a name="l03188"></a><span class="lineno"> 3188</span>&#160;</div><div class="line"><a name="l03189"></a><span class="lineno"> 3189</span>&#160; <span class="comment">/* HTTP2 */</span></div><div class="line"><a name="l03190"></a><span class="lineno"> 3190</span>&#160;</div><div class="line"><a name="l03191"></a><span class="lineno"> 3191</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dafe5a38e940ce56708ac814627e9c0917">LWS_WRITE_HTTP_HEADERS</a> = 8,</div><div class="line"><a name="l03198"></a><span class="lineno"> 3198</span>&#160; <span class="comment">/****** add new things just above ---^ ******/</span></div><div class="line"><a name="l03199"></a><span class="lineno"> 3199</span>&#160;</div><div class="line"><a name="l03200"></a><span class="lineno"> 3200</span>&#160; <span class="comment">/* flags */</span></div><div class="line"><a name="l03201"></a><span class="lineno"> 3201</span>&#160;</div><div class="line"><a name="l03202"></a><span class="lineno"> 3202</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3">LWS_WRITE_NO_FIN</a> = 0x40,</div><div class="line"><a name="l03205"></a><span class="lineno"> 3205</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da220d8e8652d9b97fb66e476e2a60ffce">LWS_WRITE_CLIENT_IGNORE_XOR_MASK</a> = 0x80</div><div class="line"><a name="l03209"></a><span class="lineno"> 3209</span>&#160;};</div><div class="ttc" id="group__sending-data_html_gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e"><div class="ttname"><a href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e">LWS_WRITE_HTTP</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3179</div></div>
<div class="ttc" id="group__sending-data_html_gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3"><div class="ttname"><a href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3">LWS_WRITE_NO_FIN</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3202</div></div>
<div class="ttc" id="group__sending-data_html_gga98b099cf8c1c7e38ad78501f270e193da80e8f169fda236c56bfb795ed62903db"><div class="ttname"><a href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da80e8f169fda236c56bfb795ed62903db">LWS_WRITE_TEXT</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3169</div></div>
<div class="ttc" id="group__sending-data_html_gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2"><div class="ttname"><a href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2">LWS_WRITE_BINARY</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3173</div></div>
<div class="ttc" id="group__sending-data_html_gga98b099cf8c1c7e38ad78501f270e193da220d8e8652d9b97fb66e476e2a60ffce"><div class="ttname"><a href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da220d8e8652d9b97fb66e476e2a60ffce">LWS_WRITE_CLIENT_IGNORE_XOR_MASK</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3205</div></div>
<div class="ttc" id="group__sending-data_html_gga98b099cf8c1c7e38ad78501f270e193da10047eb05b5e1c298151dc47a5b44826"><div class="ttname"><a href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da10047eb05b5e1c298151dc47a5b44826">LWS_WRITE_CONTINUATION</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3176</div></div>
<div class="ttc" id="group__sending-data_html_gga98b099cf8c1c7e38ad78501f270e193dafe5a38e940ce56708ac814627e9c0917"><div class="ttname"><a href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dafe5a38e940ce56708ac814627e9c0917">LWS_WRITE_HTTP_HEADERS</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:3191</div></div>
</div><!-- fragment -->
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="gafd5fdd285a0e25ba7e3e1051deec1001"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gafd5fdd285a0e25ba7e3e1051deec1001">&#9670;&nbsp;</a></span>lws_write()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_write </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char *&#160;</td>
<td class="paramname"><em>buf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>len</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">enum <a class="el" href="group__sending-data.html#ga98b099cf8c1c7e38ad78501f270e193d">lws_write_protocol</a>&#160;</td>
<td class="paramname"><em>protocol</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__sending-data.html#gafd5fdd285a0e25ba7e3e1051deec1001">lws_write()</a> - Apply protocol then write data to client </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>Websocket instance (available from user callback) </td></tr>
<tr><td class="paramname">buf</td><td>The data to send. For data being sent on a websocket connection (ie, not default http), this buffer MUST have LWS_PRE bytes valid BEFORE the pointer. This is so the protocol header data can be added in-situ. </td></tr>
<tr><td class="paramname">len</td><td>Count of the data bytes in the payload starting from buf </td></tr>
<tr><td class="paramname">protocol</td><td>Use LWS_WRITE_HTTP to reply to an http connection, and one of LWS_WRITE_BINARY or LWS_WRITE_TEXT to send appropriate data on a websockets connection. Remember to allow the extra bytes before and after buf if LWS_WRITE_BINARY or LWS_WRITE_TEXT are used.</td></tr>
</table>
</dd>
</dl>
<p>This function provides the way to issue data back to the client for both http and websocket protocols.</p>
<p>IMPORTANT NOTICE!</p>
<p>When sending with websocket protocol</p>
<p>LWS_WRITE_TEXT, LWS_WRITE_BINARY, LWS_WRITE_CONTINUATION, LWS_WRITE_PING, LWS_WRITE_PONG</p>
<p>the send buffer has to have LWS_PRE bytes valid BEFORE the buffer pointer you pass to <a class="el" href="group__sending-data.html#gafd5fdd285a0e25ba7e3e1051deec1001">lws_write()</a>.</p>
<p>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.</p>
<p>So for example you need this kind of code to use lws_write with a 128-byte payload</p>
<p>char buf[LWS_PRE + 128];</p>
<p>// fill your part of the buffer... for example here it's all zeros memset(&amp;buf[LWS_PRE], 0, 128);</p>
<p>lws_write(wsi, &amp;buf[LWS_PRE], 128, LWS_WRITE_TEXT);</p>
<p>When sending HTTP, with</p>
<p>LWS_WRITE_HTTP, LWS_WRITE_HTTP_HEADERS LWS_WRITE_HTTP_FINAL</p>
<p>there is no protocol data prepended, and don't need to take care about the LWS_PRE bytes valid before the buffer pointer.</p>
<p>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.</p>
<p>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 *). </p><pre class="fragment"> In the case of sending using websocket protocol, be sure to allocate
valid storage before and after buf as explained above. This scheme
allows maximum efficiency of sending data and protocol in a single
packet while not burdening the user code with any protocol knowledge.
Return may be -1 for a fatal error needing connection close, or the
number of bytes sent.
</pre><h1>Truncated Writes </h1>
<p>The OS may not accept everything you asked to write on the connection.</p>
<p>Posix defines POLLOUT indication from poll() to show that the connection will accept more write data, but it doesn't specifiy how much. It may just accept one byte of whatever you wanted to send.</p>
<p>LWS will buffer the remainder automatically, and send it out autonomously.</p>
<p>During that time, WRITABLE callbacks will be suppressed.</p>
<p>This is to handle corner cases where unexpectedly the OS refuses what we usually expect it to accept. You should try to send in chunks that are almost always accepted in order to avoid the inefficiency of the buffering. </p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,13 @@
var group__sending_data =
[
[ "lws_write_protocol", "group__sending-data.html#ga98b099cf8c1c7e38ad78501f270e193d", [
[ "LWS_WRITE_TEXT", "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da80e8f169fda236c56bfb795ed62903db", null ],
[ "LWS_WRITE_BINARY", "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2", null ],
[ "LWS_WRITE_CONTINUATION", "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da10047eb05b5e1c298151dc47a5b44826", null ],
[ "LWS_WRITE_HTTP", "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e", null ],
[ "LWS_WRITE_HTTP_HEADERS", "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dafe5a38e940ce56708ac814627e9c0917", null ],
[ "LWS_WRITE_NO_FIN", "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3", null ],
[ "LWS_WRITE_CLIENT_IGNORE_XOR_MASK", "group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da220d8e8652d9b97fb66e476e2a60ffce", null ]
] ],
[ "lws_write", "group__sending-data.html#gafd5fdd285a0e25ba7e3e1051deec1001", null ]
];

View file

@ -0,0 +1,447 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Built-in service loop entry</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__service.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Built-in service loop entry</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gaf95bd0c663d6516a0c80047d9b1167a8"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8">lws_service</a> (struct lws_context *context, int timeout_ms)</td></tr>
<tr class="separator:gaf95bd0c663d6516a0c80047d9b1167a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga9b3cc4473fd8848e5bbee7f310712939"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__service.html#ga9b3cc4473fd8848e5bbee7f310712939">lws_service_tsi</a> (struct lws_context *context, int timeout_ms, int tsi)</td></tr>
<tr class="separator:ga9b3cc4473fd8848e5bbee7f310712939"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga29c246707997ab7a466aa709aecd2d7b"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__service.html#ga29c246707997ab7a466aa709aecd2d7b">lws_cancel_service_pt</a> (struct lws *wsi)</td></tr>
<tr class="separator:ga29c246707997ab7a466aa709aecd2d7b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga53e3d0801dfda7960a7249dd559e68a2"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__service.html#ga53e3d0801dfda7960a7249dd559e68a2">lws_cancel_service</a> (struct lws_context *context)</td></tr>
<tr class="separator:ga53e3d0801dfda7960a7249dd559e68a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad82efa5466d14a9f05aa06416375b28d"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__service.html#gad82efa5466d14a9f05aa06416375b28d">lws_service_fd</a> (struct lws_context *context, struct <a class="el" href="structlws__pollfd.html">lws_pollfd</a> *<a class="el" href="structpollfd.html">pollfd</a>)</td></tr>
<tr class="separator:gad82efa5466d14a9f05aa06416375b28d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaebf426eda371ba23642fc11d8e0ace6b"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__service.html#gaebf426eda371ba23642fc11d8e0ace6b">lws_service_fd_tsi</a> (struct lws_context *context, struct <a class="el" href="structlws__pollfd.html">lws_pollfd</a> *<a class="el" href="structpollfd.html">pollfd</a>, int tsi)</td></tr>
<tr class="separator:gaebf426eda371ba23642fc11d8e0ace6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4fd9d714434ca499e2b3f7dbba86f241"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__service.html#ga4fd9d714434ca499e2b3f7dbba86f241">lws_service_adjust_timeout</a> (struct lws_context *context, int timeout_ms, int tsi)</td></tr>
<tr class="separator:ga4fd9d714434ca499e2b3f7dbba86f241"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab1ff2c19455268fa0d5b617d8057fbfc"><td class="memItemLeft" align="right" valign="top">LWS_EXTERN LWS_VISIBLE int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__service.html#gab1ff2c19455268fa0d5b617d8057fbfc">lws_plat_service_tsi</a> (struct lws_context *context, int timeout_ms, int tsi)</td></tr>
<tr class="separator:gab1ff2c19455268fa0d5b617d8057fbfc"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>lws_client_http_body_pending() - control if client connection neeeds to send body</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>client connection </td></tr>
<tr><td class="paramname">something_left_to_send</td><td>nonzero if need to send more body, 0 (default) if nothing more to send</td></tr>
</table>
</dd>
</dl>
<p>If you will send payload data with your HTTP client connection, eg, for POST, when you set the related http headers in LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER callback you should also call this API with something_left_to_send nonzero, and call lws_callback_on_writable(wsi);</p>
<p>After sending the headers, lws will call your callback with LWS_CALLBACK_CLIENT_HTTP_WRITEABLE reason when writable. You can send the next part of the http body payload, calling lws_callback_on_writable(wsi); if there is more to come, or lws_client_http_body_pending(wsi, 0); to let lws know the last part is sent and the connection can move on.</p>
<h2>Built-in service loop entry</h2>
<p>If you're not using libev / libuv, these apis are needed to enter the poll() wait in lws and service any connections with pending events. </p>
<h2 class="groupheader">Function Documentation</h2>
<a id="ga53e3d0801dfda7960a7249dd559e68a2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga53e3d0801dfda7960a7249dd559e68a2">&#9670;&nbsp;</a></span>lws_cancel_service()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN void lws_cancel_service </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>context</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__service.html#ga53e3d0801dfda7960a7249dd559e68a2">lws_cancel_service()</a> - Cancel wait for new pending socket activity </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>Websocket context <pre class="fragment"> This function let a call to lws_service() waiting for a timeout
immediately return.
What it basically does is provide a fake event that will be swallowed,
so the wait in poll() is ended. That's useful because poll() doesn't
attend to changes in POLLIN/OUT/ERR until it re-enters the wait.</pre> </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga29c246707997ab7a466aa709aecd2d7b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga29c246707997ab7a466aa709aecd2d7b">&#9670;&nbsp;</a></span>lws_cancel_service_pt()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN void lws_cancel_service_pt </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__service.html#ga29c246707997ab7a466aa709aecd2d7b">lws_cancel_service_pt()</a> - Cancel servicing of pending socket activity on one thread </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>Cancel service on the thread this wsi is serviced by <pre class="fragment"> This function lets a call to lws_service() waiting for a timeout
immediately return.
It works by creating a phony event and then swallowing it silently.
The reason it may be needed is when waiting in poll(), changes to
the event masks are ignored by the OS until poll() is reentered. This
lets you halt the poll() wait and make the reentry happen immediately
instead of having the wait out the rest of the poll timeout.</pre> </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="gab1ff2c19455268fa0d5b617d8057fbfc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gab1ff2c19455268fa0d5b617d8057fbfc">&#9670;&nbsp;</a></span>lws_plat_service_tsi()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_EXTERN LWS_VISIBLE int lws_plat_service_tsi </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>context</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>timeout_ms</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>tsi</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__service.html#gab1ff2c19455268fa0d5b617d8057fbfc">lws_plat_service_tsi()</a> - Lowlevel platform-specific service api </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>Websocket context </td></tr>
<tr><td class="paramname">timeout_ms</td><td>The original poll timeout value. You can just set this to 1 if you don't really have a poll timeout. </td></tr>
<tr><td class="paramname">tsi</td><td>thread service index</td></tr>
</table>
</dd>
</dl>
<p>For default poll() and libuv/ev, lws takes care of using this for you. and you can ignore it.</p>
<p>But for external poll() integration, you need access to this api to service connections that need to be serviced but have no pending network activity.</p>
<p>See <a class="el" href="group__service.html#ga4fd9d714434ca499e2b3f7dbba86f241">lws_service_adjust_timeout()</a> for more info. </p>
</div>
</div>
<a id="gaf95bd0c663d6516a0c80047d9b1167a8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaf95bd0c663d6516a0c80047d9b1167a8">&#9670;&nbsp;</a></span>lws_service()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_service </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>context</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>timeout_ms</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8">lws_service()</a> - Service any pending websocket activity </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>Websocket context </td></tr>
<tr><td class="paramname">timeout_ms</td><td>Timeout for poll; 0 means return immediately if nothing needed service otherwise block and service immediately, returning after the timeout if nothing needed service.</td></tr>
</table>
</dd>
</dl>
<p>This function deals with any pending websocket traffic, for three kinds of event. It handles these events on both server and client types of connection the same.</p>
<p>1) Accept new connections to our context's server</p>
<p>2) Call the receive callback for incoming frame data received by server or client connections.</p>
<p>You need to call this service function periodically to all the above functions to happen; if your application is single-threaded you can just call it in your main event loop.</p>
<p>Alternatively you can fork a new process that asynchronously handles calling this service in a loop. In that case you are happy if this call blocks your thread until it needs to take care of something and would call it with a large nonzero timeout. Your loop then takes no CPU while there is nothing happening.</p>
<p>If you are calling it in a single-threaded app, you don't want it to wait around blocking other things in your loop from happening, so you would call it with a timeout_ms of 0, so it returns immediately if nothing is pending, or as soon as it services whatever was pending. </p>
</div>
</div>
<a id="ga4fd9d714434ca499e2b3f7dbba86f241"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga4fd9d714434ca499e2b3f7dbba86f241">&#9670;&nbsp;</a></span>lws_service_adjust_timeout()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_service_adjust_timeout </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>context</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>timeout_ms</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>tsi</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__service.html#ga4fd9d714434ca499e2b3f7dbba86f241">lws_service_adjust_timeout()</a> - Check for any connection needing forced service </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>Websocket context </td></tr>
<tr><td class="paramname">timeout_ms</td><td>The original poll timeout value. You can just set this to 1 if you don't really have a poll timeout. </td></tr>
<tr><td class="paramname">tsi</td><td>thread service index</td></tr>
</table>
</dd>
</dl>
<p>Under some conditions connections may need service even though there is no pending network action on them, this is "forced service". For default poll() and libuv / libev, the library takes care of calling this and dealing with it for you. But for external poll() integration, you need access to the apis.</p>
<p>If anybody needs "forced service", returned timeout is zero. In that case, you can call <a class="el" href="group__service.html#gab1ff2c19455268fa0d5b617d8057fbfc">lws_plat_service_tsi()</a> with a timeout of -1 to only service guys who need forced service. </p>
</div>
</div>
<a id="gad82efa5466d14a9f05aa06416375b28d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gad82efa5466d14a9f05aa06416375b28d">&#9670;&nbsp;</a></span>lws_service_fd()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_service_fd </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>context</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">struct <a class="el" href="structlws__pollfd.html">lws_pollfd</a> *&#160;</td>
<td class="paramname"><em>pollfd</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__service.html#gad82efa5466d14a9f05aa06416375b28d">lws_service_fd()</a> - Service polled socket with something waiting </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>Websocket context </td></tr>
<tr><td class="paramname">pollfd</td><td>The pollfd entry describing the socket fd and which events happened, or NULL to tell lws to do only timeout servicing.</td></tr>
</table>
</dd>
</dl>
<p>This function takes a pollfd that has POLLIN or POLLOUT activity and services it according to the state of the associated struct lws.</p>
<p>The one call deals with all "service" that might happen on a socket including listen accepts, http files as well as websocket protocol.</p>
<p>If a pollfd says it has something, you can just pass it to <a class="el" href="group__service.html#gad82efa5466d14a9f05aa06416375b28d">lws_service_fd()</a> whether it is a socket handled by lws or not. If it sees it is a lws socket, the traffic will be handled and pollfd-&gt;revents will be zeroed now.</p>
<p>If the socket is foreign to lws, it leaves revents alone. So you can see if you should service yourself by checking the pollfd revents after letting lws try to service it.</p>
<p>You should also call this with pollfd = NULL to just allow the once-per-second global timeout checks; if less than a second since the last check it returns immediately then. </p>
</div>
</div>
<a id="gaebf426eda371ba23642fc11d8e0ace6b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaebf426eda371ba23642fc11d8e0ace6b">&#9670;&nbsp;</a></span>lws_service_fd_tsi()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_service_fd_tsi </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>context</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">struct <a class="el" href="structlws__pollfd.html">lws_pollfd</a> *&#160;</td>
<td class="paramname"><em>pollfd</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>tsi</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__service.html#gaebf426eda371ba23642fc11d8e0ace6b">lws_service_fd_tsi()</a> - Service polled socket in specific service thread </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>Websocket context </td></tr>
<tr><td class="paramname">pollfd</td><td>The pollfd entry describing the socket fd and which events happened. </td></tr>
<tr><td class="paramname">tsi</td><td>thread service index</td></tr>
</table>
</dd>
</dl>
<p>Same as <a class="el" href="group__service.html#gad82efa5466d14a9f05aa06416375b28d">lws_service_fd()</a> but used with multiple service threads </p>
</div>
</div>
<a id="ga9b3cc4473fd8848e5bbee7f310712939"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga9b3cc4473fd8848e5bbee7f310712939">&#9670;&nbsp;</a></span>lws_service_tsi()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_service_tsi </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>context</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>timeout_ms</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>tsi</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8">lws_service()</a> - Service any pending websocket activity</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>Websocket context </td></tr>
<tr><td class="paramname">timeout_ms</td><td>Timeout for poll; 0 means return immediately if nothing needed service otherwise block and service immediately, returning after the timeout if nothing needed service.</td></tr>
</table>
</dd>
</dl>
<p>Same as <a class="el" href="group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8">lws_service()</a>, but for a specific thread service index. Only needed if you are spawning multiple service threads. </p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,11 @@
var group__service =
[
[ "lws_cancel_service", "group__service.html#ga53e3d0801dfda7960a7249dd559e68a2", null ],
[ "lws_cancel_service_pt", "group__service.html#ga29c246707997ab7a466aa709aecd2d7b", null ],
[ "lws_plat_service_tsi", "group__service.html#gab1ff2c19455268fa0d5b617d8057fbfc", null ],
[ "lws_service", "group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8", null ],
[ "lws_service_adjust_timeout", "group__service.html#ga4fd9d714434ca499e2b3f7dbba86f241", null ],
[ "lws_service_fd", "group__service.html#gad82efa5466d14a9f05aa06416375b28d", null ],
[ "lws_service_fd_tsi", "group__service.html#gaebf426eda371ba23642fc11d8e0ace6b", null ],
[ "lws_service_tsi", "group__service.html#ga9b3cc4473fd8848e5bbee7f310712939", null ]
];

239
doc/html/group__sha.html Normal file
View file

@ -0,0 +1,239 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: SHA and B64 helpers</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__sha.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">SHA and B64 helpers</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga7b09ab74646266f0b555103b3bb8dfe5"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN unsigned char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5">lws_SHA1</a> (const unsigned char *d, size_t n, unsigned char *md)</td></tr>
<tr class="separator:ga7b09ab74646266f0b555103b3bb8dfe5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf39765e4a3b413efb65e4698b2ec3575"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sha.html#gaf39765e4a3b413efb65e4698b2ec3575">lws_b64_encode_string</a> (const char *in, int in_len, char *out, int out_size)</td></tr>
<tr class="separator:gaf39765e4a3b413efb65e4698b2ec3575"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga66316e6a5a0644a09d5a10e919dfdd8d"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sha.html#ga66316e6a5a0644a09d5a10e919dfdd8d">lws_b64_decode_string</a> (const char *in, char *out, int out_size)</td></tr>
<tr class="separator:ga66316e6a5a0644a09d5a10e919dfdd8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>SHA and B64 helpers</h2>
<p>These provide SHA-1 and B64 helper apis </p>
<h2 class="groupheader">Function Documentation</h2>
<a id="ga66316e6a5a0644a09d5a10e919dfdd8d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga66316e6a5a0644a09d5a10e919dfdd8d">&#9670;&nbsp;</a></span>lws_b64_decode_string()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_b64_decode_string </td>
<td>(</td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>in</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>out</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>out_size</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__sha.html#ga66316e6a5a0644a09d5a10e919dfdd8d">lws_b64_decode_string()</a>: decode a string from base 64</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">in</td><td>incoming buffer </td></tr>
<tr><td class="paramname">out</td><td>result buffer </td></tr>
<tr><td class="paramname">out_size</td><td>length of result buffer</td></tr>
</table>
</dd>
</dl>
<p>Decodes a string using b64 </p>
</div>
</div>
<a id="gaf39765e4a3b413efb65e4698b2ec3575"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaf39765e4a3b413efb65e4698b2ec3575">&#9670;&nbsp;</a></span>lws_b64_encode_string()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_b64_encode_string </td>
<td>(</td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>in</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>in_len</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>out</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>out_size</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__sha.html#gaf39765e4a3b413efb65e4698b2ec3575">lws_b64_encode_string()</a>: encode a string into base 64</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">in</td><td>incoming buffer </td></tr>
<tr><td class="paramname">in_len</td><td>length of incoming buffer </td></tr>
<tr><td class="paramname">out</td><td>result buffer </td></tr>
<tr><td class="paramname">out_size</td><td>length of result buffer</td></tr>
</table>
</dd>
</dl>
<p>Encodes a string using b64 </p>
</div>
</div>
<a id="ga7b09ab74646266f0b555103b3bb8dfe5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga7b09ab74646266f0b555103b3bb8dfe5">&#9670;&nbsp;</a></span>lws_SHA1()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN unsigned char* lws_SHA1 </td>
<td>(</td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>d</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>n</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char *&#160;</td>
<td class="paramname"><em>md</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5">lws_SHA1()</a>: make a SHA-1 digest of a buffer</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">d</td><td>incoming buffer </td></tr>
<tr><td class="paramname">n</td><td>length of incoming buffer </td></tr>
<tr><td class="paramname">md</td><td>buffer for message digest (must be &gt;= 20 bytes)</td></tr>
</table>
</dd>
</dl>
<p>Reduces any size buffer into a 20-byte SHA-1 hash. </p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

6
doc/html/group__sha.js Normal file
View file

@ -0,0 +1,6 @@
var group__sha =
[
[ "lws_b64_decode_string", "group__sha.html#ga66316e6a5a0644a09d5a10e919dfdd8d", null ],
[ "lws_b64_encode_string", "group__sha.html#gaf39765e4a3b413efb65e4698b2ec3575", null ],
[ "lws_SHA1", "group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5", null ]
];

278
doc/html/group__smtp.html Normal file
View file

@ -0,0 +1,278 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Smtp</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__smtp.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Smtp</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__email.html">lws_email</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ga116be79bf44f9dc2a97f46e051fe4dc0"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__smtp.html#ga116be79bf44f9dc2a97f46e051fe4dc0">lwsgs_smtp_states</a> { <br />
&#160;&#160;<a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c">LGSSMTP_IDLE</a>,
<a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933">LGSSMTP_CONNECTING</a>,
<a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d">LGSSMTP_CONNECTED</a>,
<a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad">LGSSMTP_SENT_HELO</a>,
<br />
&#160;&#160;<a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab">LGSSMTP_SENT_FROM</a>,
<a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83">LGSSMTP_SENT_TO</a>,
<a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14">LGSSMTP_SENT_DATA</a>,
<a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69">LGSSMTP_SENT_BODY</a>,
<br />
&#160;&#160;<a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5">LGSSMTP_SENT_QUIT</a>
<br />
}</td></tr>
<tr class="separator:ga116be79bf44f9dc2a97f46e051fe4dc0"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga77fc9b56a1bb39484844981ec375fc29"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__smtp.html#ga77fc9b56a1bb39484844981ec375fc29">lws_email_init</a> (struct <a class="el" href="structlws__email.html">lws_email</a> *email, uv_loop_t *loop, int max_content)</td></tr>
<tr class="separator:ga77fc9b56a1bb39484844981ec375fc29"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5e535e346d92a9daf00be33abf79d4eb"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__smtp.html#ga5e535e346d92a9daf00be33abf79d4eb">lws_email_check</a> (struct <a class="el" href="structlws__email.html">lws_email</a> *email)</td></tr>
<tr class="separator:ga5e535e346d92a9daf00be33abf79d4eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga25298a5afc1074e13b2d5711a86432b2"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__smtp.html#ga25298a5afc1074e13b2d5711a86432b2">lws_email_destroy</a> (struct <a class="el" href="structlws__email.html">lws_email</a> *email)</td></tr>
<tr class="separator:ga25298a5afc1074e13b2d5711a86432b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>SMTP related functions</h2>
<p>These apis let you communicate with a local SMTP server to send email from lws. It handles all the SMTP sequencing and protocol actions.</p>
<p>Your system should have postfix, sendmail or another MTA listening on port 25 and able to send email using the "mail" commandline app. Usually distro MTAs are configured for this by default.</p>
<p>It runs via its own libuv events if initialized (which requires giving it a libuv loop to attach to).</p>
<p>It operates using three callbacks, on_next() queries if there is a new email to send, on_get_body() asks for the body of the email, and on_sent() is called after the email is successfully sent.</p>
<p>To use it</p>
<ul>
<li>create an <a class="el" href="structlws__email.html">lws_email</a> struct</li>
<li>initialize data, loop, the email_* strings, max_content_size and the callbacks</li>
<li>call <a class="el" href="group__smtp.html#ga77fc9b56a1bb39484844981ec375fc29">lws_email_init()</a></li>
</ul>
<p>When you have at least one email to send, call <a class="el" href="group__smtp.html#ga5e535e346d92a9daf00be33abf79d4eb">lws_email_check()</a> to schedule starting to send it. </p>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a id="ga116be79bf44f9dc2a97f46e051fe4dc0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga116be79bf44f9dc2a97f46e051fe4dc0">&#9670;&nbsp;</a></span>lwsgs_smtp_states</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="group__smtp.html#ga116be79bf44f9dc2a97f46e051fe4dc0">lwsgs_smtp_states</a></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p>enum lwsgs_smtp_states - where we are in SMTP protocol sequence </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c"></a>LGSSMTP_IDLE&#160;</td><td class="fielddoc"><p>awaiting new email </p>
</td></tr>
<tr><td class="fieldname"><a id="gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933"></a>LGSSMTP_CONNECTING&#160;</td><td class="fielddoc"><p>opening tcp connection to MTA </p>
</td></tr>
<tr><td class="fieldname"><a id="gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d"></a>LGSSMTP_CONNECTED&#160;</td><td class="fielddoc"><p>tcp connection to MTA is connected </p>
</td></tr>
<tr><td class="fieldname"><a id="gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad"></a>LGSSMTP_SENT_HELO&#160;</td><td class="fielddoc"><p>sent the HELO </p>
</td></tr>
<tr><td class="fieldname"><a id="gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab"></a>LGSSMTP_SENT_FROM&#160;</td><td class="fielddoc"><p>sent FROM </p>
</td></tr>
<tr><td class="fieldname"><a id="gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83"></a>LGSSMTP_SENT_TO&#160;</td><td class="fielddoc"><p>sent TO </p>
</td></tr>
<tr><td class="fieldname"><a id="gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14"></a>LGSSMTP_SENT_DATA&#160;</td><td class="fielddoc"><p>sent DATA request </p>
</td></tr>
<tr><td class="fieldname"><a id="gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69"></a>LGSSMTP_SENT_BODY&#160;</td><td class="fielddoc"><p>sent the email body </p>
</td></tr>
<tr><td class="fieldname"><a id="gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5"></a>LGSSMTP_SENT_QUIT&#160;</td><td class="fielddoc"><p>sent the session quit </p>
</td></tr>
</table>
<div class="fragment"><div class="line"><a name="l04123"></a><span class="lineno"> 4123</span>&#160; {</div><div class="line"><a name="l04124"></a><span class="lineno"> 4124</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c">LGSSMTP_IDLE</a>, </div><div class="line"><a name="l04125"></a><span class="lineno"> 4125</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933">LGSSMTP_CONNECTING</a>, </div><div class="line"><a name="l04126"></a><span class="lineno"> 4126</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d">LGSSMTP_CONNECTED</a>, </div><div class="line"><a name="l04127"></a><span class="lineno"> 4127</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad">LGSSMTP_SENT_HELO</a>, </div><div class="line"><a name="l04128"></a><span class="lineno"> 4128</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab">LGSSMTP_SENT_FROM</a>, </div><div class="line"><a name="l04129"></a><span class="lineno"> 4129</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83">LGSSMTP_SENT_TO</a>, </div><div class="line"><a name="l04130"></a><span class="lineno"> 4130</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14">LGSSMTP_SENT_DATA</a>, </div><div class="line"><a name="l04131"></a><span class="lineno"> 4131</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69">LGSSMTP_SENT_BODY</a>, </div><div class="line"><a name="l04132"></a><span class="lineno"> 4132</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5">LGSSMTP_SENT_QUIT</a>, </div><div class="line"><a name="l04133"></a><span class="lineno"> 4133</span>&#160;};</div><div class="ttc" id="group__smtp_html_gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d"><div class="ttname"><a href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d">LGSSMTP_CONNECTED</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4126</div></div>
<div class="ttc" id="group__smtp_html_gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69"><div class="ttname"><a href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69">LGSSMTP_SENT_BODY</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4131</div></div>
<div class="ttc" id="group__smtp_html_gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c"><div class="ttname"><a href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c">LGSSMTP_IDLE</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4124</div></div>
<div class="ttc" id="group__smtp_html_gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933"><div class="ttname"><a href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933">LGSSMTP_CONNECTING</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4125</div></div>
<div class="ttc" id="group__smtp_html_gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83"><div class="ttname"><a href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83">LGSSMTP_SENT_TO</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4129</div></div>
<div class="ttc" id="group__smtp_html_gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab"><div class="ttname"><a href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab">LGSSMTP_SENT_FROM</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4128</div></div>
<div class="ttc" id="group__smtp_html_gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5"><div class="ttname"><a href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5">LGSSMTP_SENT_QUIT</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4132</div></div>
<div class="ttc" id="group__smtp_html_gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad"><div class="ttname"><a href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad">LGSSMTP_SENT_HELO</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4127</div></div>
<div class="ttc" id="group__smtp_html_gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14"><div class="ttname"><a href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14">LGSSMTP_SENT_DATA</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:4130</div></div>
</div><!-- fragment -->
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="ga5e535e346d92a9daf00be33abf79d4eb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga5e535e346d92a9daf00be33abf79d4eb">&#9670;&nbsp;</a></span>lws_email_check()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN void lws_email_check </td>
<td>(</td>
<td class="paramtype">struct <a class="el" href="structlws__email.html">lws_email</a> *&#160;</td>
<td class="paramname"><em>email</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__smtp.html#ga5e535e346d92a9daf00be33abf79d4eb">lws_email_check()</a> - Request check for new email</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">email</td><td>struct <a class="el" href="structlws__email.html">lws_email</a> context to check</td></tr>
</table>
</dd>
</dl>
<p>Schedules a check for new emails in 1s... call this when you have queued an email for send. </p>
</div>
</div>
<a id="ga25298a5afc1074e13b2d5711a86432b2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga25298a5afc1074e13b2d5711a86432b2">&#9670;&nbsp;</a></span>lws_email_destroy()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN void lws_email_destroy </td>
<td>(</td>
<td class="paramtype">struct <a class="el" href="structlws__email.html">lws_email</a> *&#160;</td>
<td class="paramname"><em>email</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__smtp.html#ga25298a5afc1074e13b2d5711a86432b2">lws_email_destroy()</a> - stop using the struct <a class="el" href="structlws__email.html">lws_email</a></p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">email</td><td>the struct <a class="el" href="structlws__email.html">lws_email</a> context</td></tr>
</table>
</dd>
</dl>
<p>Stop sending email using email and free allocations </p>
</div>
</div>
<a id="ga77fc9b56a1bb39484844981ec375fc29"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga77fc9b56a1bb39484844981ec375fc29">&#9670;&nbsp;</a></span>lws_email_init()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_email_init </td>
<td>(</td>
<td class="paramtype">struct <a class="el" href="structlws__email.html">lws_email</a> *&#160;</td>
<td class="paramname"><em>email</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uv_loop_t *&#160;</td>
<td class="paramname"><em>loop</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>max_content</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__smtp.html#ga77fc9b56a1bb39484844981ec375fc29">lws_email_init()</a> - Initialize a struct <a class="el" href="structlws__email.html">lws_email</a></p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">email</td><td>struct <a class="el" href="structlws__email.html">lws_email</a> to init </td></tr>
<tr><td class="paramname">loop</td><td>libuv loop to use </td></tr>
<tr><td class="paramname">max_content</td><td>max email content size</td></tr>
</table>
</dd>
</dl>
<p>Prepares a struct <a class="el" href="structlws__email.html">lws_email</a> for use ending SMTP </p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

36
doc/html/group__smtp.js Normal file
View file

@ -0,0 +1,36 @@
var group__smtp =
[
[ "lws_email", "structlws__email.html", [
[ "content", "structlws__email.html#a6fff03c5a5d369a2aa3cab0c897b1bed", null ],
[ "data", "structlws__email.html#add1341456045382c183f4c763bdea6bc", null ],
[ "email_buf", "structlws__email.html#a8f34ec0643a817be67ef4276aeb7fb82", null ],
[ "email_client", "structlws__email.html#a01f31934166dc6d01e8a375012f8ad1e", null ],
[ "email_connect_req", "structlws__email.html#a5f53d4c5a1e34b0dcaa8787e2eabb1b3", null ],
[ "email_connect_started", "structlws__email.html#a9747ca85597788c2d118d287df47b7c1", null ],
[ "email_from", "structlws__email.html#af7f0ae934347d81071f63a963301f9e2", null ],
[ "email_helo", "structlws__email.html#a939e5d7ee0339a16de73bde71ab4d4d9", null ],
[ "email_smtp_ip", "structlws__email.html#a472ae23fc9fca6599e5c512bc21458d2", null ],
[ "email_to", "structlws__email.html#a6453a8b92b3de6d2c2101af3edce685e", null ],
[ "estate", "structlws__email.html#ac6115d3cbef2e8bac62cc00895bf5fd3", null ],
[ "loop", "structlws__email.html#ab5fbf121195a8e67509c78a42cfbe168", null ],
[ "max_content_size", "structlws__email.html#a7bbc1964889c984b3da723c86a210e05", null ],
[ "on_get_body", "structlws__email.html#a2aff78c8e04db243052aa91b4d87e987", null ],
[ "on_next", "structlws__email.html#ad8dc60353ee246d84dd59ec0591e9719", null ],
[ "on_sent", "structlws__email.html#a39ef6263d58eb40cca417c8697b227d8", null ],
[ "timeout_email", "structlws__email.html#a77723e2f2b940b1c879ef5e1cd88c2be", null ]
] ],
[ "lwsgs_smtp_states", "group__smtp.html#ga116be79bf44f9dc2a97f46e051fe4dc0", [
[ "LGSSMTP_IDLE", "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c", null ],
[ "LGSSMTP_CONNECTING", "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933", null ],
[ "LGSSMTP_CONNECTED", "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d", null ],
[ "LGSSMTP_SENT_HELO", "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad", null ],
[ "LGSSMTP_SENT_FROM", "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab", null ],
[ "LGSSMTP_SENT_TO", "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83", null ],
[ "LGSSMTP_SENT_DATA", "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14", null ],
[ "LGSSMTP_SENT_BODY", "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69", null ],
[ "LGSSMTP_SENT_QUIT", "group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5", null ]
] ],
[ "lws_email_check", "group__smtp.html#ga5e535e346d92a9daf00be33abf79d4eb", null ],
[ "lws_email_destroy", "group__smtp.html#ga25298a5afc1074e13b2d5711a86432b2", null ],
[ "lws_email_init", "group__smtp.html#ga77fc9b56a1bb39484844981ec375fc29", null ]
];

View file

@ -0,0 +1,193 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Socket adoption helpers</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__sock-adopt.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Socket adoption helpers</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gabe71b7462afb21c767bdc67334f305af"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN struct lws *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sock-adopt.html#gabe71b7462afb21c767bdc67334f305af">lws_adopt_socket</a> (struct lws_context *context, lws_sockfd_type accept_fd)</td></tr>
<tr class="separator:gabe71b7462afb21c767bdc67334f305af"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab2d045df0f81afe00891aaed312d552b"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN struct lws *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sock-adopt.html#gab2d045df0f81afe00891aaed312d552b">lws_adopt_socket_readbuf</a> (struct lws_context *context, lws_sockfd_type accept_fd, const char *readbuf, size_t len)</td></tr>
<tr class="separator:gab2d045df0f81afe00891aaed312d552b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>Socket adoption helpers</h2>
<p>When integrating with an external app with its own event loop, these can be used to accept connections from someone else's listening socket.</p>
<p>When using lws own event loop, these are not needed. </p>
<h2 class="groupheader">Function Documentation</h2>
<a id="gabe71b7462afb21c767bdc67334f305af"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gabe71b7462afb21c767bdc67334f305af">&#9670;&nbsp;</a></span>lws_adopt_socket()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN struct lws* lws_adopt_socket </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>context</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">lws_sockfd_type&#160;</td>
<td class="paramname"><em>accept_fd</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__sock-adopt.html#gabe71b7462afb21c767bdc67334f305af">lws_adopt_socket()</a> - adopt foreign socket as if listen socket accepted it </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>lws context </td></tr>
<tr><td class="paramname">accept_fd</td><td>fd of already-accepted socket to adopt</td></tr>
</table>
</dd>
</dl>
<p>Either returns new wsi bound to accept_fd, or closes accept_fd and returns NULL, having cleaned up any new wsi pieces.</p>
<p>LWS adopts the socket in http serving mode, it's ready to accept an upgrade to ws or just serve http. </p>
</div>
</div>
<a id="gab2d045df0f81afe00891aaed312d552b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gab2d045df0f81afe00891aaed312d552b">&#9670;&nbsp;</a></span>lws_adopt_socket_readbuf()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN struct lws* lws_adopt_socket_readbuf </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>context</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">lws_sockfd_type&#160;</td>
<td class="paramname"><em>accept_fd</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>readbuf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__sock-adopt.html#gab2d045df0f81afe00891aaed312d552b">lws_adopt_socket_readbuf()</a> - adopt foreign socket and first rx as if listen socket accepted it </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>lws context </td></tr>
<tr><td class="paramname">accept_fd</td><td>fd of already-accepted socket to adopt </td></tr>
<tr><td class="paramname">readbuf</td><td>NULL or pointer to data that must be drained before reading from accept_fd </td></tr>
<tr><td class="paramname">len</td><td>The length of the data held at</td></tr>
<tr><td class="paramname">readbuf</td><td>Either returns new wsi bound to accept_fd, or closes accept_fd and returns NULL, having cleaned up any new wsi pieces.</td></tr>
</table>
</dd>
</dl>
<p>LWS adopts the socket in http serving mode, it's ready to accept an upgrade to ws or just serve http.</p>
<p>If your external code did not already read from the socket, you can use <a class="el" href="group__sock-adopt.html#gabe71b7462afb21c767bdc67334f305af">lws_adopt_socket()</a> instead.</p>
<p>This api is guaranteed to use the data at</p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">readbuf</td><td>first, before reading from the socket.</td></tr>
</table>
</dd>
</dl>
<p>readbuf is limited to the size of the ah rx buf, currently 2048 bytes. </p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,5 @@
var group__sock_adopt =
[
[ "lws_adopt_socket", "group__sock-adopt.html#gabe71b7462afb21c767bdc67334f305af", null ],
[ "lws_adopt_socket_readbuf", "group__sock-adopt.html#gab2d045df0f81afe00891aaed312d552b", null ]
];

View file

@ -0,0 +1,166 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Connection timeouts</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__timeout.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Connection timeouts</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ga2c0aa4b9c3c55bae7b35cbfac3246c87"><td class="memItemLeft" align="right" valign="top"><a id="ga2c0aa4b9c3c55bae7b35cbfac3246c87"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>pending_timeout</b> { <br />
&#160;&#160;<b>NO_PENDING_TIMEOUT</b> = 0,
<b>PENDING_TIMEOUT_AWAITING_PROXY_RESPONSE</b> = 1,
<b>PENDING_TIMEOUT_AWAITING_CONNECT_RESPONSE</b> = 2,
<b>PENDING_TIMEOUT_ESTABLISH_WITH_SERVER</b> = 3,
<br />
&#160;&#160;<b>PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE</b> = 4,
<b>PENDING_TIMEOUT_AWAITING_PING</b> = 5,
<b>PENDING_TIMEOUT_CLOSE_ACK</b> = 6,
<b>PENDING_TIMEOUT_AWAITING_EXTENSION_CONNECT_RESPONSE</b> = 7,
<br />
&#160;&#160;<b>PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE</b> = 8,
<b>PENDING_TIMEOUT_SSL_ACCEPT</b> = 9,
<b>PENDING_TIMEOUT_HTTP_CONTENT</b> = 10,
<b>PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND</b> = 11,
<br />
&#160;&#160;<b>PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE</b> = 12,
<b>PENDING_TIMEOUT_SHUTDOWN_FLUSH</b> = 13,
<b>PENDING_TIMEOUT_CGI</b> = 14,
<b>PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE</b> = 15,
<br />
&#160;&#160;<b>PENDING_TIMEOUT_WS_PONG_CHECK_SEND_PING</b> = 16,
<b>PENDING_TIMEOUT_WS_PONG_CHECK_GET_PONG</b> = 17,
<b>PENDING_TIMEOUT_CLIENT_ISSUE_PAYLOAD</b> = 18
<br />
}</td></tr>
<tr class="separator:ga2c0aa4b9c3c55bae7b35cbfac3246c87"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gaced9f9237f6172fed9f730a2af51345a"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__timeout.html#gaced9f9237f6172fed9f730a2af51345a">lws_set_timeout</a> (struct lws *wsi, enum pending_timeout reason, int secs)</td></tr>
<tr class="separator:gaced9f9237f6172fed9f730a2af51345a"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>APIs related to setting connection timeouts </p>
<h2 class="groupheader">Function Documentation</h2>
<a id="gaced9f9237f6172fed9f730a2af51345a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaced9f9237f6172fed9f730a2af51345a">&#9670;&nbsp;</a></span>lws_set_timeout()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN void lws_set_timeout </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">enum pending_timeout&#160;</td>
<td class="paramname"><em>reason</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>secs</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__timeout.html#gaced9f9237f6172fed9f730a2af51345a">lws_set_timeout()</a> - marks the wsi as subject to a timeout</p>
<p>You will not need this unless you are doing something special</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>Websocket connection instance </td></tr>
<tr><td class="paramname">reason</td><td>timeout reason </td></tr>
<tr><td class="paramname">secs</td><td>how many seconds </td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,4 @@
var group__timeout =
[
[ "lws_set_timeout", "group__timeout.html#gaced9f9237f6172fed9f730a2af51345a", null ]
];

View file

@ -0,0 +1,185 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Urlencode and Urldecode</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="libwebsockets.org-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libwebsockets
</div>
<div id="projectbrief">Lightweight C library for HTML5 websockets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__urlendec.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Urlencode and Urldecode<div class="ingroups"><a class="el" href="group__http.html">HTTP</a></div></div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gabc2888476e50e001c875c1a8abf455b7"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__urlendec.html#gabc2888476e50e001c875c1a8abf455b7">lws_urlencode</a> (char *escaped, const char *string, int len)</td></tr>
<tr class="separator:gabc2888476e50e001c875c1a8abf455b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa373a9c16acdd96c395af61ab915ece3"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__urlendec.html#gaa373a9c16acdd96c395af61ab915ece3">lws_urldecode</a> (char *string, const char *escaped, int len)</td></tr>
<tr class="separator:gaa373a9c16acdd96c395af61ab915ece3"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>HTML chunked Substitution</h2>
<p>APIs for receiving chunks of text, replacing a set of variable names via a callback, and then prepending and appending HTML chunked encoding headers. </p>
<h2 class="groupheader">Function Documentation</h2>
<a id="gaa373a9c16acdd96c395af61ab915ece3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaa373a9c16acdd96c395af61ab915ece3">&#9670;&nbsp;</a></span>lws_urldecode()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_urldecode </td>
<td>(</td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>string</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>escaped</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__urlendec.html#gaa373a9c16acdd96c395af61ab915ece3">lws_urldecode()</a> - like strncpy but with urldecoding</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">string</td><td>output buffer </td></tr>
<tr><td class="paramname">escaped</td><td>input buffer ('\0' terminated) </td></tr>
<tr><td class="paramname">len</td><td>output buffer max length</td></tr>
</table>
</dd>
</dl>
<p>This is only useful for '\0' terminated strings</p>
<p>Since urldecoding only shrinks the output string, it is possible to do it in-place, ie, string == escaped </p>
</div>
</div>
<a id="gabc2888476e50e001c875c1a8abf455b7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gabc2888476e50e001c875c1a8abf455b7">&#9670;&nbsp;</a></span>lws_urlencode()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN const char* lws_urlencode </td>
<td>(</td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>escaped</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>string</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__urlendec.html#gabc2888476e50e001c875c1a8abf455b7">lws_urlencode()</a> - like strncpy but with urlencoding</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">escaped</td><td>output buffer </td></tr>
<tr><td class="paramname">string</td><td>input buffer ('/0' terminated) </td></tr>
<tr><td class="paramname">len</td><td>output buffer max length</td></tr>
</table>
</dd>
</dl>
<p>Because urlencoding expands the output string, it's not possible to do it in-place, ie, with escaped == string </p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show more