Compare commits

...
Sign in to create a new pull request.

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
155 changed files with 4738 additions and 3871 deletions

1
.gitignore vendored
View file

@ -37,3 +37,4 @@ config.sub
ar-lib
libwebsockets.pc
build/
*.swp

View file

@ -10,11 +10,18 @@ set(PACKAGE "libwebsockets")
set(CPACK_PACKAGE_NAME "${PACKAGE}")
set(CPACK_PACKAGE_VERSION_MAJOR "2")
set(CPACK_PACKAGE_VERSION_MINOR "1")
set(CPACK_PACKAGE_VERSION_PATCH "0")
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 "9")
if(NOT CPACK_GENERATOR)
if(UNIX)
set(CPACK_GENERATOR "TGZ")
else()
set(CPACK_GENERATOR "ZIP")
endif()
endif()
set(CPACK_SOURCE_GENERATOR "TGZ")
set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}")
set(VERSION "${CPACK_PACKAGE_VERSION}")
@ -220,8 +227,8 @@ set( CACHE PATH "Path to the libev library")
set(LWS_LIBEV_INCLUDE_DIRS CACHE PATH "Path to the libev include directory")
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 libuv library")
set(LWS_SQLITE3_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")
if (NOT LWS_WITH_SSL)
@ -914,7 +921,7 @@ endif()
if (LWS_WITH_HTTP_PROXY)
find_library(LIBHUBBUB_LIBRARIES NAMES libhubbub)
find_library(LIBHUBBUB_LIBRARIES NAMES hubbub)
list(APPEND LIB_LIST ${LIBHUBBUB_LIBRARIES} )
endif()
@ -941,6 +948,8 @@ 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(X509_VERIFY_PARAM_set1_host LWS_HAVE_X509_VERIFY_PARAM_set1_host)
CHECK_FUNCTION_EXISTS(TLS_client_method LWS_HAVE_TLS_CLIENT_METHOD)
CHECK_FUNCTION_EXISTS(TLSv1_2_client_method LWS_HAVE_TLSV1_2_CLIENT_METHOD)
set(CMAKE_REQUIRED_LIBRARIES ${temp})
# Generate the lws_config.h that includes all the public compilation settings.
configure_file(
@ -1040,7 +1049,9 @@ if (NOT LWS_WITHOUT_TESTAPPS)
if (UNIX AND LWS_WITH_PLUGINS)
set(CMAKE_C_FLAGS "-fPIC ${CMAKE_C_FLAGS}")
target_link_libraries(websockets dl)
if(NOT(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD"))
target_link_libraries(websockets dl)
endif()
endif()
if (NOT LWS_WITHOUT_SERVER)
@ -1634,7 +1645,7 @@ message("---------------------------------------------------------------------")
# These will be available to parent projects including libwebsockets using add_subdirectory()
set(LIBWEBSOCKETS_LIBRARIES ${LWS_LIBRARIES} CACHE STRING "Libwebsocket libraries")
if (LWS_WITH_STATIC)
set(LIBWEBSOCKETS_LIBRARIES_STATIC websocket CACHE STRING "Libwebsocket static library")
set(LIBWEBSOCKETS_LIBRARIES_STATIC websockets CACHE STRING "Libwebsocket static library")
endif()
if (LWS_WITH_SHARED)
set(LIBWEBSOCKETS_LIBRARIES_SHARED websockets_shared CACHE STRING "Libwebsocket shared library")

16
LICENSE
View file

@ -1,7 +1,13 @@
Libwebsockets and included programs are provided under the terms of the GNU
Library General Public License (LGPL) 2.1, with the following exceptions:
1) Static linking of programs with the libwebsockets library does not
1) Any reference, whether in these modifications or in the GNU
Library General Public License 2.1, to this License, these terms, the
GNU Lesser Public License, GNU Library General Public License, LGPL, or
any similar reference shall refer to the GNU Library General Public
License 2.1 as modified by these paragraphs 1) through 4).
2) Static linking of programs with the libwebsockets library does not
constitute a derivative work and does not require the author to provide
source code for the program, use the shared libwebsockets libraries, or
link their program against a user-supplied version of libwebsockets.
@ -10,7 +16,7 @@ If you link the program to a modified version of libwebsockets, then the
changes to libwebsockets must be provided under the terms of the LGPL in
sections 1, 2, and 4.
2) You do not have to provide a copy of the libwebsockets license with
3) You do not have to provide a copy of the libwebsockets license with
programs that are linked to the libwebsockets library, nor do you have to
identify the libwebsockets license in your program or documentation as
required by section 6 of the LGPL.
@ -22,7 +28,7 @@ satisfy this requirement:
"[program] is based in part on the work of the libwebsockets project
(https://libwebsockets.org)"
3) Some sources included have their own, more liberal licenses, or options
4) Some sources included have their own, more liberal licenses, or options
to get original sources with the liberal terms.
Original liberal license retained
@ -41,7 +47,9 @@ Public Domain (CC-zero) to simplify reuse
- test-server/*.c
- test-server/*.h
- lwsws/*
------ end of exceptions
GNU LESSER GENERAL PUBLIC LICENSE
Version 2.1, February 1999

View file

@ -93,6 +93,14 @@ To get it to build on latest openssl (2016-04-10) it needed this approach
cmake .. -DLWS_WITH_HTTP2=1 -DLWS_OPENSSL_INCLUDE_DIRS=/usr/local/include/openssl -DLWS_OPENSSL_LIBRARIES="/usr/local/lib64/libssl.so;/usr/local/lib64/libcrypto.so"
```
Mac users have reported
```
$ export OPENSSL_ROOT_DIR=/usr/local/Cellar/openssl/1.0.2k; cmake ..; make -j4
```
worked for them when using "homebrew" OpenSSL
**NOTE5**:
To build with debug info and _DEBUG for lower priority debug messages
compiled in, use
@ -395,7 +403,7 @@ The commandline to configure for cross with this would look like
```
$ cmake .. -DCMAKE_INSTALL_PREFIX:PATH=/usr \
-DCMAKE_TOOLCHAIN_FILE=../cross-arm-linux-gnueabihf.cmake \
-DWITHOUT_EXTENSIONS=1 -DWITH_SSL=0
-DLWS_WITHOUT_EXTENSIONS=1 -DLWS_WITH_SSL=0
```
The example shows how to build with no external cross lib dependencies, you
need to provide the cross libraries otherwise.

354
changelog
View file

@ -1,6 +1,360 @@
Changelog
---------
v2.1.1
======
commit e2fcf47f0350a7f7beba64e96191b02acb754406
Author: Silas Parker <skyhisi@user.github.invalid.com>
Date: Tue Feb 14 23:25:15 2017 +0800
fix close packet index coding
https://github.com/warmcat/libwebsockets/issues/792
commit b95e7fe4666105d474c87a7114cfefac4338bbbb
Author: Andy Green <andy@warmcat.com>
Date: Sun Feb 5 22:46:39 2017 +0800
gcc format strings: http2
commit 0b7ca30ed154861558065797e7562a30a340daa7
Author: Andy Green <andy@warmcat.com>
Date: Sun Feb 5 22:13:16 2017 +0800
gcc- format strings: debug and extra plugins
commit b03b17fd0ba2c967be213cf465301b57acf03f43
Author: Martin Milata <martin@martinmilata.cz>
Date: Sun Feb 5 22:12:57 2017 +0800
Subject: gcc format strings: Make GCC check format strings, fix found problems
commit a238984d1b6e3422ff8dada49d45c4a130bbd48e
Author: Sven Hoffmann <sven@fredda.eu>
Date: Sun Feb 5 22:12:33 2017 +0800
post processing: fix problem where hex cant straddle block correctly
commit 109d66c365a39b3ecdca1a5bccd722820e7bdd6a
Author: Tobias <tobias@codeatelier.com>
Date: Tue Jan 17 06:28:27 2017 +0800
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.
commit da6f03b423d33f8f95fe939d8d5150ceddb43b8a
Author: Andy Green <andy@warmcat.com>
Date: Tue Jan 10 09:16:49 2017 +0800
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
ssl-correct-option-clear-availability-version
https://github.com/warmcat/libwebsockets/issues/744
commit 82836590471c3949fe3a36fbcd1c52ceaf82fd0f
Author: Andy Green <andy@warmcat.com>
Date: Sat Jan 7 10:24:50 2017 +0800
polarssl: turn off missing tlsext
commit c447e1f9f3b39fadc1822aa2c7100c02934a5844
Author: Andy Green <andy@warmcat.com>
Date: Sat Jan 7 10:24:42 2017 +0800
openssl: deal with missing OPENSSL_NO_TLSEXT on ancient versions
commit 9706dd23a232c715a6077059dbe83caff390f5a9
Author: Denis Osvald <denis.osvald@sartura.hr>
Date: Mon Jan 2 17:33:26 2017 +0100
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>
commit 837e7fdd1422438d7232ee0bb829b98aba0229c3
Author: namowen <namowen@github.invalid.com>
Date: Sat Dec 24 08:03:04 2016 +0800
lws_plat_service_tsi: accessing context before checking for NULL
https://github.com/warmcat/libwebsockets/issues/730
commit d2cb05f1f6807d120e3b9098096ad23862137a27
Author: Namowen <namowen@github.invalid.com>
Date: Fri Dec 16 07:05:29 2016 +0800
echo: fix debug build
https://github.com/warmcat/libwebsockets/issues/716#issuecomment-267377856
commit d170ed06234a7ad055c2a8c82497a13dd1706685
Author: Andy Green <andy@warmcat.com>
Date: Thu Dec 15 13:28:48 2016 +0800
test-client: fix broken protocol names
commit 39807c1d10a6358af7628207021d0d93207d706e
Author: Andy Green <andy@warmcat.com>
Date: Thu Dec 15 13:27:13 2016 +0800
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>
v2.1.0
======

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,24 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
</ul>
</div>
<!-- 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">
@ -111,7 +102,7 @@ $(document).ready(function(){initNavTree('annotated.html','');});
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 246 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 229 B

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,24 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li class="current"><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
</ul>
</div>
<!-- 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">
@ -73,7 +64,7 @@ $(document).ready(function(){initNavTree('classes.html','');});
<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>
<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>
@ -86,7 +77,7 @@ $(document).ready(function(){initNavTree('classes.html','');});
<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 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 -->
@ -94,7 +85,7 @@ $(document).ready(function(){initNavTree('classes.html','');});
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,24 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
</ul>
</div>
<!-- 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">
@ -81,47 +72,47 @@ 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_conn_map">
<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 class="anchor" id="afe73e53da2070f659ad6e7fd14878c7e"></a>
<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 class="anchor" id="aef530971372f55e862f2e09bc98f1029"></a>
<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 class="anchor" id="aba42bdd763a36c3a331b62410969b6ba"></a>
<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 class="anchor" id="a4fb477fad697ce1faf8ec7a884ea6c6b"></a>
<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 class="anchor" id="a49f87612c6a3098cd1587f8382b8c85b"></a>
<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 class="anchor" id="aad7d2406618e560114650a91c729a596"></a>
<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 class="anchor" id="accc57581269c554291dac840ed135231"></a>
<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 class="anchor" id="a5cad031b6b779da42b37f4007cae541b"></a>
<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 class="anchor" id="a7e504bd449ffb51c7ab1d2126613ebc3"></a>
<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 class="anchor" id="a8e1fdd467b7f66fc438dc70ae979b938"></a>
<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 class="anchor" id="a5226010afdf5421f279454e5cbb282a4"></a>
<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>
@ -136,7 +127,7 @@ char&#160;</td><td class="memItemRight" valign="bottom"><b>awaiting_on_writeable
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,24 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
</ul>
</div>
<!-- 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">
@ -82,7 +73,7 @@ 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_conn_listener_map">
<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>
@ -94,7 +85,7 @@ Public Member Functions</h2></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 class="anchor" id="aa7076f8965bb9df268798fd9a0283374"></a>
<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">
@ -110,7 +101,9 @@ Protected Member Functions</h2></td></tr>
<tr class="separator:aab3c7bf550a8f15d20f1e093125c2e60"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Member Function Documentation</h2>
<a class="anchor" id="aab3c7bf550a8f15d20f1e093125c2e60"></a>
<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">
@ -135,7 +128,9 @@ Protected Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a271ac4f8ad5770b3bc96cce5b265b72c"></a>
<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">
@ -170,7 +165,9 @@ Protected Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ab432a456c3a961ec562e06141897806b"></a>
<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">
@ -205,7 +202,9 @@ Protected Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ab3bc839797ba14554ac70ad09fd155c7"></a>
<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">
@ -230,7 +229,9 @@ Protected Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a3c19c314f2ea2b758407b4041e4c4010"></a>
<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">
@ -258,7 +259,7 @@ Protected Member Functions</h2></td></tr>
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -80,7 +79,7 @@ $(document).ready(function(){initNavTree('deprecated.html','');});
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,22 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li class="current"><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
<!-- 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">
@ -85,7 +78,7 @@ Files</h2></td></tr>
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,22 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li class="current"><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
<!-- 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">
@ -71,10 +64,6 @@ $(document).ready(function(){initNavTree('dir_e8731c315d086bdbd43ee7d72e0ed36b.h
<div class="title">doc-assets 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>
</table>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
@ -83,7 +72,7 @@ Files</h2></td></tr>
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -1,9 +1,13 @@
/* The standard CSS for doxygen 1.8.11 */
/* The standard CSS for doxygen 1.8.13 */
body, table, div, p, dl {
font: 400 14px/22px Roboto,sans-serif;
}
p.reference, p.definition {
font: 400 14px/22px Roboto,sans-serif;
}
/* @group Heading Levels */
h1.groupheader {
@ -173,7 +177,7 @@ pre.fragment {
}
div.fragment {
padding: 4px 6px;
padding: 0px;
margin: 4px 8px 4px 2px;
background-color: #FBFCFD;
border: 1px solid #C4CFE5;
@ -232,6 +236,15 @@ span.lineno a:hover {
background-color: #C8C8C8;
}
.lineno {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
div.ah, span.ah {
background-color: black;
font-weight: bold;
@ -501,6 +514,29 @@ table.memberdecls {
/* Styles for detailed member documentation */
.memtitle {
padding: 8px;
border-top: 1px solid #A8B8D9;
border-left: 1px solid #A8B8D9;
border-right: 1px solid #A8B8D9;
border-top-right-radius: 4px;
border-top-left-radius: 4px;
margin-bottom: -1px;
background-image: url('nav_f.png');
background-repeat: repeat-x;
background-color: #E2E8F2;
line-height: 1.25;
font-weight: 300;
float:left;
}
.permalink
{
font-size: 65%;
display: inline-block;
vertical-align: middle;
}
.memtemplate {
font-size: 80%;
color: #4665A2;
@ -539,7 +575,7 @@ table.memberdecls {
}
.memname {
font-weight: bold;
font-weight: 400;
margin-left: 6px;
}
@ -555,24 +591,24 @@ table.memberdecls {
color: #253555;
font-weight: bold;
text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
background-image:url('nav_f.png');
background-repeat:repeat-x;
background-color: #E2E8F2;
background-color: #DFE5F1;
/* opera specific markup */
box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
border-top-right-radius: 4px;
border-top-left-radius: 4px;
/* firefox specific markup */
-moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
-moz-border-radius-topright: 4px;
-moz-border-radius-topleft: 4px;
/* webkit specific markup */
-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-webkit-border-top-right-radius: 4px;
-webkit-border-top-left-radius: 4px;
}
.overload {
font-family: "courier new",courier,monospace;
font-size: 65%;
}
.memdoc, dl.reflist dd {
border-bottom: 1px solid #A8B8D9;
border-left: 1px solid #A8B8D9;
@ -914,6 +950,7 @@ table.fieldtable {
padding-bottom: 4px;
padding-top: 5px;
text-align:left;
font-weight: 400;
-moz-border-radius-topleft: 4px;
-moz-border-radius-topright: 4px;
-webkit-border-top-left-radius: 4px;
@ -1178,6 +1215,11 @@ dl.section dd {
text-align: center;
}
.plantumlgraph
{
text-align: center;
}
.diagraph
{
text-align: center;
@ -1473,3 +1515,82 @@ tr.heading h2 {
}
}
/* @group Markdown */
/*
table.markdownTable {
border-collapse:collapse;
margin-top: 4px;
margin-bottom: 4px;
}
table.markdownTable td, table.markdownTable th {
border: 1px solid #2D4068;
padding: 3px 7px 2px;
}
table.markdownTableHead tr {
}
table.markdownTableBodyLeft td, table.markdownTable th {
border: 1px solid #2D4068;
padding: 3px 7px 2px;
}
th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone {
background-color: #374F7F;
color: #FFFFFF;
font-size: 110%;
padding-bottom: 4px;
padding-top: 5px;
}
th.markdownTableHeadLeft {
text-align: left
}
th.markdownTableHeadRight {
text-align: right
}
th.markdownTableHeadCenter {
text-align: center
}
*/
table.markdownTable {
border-collapse:collapse;
margin-top: 4px;
margin-bottom: 4px;
}
table.markdownTable td, table.markdownTable th {
border: 1px solid #2D4068;
padding: 3px 7px 2px;
}
table.markdownTable tr {
}
th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone {
background-color: #374F7F;
color: #FFFFFF;
font-size: 110%;
padding-bottom: 4px;
padding-top: 5px;
}
th.markdownTableHeadLeft, td.markdownTableBodyLeft {
text-align: left
}
th.markdownTableHeadRight, td.markdownTableBodyRight {
text-align: right
}
th.markdownTableHeadCenter, td.markdownTableBodyCenter {
text-align: center
}
/* @end */

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,22 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li class="current"><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
<!-- 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">
@ -84,7 +77,7 @@ $(document).ready(function(){initNavTree('files.html','');});
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,57 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
</ul>
</div>
<div id="navrow3" class="tabs2">
<ul class="tablist">
<li class="current"><a href="functions.html"><span>All</span></a></li>
<li><a href="functions_func.html"><span>Functions</span></a></li>
<li><a href="functions_vars.html"><span>Variables</span></a></li>
</ul>
</div>
<div id="navrow4" class="tabs3">
<ul class="tablist">
<li><a href="#index__"><span>_</span></a></li>
<li><a href="#index_a"><span>a</span></a></li>
<li><a href="#index_b"><span>b</span></a></li>
<li><a href="#index_c"><span>c</span></a></li>
<li><a href="#index_d"><span>d</span></a></li>
<li><a href="#index_e"><span>e</span></a></li>
<li><a href="#index_f"><span>f</span></a></li>
<li><a href="#index_g"><span>g</span></a></li>
<li><a href="#index_h"><span>h</span></a></li>
<li><a href="#index_i"><span>i</span></a></li>
<li><a href="#index_k"><span>k</span></a></li>
<li><a href="#index_l"><span>l</span></a></li>
<li><a href="#index_m"><span>m</span></a></li>
<li><a href="#index_n"><span>n</span></a></li>
<li><a href="#index_o"><span>o</span></a></li>
<li><a href="#index_p"><span>p</span></a></li>
<li><a href="#index_r"><span>r</span></a></li>
<li><a href="#index_s"><span>s</span></a></li>
<li><a href="#index_t"><span>t</span></a></li>
<li><a href="#index_u"><span>u</span></a></li>
<li><a href="#index_v"><span>v</span></a></li>
<li class="current"><a href="#index_w"><span>w</span></a></li>
</ul>
</div>
<!-- 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">
@ -104,7 +62,7 @@ $(document).ready(function(){initNavTree('functions.html','');});
<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 class="anchor" id="index__"></a>- _ -</h3><ul>
<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>
@ -112,7 +70,7 @@ $(document).ready(function(){initNavTree('functions.html','');});
</ul>
<h3><a class="anchor" id="index_a"></a>- a -</h3><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>
@ -125,14 +83,14 @@ $(document).ready(function(){initNavTree('functions.html','');});
</ul>
<h3><a class="anchor" id="index_b"></a>- b -</h3><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 class="anchor" id="index_c"></a>- c -</h3><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>
@ -197,7 +155,7 @@ $(document).ready(function(){initNavTree('functions.html','');});
</ul>
<h3><a class="anchor" id="index_d"></a>- d -</h3><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>
@ -209,7 +167,7 @@ $(document).ready(function(){initNavTree('functions.html','');});
</ul>
<h3><a class="anchor" id="index_e"></a>- e -</h3><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>
@ -262,7 +220,7 @@ $(document).ready(function(){initNavTree('functions.html','');});
</ul>
<h3><a class="anchor" id="index_f"></a>- f -</h3><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>
@ -277,14 +235,14 @@ $(document).ready(function(){initNavTree('functions.html','');});
</ul>
<h3><a class="anchor" id="index_g"></a>- g -</h3><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 class="anchor" id="index_h"></a>- h -</h3><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>
@ -303,7 +261,7 @@ $(document).ready(function(){initNavTree('functions.html','');});
</ul>
<h3><a class="anchor" id="index_i"></a>- i -</h3><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>
@ -323,7 +281,7 @@ $(document).ready(function(){initNavTree('functions.html','');});
</ul>
<h3><a class="anchor" id="index_k"></a>- k -</h3><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>
@ -342,7 +300,7 @@ $(document).ready(function(){initNavTree('functions.html','');});
</ul>
<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
<h3><a id="index_l"></a>- l -</h3><ul>
<li>l
: <a class="el" href="structlws__plugin.html#a4ef37a43653715b6c69cbf8a7be747f4">lws_plugin</a>
</li>
@ -366,7 +324,7 @@ $(document).ready(function(){initNavTree('functions.html','');});
</ul>
<h3><a class="anchor" id="index_m"></a>- m -</h3><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>
@ -403,7 +361,7 @@ $(document).ready(function(){initNavTree('functions.html','');});
</ul>
<h3><a class="anchor" id="index_n"></a>- n -</h3><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>
@ -417,7 +375,7 @@ $(document).ready(function(){initNavTree('functions.html','');});
</ul>
<h3><a class="anchor" id="index_o"></a>- o -</h3><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>
@ -462,7 +420,7 @@ $(document).ready(function(){initNavTree('functions.html','');});
</ul>
<h3><a class="anchor" id="index_p"></a>- p -</h3><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>
@ -511,7 +469,7 @@ $(document).ready(function(){initNavTree('functions.html','');});
</ul>
<h3><a class="anchor" id="index_r"></a>- r -</h3><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>
@ -528,7 +486,7 @@ $(document).ready(function(){initNavTree('functions.html','');});
</ul>
<h3><a class="anchor" id="index_s"></a>- s -</h3><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>
@ -576,7 +534,7 @@ $(document).ready(function(){initNavTree('functions.html','');});
</ul>
<h3><a class="anchor" id="index_t"></a>- t -</h3><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>
@ -601,7 +559,7 @@ $(document).ready(function(){initNavTree('functions.html','');});
</ul>
<h3><a class="anchor" id="index_u"></a>- u -</h3><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>
@ -625,7 +583,7 @@ $(document).ready(function(){initNavTree('functions.html','');});
</ul>
<h3><a class="anchor" id="index_v"></a>- v -</h3><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>
@ -641,7 +599,7 @@ $(document).ready(function(){initNavTree('functions.html','');});
</ul>
<h3><a class="anchor" id="index_w"></a>- w -</h3><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>
@ -656,7 +614,7 @@ $(document).ready(function(){initNavTree('functions.html','');});
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,31 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
</ul>
</div>
<div id="navrow3" class="tabs2">
<ul class="tablist">
<li><a href="functions.html"><span>All</span></a></li>
<li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
<li><a href="functions_vars.html"><span>Variables</span></a></li>
</ul>
</div>
<!-- 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">
@ -100,7 +84,7 @@ $(document).ready(function(){initNavTree('functions_func.html','');});
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,57 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
</ul>
</div>
<div id="navrow3" class="tabs2">
<ul class="tablist">
<li><a href="functions.html"><span>All</span></a></li>
<li><a href="functions_func.html"><span>Functions</span></a></li>
<li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
</ul>
</div>
<div id="navrow4" class="tabs3">
<ul class="tablist">
<li><a href="#index__"><span>_</span></a></li>
<li><a href="#index_a"><span>a</span></a></li>
<li><a href="#index_b"><span>b</span></a></li>
<li><a href="#index_c"><span>c</span></a></li>
<li><a href="#index_d"><span>d</span></a></li>
<li><a href="#index_e"><span>e</span></a></li>
<li><a href="#index_f"><span>f</span></a></li>
<li><a href="#index_g"><span>g</span></a></li>
<li><a href="#index_h"><span>h</span></a></li>
<li><a href="#index_i"><span>i</span></a></li>
<li><a href="#index_k"><span>k</span></a></li>
<li><a href="#index_l"><span>l</span></a></li>
<li><a href="#index_m"><span>m</span></a></li>
<li><a href="#index_n"><span>n</span></a></li>
<li><a href="#index_o"><span>o</span></a></li>
<li><a href="#index_p"><span>p</span></a></li>
<li><a href="#index_r"><span>r</span></a></li>
<li><a href="#index_s"><span>s</span></a></li>
<li><a href="#index_t"><span>t</span></a></li>
<li><a href="#index_u"><span>u</span></a></li>
<li><a href="#index_v"><span>v</span></a></li>
<li class="current"><a href="#index_w"><span>w</span></a></li>
</ul>
</div>
<!-- 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">
@ -104,7 +62,7 @@ $(document).ready(function(){initNavTree('functions_vars.html','');});
<div class="contents">
&#160;
<h3><a class="anchor" id="index__"></a>- _ -</h3><ul>
<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>
@ -112,7 +70,7 @@ $(document).ready(function(){initNavTree('functions_vars.html','');});
</ul>
<h3><a class="anchor" id="index_a"></a>- a -</h3><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>
@ -125,14 +83,14 @@ $(document).ready(function(){initNavTree('functions_vars.html','');});
</ul>
<h3><a class="anchor" id="index_b"></a>- b -</h3><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 class="anchor" id="index_c"></a>- c -</h3><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>
@ -197,7 +155,7 @@ $(document).ready(function(){initNavTree('functions_vars.html','');});
</ul>
<h3><a class="anchor" id="index_d"></a>- d -</h3><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>
@ -209,7 +167,7 @@ $(document).ready(function(){initNavTree('functions_vars.html','');});
</ul>
<h3><a class="anchor" id="index_e"></a>- e -</h3><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>
@ -262,7 +220,7 @@ $(document).ready(function(){initNavTree('functions_vars.html','');});
</ul>
<h3><a class="anchor" id="index_f"></a>- f -</h3><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>
@ -277,14 +235,14 @@ $(document).ready(function(){initNavTree('functions_vars.html','');});
</ul>
<h3><a class="anchor" id="index_g"></a>- g -</h3><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 class="anchor" id="index_h"></a>- h -</h3><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>
@ -303,7 +261,7 @@ $(document).ready(function(){initNavTree('functions_vars.html','');});
</ul>
<h3><a class="anchor" id="index_i"></a>- i -</h3><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>
@ -323,7 +281,7 @@ $(document).ready(function(){initNavTree('functions_vars.html','');});
</ul>
<h3><a class="anchor" id="index_k"></a>- k -</h3><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>
@ -342,7 +300,7 @@ $(document).ready(function(){initNavTree('functions_vars.html','');});
</ul>
<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
<h3><a id="index_l"></a>- l -</h3><ul>
<li>l
: <a class="el" href="structlws__plugin.html#a4ef37a43653715b6c69cbf8a7be747f4">lws_plugin</a>
</li>
@ -366,7 +324,7 @@ $(document).ready(function(){initNavTree('functions_vars.html','');});
</ul>
<h3><a class="anchor" id="index_m"></a>- m -</h3><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>
@ -403,7 +361,7 @@ $(document).ready(function(){initNavTree('functions_vars.html','');});
</ul>
<h3><a class="anchor" id="index_n"></a>- n -</h3><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>
@ -417,7 +375,7 @@ $(document).ready(function(){initNavTree('functions_vars.html','');});
</ul>
<h3><a class="anchor" id="index_o"></a>- o -</h3><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>
@ -450,7 +408,7 @@ $(document).ready(function(){initNavTree('functions_vars.html','');});
</ul>
<h3><a class="anchor" id="index_p"></a>- p -</h3><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>
@ -499,7 +457,7 @@ $(document).ready(function(){initNavTree('functions_vars.html','');});
</ul>
<h3><a class="anchor" id="index_r"></a>- r -</h3><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>
@ -516,7 +474,7 @@ $(document).ready(function(){initNavTree('functions_vars.html','');});
</ul>
<h3><a class="anchor" id="index_s"></a>- s -</h3><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>
@ -563,7 +521,7 @@ $(document).ready(function(){initNavTree('functions_vars.html','');});
</ul>
<h3><a class="anchor" id="index_t"></a>- t -</h3><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>
@ -588,7 +546,7 @@ $(document).ready(function(){initNavTree('functions_vars.html','');});
</ul>
<h3><a class="anchor" id="index_u"></a>- u -</h3><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>
@ -612,7 +570,7 @@ $(document).ready(function(){initNavTree('functions_vars.html','');});
</ul>
<h3><a class="anchor" id="index_v"></a>- v -</h3><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>
@ -628,7 +586,7 @@ $(document).ready(function(){initNavTree('functions_vars.html','');});
</ul>
<h3><a class="anchor" id="index_w"></a>- w -</h3><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>
@ -643,7 +601,7 @@ $(document).ready(function(){initNavTree('functions_vars.html','');});
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,37 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li class="current"><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
<div id="navrow3" class="tabs2">
<ul class="tablist">
<li class="current"><a href="globals.html"><span>All</span></a></li>
<li><a href="globals_func.html"><span>Functions</span></a></li>
<li><a href="globals_type.html"><span>Typedefs</span></a></li>
<li><a href="globals_enum.html"><span>Enumerations</span></a></li>
<li><a href="globals_eval.html"><span>Enumerator</span></a></li>
</ul>
</div>
<div id="navrow4" class="tabs3">
<ul class="tablist">
<li class="current"><a href="globals.html#index_e"><span>e</span></a></li>
<li><a href="globals_l.html#index_l"><span>l</span></a></li>
</ul>
</div>
<!-- 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">
@ -84,7 +62,7 @@ $(document).ready(function(){initNavTree('globals.html','');});
<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 class="anchor" id="index_e"></a>- e -</h3><ul>
<h3><a id="index_e"></a>- e -</h3><ul>
<li>EXTARG_DEC
: <a class="el" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea1c86adf924c8786a12bee9687094673e">libwebsockets.h</a>
</li>
@ -102,7 +80,7 @@ $(document).ready(function(){initNavTree('globals.html','');});
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,31 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li class="current"><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
<div id="navrow3" class="tabs2">
<ul class="tablist">
<li><a href="globals.html"><span>All</span></a></li>
<li><a href="globals_func.html"><span>Functions</span></a></li>
<li><a href="globals_type.html"><span>Typedefs</span></a></li>
<li class="current"><a href="globals_enum.html"><span>Enumerations</span></a></li>
<li><a href="globals_eval.html"><span>Enumerator</span></a></li>
</ul>
</div>
<!-- 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">
@ -118,7 +102,7 @@ $(document).ready(function(){initNavTree('globals_enum.html','');});
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,37 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li class="current"><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
<div id="navrow3" class="tabs2">
<ul class="tablist">
<li><a href="globals.html"><span>All</span></a></li>
<li><a href="globals_func.html"><span>Functions</span></a></li>
<li><a href="globals_type.html"><span>Typedefs</span></a></li>
<li><a href="globals_enum.html"><span>Enumerations</span></a></li>
<li class="current"><a href="globals_eval.html"><span>Enumerator</span></a></li>
</ul>
</div>
<div id="navrow4" class="tabs3">
<ul class="tablist">
<li><a href="#index_e"><span>e</span></a></li>
<li class="current"><a href="#index_l"><span>l</span></a></li>
</ul>
</div>
<!-- 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">
@ -84,7 +62,7 @@ $(document).ready(function(){initNavTree('globals_eval.html','');});
<div class="contents">
&#160;
<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
<h3><a id="index_e"></a>- e -</h3><ul>
<li>EXTARG_DEC
: <a class="el" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea1c86adf924c8786a12bee9687094673e">libwebsockets.h</a>
</li>
@ -97,7 +75,7 @@ $(document).ready(function(){initNavTree('globals_eval.html','');});
</ul>
<h3><a class="anchor" id="index_l"></a>- l -</h3><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>
@ -421,7 +399,7 @@ $(document).ready(function(){initNavTree('globals_eval.html','');});
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,36 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li class="current"><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
<div id="navrow3" class="tabs2">
<ul class="tablist">
<li><a href="globals.html"><span>All</span></a></li>
<li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
<li><a href="globals_type.html"><span>Typedefs</span></a></li>
<li><a href="globals_enum.html"><span>Enumerations</span></a></li>
<li><a href="globals_eval.html"><span>Enumerator</span></a></li>
</ul>
</div>
<div id="navrow4" class="tabs3">
<ul class="tablist">
<li class="current"><a href="#index_l"><span>l</span></a></li>
</ul>
</div>
<!-- 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">
@ -83,7 +62,7 @@ $(document).ready(function(){initNavTree('globals_func.html','');});
<div class="contents">
&#160;
<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
<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>
@ -361,7 +340,7 @@ $(document).ready(function(){initNavTree('globals_func.html','');});
: <a class="el" href="group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5">libwebsockets.h</a>
</li>
<li>lws_snprintf()
: <a class="el" href="group__misc.html#ga9f37d0e357de2ab4170723fcdb665d21">libwebsockets.h</a>
: <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>
@ -428,7 +407,7 @@ $(document).ready(function(){initNavTree('globals_func.html','');});
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,37 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li class="current"><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
<div id="navrow3" class="tabs2">
<ul class="tablist">
<li class="current"><a href="globals.html"><span>All</span></a></li>
<li><a href="globals_func.html"><span>Functions</span></a></li>
<li><a href="globals_type.html"><span>Typedefs</span></a></li>
<li><a href="globals_enum.html"><span>Enumerations</span></a></li>
<li><a href="globals_eval.html"><span>Enumerator</span></a></li>
</ul>
</div>
<div id="navrow4" class="tabs3">
<ul class="tablist">
<li><a href="globals.html#index_e"><span>e</span></a></li>
<li class="current"><a href="globals_l.html#index_l"><span>l</span></a></li>
</ul>
</div>
<!-- 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">
@ -84,7 +62,7 @@ $(document).ready(function(){initNavTree('globals_l.html','');});
<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 class="anchor" id="index_l"></a>- l -</h3><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>
@ -635,7 +613,7 @@ $(document).ready(function(){initNavTree('globals_l.html','');});
: <a class="el" href="group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5">libwebsockets.h</a>
</li>
<li>lws_snprintf()
: <a class="el" href="group__misc.html#ga9f37d0e357de2ab4170723fcdb665d21">libwebsockets.h</a>
: <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>
@ -786,7 +764,7 @@ $(document).ready(function(){initNavTree('globals_l.html','');});
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,31 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li class="current"><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
<div id="navrow3" class="tabs2">
<ul class="tablist">
<li><a href="globals.html"><span>All</span></a></li>
<li><a href="globals_func.html"><span>Functions</span></a></li>
<li class="current"><a href="globals_type.html"><span>Typedefs</span></a></li>
<li><a href="globals_enum.html"><span>Enumerations</span></a></li>
<li><a href="globals_eval.html"><span>Enumerator</span></a></li>
</ul>
</div>
<!-- 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">
@ -94,7 +78,7 @@ $(document).ready(function(){initNavTree('globals_type.html','');});
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -87,7 +86,9 @@ Functions</h2></td></tr>
<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 class="anchor" id="ga2b36bf44405755ff51c1939303b995a8"></a>
<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">
@ -152,7 +153,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="gaf74adb761b22566ad70004882712dce1"></a>
<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">
@ -217,7 +220,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="gacc76a5babcb4dce1b01b1955aa7a2faf"></a>
<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">
@ -268,7 +273,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ga29b7d6d2ddfdbaff3d8b607e7e3151b6"></a>
<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">
@ -319,7 +326,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ga4887605ff2242a54db3a7fa01f6f864b"></a>
<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">
@ -370,7 +379,7 @@ Functions</h2></td></tr>
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -79,7 +78,7 @@ Data Structures</h2></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 class="anchor" id="ga6e747906f9d76532ec118d6ef418b82e"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>lws_token_indexes</b> { <br />
<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,
@ -222,7 +221,9 @@ Functions</h2></td></tr>
<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 class="anchor" id="ga84e9ce5e71a77501a0998ac403a984c2"></a>
<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">
@ -272,7 +273,9 @@ name= part.</pre> </td></tr>
</div>
</div>
<a class="anchor" id="ga6ce6aa1c0155ea42b7708bed271d1c77"></a>
<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">
@ -323,7 +326,9 @@ name= part.</pre> </td></tr>
</div>
</div>
<a class="anchor" id="gaa427cad61a9a5e3004afd65c4527b5e9"></a>
<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">
@ -381,7 +386,9 @@ name= part.</pre> </td></tr>
</div>
</div>
<a class="anchor" id="ga594f3d0ece5b09c2ccf9f98ea533bb4e"></a>
<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">
@ -424,7 +431,9 @@ name= part.</pre> </td></tr>
</div>
</div>
<a class="anchor" id="ga8ade0e1ffb0da7e62b989d8d867bf6c8"></a>
<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">
@ -460,7 +469,9 @@ name= part.</pre> </td></tr>
</div>
</div>
<a class="anchor" id="ga2c0597b2ef1d2cee35736c338bcbd17b"></a>
<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">
@ -478,7 +489,7 @@ name= part.</pre> </td></tr>
<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></td></tr>
<tr><td class="paramname"></td><td>token index </td></tr>
</table>
</dd>
</dl>
@ -492,7 +503,7 @@ name= part.</pre> </td></tr>
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -87,10 +86,10 @@ Data Structures</h2></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 class="anchor" id="ga40994491e1567f91f579d2b444775266"></a>
<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 class="anchor" id="ga83f7a924ba790fa273476075a59f08b0"></a>
<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">
@ -115,7 +114,9 @@ Functions</h2></td></tr>
<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 class="anchor" id="ga106b37ae9c247e84d191ab09441adc43"></a>
<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">
@ -141,7 +142,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ga72ad550786ca7976463589d347e62112"></a>
<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">
@ -166,7 +169,9 @@ Functions</h2></td></tr>
this is how you can get a pointer to the active protocol if needed.</pre>
</div>
</div>
<a class="anchor" id="ga8bbe5e65faca068845704bab911a5030"></a>
<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">
@ -185,7 +190,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="gaf3be4243443baac0f8be1fcfb4d25129"></a>
<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">
@ -222,7 +229,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="gaec0c0477288ff3f83aff38d357b883d1"></a>
<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">
@ -265,7 +274,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ga25754726d97c5f519d313e691a9fe29d"></a>
<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">
@ -309,7 +320,7 @@ Functions</h2></td></tr>
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -82,7 +81,7 @@ Functions</h2></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 class="anchor" id="gaad3d524a84d2be08ac85153bc158504b"></a>
<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>
@ -97,7 +96,9 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
<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 class="anchor" id="gacf04bbe089f47c971c6408c5efe2ac70"></a>
<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">
@ -145,7 +146,9 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
</div>
</div>
<a class="anchor" id="ga13c984d8c5a44a745fd02bc2fba36053"></a>
<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">
@ -193,7 +196,9 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
</div>
</div>
<a class="anchor" id="ga941caaa468bc507b1cae52275f58800d"></a>
<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">
@ -223,7 +228,9 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
</div>
</div>
<a class="anchor" id="gabbe4655c7eeb3eb1671b2323ec6b3107"></a>
<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">
@ -264,7 +271,9 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
</div>
</div>
<a class="anchor" id="ga8570860e191b62db264f2bac67354ea8"></a>
<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">
@ -305,7 +314,9 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
</div>
</div>
<a class="anchor" id="ga60939cf0c073d933fde3d17f3591caf5"></a>
<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">
@ -360,7 +371,9 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
</div>
</div>
<a class="anchor" id="gac4643fe16b0940ae5b68b4ee6195cbde"></a>
<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">
@ -389,7 +402,9 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
</div>
</div>
<a class="anchor" id="gaa709e02a10558753c851e58f1e2c16ba"></a>
<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">
@ -422,7 +437,7 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -75,7 +74,7 @@ $(document).ready(function(){initNavTree('group__cgi.html','');});
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -93,17 +92,19 @@ Functions</h2></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 class="anchor" id="ga4450c34200bf9dab3beb90ef23221870"></a>
<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 class="anchor" id="ga26588fb345083076c14169dd5859f57a"></a>
<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 class="anchor" id="ga96f3dbad54b2853969cfa933d66871ce"></a>
<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">
@ -115,11 +116,13 @@ LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><
<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="l01975"></a><span class="lineno"> 1975</span>&#160; {</div><div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>&#160; LCCSCF_USE_SSL = (1 &lt;&lt; 0),</div><div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>&#160; LCCSCF_ALLOW_SELFSIGNED = (1 &lt;&lt; 1),</div><div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>&#160; LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK = (1 &lt;&lt; 2)</div><div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>&#160;};</div></div><!-- fragment -->
<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 class="anchor" id="ga4af0a20108a95e8b6d94dd4d80055ff3"></a>
<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">
@ -205,7 +208,9 @@ LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><
</div>
</div>
<a class="anchor" id="gac6a8558b4410961a880241c2ac1271e2"></a>
<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">
@ -297,7 +302,9 @@ LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><
</div>
</div>
<a class="anchor" id="ga0c966136905f467816307cfba6deb5fd"></a>
<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">
@ -322,7 +329,9 @@ LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><
</div>
</div>
<a class="anchor" id="ga4f44b8230e6732816ca5cd8d1aaaf340"></a>
<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">
@ -375,7 +384,7 @@ LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

File diff suppressed because one or more lines are too long

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -71,19 +70,19 @@ $(document).ready(function(){initNavTree('group__ev.html','');});
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:ga3b0ffd4d2b4fa791c0fd75353a330208"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3b0ffd4d2b4fa791c0fd75353a330208"></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:ga3b0ffd4d2b4fa791c0fd75353a330208"><td class="memSeparator" colspan="2">&#160;</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 class="anchor" id="ga5caf14a420a2a0bd687a1fc952f8d64e"></a>
<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 class="anchor" id="ga3fdd23ded693b21853356dc9eaef5ccc"></a>
<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 class="anchor" id="gaabfc0880d6a98133550c61aa01ef3563"></a>
<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>
@ -97,7 +96,7 @@ LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -87,7 +86,7 @@ Typedefs</h2></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 class="anchor" id="gae9993815eee72c6070300a0ae2f022d7"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>lws_extension_callback_reasons</b> { <br />
<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,
@ -144,7 +143,9 @@ Functions</h2></td></tr>
<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 class="anchor" id="gaae7169b2cd346b34fa33d0250db2afd0"></a>
<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">
@ -219,7 +220,9 @@ Functions</h2></td></tr>
</div>
</div>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a class="anchor" id="gacc9f55936dc165257a2e1f7d47bce89e"></a>
<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">
@ -232,24 +235,23 @@ Functions</h2></td></tr>
<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 class="anchor" id="ggacc9f55936dc165257a2e1f7d47bce89eaabcf56c456c1ff6e81dc82586a16f14c"></a>EXTARG_NONE&#160;</td><td class="fielddoc">
<p>does not take an argument </p>
<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 class="anchor" id="ggacc9f55936dc165257a2e1f7d47bce89ea1c86adf924c8786a12bee9687094673e"></a>EXTARG_DEC&#160;</td><td class="fielddoc">
<p>requires a decimal argument </p>
<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 class="anchor" id="ggacc9f55936dc165257a2e1f7d47bce89ea5265abe3e1c3f64412f2affe7bffd880"></a>EXTARG_OPT_DEC&#160;</td><td class="fielddoc">
<p>may have an optional decimal argument </p>
<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="l01095"></a><span class="lineno"> 1095</span>&#160; {</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; <a class="code" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89eaabcf56c456c1ff6e81dc82586a16f14c">EXTARG_NONE</a>, </div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; <a class="code" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea1c86adf924c8786a12bee9687094673e">EXTARG_DEC</a>, </div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; <a class="code" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea5265abe3e1c3f64412f2affe7bffd880">EXTARG_OPT_DEC</a> </div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; <span class="comment">/* Add new things just above here ---^</span></div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160;<span class="comment"> * This is part of the ABI, don&#39;t needlessly break compatibility */</span></div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</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:1098</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:1096</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:1097</div></div>
<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 class="anchor" id="ga6fb3e2c3dfb9d64dc87026a4e99c128b"></a>
<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">
@ -313,7 +315,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ga4cdbe42d872e21a448a947714d6c607e"></a>
<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">
@ -385,7 +389,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="gae0e24e1768f83a7fb07896ce975704b9"></a>
<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">
@ -442,7 +448,7 @@ Functions</h2></td></tr>
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -85,7 +84,9 @@ Functions</h2></td></tr>
<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 class="anchor" id="gac08aef64c4c34647ed699b24759b6b0e"></a>
<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">
@ -117,7 +118,7 @@ Functions</h2></td></tr>
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -105,7 +104,9 @@ Functions</h2></td></tr>
<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 class="anchor" id="ga5a70527c0861c2ffa3d29333a6aa7f8e"></a>
<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">
@ -133,7 +134,9 @@ Functions</h2></td></tr>
</div>
</div>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a class="anchor" id="ga41a74a822771d3dce89751aa3bce28ae"></a>
<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">
@ -146,24 +149,23 @@ Functions</h2></td></tr>
<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 class="anchor" id="gga41a74a822771d3dce89751aa3bce28aead3a958e7719ac273c3ba4f684f00c87f"></a>LWS_UFS_CONTENT&#160;</td><td class="fielddoc">
<p>a chunk of file content has arrived </p>
<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 class="anchor" 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>
<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 class="anchor" id="gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83"></a>LWS_UFS_OPEN&#160;</td><td class="fielddoc">
<p>a new file is starting to arrive </p>
<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="l02817"></a><span class="lineno"> 2817</span>&#160; {</div><div class="line"><a name="l02818"></a><span class="lineno"> 2818</span>&#160; <a class="code" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aead3a958e7719ac273c3ba4f684f00c87f">LWS_UFS_CONTENT</a>,</div><div class="line"><a name="l02820"></a><span class="lineno"> 2820</span>&#160; <a class="code" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea6ce2a55a4c3695cdb640c893d95bd3a7">LWS_UFS_FINAL_CONTENT</a>,</div><div class="line"><a name="l02822"></a><span class="lineno"> 2822</span>&#160; <a class="code" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83">LWS_UFS_OPEN</a></div><div class="line"><a name="l02824"></a><span class="lineno"> 2824</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:2820</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:2822</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:2818</div></div>
<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 class="anchor" id="ga162f86762173a2bc8c28497941d74815"></a>
<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">
@ -229,7 +231,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="gaaa482f07dad3f04b391cccf0a814e13b"></a>
<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">
@ -254,7 +258,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ga83835bf250ee3d4a60f36a182f2b8d24"></a>
<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">
@ -279,7 +285,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ga3fbe378632f85ec9a14cc2c1687bf05f"></a>
<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">
@ -315,7 +323,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ga2da476217166da02704b90d3a8d4f3cd"></a>
<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">
@ -350,7 +360,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ga9ad9ebf5ea1a7108415ed7e04cb231d2"></a>
<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">
@ -386,7 +398,7 @@ Functions</h2></td></tr>
<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">len</td><td>count of bytes valid at</td></tr>
<tr><td class="paramname">in</td><td></td></tr>
</table>
</dd>
@ -401,7 +413,7 @@ Functions</h2></td></tr>
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -97,7 +96,9 @@ Enumerations</h2></td></tr>
<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 class="anchor" id="gaa93946b3d921072209d5cd8cdfa5332e"></a>
<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">
@ -110,19 +111,19 @@ Enumerations</h2></td></tr>
<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 class="anchor" id="ggaa93946b3d921072209d5cd8cdfa5332ea596010a165bf13473c5eea3a34cd4308"></a>LWSGSE_CREATED&#160;</td><td class="fielddoc">
<p>a new user was created </p>
<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 class="anchor" id="ggaa93946b3d921072209d5cd8cdfa5332ead908cdc5689c5d22c9d3c8934e94dcde"></a>LWSGSE_DELETED&#160;</td><td class="fielddoc">
<p>an existing user was deleted </p>
<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="l01457"></a><span class="lineno"> 1457</span>&#160; {</div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160; <a class="code" href="group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ea596010a165bf13473c5eea3a34cd4308">LWSGSE_CREATED</a>, </div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160; <a class="code" href="group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ead908cdc5689c5d22c9d3c8934e94dcde">LWSGSE_DELETED</a> </div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</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:1459</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:1458</div></div>
<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 class="anchor" id="ga7c2dc7bfb4ccb91c5d771f9e9ea237e1"></a>
<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">
@ -135,23 +136,19 @@ Enumerations</h2></td></tr>
<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 class="anchor" id="gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a81e63075115dedd150265d81b8f7fa57"></a>LWSGS_AUTH_LOGGED_IN&#160;</td><td class="fielddoc">
<p>user is logged in as somebody </p>
<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 class="anchor" id="gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a0657a9e846814781b128c397fe4b10bf"></a>LWSGS_AUTH_ADMIN&#160;</td><td class="fielddoc">
<p>logged in as the admin user </p>
<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 class="anchor" id="gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a5a607e4668d20cadada62c4b8007f887"></a>LWSGS_AUTH_VERIFIED&#160;</td><td class="fielddoc">
<p>user has verified his email </p>
<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 class="anchor" id="gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a2cd8fb86e3b85c106e7711c03f0ddd0a"></a>LWSGS_AUTH_FORGOT_FLOW&#160;</td><td class="fielddoc">
<p>he just completed "forgot password" flow </p>
<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="l01439"></a><span class="lineno"> 1439</span>&#160; {</div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160; <a class="code" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a81e63075115dedd150265d81b8f7fa57">LWSGS_AUTH_LOGGED_IN</a> = 1, </div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160; <a class="code" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a0657a9e846814781b128c397fe4b10bf">LWSGS_AUTH_ADMIN</a> = 2, </div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160; <a class="code" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a5a607e4668d20cadada62c4b8007f887">LWSGS_AUTH_VERIFIED</a> = 4, </div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160; <a class="code" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a2cd8fb86e3b85c106e7711c03f0ddd0a">LWSGS_AUTH_FORGOT_FLOW</a> = 8, </div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</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:1442</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:1443</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:1441</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:1440</div></div>
<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>
@ -162,7 +159,7 @@ Enumerations</h2></td></tr>
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -80,13 +79,13 @@ Data Structures</h2></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 class="anchor" id="ga669d3d7ce2d5f193473f649a89b3e7ac"></a>
<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 class="anchor" id="gabc3b93f68c8bdd857ad32913628dfa8d"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>http_status</b> { <br />
<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,
@ -136,7 +135,9 @@ Functions</h2></td></tr>
<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 class="anchor" id="ga643073f918c0a7016b690aae9793fd60"></a>
<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">
@ -178,7 +179,7 @@ Functions</h2></td></tr>
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -102,7 +101,9 @@ Functions</h2></td></tr>
<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 class="anchor" id="ga8fbf01e473ac421fc33ad9f8da8b8a25"></a>
<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">
@ -166,7 +167,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="gad27aed6c66a41b2b89ffe4da2a309e8a"></a>
<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">
@ -192,7 +195,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="gac8a4a71240857dc6b2ed70456b6923f4"></a>
<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">
@ -242,7 +247,7 @@ Functions</h2></td></tr>
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -74,14 +73,16 @@ Functions</h2></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 class="anchor" id="ga29e1123f6d56cd777b3e5bf9ca40f9e5"></a>
<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 class="anchor" id="gab4da87a4800413f15e7aba649fb1d77c"></a>
<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">
@ -119,7 +120,9 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
</div>
</div>
<a class="anchor" id="gab393a06d3d2722af4c3f8b06842c80d7"></a>
<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">
@ -190,7 +193,7 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -71,7 +70,7 @@ $(document).ready(function(){initNavTree('group__log.html','');});
<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 class="anchor" id="ga14542b84d2c76efa7814124bb10f9c5f"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>lws_log_levels</b> { <br />
<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,
@ -91,10 +90,10 @@ Enumerations</h2></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:gaf5f07837692b2f231a79da8a058288aa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf5f07837692b2f231a79da8a058288aa"></a>
LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><b>_lws_log</b> (int filter, const char *format,...)</td></tr>
<tr class="separator:gaf5f07837692b2f231a79da8a058288aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga74eb146969f0595e12ea835851b4588e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga74eb146969f0595e12ea835851b4588e"></a>
<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>
@ -111,7 +110,9 @@ LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><
<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 class="anchor" id="ga244647f9e1bf0097ccdde66d74f41e26"></a>
<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">
@ -147,7 +148,9 @@ LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><
</div>
</div>
<a class="anchor" id="gab7c0fc936cc9f1eb58e2bb234c15147c"></a>
<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">
@ -184,7 +187,9 @@ LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><
</div>
</div>
<a class="anchor" id="ga898b1f03872ad019f507d4e35bbefa90"></a>
<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">
@ -220,7 +225,9 @@ LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><
</div>
</div>
<a class="anchor" id="ga42e39775c6b69b7251bdbf5a2cdd5dcd"></a>
<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">
@ -271,7 +278,7 @@ LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -70,8 +69,8 @@ $(document).ready(function(){initNavTree('group__misc.html','');});
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga9f37d0e357de2ab4170723fcdb665d21"><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#ga9f37d0e357de2ab4170723fcdb665d21">lws_snprintf</a> (char *str, size_t size, const char *format,...)</td></tr>
<tr class="separator:ga9f37d0e357de2ab4170723fcdb665d21"><td class="memSeparator" colspan="2">&#160;</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>
@ -92,7 +91,7 @@ Functions</h2></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 class="anchor" id="ga0e705d498e8c8500649a26ba30a1e106"></a>
<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>
@ -102,7 +101,9 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
<h2>Miscellaneous APIs</h2>
<p>Various APIs outside of other categories </p>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="gace5171b1dbbc03ec89a98f8afdb5c9af"></a>
<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">
@ -128,7 +129,9 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
</div>
</div>
<a class="anchor" id="gacae4d7b6a8d22e4c2d82ff8b12c1e234"></a>
<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">
@ -153,7 +156,9 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
</div>
</div>
<a class="anchor" id="ga0af4f7d2dd375aeedcfa7eb0e1101c4b"></a>
<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">
@ -179,7 +184,9 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
</div>
</div>
<a class="anchor" id="ga629f48268fd1856b54b11172991b97d9"></a>
<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">
@ -205,7 +212,9 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
</div>
</div>
<a class="anchor" id="gac6abfc0b2bd5b2f09281a4432bb2f5f0"></a>
<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">
@ -225,7 +234,9 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
</div>
</div>
<a class="anchor" id="ga8930fe36a3f3eefe4a6a4fd499d8e899"></a>
<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">
@ -250,7 +261,9 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
</div>
</div>
<a class="anchor" id="ga58f906c6be0ca80efd813f694569dd4a"></a>
<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">
@ -294,7 +307,9 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
</div>
</div>
<a class="anchor" id="ga33bf2635033710b25f931b57ed663e1e"></a>
<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">
@ -313,7 +328,9 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
</div>
</div>
<a class="anchor" id="ga1ec0d9faac5d3a5824d765c287c043aa"></a>
<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">
@ -370,7 +387,9 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
</div>
</div>
<a class="anchor" id="gab321ed812f46f6dc7ef9e3ca6f00cf1b"></a>
<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">
@ -395,7 +414,9 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
</div>
</div>
<a class="anchor" id="ga9f37d0e357de2ab4170723fcdb665d21"></a>
<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">
@ -432,7 +453,7 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
</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#ga9f37d0e357de2ab4170723fcdb665d21">lws_snprintf()</a>: snprintf that truncates the returned length too</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>
@ -446,7 +467,9 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
</div>
</div>
<a class="anchor" id="gaa194584fff9698f3b280658f770ccd0f"></a>
<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">
@ -478,7 +501,7 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -10,6 +10,6 @@ var group__misc =
[ "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#ga9f37d0e357de2ab4170723fcdb665d21", null ],
[ "lws_snprintf", "group__misc.html#ga2163492f17db959a36967adb73d823b4", null ],
[ "lws_wsi_user", "group__misc.html#gaa194584fff9698f3b280658f770ccd0f", null ]
];

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -83,7 +82,9 @@ Functions</h2></td></tr>
<h2>Network related helper APIs</h2>
<p>These wrap miscellaneous useful network-related functions </p>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="gad0df22db2be9fc65a667a1e83f9a92a4"></a>
<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">
@ -109,7 +110,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ga092e5f473b3347f03ffeef8a950080f3"></a>
<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">
@ -175,7 +178,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="gad01014fed09759741b6d23afccfdaacc"></a>
<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">
@ -219,7 +224,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ga869d8bdffb0f2a7ce08e3ce10d6be3d8"></a>
<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">
@ -277,7 +284,7 @@ Functions</h2></td></tr>
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -79,7 +78,9 @@ Functions</h2></td></tr>
<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 class="anchor" id="gab15187efcfa256b7c928562c182b92a3"></a>
<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">
@ -123,7 +124,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ga9cc82f06e5ae7e71458626d7a39a5865"></a>
<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">
@ -174,7 +177,7 @@ Functions</h2></td></tr>
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -96,7 +95,9 @@ Functions</h2></td></tr>
<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 class="anchor" id="ga98b099cf8c1c7e38ad78501f270e193d"></a>
<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">
@ -108,40 +109,35 @@ Functions</h2></td></tr>
<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 class="anchor" 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>
<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 class="anchor" 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>
<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 class="anchor" 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>
<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 class="anchor" id="gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e"></a>LWS_WRITE_HTTP&#160;</td><td class="fielddoc">
<p>Send HTTP content </p>
<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 class="anchor" 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>
<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 class="anchor" 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>
<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 class="anchor" 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>
<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="l03161"></a><span class="lineno"> 3161</span>&#160; {</div><div class="line"><a name="l03162"></a><span class="lineno"> 3162</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da80e8f169fda236c56bfb795ed62903db">LWS_WRITE_TEXT</a> = 0,</div><div class="line"><a name="l03166"></a><span class="lineno"> 3166</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2">LWS_WRITE_BINARY</a> = 1,</div><div class="line"><a name="l03169"></a><span class="lineno"> 3169</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da10047eb05b5e1c298151dc47a5b44826">LWS_WRITE_CONTINUATION</a> = 2,</div><div class="line"><a name="l03172"></a><span class="lineno"> 3172</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e">LWS_WRITE_HTTP</a> = 3,</div><div class="line"><a name="l03175"></a><span class="lineno"> 3175</span>&#160; <span class="comment">/* LWS_WRITE_CLOSE is handled by lws_close_reason() */</span></div><div class="line"><a name="l03176"></a><span class="lineno"> 3176</span>&#160; LWS_WRITE_PING = 5,</div><div class="line"><a name="l03177"></a><span class="lineno"> 3177</span>&#160; LWS_WRITE_PONG = 6,</div><div class="line"><a name="l03178"></a><span class="lineno"> 3178</span>&#160;</div><div class="line"><a name="l03179"></a><span class="lineno"> 3179</span>&#160; <span class="comment">/* Same as write_http but we know this write ends the transaction */</span></div><div class="line"><a name="l03180"></a><span class="lineno"> 3180</span>&#160; LWS_WRITE_HTTP_FINAL = 7,</div><div class="line"><a name="l03181"></a><span class="lineno"> 3181</span>&#160;</div><div class="line"><a name="l03182"></a><span class="lineno"> 3182</span>&#160; <span class="comment">/* HTTP2 */</span></div><div class="line"><a name="l03183"></a><span class="lineno"> 3183</span>&#160;</div><div class="line"><a name="l03184"></a><span class="lineno"> 3184</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dafe5a38e940ce56708ac814627e9c0917">LWS_WRITE_HTTP_HEADERS</a> = 8,</div><div class="line"><a name="l03191"></a><span class="lineno"> 3191</span>&#160; <span class="comment">/****** add new things just above ---^ ******/</span></div><div class="line"><a name="l03192"></a><span class="lineno"> 3192</span>&#160;</div><div class="line"><a name="l03193"></a><span class="lineno"> 3193</span>&#160; <span class="comment">/* flags */</span></div><div class="line"><a name="l03194"></a><span class="lineno"> 3194</span>&#160;</div><div class="line"><a name="l03195"></a><span class="lineno"> 3195</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3">LWS_WRITE_NO_FIN</a> = 0x40,</div><div class="line"><a name="l03198"></a><span class="lineno"> 3198</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="l03202"></a><span class="lineno"> 3202</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:3172</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:3195</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:3162</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:3166</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:3198</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:3169</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:3184</div></div>
<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 class="anchor" id="gafd5fdd285a0e25ba7e3e1051deec1001"></a>
<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">
@ -206,10 +202,15 @@ Functions</h2></td></tr>
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 a
positive number reflecting the amount of bytes actually sent. This
can be less than the requested number of bytes due to OS memory
pressure at any given time.</pre>
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 -->
@ -219,7 +220,7 @@ Functions</h2></td></tr>
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -101,7 +100,9 @@ Functions</h2></td></tr>
<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 class="anchor" id="ga53e3d0801dfda7960a7249dd559e68a2"></a>
<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">
@ -130,7 +131,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ga29c246707997ab7a466aa709aecd2d7b"></a>
<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">
@ -162,7 +165,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="gab1ff2c19455268fa0d5b617d8057fbfc"></a>
<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">
@ -207,7 +212,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="gaf95bd0c663d6516a0c80047d9b1167a8"></a>
<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">
@ -248,7 +255,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ga4fd9d714434ca499e2b3f7dbba86f241"></a>
<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">
@ -292,7 +301,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="gad82efa5466d14a9f05aa06416375b28d"></a>
<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">
@ -320,18 +331,21 @@ Functions</h2></td></tr>
<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.</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>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 class="anchor" id="gaebf426eda371ba23642fc11d8e0ace6b"></a>
<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">
@ -374,7 +388,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ga9b3cc4473fd8848e5bbee7f310712939"></a>
<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">
@ -424,7 +440,7 @@ Functions</h2></td></tr>
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -81,7 +80,9 @@ Functions</h2></td></tr>
<h2>SHA and B64 helpers</h2>
<p>These provide SHA-1 and B64 helper apis </p>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="ga66316e6a5a0644a09d5a10e919dfdd8d"></a>
<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">
@ -125,7 +126,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="gaf39765e4a3b413efb65e4698b2ec3575"></a>
<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">
@ -176,7 +179,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ga7b09ab74646266f0b555103b3bb8dfe5"></a>
<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">
@ -227,7 +232,7 @@ Functions</h2></td></tr>
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -116,7 +115,9 @@ Functions</h2></td></tr>
</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 class="anchor" id="ga116be79bf44f9dc2a97f46e051fe4dc0"></a>
<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">
@ -129,48 +130,41 @@ Functions</h2></td></tr>
<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 class="anchor" id="gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c"></a>LGSSMTP_IDLE&#160;</td><td class="fielddoc">
<p>awaiting new email </p>
<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 class="anchor" id="gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933"></a>LGSSMTP_CONNECTING&#160;</td><td class="fielddoc">
<p>opening tcp connection to MTA </p>
<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 class="anchor" id="gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d"></a>LGSSMTP_CONNECTED&#160;</td><td class="fielddoc">
<p>tcp connection to MTA is connected </p>
<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 class="anchor" id="gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad"></a>LGSSMTP_SENT_HELO&#160;</td><td class="fielddoc">
<p>sent the HELO </p>
<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 class="anchor" id="gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab"></a>LGSSMTP_SENT_FROM&#160;</td><td class="fielddoc">
<p>sent FROM </p>
<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 class="anchor" id="gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83"></a>LGSSMTP_SENT_TO&#160;</td><td class="fielddoc">
<p>sent TO </p>
<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 class="anchor" id="gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14"></a>LGSSMTP_SENT_DATA&#160;</td><td class="fielddoc">
<p>sent DATA request </p>
<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 class="anchor" id="gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69"></a>LGSSMTP_SENT_BODY&#160;</td><td class="fielddoc">
<p>sent the email body </p>
<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 class="anchor" id="gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5"></a>LGSSMTP_SENT_QUIT&#160;</td><td class="fielddoc">
<p>sent the session quit </p>
<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="l04102"></a><span class="lineno"> 4102</span>&#160; {</div><div class="line"><a name="l04103"></a><span class="lineno"> 4103</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c">LGSSMTP_IDLE</a>, </div><div class="line"><a name="l04104"></a><span class="lineno"> 4104</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933">LGSSMTP_CONNECTING</a>, </div><div class="line"><a name="l04105"></a><span class="lineno"> 4105</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d">LGSSMTP_CONNECTED</a>, </div><div class="line"><a name="l04106"></a><span class="lineno"> 4106</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad">LGSSMTP_SENT_HELO</a>, </div><div class="line"><a name="l04107"></a><span class="lineno"> 4107</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab">LGSSMTP_SENT_FROM</a>, </div><div class="line"><a name="l04108"></a><span class="lineno"> 4108</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83">LGSSMTP_SENT_TO</a>, </div><div class="line"><a name="l04109"></a><span class="lineno"> 4109</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14">LGSSMTP_SENT_DATA</a>, </div><div class="line"><a name="l04110"></a><span class="lineno"> 4110</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69">LGSSMTP_SENT_BODY</a>, </div><div class="line"><a name="l04111"></a><span class="lineno"> 4111</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5">LGSSMTP_SENT_QUIT</a>, </div><div class="line"><a name="l04112"></a><span class="lineno"> 4112</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:4105</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:4110</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:4103</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:4104</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:4108</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:4107</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:4111</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:4106</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:4109</div></div>
<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 class="anchor" id="ga5e535e346d92a9daf00be33abf79d4eb"></a>
<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">
@ -196,7 +190,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ga25298a5afc1074e13b2d5711a86432b2"></a>
<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">
@ -222,7 +218,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ga77fc9b56a1bb39484844981ec375fc29"></a>
<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">
@ -273,7 +271,7 @@ Functions</h2></td></tr>
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -80,7 +79,9 @@ Functions</h2></td></tr>
<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 class="anchor" id="gabe71b7462afb21c767bdc67334f305af"></a>
<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">
@ -117,7 +118,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="gab2d045df0f81afe00891aaed312d552b"></a>
<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">
@ -159,14 +162,14 @@ Functions</h2></td></tr>
<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">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>
<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>
@ -183,7 +186,7 @@ Functions</h2></td></tr>
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -71,7 +70,7 @@ $(document).ready(function(){initNavTree('group__timeout.html','');});
<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 class="anchor" id="ga2c0aa4b9c3c55bae7b35cbfac3246c87"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>pending_timeout</b> { <br />
<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,
@ -107,7 +106,9 @@ Functions</h2></td></tr>
<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 class="anchor" id="gaced9f9237f6172fed9f730a2af51345a"></a>
<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">
@ -158,7 +159,7 @@ Functions</h2></td></tr>
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<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>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -79,7 +78,9 @@ Functions</h2></td></tr>
<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 class="anchor" id="gaa373a9c16acdd96c395af61ab915ece3"></a>
<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">
@ -124,7 +125,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="gabc2888476e50e001c875c1a8abf455b7"></a>
<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">
@ -175,7 +178,7 @@ Functions</h2></td></tr>
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

File diff suppressed because one or more lines are too long

View file

@ -3,7 +3,8 @@
<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.11"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: libuv helpers</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -70,22 +69,22 @@ $(document).ready(function(){initNavTree('group__uv.html','');});
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga99099e045993383f251a8026e1e40414"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga99099e045993383f251a8026e1e40414"></a>
<tr class="memitem:ga99099e045993383f251a8026e1e40414"><td class="memItemLeft" align="right" valign="top"><a id="ga99099e045993383f251a8026e1e40414"></a>
LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b>lws_uv_sigint_cfg</b> (struct lws_context *context, int use_uv_sigint, uv_signal_cb cb)</td></tr>
<tr class="separator:ga99099e045993383f251a8026e1e40414"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga097c89497824d4de225a85a00661fc89"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga097c89497824d4de225a85a00661fc89"></a>
<tr class="memitem:ga097c89497824d4de225a85a00661fc89"><td class="memItemLeft" align="right" valign="top"><a id="ga097c89497824d4de225a85a00661fc89"></a>
LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><b>lws_libuv_run</b> (const struct lws_context *context, int tsi)</td></tr>
<tr class="separator:ga097c89497824d4de225a85a00661fc89"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga3c75cd6ec3f80fc0a0c8ead4c4e71a15"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c75cd6ec3f80fc0a0c8ead4c4e71a15"></a>
<tr class="memitem:ga3c75cd6ec3f80fc0a0c8ead4c4e71a15"><td class="memItemLeft" align="right" valign="top"><a id="ga3c75cd6ec3f80fc0a0c8ead4c4e71a15"></a>
LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><b>lws_libuv_stop</b> (struct lws_context *context)</td></tr>
<tr class="separator:ga3c75cd6ec3f80fc0a0c8ead4c4e71a15"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad85ce3bfc53ff754988d36bf5de39e21"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad85ce3bfc53ff754988d36bf5de39e21"></a>
<tr class="memitem:gad85ce3bfc53ff754988d36bf5de39e21"><td class="memItemLeft" align="right" valign="top"><a id="gad85ce3bfc53ff754988d36bf5de39e21"></a>
LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b>lws_uv_initloop</b> (struct lws_context *context, uv_loop_t *loop, int tsi)</td></tr>
<tr class="separator:gad85ce3bfc53ff754988d36bf5de39e21"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa5e3593c94f91910d9d928dfa0c18f6c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa5e3593c94f91910d9d928dfa0c18f6c"></a>
<tr class="memitem:gaa5e3593c94f91910d9d928dfa0c18f6c"><td class="memItemLeft" align="right" valign="top"><a id="gaa5e3593c94f91910d9d928dfa0c18f6c"></a>
LWS_VISIBLE LWS_EXTERN uv_loop_t *&#160;</td><td class="memItemRight" valign="bottom"><b>lws_uv_getloop</b> (struct lws_context *context, int tsi)</td></tr>
<tr class="separator:gaa5e3593c94f91910d9d928dfa0c18f6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac5f60dba13a45e5d554b4fb7df7b9610"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac5f60dba13a45e5d554b4fb7df7b9610"></a>
<tr class="memitem:gac5f60dba13a45e5d554b4fb7df7b9610"><td class="memItemLeft" align="right" valign="top"><a id="gac5f60dba13a45e5d554b4fb7df7b9610"></a>
LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><b>lws_uv_sigint_cb</b> (uv_signal_t *watcher, int signum)</td></tr>
<tr class="separator:gac5f60dba13a45e5d554b4fb7df7b9610"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
@ -99,7 +98,7 @@ LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Vhost mounts and options</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -94,7 +93,9 @@ Enumerations</h2></td></tr>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>Vhost mounts and options</h2>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a class="anchor" id="ga31eca18e50cb4357480f2fcad36ff437"></a>
<a id="ga31eca18e50cb4357480f2fcad36ff437"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga31eca18e50cb4357480f2fcad36ff437">&#9670;&nbsp;</a></span>lws_mount_protocols</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -107,35 +108,28 @@ Enumerations</h2></td></tr>
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p>enum lws_mount_protocols This specifies the mount protocol for a mountpoint, whether it is to be served from a filesystem, or it is a cgi etc. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0"></a>LWSMPRO_HTTP&#160;</td><td class="fielddoc">
<p>not supported yet </p>
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0"></a>LWSMPRO_HTTP&#160;</td><td class="fielddoc"><p>not supported yet </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1"></a>LWSMPRO_HTTPS&#160;</td><td class="fielddoc">
<p>not supported yet </p>
<tr><td class="fieldname"><a id="gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1"></a>LWSMPRO_HTTPS&#160;</td><td class="fielddoc"><p>not supported yet </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2"></a>LWSMPRO_FILE&#160;</td><td class="fielddoc">
<p>serve from filesystem directory </p>
<tr><td class="fieldname"><a id="gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2"></a>LWSMPRO_FILE&#160;</td><td class="fielddoc"><p>serve from filesystem directory </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69"></a>LWSMPRO_CGI&#160;</td><td class="fielddoc">
<p>pass to CGI to handle </p>
<tr><td class="fieldname"><a id="gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69"></a>LWSMPRO_CGI&#160;</td><td class="fielddoc"><p>pass to CGI to handle </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970"></a>LWSMPRO_REDIR_HTTP&#160;</td><td class="fielddoc">
<p>redirect to <a href="http://">http://</a> url </p>
<tr><td class="fieldname"><a id="gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970"></a>LWSMPRO_REDIR_HTTP&#160;</td><td class="fielddoc"><p>redirect to <a href="http://">http://</a> url </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67"></a>LWSMPRO_REDIR_HTTPS&#160;</td><td class="fielddoc">
<p>redirect to <a href="https://">https://</a> url </p>
<tr><td class="fieldname"><a id="gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67"></a>LWSMPRO_REDIR_HTTPS&#160;</td><td class="fielddoc"><p>redirect to <a href="https://">https://</a> url </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da"></a>LWSMPRO_CALLBACK&#160;</td><td class="fielddoc">
<p>hand by named protocol's callback </p>
<tr><td class="fieldname"><a id="gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da"></a>LWSMPRO_CALLBACK&#160;</td><td class="fielddoc"><p>hand by named protocol's callback </p>
</td></tr>
</table>
<div class="fragment"><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>&#160; {</div><div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0">LWSMPRO_HTTP</a> = 0, </div><div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1">LWSMPRO_HTTPS</a> = 1, </div><div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2">LWSMPRO_FILE</a> = 2, </div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69">LWSMPRO_CGI</a> = 3, </div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970">LWSMPRO_REDIR_HTTP</a> = 4, </div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67">LWSMPRO_REDIR_HTTPS</a> = 5, </div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da">LWSMPRO_CALLBACK</a> = 6, </div><div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>&#160;};</div><div class="ttc" id="group__vhost-mounts_html_gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69"><div class="ttname"><a href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69">LWSMPRO_CGI</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1915</div></div>
<div class="ttc" id="group__vhost-mounts_html_gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1"><div class="ttname"><a href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1">LWSMPRO_HTTPS</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1913</div></div>
<div class="ttc" id="group__vhost-mounts_html_gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2"><div class="ttname"><a href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2">LWSMPRO_FILE</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1914</div></div>
<div class="ttc" id="group__vhost-mounts_html_gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970"><div class="ttname"><a href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970">LWSMPRO_REDIR_HTTP</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1916</div></div>
<div class="ttc" id="group__vhost-mounts_html_gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67"><div class="ttname"><a href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67">LWSMPRO_REDIR_HTTPS</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1917</div></div>
<div class="ttc" id="group__vhost-mounts_html_gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0"><div class="ttname"><a href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0">LWSMPRO_HTTP</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1912</div></div>
<div class="ttc" id="group__vhost-mounts_html_gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da"><div class="ttname"><a href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da">LWSMPRO_CALLBACK</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1918</div></div>
<div class="fragment"><div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>&#160; {</div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0">LWSMPRO_HTTP</a> = 0, </div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1">LWSMPRO_HTTPS</a> = 1, </div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2">LWSMPRO_FILE</a> = 2, </div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69">LWSMPRO_CGI</a> = 3, </div><div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970">LWSMPRO_REDIR_HTTP</a> = 4, </div><div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67">LWSMPRO_REDIR_HTTPS</a> = 5, </div><div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da">LWSMPRO_CALLBACK</a> = 6, </div><div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>&#160;};</div><div class="ttc" id="group__vhost-mounts_html_gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69"><div class="ttname"><a href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69">LWSMPRO_CGI</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1918</div></div>
<div class="ttc" id="group__vhost-mounts_html_gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1"><div class="ttname"><a href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1">LWSMPRO_HTTPS</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1916</div></div>
<div class="ttc" id="group__vhost-mounts_html_gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2"><div class="ttname"><a href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2">LWSMPRO_FILE</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1917</div></div>
<div class="ttc" id="group__vhost-mounts_html_gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970"><div class="ttname"><a href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970">LWSMPRO_REDIR_HTTP</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1919</div></div>
<div class="ttc" id="group__vhost-mounts_html_gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67"><div class="ttname"><a href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67">LWSMPRO_REDIR_HTTPS</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1920</div></div>
<div class="ttc" id="group__vhost-mounts_html_gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0"><div class="ttname"><a href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0">LWSMPRO_HTTP</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1915</div></div>
<div class="ttc" id="group__vhost-mounts_html_gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da"><div class="ttname"><a href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da">LWSMPRO_CALLBACK</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:1921</div></div>
</div><!-- fragment -->
</div>
</div>
@ -146,7 +140,7 @@ Enumerations</h2></td></tr>
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Websocket Close</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -103,7 +102,9 @@ Functions</h2></td></tr>
<h2>Websocket close frame control</h2>
<p>When we close a ws connection, we can send a reason code and a short UTF-8 description back with the close packet. </p>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a class="anchor" id="gae399c571df32ba532c0ca67da9284985"></a>
<a id="gae399c571df32ba532c0ca67da9284985"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gae399c571df32ba532c0ca67da9284985">&#9670;&nbsp;</a></span>lws_close_status</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -116,64 +117,53 @@ Functions</h2></td></tr>
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p>enum lws_close_status - RFC6455 close status codes </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4"></a>LWS_CLOSE_STATUS_NORMAL&#160;</td><td class="fielddoc">
<p>1000 indicates a normal closure, meaning that the purpose for which the connection was established has been fulfilled. </p>
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4"></a>LWS_CLOSE_STATUS_NORMAL&#160;</td><td class="fielddoc"><p>1000 indicates a normal closure, meaning that the purpose for which the connection was established has been fulfilled. </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218"></a>LWS_CLOSE_STATUS_GOINGAWAY&#160;</td><td class="fielddoc">
<p>1001 indicates that an endpoint is "going away", such as a server going down or a browser having navigated away from a page. </p>
<tr><td class="fieldname"><a id="ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218"></a>LWS_CLOSE_STATUS_GOINGAWAY&#160;</td><td class="fielddoc"><p>1001 indicates that an endpoint is "going away", such as a server going down or a browser having navigated away from a page. </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98"></a>LWS_CLOSE_STATUS_PROTOCOL_ERR&#160;</td><td class="fielddoc">
<p>1002 indicates that an endpoint is terminating the connection due to a protocol error. </p>
<tr><td class="fieldname"><a id="ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98"></a>LWS_CLOSE_STATUS_PROTOCOL_ERR&#160;</td><td class="fielddoc"><p>1002 indicates that an endpoint is terminating the connection due to a protocol error. </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="ggae399c571df32ba532c0ca67da9284985a462c99b05459df700919cfd3f53c8276"></a>LWS_CLOSE_STATUS_UNACCEPTABLE_OPCODE&#160;</td><td class="fielddoc">
<p>1003 indicates that an endpoint is terminating the connection because it has received a type of data it cannot accept (e.g., an endpoint that understands only text data MAY send this if it receives a binary message). </p>
<tr><td class="fieldname"><a id="ggae399c571df32ba532c0ca67da9284985a462c99b05459df700919cfd3f53c8276"></a>LWS_CLOSE_STATUS_UNACCEPTABLE_OPCODE&#160;</td><td class="fielddoc"><p>1003 indicates that an endpoint is terminating the connection because it has received a type of data it cannot accept (e.g., an endpoint that understands only text data MAY send this if it receives a binary message). </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2"></a>LWS_CLOSE_STATUS_RESERVED&#160;</td><td class="fielddoc">
<p>Reserved. The specific meaning might be defined in the future. </p>
<tr><td class="fieldname"><a id="ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2"></a>LWS_CLOSE_STATUS_RESERVED&#160;</td><td class="fielddoc"><p>Reserved. The specific meaning might be defined in the future. </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="ggae399c571df32ba532c0ca67da9284985a4b8a3b7ce6f731e5248e4b0fb64a5044"></a>LWS_CLOSE_STATUS_NO_STATUS&#160;</td><td class="fielddoc">
<p>1005 is a reserved value and MUST NOT be set as a status code in a Close control frame by an endpoint. It is designated for use in applications expecting a status code to indicate that no status code was actually present. </p>
<tr><td class="fieldname"><a id="ggae399c571df32ba532c0ca67da9284985a4b8a3b7ce6f731e5248e4b0fb64a5044"></a>LWS_CLOSE_STATUS_NO_STATUS&#160;</td><td class="fielddoc"><p>1005 is a reserved value and MUST NOT be set as a status code in a Close control frame by an endpoint. It is designated for use in applications expecting a status code to indicate that no status code was actually present. </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="ggae399c571df32ba532c0ca67da9284985a68b3d34bebd88547dcfa5cadba0acd6c"></a>LWS_CLOSE_STATUS_ABNORMAL_CLOSE&#160;</td><td class="fielddoc">
<p>1006 is a reserved value and MUST NOT be set as a status code in a Close control frame by an endpoint. It is designated for use in applications expecting a status code to indicate that the connection was closed abnormally, e.g., without sending or receiving a Close control frame. </p>
<tr><td class="fieldname"><a id="ggae399c571df32ba532c0ca67da9284985a68b3d34bebd88547dcfa5cadba0acd6c"></a>LWS_CLOSE_STATUS_ABNORMAL_CLOSE&#160;</td><td class="fielddoc"><p>1006 is a reserved value and MUST NOT be set as a status code in a Close control frame by an endpoint. It is designated for use in applications expecting a status code to indicate that the connection was closed abnormally, e.g., without sending or receiving a Close control frame. </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050"></a>LWS_CLOSE_STATUS_INVALID_PAYLOAD&#160;</td><td class="fielddoc">
<p>1007 indicates that an endpoint is terminating the connection because it has received data within a message that was not consistent with the type of the message (e.g., non-UTF-8 [RFC3629] data within a text message). </p>
<tr><td class="fieldname"><a id="ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050"></a>LWS_CLOSE_STATUS_INVALID_PAYLOAD&#160;</td><td class="fielddoc"><p>1007 indicates that an endpoint is terminating the connection because it has received data within a message that was not consistent with the type of the message (e.g., non-UTF-8 [RFC3629] data within a text message). </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5"></a>LWS_CLOSE_STATUS_POLICY_VIOLATION&#160;</td><td class="fielddoc">
<p>1008 indicates that an endpoint is terminating the connection because it has received a message that violates its policy. This is a generic status code that can be returned when there is no other more suitable status code (e.g., 1003 or 1009) or if there is a need to hide specific details about the policy. </p>
<tr><td class="fieldname"><a id="ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5"></a>LWS_CLOSE_STATUS_POLICY_VIOLATION&#160;</td><td class="fielddoc"><p>1008 indicates that an endpoint is terminating the connection because it has received a message that violates its policy. This is a generic status code that can be returned when there is no other more suitable status code (e.g., 1003 or 1009) or if there is a need to hide specific details about the policy. </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8"></a>LWS_CLOSE_STATUS_MESSAGE_TOO_LARGE&#160;</td><td class="fielddoc">
<p>1009 indicates that an endpoint is terminating the connection because it has received a message that is too big for it to process. </p>
<tr><td class="fieldname"><a id="ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8"></a>LWS_CLOSE_STATUS_MESSAGE_TOO_LARGE&#160;</td><td class="fielddoc"><p>1009 indicates that an endpoint is terminating the connection because it has received a message that is too big for it to process. </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e"></a>LWS_CLOSE_STATUS_EXTENSION_REQUIRED&#160;</td><td class="fielddoc">
<p>1010 indicates that an endpoint (client) is terminating the connection because it has expected the server to negotiate one or more extension, but the server didn't return them in the response message of the WebSocket handshake. The list of extensions that are needed SHOULD appear in the /reason/ part of the Close frame. Note that this status code is not used by the server, because it can fail the WebSocket handshake instead </p>
<tr><td class="fieldname"><a id="ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e"></a>LWS_CLOSE_STATUS_EXTENSION_REQUIRED&#160;</td><td class="fielddoc"><p>1010 indicates that an endpoint (client) is terminating the connection because it has expected the server to negotiate one or more extension, but the server didn't return them in the response message of the WebSocket handshake. The list of extensions that are needed SHOULD appear in the /reason/ part of the Close frame. Note that this status code is not used by the server, because it can fail the WebSocket handshake instead </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350"></a>LWS_CLOSE_STATUS_UNEXPECTED_CONDITION&#160;</td><td class="fielddoc">
<p>1011 indicates that a server is terminating the connection because it encountered an unexpected condition that prevented it from fulfilling the request. </p>
<tr><td class="fieldname"><a id="ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350"></a>LWS_CLOSE_STATUS_UNEXPECTED_CONDITION&#160;</td><td class="fielddoc"><p>1011 indicates that a server is terminating the connection because it encountered an unexpected condition that prevented it from fulfilling the request. </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390"></a>LWS_CLOSE_STATUS_TLS_FAILURE&#160;</td><td class="fielddoc">
<p>1015 is a reserved value and MUST NOT be set as a status code in a Close control frame by an endpoint. It is designated for use in applications expecting a status code to indicate that the connection was closed due to a failure to perform a TLS handshake (e.g., the server certificate can't be verified). </p>
<tr><td class="fieldname"><a id="ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390"></a>LWS_CLOSE_STATUS_TLS_FAILURE&#160;</td><td class="fielddoc"><p>1015 is a reserved value and MUST NOT be set as a status code in a Close control frame by an endpoint. It is designated for use in applications expecting a status code to indicate that the connection was closed due to a failure to perform a TLS handshake (e.g., the server certificate can't be verified). </p>
</td></tr>
</table>
<div class="fragment"><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; {</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; LWS_CLOSE_STATUS_NOSTATUS = 0,</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4">LWS_CLOSE_STATUS_NORMAL</a> = 1000,</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218">LWS_CLOSE_STATUS_GOINGAWAY</a> = 1001,</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98">LWS_CLOSE_STATUS_PROTOCOL_ERR</a> = 1002,</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a462c99b05459df700919cfd3f53c8276">LWS_CLOSE_STATUS_UNACCEPTABLE_OPCODE</a> = 1003,</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2">LWS_CLOSE_STATUS_RESERVED</a> = 1004,</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a4b8a3b7ce6f731e5248e4b0fb64a5044">LWS_CLOSE_STATUS_NO_STATUS</a> = 1005,</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a68b3d34bebd88547dcfa5cadba0acd6c">LWS_CLOSE_STATUS_ABNORMAL_CLOSE</a> = 1006,</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050">LWS_CLOSE_STATUS_INVALID_PAYLOAD</a> = 1007,</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5">LWS_CLOSE_STATUS_POLICY_VIOLATION</a> = 1008,</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8">LWS_CLOSE_STATUS_MESSAGE_TOO_LARGE</a> = 1009,</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e">LWS_CLOSE_STATUS_EXTENSION_REQUIRED</a> = 1010,</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350">LWS_CLOSE_STATUS_UNEXPECTED_CONDITION</a> = 1011,</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390">LWS_CLOSE_STATUS_TLS_FAILURE</a> = 1015,</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; <span class="comment">/****** add new things just above ---^ ******/</span></div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160;</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY = 9999,</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160;};</div><div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050">LWS_CLOSE_STATUS_INVALID_PAYLOAD</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:582</div></div>
<div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8">LWS_CLOSE_STATUS_MESSAGE_TOO_LARGE</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:593</div></div>
<div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390">LWS_CLOSE_STATUS_TLS_FAILURE</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:609</div></div>
<div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98">LWS_CLOSE_STATUS_PROTOCOL_ERR</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:561</div></div>
<div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5">LWS_CLOSE_STATUS_POLICY_VIOLATION</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:587</div></div>
<div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985a4b8a3b7ce6f731e5248e4b0fb64a5044"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a4b8a3b7ce6f731e5248e4b0fb64a5044">LWS_CLOSE_STATUS_NO_STATUS</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:571</div></div>
<div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985a68b3d34bebd88547dcfa5cadba0acd6c"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a68b3d34bebd88547dcfa5cadba0acd6c">LWS_CLOSE_STATUS_ABNORMAL_CLOSE</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:576</div></div>
<div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218">LWS_CLOSE_STATUS_GOINGAWAY</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:558</div></div>
<div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e">LWS_CLOSE_STATUS_EXTENSION_REQUIRED</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:597</div></div>
<div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4">LWS_CLOSE_STATUS_NORMAL</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:555</div></div>
<div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985a462c99b05459df700919cfd3f53c8276"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a462c99b05459df700919cfd3f53c8276">LWS_CLOSE_STATUS_UNACCEPTABLE_OPCODE</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:564</div></div>
<div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2">LWS_CLOSE_STATUS_RESERVED</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:569</div></div>
<div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350">LWS_CLOSE_STATUS_UNEXPECTED_CONDITION</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:605</div></div>
<div class="fragment"><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; {</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; LWS_CLOSE_STATUS_NOSTATUS = 0,</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4">LWS_CLOSE_STATUS_NORMAL</a> = 1000,</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218">LWS_CLOSE_STATUS_GOINGAWAY</a> = 1001,</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98">LWS_CLOSE_STATUS_PROTOCOL_ERR</a> = 1002,</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a462c99b05459df700919cfd3f53c8276">LWS_CLOSE_STATUS_UNACCEPTABLE_OPCODE</a> = 1003,</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2">LWS_CLOSE_STATUS_RESERVED</a> = 1004,</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a4b8a3b7ce6f731e5248e4b0fb64a5044">LWS_CLOSE_STATUS_NO_STATUS</a> = 1005,</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a68b3d34bebd88547dcfa5cadba0acd6c">LWS_CLOSE_STATUS_ABNORMAL_CLOSE</a> = 1006,</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050">LWS_CLOSE_STATUS_INVALID_PAYLOAD</a> = 1007,</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5">LWS_CLOSE_STATUS_POLICY_VIOLATION</a> = 1008,</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8">LWS_CLOSE_STATUS_MESSAGE_TOO_LARGE</a> = 1009,</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e">LWS_CLOSE_STATUS_EXTENSION_REQUIRED</a> = 1010,</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350">LWS_CLOSE_STATUS_UNEXPECTED_CONDITION</a> = 1011,</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390">LWS_CLOSE_STATUS_TLS_FAILURE</a> = 1015,</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="comment">/****** add new things just above ---^ ******/</span></div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160;</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY = 9999,</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160;};</div><div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050">LWS_CLOSE_STATUS_INVALID_PAYLOAD</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:585</div></div>
<div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8">LWS_CLOSE_STATUS_MESSAGE_TOO_LARGE</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:596</div></div>
<div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390">LWS_CLOSE_STATUS_TLS_FAILURE</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:612</div></div>
<div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98">LWS_CLOSE_STATUS_PROTOCOL_ERR</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:564</div></div>
<div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5">LWS_CLOSE_STATUS_POLICY_VIOLATION</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:590</div></div>
<div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985a4b8a3b7ce6f731e5248e4b0fb64a5044"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a4b8a3b7ce6f731e5248e4b0fb64a5044">LWS_CLOSE_STATUS_NO_STATUS</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:574</div></div>
<div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985a68b3d34bebd88547dcfa5cadba0acd6c"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a68b3d34bebd88547dcfa5cadba0acd6c">LWS_CLOSE_STATUS_ABNORMAL_CLOSE</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:579</div></div>
<div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218">LWS_CLOSE_STATUS_GOINGAWAY</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:561</div></div>
<div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e">LWS_CLOSE_STATUS_EXTENSION_REQUIRED</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:600</div></div>
<div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4">LWS_CLOSE_STATUS_NORMAL</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:558</div></div>
<div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985a462c99b05459df700919cfd3f53c8276"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a462c99b05459df700919cfd3f53c8276">LWS_CLOSE_STATUS_UNACCEPTABLE_OPCODE</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:567</div></div>
<div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2">LWS_CLOSE_STATUS_RESERVED</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:572</div></div>
<div class="ttc" id="group__wsclose_html_ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350"><div class="ttname"><a href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350">LWS_CLOSE_STATUS_UNEXPECTED_CONDITION</a></div><div class="ttdef"><b>Definition:</b> libwebsockets.h:608</div></div>
</div><!-- fragment -->
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="gaa1c863415d1783cd8de7938aa6efa262"></a>
<a id="gaa1c863415d1783cd8de7938aa6efa262"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaa1c863415d1783cd8de7938aa6efa262">&#9670;&nbsp;</a></span>lws_close_reason()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -216,7 +206,7 @@ Functions</h2></td></tr>
<tr><td class="paramname">wsi</td><td>The websocket connection to set the close reason on </td></tr>
<tr><td class="paramname">status</td><td>A valid close status from websocket standard </td></tr>
<tr><td class="paramname">buf</td><td>NULL or buffer containing up to 124 bytes of auxiliary data </td></tr>
<tr><td class="paramname">len</td><td>Length of data in </td></tr>
<tr><td class="paramname">len</td><td>Length of data in</td></tr>
<tr><td class="paramname">buf</td><td>to send </td></tr>
</table>
</dd>
@ -231,7 +221,7 @@ Functions</h2></td></tr>
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Websocket status APIs</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -89,7 +88,9 @@ Functions</h2></td></tr>
<h2>Websocket connection status APIs</h2>
<p>These provide information about ws connection or message status </p>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="gaccd9c59336efad8af0554f79cc5966fd"></a>
<a id="gaccd9c59336efad8af0554f79cc5966fd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaccd9c59336efad8af0554f79cc5966fd">&#9670;&nbsp;</a></span>lws_frame_is_binary()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -115,7 +116,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ga3df5045656dfb6b0e63a38de2dca79d2"></a>
<a id="ga3df5045656dfb6b0e63a38de2dca79d2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga3df5045656dfb6b0e63a38de2dca79d2">&#9670;&nbsp;</a></span>lws_get_reserved_bits()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -139,7 +142,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ga4ad226d5e01024b4046f4a5a37199aa1"></a>
<a id="ga4ad226d5e01024b4046f4a5a37199aa1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga4ad226d5e01024b4046f4a5a37199aa1">&#9670;&nbsp;</a></span>lws_is_cgi()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -163,7 +168,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ga08e9ee165fca503fd9427d55cfecac37"></a>
<a id="ga08e9ee165fca503fd9427d55cfecac37"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga08e9ee165fca503fd9427d55cfecac37">&#9670;&nbsp;</a></span>lws_is_final_fragment()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -187,7 +194,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ga26a140623d202dd2bf2004deb6994baa"></a>
<a id="ga26a140623d202dd2bf2004deb6994baa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga26a140623d202dd2bf2004deb6994baa">&#9670;&nbsp;</a></span>lws_is_ssl()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -213,7 +222,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="gaeca4afc94b1f026034f99cbba37e2f85"></a>
<a id="gaeca4afc94b1f026034f99cbba37e2f85"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaeca4afc94b1f026034f99cbba37e2f85">&#9670;&nbsp;</a></span>lws_partial_buffered()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -240,7 +251,9 @@ Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ga2bb3655329b4651cd06f79ee3a764421"></a>
<a id="ga2bb3655329b4651cd06f79ee3a764421"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga2bb3655329b4651cd06f79ee3a764421">&#9670;&nbsp;</a></span>lws_send_pipe_choked()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -272,7 +285,7 @@ Functions</h2></td></tr>
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Class Hierarchy</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,24 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
<li class="current"><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
</ul>
</div>
<!-- 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">
@ -111,7 +102,7 @@ $(document).ready(function(){initNavTree('hierarchy.html','');});
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Libwebsockets API introduction</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li class="current"><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -83,7 +82,7 @@ $(document).ready(function(){initNavTree('index.html','');});
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

21
doc/html/jquery.js vendored

File diff suppressed because one or more lines are too long

View file

@ -3,7 +3,8 @@
<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.11"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: lib/libwebsockets.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,22 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
<!-- 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">
@ -140,22 +133,22 @@ Data Structures</h2></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:abddb8d337fb2692586d892b494739003"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abddb8d337fb2692586d892b494739003"></a>
<tr class="memitem:abddb8d337fb2692586d892b494739003"><td class="memItemLeft" align="right" valign="top"><a id="abddb8d337fb2692586d892b494739003"></a>
typedef struct <a class="el" href="structlws__polarssl__context.html">lws_polarssl_context</a>&#160;</td><td class="memItemRight" valign="bottom"><b>SSL_CTX</b></td></tr>
<tr class="separator:abddb8d337fb2692586d892b494739003"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac3abb8b7e6d29a0292797230e4031681"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac3abb8b7e6d29a0292797230e4031681"></a>
<tr class="memitem:ac3abb8b7e6d29a0292797230e4031681"><td class="memItemLeft" align="right" valign="top"><a id="ac3abb8b7e6d29a0292797230e4031681"></a>
typedef ssl_context&#160;</td><td class="memItemRight" valign="bottom"><b>SSL</b></td></tr>
<tr class="separator:ac3abb8b7e6d29a0292797230e4031681"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adedbc79528b71a5c7f27cde87100c9aa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adedbc79528b71a5c7f27cde87100c9aa"></a>
<tr class="memitem:adedbc79528b71a5c7f27cde87100c9aa"><td class="memItemLeft" align="right" valign="top"><a id="adedbc79528b71a5c7f27cde87100c9aa"></a>
typedef SOCKET&#160;</td><td class="memItemRight" valign="bottom"><b>lws_sockfd_type</b></td></tr>
<tr class="separator:adedbc79528b71a5c7f27cde87100c9aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aff42d53861afdc1a6edfb999ba688ecb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aff42d53861afdc1a6edfb999ba688ecb"></a>
<tr class="memitem:aff42d53861afdc1a6edfb999ba688ecb"><td class="memItemLeft" align="right" valign="top"><a id="aff42d53861afdc1a6edfb999ba688ecb"></a>
typedef HANDLE&#160;</td><td class="memItemRight" valign="bottom"><b>lws_filefd_type</b></td></tr>
<tr class="separator:aff42d53861afdc1a6edfb999ba688ecb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1b12016562c728eb306c7f954c804bef"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1b12016562c728eb306c7f954c804bef"></a>
<tr class="memitem:a1b12016562c728eb306c7f954c804bef"><td class="memItemLeft" align="right" valign="top"><a id="a1b12016562c728eb306c7f954c804bef"></a>
typedef os_timer_t&#160;</td><td class="memItemRight" valign="bottom"><b>uv_timer_t</b></td></tr>
<tr class="separator:a1b12016562c728eb306c7f954c804bef"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a27551d6899b1e4de4b2b5854e805c6eb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a27551d6899b1e4de4b2b5854e805c6eb"></a>
<tr class="memitem:a27551d6899b1e4de4b2b5854e805c6eb"><td class="memItemLeft" align="right" valign="top"><a id="a27551d6899b1e4de4b2b5854e805c6eb"></a>
typedef void&#160;</td><td class="memItemRight" valign="bottom"><b>uv_cb_t</b>(uv_timer_t *)</td></tr>
<tr class="separator:a27551d6899b1e4de4b2b5854e805c6eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad4fcb82e68d60ffacca61a3f783a0a2f"><td class="memItemLeft" align="right" valign="top">typedef int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__usercb.html#gad4fcb82e68d60ffacca61a3f783a0a2f">lws_callback_function</a>(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>
@ -173,13 +166,13 @@ typedef const char *(*&#160;</td><td class="memItemRight" valign="bottom"><b>lws
<tr class="separator:ga669d3d7ce2d5f193473f649a89b3e7ac"><td class="memSeparator" colspan="2">&#160;</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>
<tr class="memitem:ga3b0ffd4d2b4fa791c0fd75353a330208"><td class="memItemLeft" align="right" valign="top">
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:ga3b0ffd4d2b4fa791c0fd75353a330208"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga3fd389d64c6fa45a3c1427d2f6988741"><td class="memItemLeft" align="right" valign="top">
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="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ga14542b84d2c76efa7814124bb10f9c5f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga14542b84d2c76efa7814124bb10f9c5f"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>lws_log_levels</b> { <br />
<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,
@ -295,7 +288,7 @@ Enumerations</h2></td></tr>
<br />
}</td></tr>
<tr class="separator:gad62860e19975ba4c4af401c3cdb6abf7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae9993815eee72c6070300a0ae2f022d7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae9993815eee72c6070300a0ae2f022d7"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>lws_extension_callback_reasons</b> { <br />
<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,
@ -390,7 +383,7 @@ Enumerations</h2></td></tr>
<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>
<tr class="memitem:gabc3b93f68c8bdd857ad32913628dfa8d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gabc3b93f68c8bdd857ad32913628dfa8d"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>http_status</b> { <br />
<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,
@ -430,7 +423,7 @@ Enumerations</h2></td></tr>
<br />
}</td></tr>
<tr class="separator:gabc3b93f68c8bdd857ad32913628dfa8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga6e747906f9d76532ec118d6ef418b82e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6e747906f9d76532ec118d6ef418b82e"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>lws_token_indexes</b> { <br />
<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,
@ -553,7 +546,7 @@ Enumerations</h2></td></tr>
<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>
<tr class="memitem:ga2c0aa4b9c3c55bae7b35cbfac3246c87"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2c0aa4b9c3c55bae7b35cbfac3246c87"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>pending_timeout</b> { <br />
<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,
@ -596,12 +589,12 @@ Enumerations</h2></td></tr>
<br />
}</td></tr>
<tr class="separator:ga98b099cf8c1c7e38ad78501f270e193d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2271141d8be8d72b47ba327130b4905f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2271141d8be8d72b47ba327130b4905f"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>lws_enum_stdinouterr</b> { <b>LWS_STDIN</b> = 0,
<tr class="memitem:a2271141d8be8d72b47ba327130b4905f"><td class="memItemLeft" align="right" valign="top"><a id="a2271141d8be8d72b47ba327130b4905f"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>lws_enum_stdinouterr</b> { <b>LWS_STDIN</b> = 0,
<b>LWS_STDOUT</b> = 1,
<b>LWS_STDERR</b> = 2
}</td></tr>
<tr class="separator:a2271141d8be8d72b47ba327130b4905f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a42394a38f08a97420c98127358cfeedb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a42394a38f08a97420c98127358cfeedb"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>lws_cgi_hdr_state</b> { <br />
<tr class="memitem:a42394a38f08a97420c98127358cfeedb"><td class="memItemLeft" align="right" valign="top"><a id="a42394a38f08a97420c98127358cfeedb"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>lws_cgi_hdr_state</b> { <br />
&#160;&#160;<b>LCHS_HEADER</b>,
<b>LCHS_CR1</b>,
<b>LCHS_LF1</b>,
@ -631,9 +624,9 @@ Enumerations</h2></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:gaf5f07837692b2f231a79da8a058288aa"><td class="memItemLeft" align="right" valign="top">
LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><b>_lws_log</b> (int filter, const char *format,...)</td></tr>
<tr class="separator:gaf5f07837692b2f231a79da8a058288aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga0cdc1065ae7f003d59a3c8525acf545e"><td class="memItemLeft" align="right" valign="top">
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">
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>
@ -645,34 +638,34 @@ LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><
<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>
<tr class="memitem:a0b056fdcf949a838ff82209b4a627dd9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0b056fdcf949a838ff82209b4a627dd9"></a>
<tr class="memitem:a0b056fdcf949a838ff82209b4a627dd9"><td class="memItemLeft" align="right" valign="top"><a id="a0b056fdcf949a838ff82209b4a627dd9"></a>
void *&#160;</td><td class="memItemRight" valign="bottom"><b>mbed3_create_tcp_stream_socket</b> (void)</td></tr>
<tr class="separator:a0b056fdcf949a838ff82209b4a627dd9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aefb2f20fe5bb29d79701a399838ef4ce"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aefb2f20fe5bb29d79701a399838ef4ce"></a>
<tr class="memitem:aefb2f20fe5bb29d79701a399838ef4ce"><td class="memItemLeft" align="right" valign="top"><a id="aefb2f20fe5bb29d79701a399838ef4ce"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>mbed3_delete_tcp_stream_socket</b> (void *sockfd)</td></tr>
<tr class="separator:aefb2f20fe5bb29d79701a399838ef4ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9f2a8506fd963db95a5103823c60fb0a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9f2a8506fd963db95a5103823c60fb0a"></a>
<tr class="memitem:a9f2a8506fd963db95a5103823c60fb0a"><td class="memItemLeft" align="right" valign="top"><a id="a9f2a8506fd963db95a5103823c60fb0a"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>mbed3_tcp_stream_bind</b> (void *sock, int port, struct lws *)</td></tr>
<tr class="separator:a9f2a8506fd963db95a5103823c60fb0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9032a3062641d334161c29adcc4fa15d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9032a3062641d334161c29adcc4fa15d"></a>
<tr class="memitem:a9032a3062641d334161c29adcc4fa15d"><td class="memItemLeft" align="right" valign="top"><a id="a9032a3062641d334161c29adcc4fa15d"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>mbed3_tcp_stream_accept</b> (void *sock, struct lws *)</td></tr>
<tr class="separator:a9032a3062641d334161c29adcc4fa15d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4e877a4f0bb027d05d3a90c8e6a632de"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4e877a4f0bb027d05d3a90c8e6a632de"></a>
<tr class="memitem:a4e877a4f0bb027d05d3a90c8e6a632de"><td class="memItemLeft" align="right" valign="top"><a id="a4e877a4f0bb027d05d3a90c8e6a632de"></a>
lws_sockfd_type&#160;</td><td class="memItemRight" valign="bottom"><b>esp8266_create_tcp_listen_socket</b> (struct lws_vhost *vh)</td></tr>
<tr class="separator:a4e877a4f0bb027d05d3a90c8e6a632de"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9b1bfc6f34319188d2aa40500d825bab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9b1bfc6f34319188d2aa40500d825bab"></a>
<tr class="memitem:a9b1bfc6f34319188d2aa40500d825bab"><td class="memItemLeft" align="right" valign="top"><a id="a9b1bfc6f34319188d2aa40500d825bab"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>esp8266_tcp_stream_accept</b> (lws_sockfd_type fd, struct lws *wsi)</td></tr>
<tr class="separator:a9b1bfc6f34319188d2aa40500d825bab"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a75e9827318684877deb4189121a8cd2a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a75e9827318684877deb4189121a8cd2a"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>ets_snprintf</b> (char *str, size_t size, const char *format,...)</td></tr>
<tr class="separator:a75e9827318684877deb4189121a8cd2a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a863bdd5bca33bcbaa424c42fb7b2fc96"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a863bdd5bca33bcbaa424c42fb7b2fc96"></a>
<tr class="memitem:a71451ba21aadc2fa3e25674d04c31ab7"><td class="memItemLeft" align="right" valign="top"><a id="a71451ba21aadc2fa3e25674d04c31ab7"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>ets_snprintf</b> (char *str, size_t size, const char *format,...) LWS_FORMAT(3)</td></tr>
<tr class="separator:a71451ba21aadc2fa3e25674d04c31ab7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a863bdd5bca33bcbaa424c42fb7b2fc96"><td class="memItemLeft" align="right" valign="top"><a id="a863bdd5bca33bcbaa424c42fb7b2fc96"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>os_timer_disarm</b> (void *)</td></tr>
<tr class="separator:a863bdd5bca33bcbaa424c42fb7b2fc96"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a17f5fc891b31d2920bd18b0d66d6cb25"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a17f5fc891b31d2920bd18b0d66d6cb25"></a>
<tr class="memitem:a17f5fc891b31d2920bd18b0d66d6cb25"><td class="memItemLeft" align="right" valign="top"><a id="a17f5fc891b31d2920bd18b0d66d6cb25"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>os_timer_setfn</b> (os_timer_t *, os_timer_func_t *, void *)</td></tr>
<tr class="separator:a17f5fc891b31d2920bd18b0d66d6cb25"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9b878fb94f4596226c982eef4f42a607"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9b878fb94f4596226c982eef4f42a607"></a>
<tr class="memitem:a9b878fb94f4596226c982eef4f42a607"><td class="memItemLeft" align="right" valign="top"><a id="a9b878fb94f4596226c982eef4f42a607"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>ets_timer_arm_new</b> (os_timer_t *, int, int, int)</td></tr>
<tr class="separator:a9b878fb94f4596226c982eef4f42a607"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa1c863415d1783cd8de7938aa6efa262"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wsclose.html#gaa1c863415d1783cd8de7938aa6efa262">lws_close_reason</a> (struct lws *wsi, enum <a class="el" href="group__wsclose.html#gae399c571df32ba532c0ca67da9284985">lws_close_status</a> status, unsigned char *buf, size_t len)</td></tr>
@ -872,8 +865,8 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
<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>
<tr class="memitem:ga9f37d0e357de2ab4170723fcdb665d21"><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#ga9f37d0e357de2ab4170723fcdb665d21">lws_snprintf</a> (char *str, size_t size, const char *format,...)</td></tr>
<tr class="separator:ga9f37d0e357de2ab4170723fcdb665d21"><td class="memSeparator" colspan="2">&#160;</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>
@ -935,7 +928,9 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
<tr class="separator:ga25298a5afc1074e13b2d5711a86432b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="af52923473c59e643a974d65e12290831"></a>
<a id="af52923473c59e643a974d65e12290831"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af52923473c59e643a974d65e12290831">&#9670;&nbsp;</a></span>lws_cgi()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -990,7 +985,9 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
</div>
</div>
<a class="anchor" id="a27bb0b3cdcd0af839c928c253b521ff4"></a>
<a id="a27bb0b3cdcd0af839c928c253b521ff4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a27bb0b3cdcd0af839c928c253b521ff4">&#9670;&nbsp;</a></span>lws_cgi_kill()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -1013,7 +1010,9 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
</div>
</div>
<a class="anchor" id="a5326d3402af8429a166dd991dc65c4a2"></a>
<a id="a5326d3402af8429a166dd991dc65c4a2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5326d3402af8429a166dd991dc65c4a2">&#9670;&nbsp;</a></span>lws_cgi_write_split_stdout_headers()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -1036,7 +1035,9 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
</div>
</div>
<a class="anchor" id="a72fe65e83b8bb03f904a1a256c673536"></a>
<a id="a72fe65e83b8bb03f904a1a256c673536"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a72fe65e83b8bb03f904a1a256c673536">&#9670;&nbsp;</a></span>lws_remaining_packet_payload()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -1060,7 +1061,9 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
</div>
</div>
<a class="anchor" id="a5e627dbf1db48170ef486edbaf268672"></a>
<a id="a5e627dbf1db48170ef486edbaf268672"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5e627dbf1db48170ef486edbaf268672">&#9670;&nbsp;</a></span>lws_rx_flow_allow_all_protocol()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -1094,7 +1097,9 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
</div>
</div>
<a class="anchor" id="adf4abd01e8c43f07c6e498ce13590c3e"></a>
<a id="adf4abd01e8c43f07c6e498ce13590c3e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adf4abd01e8c43f07c6e498ce13590c3e">&#9670;&nbsp;</a></span>lws_rx_flow_control()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -1137,7 +1142,7 @@ LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b
<li class="navelem"><a class="el" href="dir_97aefd0d527b934f1d99a682da8fe6a9.html">lib</a></li><li class="navelem"><a class="el" href="libwebsockets_8h.html">libwebsockets.h</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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -9,7 +9,7 @@ var libwebsockets_8h =
[ "lws_pollargs", "structlws__pollargs.html", "structlws__pollargs" ],
[ "lws_cgi_args", "structlws__cgi__args.html", "structlws__cgi__args" ],
[ "lws_callback_function", "group__usercb.html#gad4fcb82e68d60ffacca61a3f783a0a2f", null ],
[ "lws_ev_signal_cb_t", "group__ev.html#ga3b0ffd4d2b4fa791c0fd75353a330208", null ],
[ "lws_ev_signal_cb_t", "group__ev.html#ga3fd389d64c6fa45a3c1427d2f6988741", null ],
[ "lws_extension_callback_function", "group__extensions.html#gaae7169b2cd346b34fa33d0250db2afd0", null ],
[ "lws_filefd_type", "libwebsockets_8h.html#aff42d53861afdc1a6edfb999ba688ecb", null ],
[ "lws_plugin_destroy_func", "group__Protocols-and-Plugins.html#ga83f7a924ba790fa273476075a59f08b0", null ],
@ -378,11 +378,11 @@ var libwebsockets_8h =
[ "PENDING_TIMEOUT_WS_PONG_CHECK_GET_PONG", "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a62ae208399be1f872e14843fd15f9e06", null ],
[ "PENDING_TIMEOUT_CLIENT_ISSUE_PAYLOAD", "group__timeout.html#gga2c0aa4b9c3c55bae7b35cbfac3246c87a8587dc22f946c45e2f38c4045479fda5", null ]
] ],
[ "_lws_log", "group__log.html#gaf5f07837692b2f231a79da8a058288aa", null ],
[ "_lws_log", "group__log.html#ga0cdc1065ae7f003d59a3c8525acf545e", null ],
[ "_lws_logv", "group__log.html#ga74eb146969f0595e12ea835851b4588e", null ],
[ "esp8266_create_tcp_listen_socket", "libwebsockets_8h.html#a4e877a4f0bb027d05d3a90c8e6a632de", null ],
[ "esp8266_tcp_stream_accept", "libwebsockets_8h.html#a9b1bfc6f34319188d2aa40500d825bab", null ],
[ "ets_snprintf", "libwebsockets_8h.html#a75e9827318684877deb4189121a8cd2a", null ],
[ "ets_snprintf", "libwebsockets_8h.html#a71451ba21aadc2fa3e25674d04c31ab7", null ],
[ "ets_timer_arm_new", "libwebsockets_8h.html#a9b878fb94f4596226c982eef4f42a607", null ],
[ "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 ],
@ -486,7 +486,7 @@ var libwebsockets_8h =
[ "lws_set_proxy", "group__context-and-vhost.html#ga7e9d5405547a457d86e0b4f0ae2bb1c4", null ],
[ "lws_set_timeout", "group__timeout.html#gaced9f9237f6172fed9f730a2af51345a", null ],
[ "lws_SHA1", "group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5", null ],
[ "lws_snprintf", "group__misc.html#ga9f37d0e357de2ab4170723fcdb665d21", null ],
[ "lws_snprintf", "group__misc.html#ga2163492f17db959a36967adb73d823b4", 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 ],

File diff suppressed because one or more lines are too long

View file

@ -1,181 +0,0 @@
<!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.11"/>
<title>libwebsockets: Notes about generic-sessions Plugin</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);
$(window).load(resizeHeight);
</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.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</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('md_README.generic-sessions.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="headertitle">
<div class="title">Notes about generic-sessions Plugin </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1><a class="anchor" id="gseb"></a>
Enabling lwsgs for build</h1>
<p>Enable at CMake with -DLWS_WITH_GENERIC_SESSIONS=1</p>
<p>This also needs sqlite3 (libsqlite3-dev or similar package)</p>
<h1><a class="anchor" id="gsi"></a>
lwsgs Introduction</h1>
<p>The generic-sessions protocol plugin provides cookie-based login authentication for lws web and ws connections.</p>
<p>The plugin handles everything about generic account registration, email verification, lost password, account deletion, and other generic account management.</p>
<p>Other code, in another eg, ws protocol handler, only needs very high-level state information from generic-sessions, ie, which user the client is authenticated as. Everything underneath is managed in generic-sessions.</p>
<ul>
<li>random 20-byte session id managed in a cookie</li>
<li>all information related to the session held at the server, nothing managed clientside</li>
<li>sqlite3 used at the server to manage active sessions and users</li>
<li>defaults to creating anonymous sessions with no user associated</li>
<li>admin account (with user-selectable username) is defined in config with a SHA-1 of the password; rest of the accounts are in sqlite3</li>
<li>user account passwords stored as salted SHA-1 with additional confounder only stored in the JSON config, not the database</li>
<li>login, logout, register account + email verification built-in with examples</li>
<li>in a mount, some file suffixes (ie, .js) can be associated with a protocol for the purposes of rewriting symbolnames. These are read-only copies of logged-in server state.</li>
<li>When your page fetches .js or other rewritten files from that mount, "$lwsgs_user" and so on are rewritten on the fly using chunked transfer encoding</li>
<li>Eliminates server-side scripting with a few rewritten symbols and javascript on client side</li>
<li>32-bit bitfield for authentication sectoring, mounts can provide a mask on the loggin-in session's associated server-side bitfield that must be set for access.</li>
<li>No code (just config) required for, eg, private URL namespace that requires login to access.</li>
</ul>
<h1><a class="anchor" id="gsin"></a>
Lwsgs Integration to HTML</h1>
<p>Only three steps are needed to integrate lwsgs in your HTML.</p>
<p>1) lwsgs HTML UI is bundled with the javascript it uses in <code>lwsgs.js</code>, so import that script file in your head section</p>
<p>2) define an empty div of id "lwsgs" somewhere</p>
<p>3) Call lwsgs_initial() in your page</p>
<p>That's it. An example is below</p>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;&lt;html&gt;</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160; &lt;head&gt;</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160; &lt;script src=&quot;lwsgs.js&quot;&gt;&lt;/script&gt;</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160; &lt;style&gt;</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; .body { font-size: 12 }</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160; .gstitle { font-size: 18 }</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; &lt;/style&gt;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; &lt;/head&gt;</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; &lt;body style=&quot;background-image:url(seats.jpg)&quot;&gt;</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160; &lt;table style=&quot;width:100%;transition: max-height 2s;&quot;&gt;</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; &lt;tr&gt;</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; &lt;td style=&quot;vertical-align:top;text-align:left;width=200px&quot;&gt;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; &lt;img src=&quot;lwsgs-logo.png&quot;&gt;</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; &lt;/td&gt;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; &lt;td style=&quot;vertical-align:top;float:right&quot;&gt;</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; &lt;div id=lwsgs style=&quot;text-align:right;background-color: rgba(255, 255, 255, 0.8);&quot;&gt;&lt;/div&gt;</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; &lt;/td&gt;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; &lt;/tr&gt;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; &lt;/table&gt;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; &lt;/form&gt;</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; &lt;script&gt;lwsgs_initial();&lt;/script&gt;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; &lt;/body&gt;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;&lt;/html&gt;</div></div><!-- fragment --><h1><a class="anchor" id="gsof"></a>
Lwsgs Overall Flow@</h1>
<p>When the protocol is initialized, it gets per-vhost information from the config, such as where the sqlite3 databases are to be stored. The admin username and sha-1 of the admin password are also taken from here.</p>
<p>In the mounts using protocol-generic-sessions, a cookie is maintained against any requests; if no cookie was active on the initial request a new session is created with no attached user.</p>
<p>So there should always be an active session after any transactions with the server.</p>
<p>In the example html going to the mount /lwsgs loads a login / register page as the default.</p>
<p>The &lt;form&gt; in the login page contains 'next url' hidden inputs that let the html 'program' where the form handler will go after a successful admin login, a successful user login and a failed login.</p>
<p>After a successful login, the sqlite record at the server for the current session is updated to have the logged-in username associated with it.</p>
<h1><a class="anchor" id="gsconf"></a>
Lwsgs Configuration</h1>
<p>"auth-mask" defines the authorization sector bits that must be enabled on the session to gain access.</p>
<p>"auth-mask" 0 is the default.</p>
<ul>
<li>b0 is set if you are logged in as a user at all.</li>
<li>b1 is set if you are logged in with the user configured to be admin</li>
<li>b2 is set if the account has been verified (the account configured for admin is always verified)</li>
<li>b3 is set if your session just did the forgot password flow successfully</li>
</ul>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;{</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160; # things in here can always be served</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160; &quot;mountpoint&quot;: &quot;/lwsgs&quot;,</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160; &quot;origin&quot;: &quot;file:///usr/share/libwebsockets-test-server/generic-sessions&quot;,</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; &quot;origin&quot;: &quot;callback://protocol-lws-messageboard&quot;,</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160; &quot;default&quot;: &quot;generic-sessions-login-example.html&quot;,</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; &quot;auth-mask&quot;: &quot;0&quot;,</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; &quot;interpret&quot;: {</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; &quot;.js&quot;: &quot;protocol-lws-messageboard&quot;</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160; }</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; }, {</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; # things in here can only be served if logged in as a user</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; &quot;mountpoint&quot;: &quot;/lwsgs/needauth&quot;,</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; &quot;origin&quot;: &quot;file:///usr/share/libwebsockets-test-server/generic-sessions/needauth&quot;,</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; &quot;origin&quot;: &quot;callback://protocol-lws-messageboard&quot;,</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; &quot;default&quot;: &quot;generic-sessions-login-example.html&quot;,</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; &quot;auth-mask&quot;: &quot;5&quot;, # logged in as a verified user</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; &quot;interpret&quot;: {</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; &quot;.js&quot;: &quot;protocol-lws-messageboard&quot;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; }</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; }, {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; # things in here can only be served if logged in as admin</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; &quot;mountpoint&quot;: &quot;/lwsgs/needadmin&quot;,</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; &quot;origin&quot;: &quot;file:///usr/share/libwebsockets-test-server/generic-sessions/needadmin&quot;,</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; &quot;origin&quot;: &quot;callback://protocol-lws-messageboard&quot;,</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; &quot;default&quot;: &quot;generic-sessions-login-example.html&quot;,</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; &quot;auth-mask&quot;: &quot;7&quot;, # b2 = verified (by email / or admin), b1 = admin, b0 = logged in with any user name</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; &quot;interpret&quot;: {</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; &quot;.js&quot;: &quot;protocol-lws-messageboard&quot;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; }</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; }</div></div><!-- fragment --><p> Note that the name of the real application protocol that uses generic-sessions is used, not generic-sessions itself.</p>
<p>The vhost configures the storage dir, admin credentials and session cookie lifetimes:</p>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160; &quot;ws-protocols&quot;: [{</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160; &quot;protocol-generic-sessions&quot;: {</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160; &quot;status&quot;: &quot;ok&quot;,</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160; &quot;admin-user&quot;: &quot;admin&quot;,</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;# create the pw hash like this (for the example pw, &quot;jipdocesExunt&quot; )</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;# $ echo -n &quot;jipdocesExunt&quot; | sha1sum</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;# 046ce9a9cca769e85798133be06ef30c9c0122c9 -</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;#</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;# Obviously ** change this password hash to a secret one before deploying **</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;#</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; &quot;admin-password-sha1&quot;: &quot;046ce9a9cca769e85798133be06ef30c9c0122c9&quot;,</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; &quot;session-db&quot;: &quot;/var/www/sessions/lws.sqlite3&quot;,</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; &quot;timeout-idle-secs&quot;: &quot;600&quot;,</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; &quot;timeout-anon-idle-secs&quot;: &quot;1200&quot;,</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; &quot;timeout-absolute-secs&quot;: &quot;6000&quot;,</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;# the confounder is part of the salted password hashes. If this config</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;# file is in a 0700 root:root dir, an attacker with apache credentials</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;# will have to get the confounder out of the process image to even try</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;# to guess the password hashes.</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; &quot;confounder&quot;: &quot;Change to &lt;=31 chars of junk&quot;,</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; &quot;email-from&quot;: &quot;noreply@example.com&quot;,</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; &quot;email-smtp-ip&quot;: &quot;127.0.0.1&quot;,</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; &quot;email-expire&quot;: &quot;3600&quot;,</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; &quot;email-helo&quot;: &quot;myhost.com&quot;,</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; &quot;email-contact-person&quot;: &quot;Set Me &lt;real-person@email.com&gt;&quot;,</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; &quot;email-confirm-url-base&quot;: &quot;http://localhost:7681/lwsgs&quot;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; }</div></div><!-- fragment --><p>The email- related settings control generation of automatic emails for registration and forgotten password.</p>
<ul>
<li><code>email-from</code>: The email address automatic emails are sent from</li>
<li><code>email-smtp-ip</code>: Normally 127.0.0.1, if you have a suitable server on port 25 on your lan you can use this instead here.</li>
<li><code>email-expire</code>: Seconds that links sent in email will work before being deleted</li>
<li><code>email-helo</code>: HELO to use when communicating with your SMTP server</li>
<li><code>email-contact-person</code>: mentioned in the automatic emails as a human who can answer questions</li>
<li><code>email-confirm-url-base</code>: the URL to start links with in the emails, so the recipient can get back to the web server</li>
</ul>
<p>The real protocol that makes use of generic-sessions must also be listed and any configuration it needs given</p>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;&quot;protocol-lws-messageboard&quot;: {</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160; &quot;status&quot;: &quot;ok&quot;,</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160; &quot;message-db&quot;: &quot;/var/www/sessions/messageboard.sqlite3&quot;</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;},</div></div><!-- fragment --><p>Notice the real application uses his own sqlite db, no details about how generic-sessions works or how it stores data are available to it.</p>
<h1><a class="anchor" id="gspwc"></a>
Lwsgs Password Confounder</h1>
<p>You can also define a per-vhost confounder shown in the example above, used when aggregating the password with the salt when it is hashed. Any attacker will also need to get the confounder along with the database, which you can make harder by making the config dir only eneterable / readable by root.</p>
<h1><a class="anchor" id="gsprep"></a>
Lwsgs Preparing the db directory</h1>
<p>You will have to prepare the db directory so it's suitable for the lwsws user to use, that usually means apache, eg</p>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;# mkdir -p /var/www/sessions</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;# chown root:apache /var/www/sessions</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;# chmod 770 /var/www/sessions</div></div><!-- fragment --><h1><a class="anchor" id="gsrmail"></a>
Lwsgs Email configuration</h1>
<p>lwsgs will can send emails by talking to an SMTP server on localhost:25. That will usually be sendmail or postfix, you should confirm that works first by itself using the <code>mail</code> application to send on it.</p>
<p>lwsgs has been tested on stock Fedora sendmail and postfix.</p>
<h1><a class="anchor" id="gsap"></a>
Lwsgs Integration with another protocol</h1>
<p>lwsgs is designed to provide sessions and accounts in a standalone and generic way.</p>
<p>But it's not useful by itself, there will always be the actual application who wants to make use of generic-sessions features.</p>
<p>We provide the "messageboard" plugin as an example of how to integrate with your actual application protocol.</p>
<p>The basic approach is the 'real' protocol handler (usually a plugin itself) subclasses the generic-sessions plugin and calls through to it by default.</p>
<p>The "real" protocol handler entirely deals with ws-related stuff itself, since generic-sessions does not use ws. But for</p>
<ul>
<li>LWS_CALLBACK_HTTP</li>
<li>LWS_CALLBACK_HTTP_BODY</li>
<li>LWS_CALLBACK_HTTP_BODY_COMPLETION</li>
<li>LWS_CALLBACK_HTTP_DROP_PROTOCOL</li>
</ul>
<p>the "real" protocol handler checks if it recognizes the activity (eg, his own POST form URL) and if not, passes stuff through to the generic-sessions protocol callback to handle it. To simplify matters the real protocol can just pass through any unhandled messages to generic-sessions.</p>
<p>The "real" protocol can get a pointer to generic-sessions protocol on the same vhost using</p>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;vhd-&gt;gsp = lws_vhost_name_to_protocol(vhd-&gt;vh, &quot;protocol-generic-sessions&quot;);</div></div><!-- fragment --><p>The "real" protocol must also arrange generic-sessions per_session_data in his own per-session allocation. To allow keeping generic-sessions opaque, the real protocol must allocate that space at runtime, using the pss size the generic-sessions protocol struct exposes</p>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;struct per_session_data__myapp {</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160; void *pss_gs;</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;...</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; pss-&gt;pss_gs = malloc(vhd-&gt;gsp-&gt;per_session_data_size);</div></div><!-- fragment --><p>The allocation reserved for generic-sessions is then used as user_space when the real protocol calls through to the generic-sessions callback</p>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;vhd-&gt;gsp-&gt;callback(wsi, reason, &amp;pss-&gt;pss_gs, in, len);</div></div><!-- fragment --><p>In that way the "real" protocol can subclass generic-sessions functionality.</p>
<p>To ease management of these secondary allocations, there are callbacks that occur when a wsi binds to a protocol and when the binding is dropped. These should be used to malloc and free and kind of per-connection secondary allocations.</p>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;case LWS_CALLBACK_HTTP_BIND_PROTOCOL:</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160; if (!pss || pss-&gt;pss_gs)</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160; break;</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; pss-&gt;pss_gs = malloc(vhd-&gt;gsp-&gt;per_session_data_size);</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160; if (!pss-&gt;pss_gs)</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; return -1;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; memset(pss-&gt;pss_gs, 0, vhd-&gt;gsp-&gt;per_session_data_size);</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160; break;</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;case LWS_CALLBACK_HTTP_DROP_PROTOCOL:</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; if (vhd-&gt;gsp-&gt;callback(wsi, reason, pss ? pss-&gt;pss_gs : NULL, in, len))</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; return -1;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; if (pss-&gt;pss_gs) {</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; free(pss-&gt;pss_gs);</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; pss-&gt;pss_gs = NULL;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; }</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; break;</div></div><!-- fragment --><p>#section gsapsib Getting session-specific information from another protocol</p>
<p>At least at the time when someone tries to upgrade an http(s) connection to ws(s) with your real protocol, it is necessary to confirm the cookie the http(s) connection has with generic-sessions and find out his username and other info.</p>
<p>Generic sessions lets another protocol check it again by calling his callback, and lws itself provides a generic session info struct to pass the related data</p>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;struct lws_session_info {</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160; char username[32];</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160; char email[100];</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160; char ip[72];</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; unsigned int mask;</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160; char session[42];</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;};</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;struct lws_session_info sinfo;</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;...</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;vhd-&gt;gsp-&gt;callback(wsi, LWS_CALLBACK_SESSION_INFO,</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; &amp;pss-&gt;pss_gs, &amp;sinfo, 0);</div></div><!-- fragment --><p>After the call to generic-sessions, the results can be</p>
<ul>
<li>all the strings will be zero-length and .mask zero, there is no usable cookie<ul>
<li>only .ip and .session are set: the cookie is OK but no user logged in</li>
<li>all the strings contain information about the logged-in user</li>
</ul>
</li>
</ul>
<p>the real protocol can use this to reject attempts to open ws connections from http connections that are not authenticated; afterwards there's no need to check the ws connection auth status again. </p>
</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.11 </li>
</ul>
</div>
</body>
</html>

View file

@ -1,171 +0,0 @@
<!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.11"/>
<title>libwebsockets: Notes about generic-table</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);
$(window).load(resizeHeight);
</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.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</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('md_README.generic-table.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="headertitle">
<div class="title">Notes about generic-table </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1><a class="anchor" id="gtint"></a>
What is generic-table?</h1>
<p>Generic-table is a JSON schema and client-side JS file that makes it easy to display live, table structured HTML over a ws link.</p>
<p>An example plugin and index.html using it are provided, but lwsgt itself doesn't have its own plugin, it's just a JSON schema and client-side JS that other plugins can use to simplify displaying live, table-based data without having to reinvent the wheel each time.</p>
<p>The ws protocol sends JSON describing the table, and then JSON updating the table contents when it chooses, the brower table is updated automatically, live.</p>
<div class="image">
<img src="lwsgt-overview.png" alt="lwsgt-overview.png"/>
</div>
<ul>
<li>Example protocol plugin (displays directory contents): <a href="https://github.com/warmcat/libwebsockets/tree/master/plugins/generic-table/protocol_table_dirlisting.c">https://github.com/warmcat/libwebsockets/tree/master/plugins/generic-table/protocol_table_dirlisting.c</a></li>
<li>Example HTML: <a href="https://github.com/warmcat/libwebsockets/tree/master/plugins/generic-table/assets/index.html">https://github.com/warmcat/libwebsockets/tree/master/plugins/generic-table/assets/index.html</a></li>
<li>lwsgt.js (client-side table rendering / ws link management): <a href="https://github.com/warmcat/libwebsockets/tree/master/plugins/generic-table/assets/lwsgt.js">https://github.com/warmcat/libwebsockets/tree/master/plugins/generic-table/assets/lwsgt.js</a></li>
</ul>
<h1><a class="anchor" id="gteb"></a>
Enabling for build</h1>
<p>Enable the demo plugin at CMake with -DLWS_WITH_PLUGINS=1</p>
<h1><a class="anchor" id="gtinth"></a>
Integrating with your html</h1>
<ul>
<li>In your HEAD section, include lwsgt.js</li>
</ul>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;&lt;script src=&quot;lwsgt.js&quot;&gt;&lt;/script&gt;</div></div><!-- fragment --><ul>
<li>Also in your HEAD section, style the lwsgt CSS, eg</li>
</ul>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;&lt;style&gt;</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;.lwsgt_title { font-size: 24; text-align:center }</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;.lwsgt_breadcrumbs { font-size: 18; text-align:left }</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;.lwsgt_table { font-size: 14; padding:12px; margin: 12px; align:center }</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;.lwsgt_hdr { font-size: 18; text-align:center;</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160; background-color: rgba(40, 40, 40, 0.8); color: white }</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;.lwsgt_tr { padding: 10px }</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;.lwsgt_td { padding: 3px }</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;&lt;/style&gt;</div></div><!-- fragment --><p>You can skip this but the result will be less beautiful until some CSS is provided.</p>
<ul>
<li>In your body section, declare a div with an id (can be whatever you want)</li>
</ul>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;&lt;tr&gt;&lt;td&gt;&lt;div id=&quot;lwsgt1&quot; class=&quot;group1&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;</div></div><!-- fragment --><p>lwsgt JS will put its content there.</p>
<ul>
<li>Finally in a &lt;script&gt; at the end of your page, instantiate lwsgt and provide a custom callback for clickable links</li>
</ul>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;&lt;script&gt;</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;var v1 = new lwsgt_initial(&quot;Dir listing demo&quot;,</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160; &quot;protocol-lws-table-dirlisting&quot;,</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160; &quot;lwsgt1&quot;, &quot;lwsgt_dir_click&quot;, &quot;v1&quot;);</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;function lwsgt_dir_click(gt, u, col, row)</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;{</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; if (u[0] == &#39;=&#39;) { /* change directory */</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; window[gt].lwsgt_ws.send(u.substring(1, u.length));</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160; return;</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; }</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; var win = window.open(u, &#39;_blank&#39;);</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; win.focus();</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;}</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;&lt;/script&gt;</div></div><!-- fragment --><p>In the callback, you can recover the ws object by <code>window[gt].lwsgt_ws</code>.</p>
<h1><a class="anchor" id="gtc"></a>
Lwsgt constructor</h1>
<p>To instantiate the ws link and lwsgt instance, your HTML must call a lwsgt constructor for each region on the page managed by lwsgt.</p>
<p><code>var myvar = new lwsgt_initial(title, ws_protocol, div_id, click_cb, myvar);</code></p>
<p>All of the arguments are strings.</p>
<table class="doxtable">
<tr>
<th>Parameter </th><th>Description </th></tr>
<tr>
<td>title </td><td>Title string to go above the table </td></tr>
<tr>
<td>ws_protocol </td><td>Protocol name string to use when making ws connection </td></tr>
<tr>
<td>div_id </td><td>HTML id of div to fill with content </td></tr>
<tr>
<td>click_cb </td><td>Callback function name string to handle clickable links </td></tr>
<tr>
<td>myvar </td><td>Name of var used to hold this instantiation globally </td></tr>
</table>
<p>Note "myvar" is needed so it can be passed to the click handling callback.</p>
<h1><a class="anchor" id="gtclick"></a>
Lwsgt click handling function</h1>
<p>When a clickable link produced by lwsgt is clicked, the function named in the click_cb parameter to lwsgt_initial is called.</p>
<p>That function is expected to take four parameters, eg</p>
<p><code>function lwsgt_dir_click(gt, u, col, row)</code></p>
<table class="doxtable">
<tr>
<th>Parameter </th><th>Description </th></tr>
<tr>
<td>gt </td><td>Name of global var holding this lwsgt context (ie, myvar) </td></tr>
<tr>
<td>u </td><td>Link "url" string </td></tr>
<tr>
<td>col </td><td>Table column number link is from </td></tr>
<tr>
<td>row </td><td>Table row number link is from </td></tr>
</table>
<h1><a class="anchor" id="gtgj"></a>
Generic-table JSON</h1>
<h3>Column layout</h3>
<p>When the ws connection is established, the protocol should send a JSON message describing the table columns. For example</p>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;&quot;cols&quot;: [</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160; { &quot;name&quot;: &quot;Date&quot; },</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160; { &quot;name&quot;: &quot;Size&quot;, &quot;align&quot;: &quot;right&quot; },</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160; { &quot;name&quot;: &quot;Icon&quot; },</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; { &quot;name&quot;: &quot;Name&quot;, &quot;href&quot;: &quot;uri&quot;},</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160; { &quot;name&quot;: &quot;uri&quot;, &quot;hide&quot;: &quot;1&quot; }</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; ]</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;}</div></div><!-- fragment --><ul>
<li>This describes 5 columns</li>
<li>Only four columns (not "uri") should be visible</li>
<li>"Name" should be presented as a clickable link using "uri" as the destination, when a "uri" field is presented.</li>
<li>"Size" field should be presented aligned to the right</li>
</ul>
<h3>Breadcrumbs</h3>
<p>When a view is hierarchical, it's useful to provide a "path" with links back in the "path", known as "breadcrumbs".</p>
<p>Elements before the last one should provide a "url" member as well as the displayable name, which is used to create the link destination.</p>
<p>The last element, being the current displayed page should not have a url member and be displayed without link style.</p>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;&quot;breadcrumbs&quot;:[{&quot;name&quot;:&quot;top&quot;, &quot;url&quot;: &quot;/&quot; }, {&quot;name&quot;:&quot;mydir&quot;}]</div></div><!-- fragment --><h3>Table data</h3>
<p>The actual file data consists of an array of rows, containing the columns mentioned in the original "cols" section.</p>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;&quot;data&quot;:[</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160; {</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160; &quot;Icon&quot;:&quot; &quot;,</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160; &quot;Date&quot;:&quot;2015-Feb-06 03:08:35 +0000&quot;,</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; &quot;Size&quot;:&quot;1406&quot;,</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160; &quot;uri&quot;:&quot;./serve//favicon.ico&quot;,</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; &quot;Name&quot;:&quot;favicon.ico&quot;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; }</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;]</div></div><!-- fragment --><h1><a class="anchor" id="gtdirl"></a>
Setting up protocol-lws-table-dirlisting</h1>
<p>The example protocol needs two mounts, one to provide the index.html, js and the protocol itself</p>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;{</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160; &quot;mountpoint&quot;: &quot;/dirtest&quot;,</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160; &quot;origin&quot;: &quot;file:///usr/share/libwebsockets-test-server/generic-table&quot;,</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160; &quot;origin&quot;: &quot;callback://protocol-lws-table-dirlisting&quot;,</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; &quot;default&quot;: &quot;index.html&quot;,</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160; &quot;pmo&quot;: [{</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; &quot;dir&quot;: &quot;/usr/share/libwebsockets-test-server&quot;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; }]</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;},</div></div><!-- fragment --><p>The protocol wants a per-mount option (PMO) to tell it the base directory it is serving from, named "dir".</p>
<p>The other mount is there to simply serve items that get clicked on from the table in a secure way</p>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;{</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160; &quot;mountpoint&quot;: &quot;/dirtest/serve&quot;,</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160; &quot;origin&quot;: &quot;file:///usr/share/libwebsockets-test-server&quot;,</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160; &quot;default&quot;: &quot;index.html&quot;</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;},</div></div><!-- fragment --><p>This last bit is not related to using lwsgt itself. </p>
</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.11 </li>
</ul>
</div>
</body>
</html>

File diff suppressed because one or more lines are too long

View file

@ -3,7 +3,8 @@
<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.11"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Notes about building lws</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -57,7 +56,7 @@
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('md_README.build.html','');});
$(document).ready(function(){initNavTree('md_README_8build.html','');});
</script>
<div id="doc-content">
<div class="header">
@ -86,14 +85,16 @@ Building on Unix:</h1>
<ol type="1">
<li>Install CMake 2.8 or greater: <a href="http://cmake.org/cmake/resources/software.html">http://cmake.org/cmake/resources/software.html</a> (Most Unix distributions comes with a packaged version also)</li>
<li>Install OpenSSL.</li>
<li>Generate the build files (default is Make files): <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;$ cd /path/to/src</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;$ mkdir build</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;$ cd build</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;$ cmake ..</div></div><!-- fragment --></li>
<li>Finally you can build using the generated Makefile: <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;$ make &amp;&amp; sudo make install</div></div><!-- fragment --> <b>NOTE</b>: The <code>build/</code><code>directory can have any name and be located anywhere on your filesystem, and that the argument</code>..` given to cmake is simply the source directory of <b>libwebsockets</b> containing the <a href="CMakeLists.txt">CMakeLists.txt</a> project file. All examples in this file assumes you use ".."</li>
<li>Generate the build files (default is Make files): <div class="fragment"><div class="line">$ cd /path/to/src</div><div class="line">$ mkdir build</div><div class="line">$ cd build</div><div class="line">$ cmake ..</div></div><!-- fragment --></li>
<li>Finally you can build using the generated Makefile: <div class="fragment"><div class="line">$ make &amp;&amp; sudo make install</div></div><!-- fragment --> <b>NOTE</b>: The <code>build/</code><code>directory can have any name and be located anywhere on your filesystem, and that the argument</code>..` given to cmake is simply the source directory of <b>libwebsockets</b> containing the <a href="CMakeLists.txt">CMakeLists.txt</a> project file. All examples in this file assumes you use ".."</li>
</ol>
<p><b>NOTE2</b>: A common option you may want to give is to set the install path, same as &ndash;prefix= with autotools. It defaults to /usr/local. You can do this by, eg </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;$ cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr .</div></div><!-- fragment --><p><b>NOTE3</b>: On machines that want libraries in lib64, you can also add the following to the cmake line </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;-DLIB_SUFFIX=64</div></div><!-- fragment --><p><b>NOTE4</b>: If you are building against a non-distro OpenSSL (eg, in order to get access to ALPN support only in newer OpenSSL versions) the nice way to express that in one cmake command is eg, </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;$ cmake .. -DOPENSSL_ROOT_DIR=/usr/local/ssl \</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160; -DCMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE=/usr/local/ssl \</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160; -DLWS_WITH_HTTP2=1</div></div><!-- fragment --><p>When you run the test apps using non-distro SSL, you have to force them to use your libs, not the distro ones </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;$ LD_LIBRARY_PATH=/usr/local/ssl/lib libwebsockets-test-server --ssl</div></div><!-- fragment --><p>To get it to build on latest openssl (2016-04-10) it needed this approach </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;cmake .. -DLWS_WITH_HTTP2=1 -DLWS_OPENSSL_INCLUDE_DIRS=/usr/local/include/openssl -DLWS_OPENSSL_LIBRARIES=&quot;/usr/local/lib64/libssl.so;/usr/local/lib64/libcrypto.so&quot;</div></div><!-- fragment --><p><b>NOTE5</b>: To build with debug info and _DEBUG for lower priority debug messages compiled in, use </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;$ cmake .. -DCMAKE_BUILD_TYPE=DEBUG</div></div><!-- fragment --><p><b>NOTE6</b> To build on Solaris the linker needs to be informed to use lib socket and libnsl, and only builds in 64bit mode.</p>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;$ cmake .. -DCMAKE_C_FLAGS=-m64 -DCMAKE_EXE_LINKER_FLAGS=&quot;-lsocket -lnsl&quot;</div></div><!-- fragment --><ol type="1">
<p><b>NOTE2</b>: A common option you may want to give is to set the install path, same as &ndash;prefix= with autotools. It defaults to /usr/local. You can do this by, eg </p><div class="fragment"><div class="line">$ cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr .</div></div><!-- fragment --><p><b>NOTE3</b>: On machines that want libraries in lib64, you can also add the following to the cmake line </p><div class="fragment"><div class="line">-DLIB_SUFFIX=64</div></div><!-- fragment --><p><b>NOTE4</b>: If you are building against a non-distro OpenSSL (eg, in order to get access to ALPN support only in newer OpenSSL versions) the nice way to express that in one cmake command is eg, </p><div class="fragment"><div class="line">$ cmake .. -DOPENSSL_ROOT_DIR=/usr/local/ssl \</div><div class="line"> -DCMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE=/usr/local/ssl \</div><div class="line"> -DLWS_WITH_HTTP2=1</div></div><!-- fragment --><p>When you run the test apps using non-distro SSL, you have to force them to use your libs, not the distro ones </p><div class="fragment"><div class="line">$ LD_LIBRARY_PATH=/usr/local/ssl/lib libwebsockets-test-server --ssl</div></div><!-- fragment --><p>To get it to build on latest openssl (2016-04-10) it needed this approach </p><div class="fragment"><div class="line">cmake .. -DLWS_WITH_HTTP2=1 -DLWS_OPENSSL_INCLUDE_DIRS=/usr/local/include/openssl -DLWS_OPENSSL_LIBRARIES=&quot;/usr/local/lib64/libssl.so;/usr/local/lib64/libcrypto.so&quot;</div></div><!-- fragment --><p>Mac users have reported</p>
<div class="fragment"><div class="line">$ export OPENSSL_ROOT_DIR=/usr/local/Cellar/openssl/1.0.2k; cmake ..; make -j4</div></div><!-- fragment --><p>worked for them when using "homebrew" OpenSSL</p>
<p><b>NOTE5</b>: To build with debug info and _DEBUG for lower priority debug messages compiled in, use </p><div class="fragment"><div class="line">$ cmake .. -DCMAKE_BUILD_TYPE=DEBUG</div></div><!-- fragment --><p><b>NOTE6</b> To build on Solaris the linker needs to be informed to use lib socket and libnsl, and only builds in 64bit mode.</p>
<div class="fragment"><div class="line">$ cmake .. -DCMAKE_C_FLAGS=-m64 -DCMAKE_EXE_LINKER_FLAGS=&quot;-lsocket -lnsl&quot;</div></div><!-- fragment --><ol type="1">
<li>Finally you can build using the generated Makefile:</li>
</ol>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;$ make</div></div><!-- fragment --><h1><a class="anchor" id="cmq"></a>
<div class="fragment"><div class="line">$ make</div></div><!-- fragment --><h1><a class="anchor" id="cmq"></a>
Quirk of cmake</h1>
<p>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.</p>
<h1><a class="anchor" id="cmw"></a>
@ -106,7 +107,7 @@ Building on Windows (Visual Studio)</h1>
</li>
<li>Generate the Visual studio project by opening the Visual Studio cmd prompt:</li>
</ol>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;cd &lt;path to src&gt;</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;md build</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;cd build</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;cmake -G &quot;Visual Studio 10&quot; ..</div></div><!-- fragment --><p>(<b>NOTE</b>: There is also a cmake-gui available on Windows if you prefer that)</p>
<div class="fragment"><div class="line">cd &lt;path to src&gt;</div><div class="line">md build</div><div class="line">cd build</div><div class="line">cmake -G &quot;Visual Studio 10&quot; ..</div></div><!-- fragment --><p>(<b>NOTE</b>: There is also a cmake-gui available on Windows if you prefer that)</p>
<p><b>NOTE2</b>: See this link to find out the version number corresponding to your Visual Studio edition: <a href="http://superuser.com/a/194065">http://superuser.com/a/194065</a></p>
<ol type="1">
<li>Now you should have a generated Visual Studio Solution in your <code>&lt;path to src&gt;/build</code> directory, which can be used to build.</li>
@ -125,7 +126,7 @@ Building on Windows (MinGW)</h1>
<p class="startli">(<b>NOTE</b>: Preferably in the default location C:)</p>
</li>
<li><p class="startli">Fix up MinGW headers</p>
<p class="startli">a) Add the following lines to C:.h: </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;#if(_WIN32_WINNT &gt;= 0x0600)</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;typedef struct pollfd {</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; SOCKET fd;</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160; SHORT events;</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; SHORT revents;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;} WSAPOLLFD, *PWSAPOLLFD, FAR *LPWSAPOLLFD;</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;WINSOCK_API_LINKAGE int WSAAPI WSAPoll(LPWSAPOLLFD fdArray, ULONG fds, INT timeout);</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;#endif // (_WIN32_WINNT &gt;= 0x0600)</div></div><!-- fragment --><p> b) Create C:.h and copy and paste the content from following link into it:</p>
<p class="startli">a) Add the following lines to C:.h: </p><div class="fragment"><div class="line">#if(_WIN32_WINNT &gt;= 0x0600)</div><div class="line"></div><div class="line">typedef struct pollfd {</div><div class="line"></div><div class="line"> SOCKET fd;</div><div class="line"> SHORT events;</div><div class="line"> SHORT revents;</div><div class="line"></div><div class="line">} WSAPOLLFD, *PWSAPOLLFD, FAR *LPWSAPOLLFD;</div><div class="line"></div><div class="line">WINSOCK_API_LINKAGE int WSAAPI WSAPoll(LPWSAPOLLFD fdArray, ULONG fds, INT timeout);</div><div class="line"></div><div class="line">#endif // (_WIN32_WINNT &gt;= 0x0600)</div></div><!-- fragment --><p> b) Create C:.h and copy and paste the content from following link into it:</p>
<p class="startli"><a href="http://wine-unstable.sourcearchive.com/documentation/1.1.32/mstcpip_8h-source.html">http://wine-unstable.sourcearchive.com/documentation/1.1.32/mstcpip_8h-source.html</a></p>
</li>
<li>Install CMake 2.6 or greater: <a href="http://cmake.org/cmake/resources/software.html">http://cmake.org/cmake/resources/software.html</a></li>
@ -133,11 +134,11 @@ Building on Windows (MinGW)</h1>
<p class="startli">(<b>NOTE</b>: Preferably in the default location to make it easier for CMake to find them)</p>
<p class="startli"><b>NOTE2</b>: Be sure that OPENSSL_CONF environment variable is defined and points at &lt;OpenSSL install="" location&gt;=""&gt;.cfg</p>
</li>
<li><p class="startli">Generate the build files (default is Make files) using MSYS shell: </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;$ cd /drive/path/to/src</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;$ mkdir build</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;$ cd build</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;$ cmake -G &quot;MSYS Makefiles&quot; -DCMAKE_INSTALL_PREFIX=C:/MinGW ..</div></div><!-- fragment --><p> (<b>NOTE</b>: The <code>build/</code><code>directory can have any name and be located anywhere on your filesystem, and that the argument</code>..` given to cmake is simply the source directory of <b>libwebsockets</b> containing the <a href="CMakeLists.txt">CMakeLists.txt</a> project file. All examples in this file assumes you use "..")</p>
<p class="startli"><b>NOTE2</b>: To generate build files allowing to create libwebsockets binaries with debug information set the CMAKE_BUILD_TYPE flag to DEBUG: </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;$ cmake -G &quot;MSYS Makefiles&quot; -DCMAKE_INSTALL_PREFIX=C:/MinGW -DCMAKE_BUILD_TYPE=DEBUG ..</div></div><!-- fragment --></li>
<li><p class="startli">Generate the build files (default is Make files) using MSYS shell: </p><div class="fragment"><div class="line">$ cd /drive/path/to/src</div><div class="line">$ mkdir build</div><div class="line">$ cd build</div><div class="line">$ cmake -G &quot;MSYS Makefiles&quot; -DCMAKE_INSTALL_PREFIX=C:/MinGW ..</div></div><!-- fragment --><p> (<b>NOTE</b>: The <code>build/</code><code>directory can have any name and be located anywhere on your filesystem, and that the argument</code>..` given to cmake is simply the source directory of <b>libwebsockets</b> containing the <a href="CMakeLists.txt">CMakeLists.txt</a> project file. All examples in this file assumes you use "..")</p>
<p class="startli"><b>NOTE2</b>: To generate build files allowing to create libwebsockets binaries with debug information set the CMAKE_BUILD_TYPE flag to DEBUG: </p><div class="fragment"><div class="line">$ cmake -G &quot;MSYS Makefiles&quot; -DCMAKE_INSTALL_PREFIX=C:/MinGW -DCMAKE_BUILD_TYPE=DEBUG ..</div></div><!-- fragment --></li>
<li>Finally you can build using the generated Makefile and get the results deployed into your MinGW installation:</li>
</ol>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;$ make</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;$ make install</div></div><!-- fragment --><h1><a class="anchor" id="mbed3"></a>
<div class="fragment"><div class="line">$ make</div><div class="line">$ make install</div></div><!-- fragment --><h1><a class="anchor" id="mbed3"></a>
Building on mbed3</h1>
<p>MBED3 is a non-posix embedded OS targeted on Cortex M class chips.</p>
<p><a href="https://www.mbed.com/">https://www.mbed.com/</a></p>
@ -177,28 +178,28 @@ wolfSSL/CyaSSL replacement for OpenSSL</h1>
<p><b>NOTE</b>: wolfssl needs to be compiled using the <code>--enable-opensslextra</code> flag for this to work.</p>
<h1><a class="anchor" id="wolf1"></a>
Compiling libwebsockets with wolfSSL</h1>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;cmake .. -DLWS_USE_WOLFSSL=1 \</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160; -DLWS_WOLFSSL_INCLUDE_DIRS=/path/to/wolfssl \</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160; -DLWS_WOLFSSL_LIBRARIES=/path/to/wolfssl/wolfssl.a ..</div></div><!-- fragment --><p><b>NOTE</b>: On windows use the .lib file extension for <code>LWS_WOLFSSL_LIBRARIES</code> instead.</p>
<div class="fragment"><div class="line">cmake .. -DLWS_USE_WOLFSSL=1 \</div><div class="line"> -DLWS_WOLFSSL_INCLUDE_DIRS=/path/to/wolfssl \</div><div class="line"> -DLWS_WOLFSSL_LIBRARIES=/path/to/wolfssl/wolfssl.a ..</div></div><!-- fragment --><p><b>NOTE</b>: On windows use the .lib file extension for <code>LWS_WOLFSSL_LIBRARIES</code> instead.</p>
<h1><a class="anchor" id="cya"></a>
Compiling libwebsockets with CyaSSL</h1>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;cmake .. -DLWS_USE_CYASSL=1 \</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160; -DLWS_CYASSL_INCLUDE_DIRS=/path/to/cyassl \</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160; -DLWS_CYASSL_LIBRARIES=/path/to/wolfssl/cyassl.a ..</div></div><!-- fragment --><p><b>NOTE</b>: On windows use the .lib file extension for <code>LWS_CYASSL_LIBRARIES</code> instead.</p>
<div class="fragment"><div class="line">cmake .. -DLWS_USE_CYASSL=1 \</div><div class="line"> -DLWS_CYASSL_INCLUDE_DIRS=/path/to/cyassl \</div><div class="line"> -DLWS_CYASSL_LIBRARIES=/path/to/wolfssl/cyassl.a ..</div></div><!-- fragment --><p><b>NOTE</b>: On windows use the .lib file extension for <code>LWS_CYASSL_LIBRARIES</code> instead.</p>
<h1><a class="anchor" id="extplugins"></a>
Building plugins outside of lws itself</h1>
<p>The directory ./plugin-standalone/ shows how easy it is to create plugins outside of lws itself. First build lws itself with -DLWS_WITH_PLUGINS, then use the same flow to build the standalone plugin </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;cd ./plugin-standalone</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;mkdir build</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;cd build</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;cmake ..</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;make &amp;&amp; sudo make install</div></div><!-- fragment --><p>if you changed the default plugin directory when you built lws, you must also give the same arguments to cmake here (eg, <code>-DCMAKE_INSTALL_PREFIX:PATH=/usr/something/else...</code> )</p>
<p>Otherwise if you run lwsws or libwebsockets-test-server-v2.0, it will now find the additional plugin "libprotocol_example_standalone.so" </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;lwsts[21257]: Plugins:</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;lwsts[21257]: libprotocol_dumb_increment.so</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;lwsts[21257]: libprotocol_example_standalone.so</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;lwsts[21257]: libprotocol_lws_mirror.so</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;lwsts[21257]: libprotocol_lws_server_status.so</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;lwsts[21257]: libprotocol_lws_status.so</div></div><!-- fragment --><p> If you have multiple vhosts, you must enable plugins at the vhost additionally, discovered plugins are not enabled automatically for security reasons. You do this using info-&gt;pvo or for lwsws, in the JSON config.</p>
<p>The directory ./plugin-standalone/ shows how easy it is to create plugins outside of lws itself. First build lws itself with -DLWS_WITH_PLUGINS, then use the same flow to build the standalone plugin </p><div class="fragment"><div class="line">cd ./plugin-standalone</div><div class="line">mkdir build</div><div class="line">cd build</div><div class="line">cmake ..</div><div class="line">make &amp;&amp; sudo make install</div></div><!-- fragment --><p>if you changed the default plugin directory when you built lws, you must also give the same arguments to cmake here (eg, <code>-DCMAKE_INSTALL_PREFIX:PATH=/usr/something/else...</code> )</p>
<p>Otherwise if you run lwsws or libwebsockets-test-server-v2.0, it will now find the additional plugin "libprotocol_example_standalone.so" </p><div class="fragment"><div class="line">lwsts[21257]: Plugins:</div><div class="line">lwsts[21257]: libprotocol_dumb_increment.so</div><div class="line">lwsts[21257]: libprotocol_example_standalone.so</div><div class="line">lwsts[21257]: libprotocol_lws_mirror.so</div><div class="line">lwsts[21257]: libprotocol_lws_server_status.so</div><div class="line">lwsts[21257]: libprotocol_lws_status.so</div></div><!-- fragment --><p> If you have multiple vhosts, you must enable plugins at the vhost additionally, discovered plugins are not enabled automatically for security reasons. You do this using info-&gt;pvo or for lwsws, in the JSON config.</p>
<h1><a class="anchor" id="http2rp"></a>
Reproducing HTTP2.0 tests</h1>
<p>You must have built and be running lws against a version of openssl that has ALPN / NPN. Most distros still have older versions. You'll know it's right by seeing </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;lwsts[4752]: Compiled with OpenSSL support</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;lwsts[4752]: Using SSL mode</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;lwsts[4752]: HTTP2 / ALPN enabled</div></div><!-- fragment --><p> at lws startup.</p>
<p>For non-SSL HTTP2.0 upgrade </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;$ nghttp -nvasu http://localhost:7681/test.htm</div></div><!-- fragment --><p> For SSL / ALPN HTTP2.0 upgrade </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;$ nghttp -nvas https://localhost:7681/test.html</div></div><!-- fragment --><h1><a class="anchor" id="cross"></a>
<p>You must have built and be running lws against a version of openssl that has ALPN / NPN. Most distros still have older versions. You'll know it's right by seeing </p><div class="fragment"><div class="line">lwsts[4752]: Compiled with OpenSSL support</div><div class="line">lwsts[4752]: Using SSL mode</div><div class="line">lwsts[4752]: HTTP2 / ALPN enabled</div></div><!-- fragment --><p> at lws startup.</p>
<p>For non-SSL HTTP2.0 upgrade </p><div class="fragment"><div class="line">$ nghttp -nvasu http://localhost:7681/test.htm</div></div><!-- fragment --><p> For SSL / ALPN HTTP2.0 upgrade </p><div class="fragment"><div class="line">$ nghttp -nvas https://localhost:7681/test.html</div></div><!-- fragment --><h1><a class="anchor" id="cross"></a>
Cross compiling</h1>
<p>To enable cross-compiling <b>libwebsockets</b> using CMake you need to create a "Toolchain file" that you supply to CMake when generating your build files. CMake will then use the cross compilers and build paths specified in this file to look for dependencies and such.</p>
<p><b>Libwebsockets</b> includes an example toolchain file <a href="cross-arm-linux-gnueabihf.cmake">cross-arm-linux-gnueabihf.cmake</a> you can use as a starting point.</p>
<p>The commandline to configure for cross with this would look like </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;$ cmake .. -DCMAKE_INSTALL_PREFIX:PATH=/usr \</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160; -DCMAKE_TOOLCHAIN_FILE=../cross-arm-linux-gnueabihf.cmake \</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160; -DWITHOUT_EXTENSIONS=1 -DWITH_SSL=0</div></div><!-- fragment --><p> The example shows how to build with no external cross lib dependencies, you need to provide the cross libraries otherwise.</p>
<p>The commandline to configure for cross with this would look like </p><div class="fragment"><div class="line">$ cmake .. -DCMAKE_INSTALL_PREFIX:PATH=/usr \</div><div class="line"> -DCMAKE_TOOLCHAIN_FILE=../cross-arm-linux-gnueabihf.cmake \</div><div class="line"> -DLWS_WITHOUT_EXTENSIONS=1 -DLWS_WITH_SSL=0</div></div><!-- fragment --><p> The example shows how to build with no external cross lib dependencies, you need to provide the cross libraries otherwise.</p>
<p><b>NOTE</b>: start from an EMPTY build directory if you had a non-cross build in there before the settings will be cached and your changes ignored.</p>
<p>Additional information on cross compilation with CMake: <a href="http://www.vtk.org/Wiki/CMake_Cross_Compiling">http://www.vtk.org/Wiki/CMake_Cross_Compiling</a></p>
<h1><a class="anchor" id="mem"></a>
Memory efficiency</h1>
<p>Embedded server-only configuration without extensions (ie, no compression on websocket connections), but with full v13 websocket features and http server, built on ARM Cortex-A9:</p>
<p>Update at 8dac94d (2013-02-18) </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;$ ./configure --without-client --without-extensions --disable-debug --without-daemonize</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;Context Creation, 1024 fd limit[2]: 16720 (includes 12 bytes per fd)</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;Per-connection [3]: 72 bytes, +1328 during headers</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;.text .rodata .data .bss</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;11512 2784 288 4</div></div><!-- fragment --><p> This shows the impact of the major configuration with/without options at 13ba5bbc633ea962d46d using Ubuntu ARM on a PandaBoard ES.</p>
<p>Update at 8dac94d (2013-02-18) </p><div class="fragment"><div class="line">$ ./configure --without-client --without-extensions --disable-debug --without-daemonize</div><div class="line"></div><div class="line">Context Creation, 1024 fd limit[2]: 16720 (includes 12 bytes per fd)</div><div class="line">Per-connection [3]: 72 bytes, +1328 during headers</div><div class="line"></div><div class="line">.text .rodata .data .bss</div><div class="line">11512 2784 288 4</div></div><!-- fragment --><p> This shows the impact of the major configuration with/without options at 13ba5bbc633ea962d46d using Ubuntu ARM on a PandaBoard ES.</p>
<p>These are accounting for static allocations from the library elf, there are additional dynamic allocations via malloc. These are a bit old now but give the right idea for relative "expense" of features.</p>
<p>Static allocations, ARM9</p>
<table class="doxtable">
@ -229,7 +230,7 @@ Memory efficiency</h1>
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Notes about coding with lws</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -57,7 +56,7 @@
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('md_README.coding.html','');});
$(document).ready(function(){initNavTree('md_README_8coding.html','');});
</script>
<div id="doc-content">
<div class="header">
@ -79,9 +78,9 @@ Libwebsockets is singlethreaded</h1>
<p>Directly performing websocket actions from other threads is not allowed. Aside from the internal data being inconsistent in <code>forked()</code> processes, the scope of a <code>wsi</code> (<code>struct websocket</code>) can end at any time during service with the socket closing and the <code>wsi</code> freed.</p>
<p>Websocket write activities should only take place in the <code>LWS_CALLBACK_SERVER_WRITEABLE</code> callback as described below.</p>
<p>[This network-programming necessity to link the issue of new data to the peer taking the previous data is not obvious to all users so let's repeat that in other words:</p>
<p>***ONLY DO LWS_WRITE FROM THE WRITEABLE CALLBACK***</p>
<p><em><b>ONLY DO LWS_WRITE FROM THE WRITEABLE CALLBACK</b></em></p>
<p>There is another network-programming truism that surprises some people which is if the sink for the data cannot accept more:</p>
<p>***YOU MUST PERFORM RX FLOW CONTROL***</p>
<p><em><b>YOU MUST PERFORM RX FLOW CONTROL</b></em></p>
<p>See the mirror protocol implementations for example code.</p>
<p>Only live connections appear in the user callbacks, so this removes any possibility of trying to used closed and freed wsis.</p>
<p>If you need to service other socket or file descriptors as well as the websocket ones, you can combine them together with the websocket ones in one poll loop, see "External Polling Loop support" below, and still do it all in one thread / process context.</p>
@ -111,7 +110,7 @@ Closing connections from the user side</h1>
<h1><a class="anchor" id="frags"></a>
Fragmented messages</h1>
<p>To support fragmented messages you need to check for the final frame of a message with <code>lws_is_final_fragment</code>. This check can be combined with <code>libwebsockets_remaining_packet_payload</code> to gather the whole contents of a message, eg:</p>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;case LWS_CALLBACK_RECEIVE:</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;{</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160; Client * const client = (Client *)user;</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160; const size_t remaining = lws_remaining_packet_payload(wsi);</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160; if (!remaining &amp;&amp; lws_is_final_fragment(wsi)) {</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; if (client-&gt;HasFragments()) {</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; client-&gt;AppendMessageFragment(in, len, 0);</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; in = (void *)client-&gt;GetMessage();</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160; len = client-&gt;GetMessageLength();</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; }</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; client-&gt;ProcessMessage((char *)in, len, wsi);</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; client-&gt;ResetMessage();</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; } else</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; client-&gt;AppendMessageFragment(in, len, remaining);</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;}</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;break;</div></div><!-- fragment --><p>The test app libwebsockets-test-fraggle sources also show how to deal with fragmented messages.</p>
<div class="fragment"><div class="line">case LWS_CALLBACK_RECEIVE:</div><div class="line">{</div><div class="line"> Client * const client = (Client *)user;</div><div class="line"> const size_t remaining = lws_remaining_packet_payload(wsi);</div><div class="line"></div><div class="line"> if (!remaining &amp;&amp; lws_is_final_fragment(wsi)) {</div><div class="line"> if (client-&gt;HasFragments()) {</div><div class="line"> client-&gt;AppendMessageFragment(in, len, 0);</div><div class="line"> in = (void *)client-&gt;GetMessage();</div><div class="line"> len = client-&gt;GetMessageLength();</div><div class="line"> }</div><div class="line"></div><div class="line"> client-&gt;ProcessMessage((char *)in, len, wsi);</div><div class="line"> client-&gt;ResetMessage();</div><div class="line"> } else</div><div class="line"> client-&gt;AppendMessageFragment(in, len, remaining);</div><div class="line">}</div><div class="line">break;</div></div><!-- fragment --><p>The test app libwebsockets-test-fraggle sources also show how to deal with fragmented messages.</p>
<h1><a class="anchor" id="debuglog"></a>
Debug Logging</h1>
<p>Also using <code>lws_set_log_level</code> api you may provide a custom callback to actually emit the log string. By default, this points to an internal emit function that sends to stderr. Setting it to <code>NULL</code> leaves it as it is instead.</p>
@ -126,7 +125,7 @@ Debug Logging</h1>
</ul>
<p>The difference between notice and info is that notice will be logged by default whereas info is ignored by default.</p>
<p>If you are not building with _DEBUG defined, ie, without this</p>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;$ cmake .. -DCMAKE_BUILD_TYPE=DEBUG</div></div><!-- fragment --><p>then log levels below notice do not actually get compiled in.</p>
<div class="fragment"><div class="line">$ cmake .. -DCMAKE_BUILD_TYPE=DEBUG</div></div><!-- fragment --><p>then log levels below notice do not actually get compiled in.</p>
<h1><a class="anchor" id="extpoll"></a>
External Polling Loop support</h1>
<p><b>libwebsockets</b> maintains an internal <code>poll()</code> array for all of its sockets, but you can instead integrate the sockets into an external polling array. That's needed if <b>libwebsockets</b> will cooperate with an existing poll array maintained by another server.</p>
@ -142,8 +141,8 @@ External Polling Loop support</h1>
<h1><a class="anchor" id="cpp"></a>
Using with in c++ apps</h1>
<p>The library is ready for use by C++ apps. You can get started quickly by copying the test server</p>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;$ cp test-server/test-server.c test.cpp</div></div><!-- fragment --><p>and building it in C++ like this</p>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;$ g++ -DINSTALL_DATADIR=\&quot;/usr/share\&quot; -ocpptest test.cpp -lwebsockets</div></div><!-- fragment --><p><code>INSTALL_DATADIR</code> is only needed because the test server uses it as shipped, if you remove the references to it in your app you don't need to define it on the g++ line either.</p>
<div class="fragment"><div class="line">$ cp test-server/test-server.c test.cpp</div></div><!-- fragment --><p>and building it in C++ like this</p>
<div class="fragment"><div class="line">$ g++ -DINSTALL_DATADIR=\&quot;/usr/share\&quot; -ocpptest test.cpp -lwebsockets</div></div><!-- fragment --><p><code>INSTALL_DATADIR</code> is only needed because the test server uses it as shipped, if you remove the references to it in your app you don't need to define it on the g++ line either.</p>
<h1><a class="anchor" id="headerinfo"></a>
Availability of header information</h1>
<p>HTTP Header information is managed by a pool of "ah" structs. These are a limited resource so there is pressure to free the headers and return the ah to the pool for reuse.</p>
@ -177,8 +176,8 @@ Lws platform-independent file access apis</h1>
space" as a virtual filesystem that may or may not be backed by a regular filesystem. One example use is serving files from inside large compressed archive storage without having to unpack anything except the file being requested.</p>
<p>The test server shows how to use it, basically the platform-specific part of lws prepares a file operations structure that lives in the lws context.</p>
<p>The user code can get a pointer to the file operations struct</p>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;LWS_VISIBLE LWS_EXTERN struct lws_plat_file_ops *</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160; `lws_get_fops`(struct lws_context *context);</div></div><!-- fragment --><p>and then can use helpers to also leverage these platform-independent file handling apis</p>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;static inline lws_filefd_type</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;`lws_plat_file_open`(struct lws *wsi, const char *filename, unsigned long *filelen, int flags)</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;static inline int</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;`lws_plat_file_close`(struct lws *wsi, lws_filefd_type fd)</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;static inline unsigned long</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;`lws_plat_file_seek_cur`(struct lws *wsi, lws_filefd_type fd, long offset_from_cur_pos)</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;static inline int</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;`lws_plat_file_read`(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;static inline int</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;`lws_plat_file_write`(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)</div></div><!-- fragment --><p>The user code can also override or subclass the file operations, to either wrap or replace them. An example is shown in test server.</p>
<div class="fragment"><div class="line">LWS_VISIBLE LWS_EXTERN struct lws_plat_file_ops *</div><div class="line"> `lws_get_fops`(struct lws_context *context);</div></div><!-- fragment --><p>and then can use helpers to also leverage these platform-independent file handling apis</p>
<div class="fragment"><div class="line">static inline lws_filefd_type</div><div class="line">`lws_plat_file_open`(struct lws *wsi, const char *filename, unsigned long *filelen, int flags)</div><div class="line"></div><div class="line">static inline int</div><div class="line">`lws_plat_file_close`(struct lws *wsi, lws_filefd_type fd)</div><div class="line"></div><div class="line">static inline unsigned long</div><div class="line">`lws_plat_file_seek_cur`(struct lws *wsi, lws_filefd_type fd, long offset_from_cur_pos)</div><div class="line"></div><div class="line">static inline int</div><div class="line">`lws_plat_file_read`(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)</div><div class="line"></div><div class="line">static inline int</div><div class="line">`lws_plat_file_write`(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)</div></div><!-- fragment --><p>The user code can also override or subclass the file operations, to either wrap or replace them. An example is shown in test server.</p>
<h1><a class="anchor" id="ecdh"></a>
ECDH Support</h1>
<p>ECDH Certs are now supported. Enable the CMake option </p><pre class="fragment"> cmake .. -DLWS_SSL_SERVER_WITH_ECDH_CERT=1
@ -210,7 +209,7 @@ Libev / Libuv support</h1>
<h1><a class="anchor" id="extopts"></a>
Extension option control from user code</h1>
<p>User code may set per-connection extension options now, using a new api <code><a class="el" href="group__extensions.html#gae0e24e1768f83a7fb07896ce975704b9">lws_set_extension_option()</a></code>.</p>
<p>This should be called from the ESTABLISHED callback like this </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;lws_set_extension_option(wsi, &quot;permessage-deflate&quot;,</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160; &quot;rx_buf_size&quot;, &quot;12&quot;); /* 1 &lt;&lt; 12 */</div></div><!-- fragment --><p>If the extension is not active (missing or not negotiated for the connection, or extensions are disabled on the library) the call is just returns -1. Otherwise the connection's extension has its named option changed.</p>
<p>This should be called from the ESTABLISHED callback like this </p><div class="fragment"><div class="line">lws_set_extension_option(wsi, &quot;permessage-deflate&quot;,</div><div class="line"> &quot;rx_buf_size&quot;, &quot;12&quot;); /* 1 &lt;&lt; 12 */</div></div><!-- fragment --><p>If the extension is not active (missing or not negotiated for the connection, or extensions are disabled on the library) the call is just returns -1. Otherwise the connection's extension has its named option changed.</p>
<p>The extension may decide to alter or disallow the change, in the example above permessage-deflate restricts the size of his rx output buffer also considering the protocol's rx_buf_size member.</p>
<h1><a class="anchor" id="httpsclient"></a>
Client connections as HTTP[S] rather than WS[S]</h1>
@ -219,12 +218,12 @@ Client connections as HTTP[S] rather than WS[S]</h1>
<p>After the server headers are processed, when payload from the server is available the callback LWS_CALLBACK_RECEIVE_CLIENT_HTTP will be made.</p>
<p>You can choose whether to process the data immediately, or queue a callback when an outgoing socket is writeable to provide flow control, and process the data in the writable callback.</p>
<p>Either way you use the api <code>lws_http_client_read()</code> to access the data, eg</p>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;case LWS_CALLBACK_RECEIVE_CLIENT_HTTP:</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160; {</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160; char buffer[1024 + LWS_PRE];</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160; char *px = buffer + LWS_PRE;</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; int lenx = sizeof(buffer) - LWS_PRE;</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; lwsl_notice(&quot;LWS_CALLBACK_RECEIVE_CLIENT_HTTP\n&quot;);</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; /*</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160; * Often you need to flow control this by something</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; * else being writable. In that case call the api</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; * to get a callback when writable here, and do the</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; * pending client read in the writeable callback of</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; * the output.</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; */</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; if (lws_http_client_read(wsi, &amp;px, &amp;lenx) &lt; 0)</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; return -1;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; while (lenx--)</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; putchar(*px++);</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; }</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; break;</div></div><!-- fragment --><p>Notice that if you will use SSL client connections on a vhost, you must prepare the client SSL context for the vhost after creating the vhost, since this is not normally done if the vhost was set up to listen / serve. Call the api <a class="el" href="group__client.html#ga4f44b8230e6732816ca5cd8d1aaaf340">lws_init_vhost_client_ssl()</a> to also allow client SSL on the vhost.</p>
<div class="fragment"><div class="line">case LWS_CALLBACK_RECEIVE_CLIENT_HTTP:</div><div class="line"> {</div><div class="line"> char buffer[1024 + LWS_PRE];</div><div class="line"> char *px = buffer + LWS_PRE;</div><div class="line"> int lenx = sizeof(buffer) - LWS_PRE;</div><div class="line"></div><div class="line"> lwsl_notice(&quot;LWS_CALLBACK_RECEIVE_CLIENT_HTTP\n&quot;);</div><div class="line"></div><div class="line"> /*</div><div class="line"> * Often you need to flow control this by something</div><div class="line"> * else being writable. In that case call the api</div><div class="line"> * to get a callback when writable here, and do the</div><div class="line"> * pending client read in the writeable callback of</div><div class="line"> * the output.</div><div class="line"> */</div><div class="line"> if (lws_http_client_read(wsi, &amp;px, &amp;lenx) &lt; 0)</div><div class="line"> return -1;</div><div class="line"> while (lenx--)</div><div class="line"> putchar(*px++);</div><div class="line"> }</div><div class="line"> break;</div></div><!-- fragment --><p>Notice that if you will use SSL client connections on a vhost, you must prepare the client SSL context for the vhost after creating the vhost, since this is not normally done if the vhost was set up to listen / serve. Call the api <a class="el" href="group__client.html#ga4f44b8230e6732816ca5cd8d1aaaf340">lws_init_vhost_client_ssl()</a> to also allow client SSL on the vhost.</p>
<h1><a class="anchor" id="vhosts"></a>
Using lws vhosts</h1>
<p>If you set LWS_SERVER_OPTION_EXPLICIT_VHOSTS options flag when you create your context, it won't create a default vhost using the info struct members for compatibility. Instead you can call <a class="el" href="group__context-and-vhost.html#ga0c54c667ccd9b8b3dddcd123ca72f87c">lws_create_vhost()</a> afterwards to attach one or more vhosts manually.</p>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;LWS_VISIBLE struct lws_vhost *</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;lws_create_vhost(struct lws_context *context,</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160; struct lws_context_creation_info *info);</div></div><!-- fragment --><p><a class="el" href="group__context-and-vhost.html#ga0c54c667ccd9b8b3dddcd123ca72f87c">lws_create_vhost()</a> uses the same info struct as <a class="el" href="group__context-and-vhost.html#gaf2fff58562caab7510c41eeac85a8648">lws_create_context()</a>, it ignores members related to context and uses the ones meaningful for vhost (marked with VH in <a class="el" href="libwebsockets_8h.html">libwebsockets.h</a>).</p>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;struct lws_context_creation_info {</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160; int port; /* VH */</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160; const char *iface; /* VH */</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160; const struct lws_protocols *protocols; /* VH */</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; const struct lws_extension *extensions; /* VH */</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;...</div></div><!-- fragment --><p>When you attach the vhost, if the vhost's port already has a listen socket then both vhosts share it and use SNI (is SSL in use) or the Host: header from the client to select the right one. Or if no other vhost already listening the a new listen socket is created.</p>
<div class="fragment"><div class="line">LWS_VISIBLE struct lws_vhost *</div><div class="line">lws_create_vhost(struct lws_context *context,</div><div class="line"> struct lws_context_creation_info *info);</div></div><!-- fragment --><p><a class="el" href="group__context-and-vhost.html#ga0c54c667ccd9b8b3dddcd123ca72f87c">lws_create_vhost()</a> uses the same info struct as <a class="el" href="group__context-and-vhost.html#gaf2fff58562caab7510c41eeac85a8648">lws_create_context()</a>, it ignores members related to context and uses the ones meaningful for vhost (marked with VH in <a class="el" href="libwebsockets_8h.html">libwebsockets.h</a>).</p>
<div class="fragment"><div class="line">struct lws_context_creation_info {</div><div class="line"> int port; /* VH */</div><div class="line"> const char *iface; /* VH */</div><div class="line"> const struct lws_protocols *protocols; /* VH */</div><div class="line"> const struct lws_extension *extensions; /* VH */</div><div class="line">...</div></div><!-- fragment --><p>When you attach the vhost, if the vhost's port already has a listen socket then both vhosts share it and use SNI (is SSL in use) or the Host: header from the client to select the right one. Or if no other vhost already listening the a new listen socket is created.</p>
<p>There are some new members but mainly it's stuff you used to set at context creation time.</p>
<h1><a class="anchor" id="sni"></a>
How lws matches hostname or SNI to a vhost</h1>
@ -235,10 +234,10 @@ How lws matches hostname or SNI to a vhost</h1>
<h1><a class="anchor" id="mounts"></a>
Using lws mounts on a vhost</h1>
<p>The last argument to <a class="el" href="group__context-and-vhost.html#ga0c54c667ccd9b8b3dddcd123ca72f87c">lws_create_vhost()</a> lets you associate a linked list of <a class="el" href="structlws__http__mount.html">lws_http_mount</a> structures with that vhost's URL 'namespace', in a similar way that unix lets you mount filesystems into areas of your / filesystem how you like and deal with the contents transparently.</p>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;struct lws_http_mount {</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160; struct lws_http_mount *mount_next;</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160; const char *mountpoint; /* mountpoint in http pathspace, eg, &quot;/&quot; */</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160; const char *origin; /* path to be mounted, eg, &quot;/var/www/warmcat.com&quot; */</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; const char *def; /* default target, eg, &quot;index.html&quot; */</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; struct lws_protocol_vhost_options *cgienv;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; int cgi_timeout;</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160; int cache_max_age;</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; unsigned int cache_reusable:1;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; unsigned int cache_revalidate:1;</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; unsigned int cache_intermediaries:1;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; unsigned char origin_protocol;</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; unsigned char mountpoint_len;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;};</div></div><!-- fragment --><p>The last mount structure should have a NULL mount_next, otherwise it should point to the 'next' mount structure in your list.</p>
<div class="fragment"><div class="line">struct lws_http_mount {</div><div class="line"> struct lws_http_mount *mount_next;</div><div class="line"> const char *mountpoint; /* mountpoint in http pathspace, eg, &quot;/&quot; */</div><div class="line"> const char *origin; /* path to be mounted, eg, &quot;/var/www/warmcat.com&quot; */</div><div class="line"> const char *def; /* default target, eg, &quot;index.html&quot; */</div><div class="line"></div><div class="line"> struct lws_protocol_vhost_options *cgienv;</div><div class="line"></div><div class="line"> int cgi_timeout;</div><div class="line"> int cache_max_age;</div><div class="line"></div><div class="line"> unsigned int cache_reusable:1;</div><div class="line"> unsigned int cache_revalidate:1;</div><div class="line"> unsigned int cache_intermediaries:1;</div><div class="line"></div><div class="line"> unsigned char origin_protocol;</div><div class="line"> unsigned char mountpoint_len;</div><div class="line">};</div></div><!-- fragment --><p>The last mount structure should have a NULL mount_next, otherwise it should point to the 'next' mount structure in your list.</p>
<p>Both the mount structures and the strings must persist until the context is destroyed, since they are not copied but used in place.</p>
<p><code>.origin_protocol</code> should be one of</p>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;enum {</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160; LWSMPRO_HTTP,</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160; LWSMPRO_HTTPS,</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160; LWSMPRO_FILE,</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; LWSMPRO_CGI,</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160; LWSMPRO_REDIR_HTTP,</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; LWSMPRO_REDIR_HTTPS,</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; LWSMPRO_CALLBACK,</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;};</div></div><!-- fragment --><ul>
<div class="fragment"><div class="line">enum {</div><div class="line"> LWSMPRO_HTTP,</div><div class="line"> LWSMPRO_HTTPS,</div><div class="line"> LWSMPRO_FILE,</div><div class="line"> LWSMPRO_CGI,</div><div class="line"> LWSMPRO_REDIR_HTTP,</div><div class="line"> LWSMPRO_REDIR_HTTPS,</div><div class="line"> LWSMPRO_CALLBACK,</div><div class="line">};</div></div><!-- fragment --><ul>
<li>LWSMPRO_FILE is used for mapping url namespace to a filesystem directory and serve it automatically.</li>
<li>LWSMPRO_CGI associates the url namespace with the given CGI executable, which runs when the URL is accessed and the output provided to the client.</li>
<li>LWSMPRO_REDIR_HTTP and LWSMPRO_REDIR_HTTPS auto-redirect clients to the given origin URL.</li>
@ -248,7 +247,7 @@ Using lws mounts on a vhost</h1>
Operation of LWSMPRO_CALLBACK mounts</h1>
<p>The feature provided by CALLBACK type mounts is binding a part of the URL namespace to a named protocol callback handler.</p>
<p>This allows protocol plugins to handle areas of the URL namespace. For example in test-server-v2.0.c, the URL area "/formtest" is associated with the plugin providing "protocol-post-demo" like this</p>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;static const struct lws_http_mount mount_post = {</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160; NULL, /* linked-list pointer to next*/</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160; &quot;/formtest&quot;, /* mountpoint in URL namespace on this vhost */</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160; &quot;protocol-post-demo&quot;, /* handler */</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; NULL, /* default filename if none given */</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160; NULL,</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; 0,</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; 0,</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; 0,</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160; 0,</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; 0,</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; LWSMPRO_CALLBACK, /* origin points to a callback */</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; 9, /* strlen(&quot;/formtest&quot;), ie length of the mountpoint */</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;};</div></div><!-- fragment --><p>Client access to /formtest[anything] will be passed to the callback registered with the named protocol, which in this case is provided by a protocol plugin.</p>
<div class="fragment"><div class="line">static const struct lws_http_mount mount_post = {</div><div class="line"> NULL, /* linked-list pointer to next*/</div><div class="line"> &quot;/formtest&quot;, /* mountpoint in URL namespace on this vhost */</div><div class="line"> &quot;protocol-post-demo&quot;, /* handler */</div><div class="line"> NULL, /* default filename if none given */</div><div class="line"> NULL,</div><div class="line"> 0,</div><div class="line"> 0,</div><div class="line"> 0,</div><div class="line"> 0,</div><div class="line"> 0,</div><div class="line"> LWSMPRO_CALLBACK, /* origin points to a callback */</div><div class="line"> 9, /* strlen(&quot;/formtest&quot;), ie length of the mountpoint */</div><div class="line">};</div></div><!-- fragment --><p>Client access to /formtest[anything] will be passed to the callback registered with the named protocol, which in this case is provided by a protocol plugin.</p>
<p>Access by all methods, eg, GET and POST are handled by the callback.</p>
<p>protocol-post-demo deals with accepting and responding to the html form that is in the test server HTML.</p>
<p>When a connection accesses a URL related to a CALLBACK type mount, the connection protocol is changed until the next access on the connection to a URL outside the same CALLBACK mount area. User space on the connection is arranged to be the size of the new protocol user space allocation as given in the protocol struct.</p>
@ -277,7 +276,7 @@ Dimming webpage when connection lost</h1>
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -0,0 +1,180 @@
<!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: Notes about generic-sessions Plugin</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('md_README_8generic-sessions.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="headertitle">
<div class="title">Notes about generic-sessions Plugin </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1><a class="anchor" id="gseb"></a>
Enabling lwsgs for build</h1>
<p>Enable at CMake with -DLWS_WITH_GENERIC_SESSIONS=1</p>
<p>This also needs sqlite3 (libsqlite3-dev or similar package)</p>
<h1><a class="anchor" id="gsi"></a>
lwsgs Introduction</h1>
<p>The generic-sessions protocol plugin provides cookie-based login authentication for lws web and ws connections.</p>
<p>The plugin handles everything about generic account registration, email verification, lost password, account deletion, and other generic account management.</p>
<p>Other code, in another eg, ws protocol handler, only needs very high-level state information from generic-sessions, ie, which user the client is authenticated as. Everything underneath is managed in generic-sessions.</p>
<ul>
<li>random 20-byte session id managed in a cookie</li>
<li>all information related to the session held at the server, nothing managed clientside</li>
<li>sqlite3 used at the server to manage active sessions and users</li>
<li>defaults to creating anonymous sessions with no user associated</li>
<li>admin account (with user-selectable username) is defined in config with a SHA-1 of the password; rest of the accounts are in sqlite3</li>
<li>user account passwords stored as salted SHA-1 with additional confounder only stored in the JSON config, not the database</li>
<li>login, logout, register account + email verification built-in with examples</li>
<li>in a mount, some file suffixes (ie, .js) can be associated with a protocol for the purposes of rewriting symbolnames. These are read-only copies of logged-in server state.</li>
<li>When your page fetches .js or other rewritten files from that mount, "$lwsgs_user" and so on are rewritten on the fly using chunked transfer encoding</li>
<li>Eliminates server-side scripting with a few rewritten symbols and javascript on client side</li>
<li>32-bit bitfield for authentication sectoring, mounts can provide a mask on the loggin-in session's associated server-side bitfield that must be set for access.</li>
<li>No code (just config) required for, eg, private URL namespace that requires login to access.</li>
</ul>
<h1><a class="anchor" id="gsin"></a>
Lwsgs Integration to HTML</h1>
<p>Only three steps are needed to integrate lwsgs in your HTML.</p>
<p>1) lwsgs HTML UI is bundled with the javascript it uses in <code>lwsgs.js</code>, so import that script file in your head section</p>
<p>2) define an empty div of id "lwsgs" somewhere</p>
<p>3) Call lwsgs_initial() in your page</p>
<p>That's it. An example is below</p>
<div class="fragment"><div class="line">&lt;html&gt;</div><div class="line"> &lt;head&gt;</div><div class="line"> &lt;script src=&quot;lwsgs.js&quot;&gt;&lt;/script&gt;</div><div class="line"> &lt;style&gt;</div><div class="line"> .body { font-size: 12 }</div><div class="line"> .gstitle { font-size: 18 }</div><div class="line"> &lt;/style&gt;</div><div class="line"> &lt;/head&gt;</div><div class="line"> &lt;body style=&quot;background-image:url(seats.jpg)&quot;&gt;</div><div class="line"> &lt;table style=&quot;width:100%;transition: max-height 2s;&quot;&gt;</div><div class="line"> &lt;tr&gt;</div><div class="line"> &lt;td style=&quot;vertical-align:top;text-align:left;width=200px&quot;&gt;</div><div class="line"> &lt;img src=&quot;lwsgs-logo.png&quot;&gt;</div><div class="line"> &lt;/td&gt;</div><div class="line"> &lt;td style=&quot;vertical-align:top;float:right&quot;&gt;</div><div class="line"> &lt;div id=lwsgs style=&quot;text-align:right;background-color: rgba(255, 255, 255, 0.8);&quot;&gt;&lt;/div&gt;</div><div class="line"> &lt;/td&gt;</div><div class="line"> &lt;/tr&gt;</div><div class="line"> &lt;/table&gt;</div><div class="line"> &lt;/form&gt;</div><div class="line"></div><div class="line"> &lt;script&gt;lwsgs_initial();&lt;/script&gt;</div><div class="line"></div><div class="line"> &lt;/body&gt;</div><div class="line">&lt;/html&gt;</div></div><!-- fragment --><h1><a class="anchor" id="gsof"></a>
Lwsgs Overall Flow@</h1>
<p>When the protocol is initialized, it gets per-vhost information from the config, such as where the sqlite3 databases are to be stored. The admin username and sha-1 of the admin password are also taken from here.</p>
<p>In the mounts using protocol-generic-sessions, a cookie is maintained against any requests; if no cookie was active on the initial request a new session is created with no attached user.</p>
<p>So there should always be an active session after any transactions with the server.</p>
<p>In the example html going to the mount /lwsgs loads a login / register page as the default.</p>
<p>The &lt;form&gt; in the login page contains 'next url' hidden inputs that let the html 'program' where the form handler will go after a successful admin login, a successful user login and a failed login.</p>
<p>After a successful login, the sqlite record at the server for the current session is updated to have the logged-in username associated with it.</p>
<h1><a class="anchor" id="gsconf"></a>
Lwsgs Configuration</h1>
<p>"auth-mask" defines the authorization sector bits that must be enabled on the session to gain access.</p>
<p>"auth-mask" 0 is the default.</p>
<ul>
<li>b0 is set if you are logged in as a user at all.</li>
<li>b1 is set if you are logged in with the user configured to be admin</li>
<li>b2 is set if the account has been verified (the account configured for admin is always verified)</li>
<li>b3 is set if your session just did the forgot password flow successfully</li>
</ul>
<div class="fragment"><div class="line">{</div><div class="line"> # things in here can always be served</div><div class="line"> &quot;mountpoint&quot;: &quot;/lwsgs&quot;,</div><div class="line"> &quot;origin&quot;: &quot;file:///usr/share/libwebsockets-test-server/generic-sessions&quot;,</div><div class="line"> &quot;origin&quot;: &quot;callback://protocol-lws-messageboard&quot;,</div><div class="line"> &quot;default&quot;: &quot;generic-sessions-login-example.html&quot;,</div><div class="line"> &quot;auth-mask&quot;: &quot;0&quot;,</div><div class="line"> &quot;interpret&quot;: {</div><div class="line"> &quot;.js&quot;: &quot;protocol-lws-messageboard&quot;</div><div class="line"> }</div><div class="line"> }, {</div><div class="line"> # things in here can only be served if logged in as a user</div><div class="line"> &quot;mountpoint&quot;: &quot;/lwsgs/needauth&quot;,</div><div class="line"> &quot;origin&quot;: &quot;file:///usr/share/libwebsockets-test-server/generic-sessions/needauth&quot;,</div><div class="line"> &quot;origin&quot;: &quot;callback://protocol-lws-messageboard&quot;,</div><div class="line"> &quot;default&quot;: &quot;generic-sessions-login-example.html&quot;,</div><div class="line"> &quot;auth-mask&quot;: &quot;5&quot;, # logged in as a verified user</div><div class="line"> &quot;interpret&quot;: {</div><div class="line"> &quot;.js&quot;: &quot;protocol-lws-messageboard&quot;</div><div class="line"> }</div><div class="line"> }, {</div><div class="line"> # things in here can only be served if logged in as admin</div><div class="line"> &quot;mountpoint&quot;: &quot;/lwsgs/needadmin&quot;,</div><div class="line"> &quot;origin&quot;: &quot;file:///usr/share/libwebsockets-test-server/generic-sessions/needadmin&quot;,</div><div class="line"> &quot;origin&quot;: &quot;callback://protocol-lws-messageboard&quot;,</div><div class="line"> &quot;default&quot;: &quot;generic-sessions-login-example.html&quot;,</div><div class="line"> &quot;auth-mask&quot;: &quot;7&quot;, # b2 = verified (by email / or admin), b1 = admin, b0 = logged in with any user name</div><div class="line"> &quot;interpret&quot;: {</div><div class="line"> &quot;.js&quot;: &quot;protocol-lws-messageboard&quot;</div><div class="line"> }</div><div class="line"> }</div></div><!-- fragment --><p> Note that the name of the real application protocol that uses generic-sessions is used, not generic-sessions itself.</p>
<p>The vhost configures the storage dir, admin credentials and session cookie lifetimes:</p>
<div class="fragment"><div class="line"> &quot;ws-protocols&quot;: [{</div><div class="line"> &quot;protocol-generic-sessions&quot;: {</div><div class="line"> &quot;status&quot;: &quot;ok&quot;,</div><div class="line"> &quot;admin-user&quot;: &quot;admin&quot;,</div><div class="line"></div><div class="line"># create the pw hash like this (for the example pw, &quot;jipdocesExunt&quot; )</div><div class="line"># $ echo -n &quot;jipdocesExunt&quot; | sha1sum</div><div class="line"># 046ce9a9cca769e85798133be06ef30c9c0122c9 -</div><div class="line">#</div><div class="line"># Obviously ** change this password hash to a secret one before deploying **</div><div class="line">#</div><div class="line"> &quot;admin-password-sha1&quot;: &quot;046ce9a9cca769e85798133be06ef30c9c0122c9&quot;,</div><div class="line"> &quot;session-db&quot;: &quot;/var/www/sessions/lws.sqlite3&quot;,</div><div class="line"> &quot;timeout-idle-secs&quot;: &quot;600&quot;,</div><div class="line"> &quot;timeout-anon-idle-secs&quot;: &quot;1200&quot;,</div><div class="line"> &quot;timeout-absolute-secs&quot;: &quot;6000&quot;,</div><div class="line"># the confounder is part of the salted password hashes. If this config</div><div class="line"># file is in a 0700 root:root dir, an attacker with apache credentials</div><div class="line"># will have to get the confounder out of the process image to even try</div><div class="line"># to guess the password hashes.</div><div class="line"> &quot;confounder&quot;: &quot;Change to &lt;=31 chars of junk&quot;,</div><div class="line"></div><div class="line"> &quot;email-from&quot;: &quot;noreply@example.com&quot;,</div><div class="line"> &quot;email-smtp-ip&quot;: &quot;127.0.0.1&quot;,</div><div class="line"> &quot;email-expire&quot;: &quot;3600&quot;,</div><div class="line"> &quot;email-helo&quot;: &quot;myhost.com&quot;,</div><div class="line"> &quot;email-contact-person&quot;: &quot;Set Me &lt;real-person@email.com&gt;&quot;,</div><div class="line"> &quot;email-confirm-url-base&quot;: &quot;http://localhost:7681/lwsgs&quot;</div><div class="line"> }</div></div><!-- fragment --><p>The email- related settings control generation of automatic emails for registration and forgotten password.</p>
<ul>
<li><code>email-from</code>: The email address automatic emails are sent from</li>
<li><code>email-smtp-ip</code>: Normally 127.0.0.1, if you have a suitable server on port 25 on your lan you can use this instead here.</li>
<li><code>email-expire</code>: Seconds that links sent in email will work before being deleted</li>
<li><code>email-helo</code>: HELO to use when communicating with your SMTP server</li>
<li><code>email-contact-person</code>: mentioned in the automatic emails as a human who can answer questions</li>
<li><code>email-confirm-url-base</code>: the URL to start links with in the emails, so the recipient can get back to the web server</li>
</ul>
<p>The real protocol that makes use of generic-sessions must also be listed and any configuration it needs given</p>
<div class="fragment"><div class="line">&quot;protocol-lws-messageboard&quot;: {</div><div class="line"> &quot;status&quot;: &quot;ok&quot;,</div><div class="line"> &quot;message-db&quot;: &quot;/var/www/sessions/messageboard.sqlite3&quot;</div><div class="line">},</div></div><!-- fragment --><p>Notice the real application uses his own sqlite db, no details about how generic-sessions works or how it stores data are available to it.</p>
<h1><a class="anchor" id="gspwc"></a>
Lwsgs Password Confounder</h1>
<p>You can also define a per-vhost confounder shown in the example above, used when aggregating the password with the salt when it is hashed. Any attacker will also need to get the confounder along with the database, which you can make harder by making the config dir only eneterable / readable by root.</p>
<h1><a class="anchor" id="gsprep"></a>
Lwsgs Preparing the db directory</h1>
<p>You will have to prepare the db directory so it's suitable for the lwsws user to use, that usually means apache, eg</p>
<div class="fragment"><div class="line"># mkdir -p /var/www/sessions</div><div class="line"># chown root:apache /var/www/sessions</div><div class="line"># chmod 770 /var/www/sessions</div></div><!-- fragment --><h1><a class="anchor" id="gsrmail"></a>
Lwsgs Email configuration</h1>
<p>lwsgs will can send emails by talking to an SMTP server on localhost:25. That will usually be sendmail or postfix, you should confirm that works first by itself using the <code>mail</code> application to send on it.</p>
<p>lwsgs has been tested on stock Fedora sendmail and postfix.</p>
<h1><a class="anchor" id="gsap"></a>
Lwsgs Integration with another protocol</h1>
<p>lwsgs is designed to provide sessions and accounts in a standalone and generic way.</p>
<p>But it's not useful by itself, there will always be the actual application who wants to make use of generic-sessions features.</p>
<p>We provide the "messageboard" plugin as an example of how to integrate with your actual application protocol.</p>
<p>The basic approach is the 'real' protocol handler (usually a plugin itself) subclasses the generic-sessions plugin and calls through to it by default.</p>
<p>The "real" protocol handler entirely deals with ws-related stuff itself, since generic-sessions does not use ws. But for</p>
<ul>
<li>LWS_CALLBACK_HTTP</li>
<li>LWS_CALLBACK_HTTP_BODY</li>
<li>LWS_CALLBACK_HTTP_BODY_COMPLETION</li>
<li>LWS_CALLBACK_HTTP_DROP_PROTOCOL</li>
</ul>
<p>the "real" protocol handler checks if it recognizes the activity (eg, his own POST form URL) and if not, passes stuff through to the generic-sessions protocol callback to handle it. To simplify matters the real protocol can just pass through any unhandled messages to generic-sessions.</p>
<p>The "real" protocol can get a pointer to generic-sessions protocol on the same vhost using</p>
<div class="fragment"><div class="line">vhd-&gt;gsp = lws_vhost_name_to_protocol(vhd-&gt;vh, &quot;protocol-generic-sessions&quot;);</div></div><!-- fragment --><p>The "real" protocol must also arrange generic-sessions per_session_data in his own per-session allocation. To allow keeping generic-sessions opaque, the real protocol must allocate that space at runtime, using the pss size the generic-sessions protocol struct exposes</p>
<div class="fragment"><div class="line">struct per_session_data__myapp {</div><div class="line"> void *pss_gs;</div><div class="line">...</div><div class="line"></div><div class="line"> pss-&gt;pss_gs = malloc(vhd-&gt;gsp-&gt;per_session_data_size);</div></div><!-- fragment --><p>The allocation reserved for generic-sessions is then used as user_space when the real protocol calls through to the generic-sessions callback</p>
<div class="fragment"><div class="line">vhd-&gt;gsp-&gt;callback(wsi, reason, &amp;pss-&gt;pss_gs, in, len);</div></div><!-- fragment --><p>In that way the "real" protocol can subclass generic-sessions functionality.</p>
<p>To ease management of these secondary allocations, there are callbacks that occur when a wsi binds to a protocol and when the binding is dropped. These should be used to malloc and free and kind of per-connection secondary allocations.</p>
<div class="fragment"><div class="line">case LWS_CALLBACK_HTTP_BIND_PROTOCOL:</div><div class="line"> if (!pss || pss-&gt;pss_gs)</div><div class="line"> break;</div><div class="line"></div><div class="line"> pss-&gt;pss_gs = malloc(vhd-&gt;gsp-&gt;per_session_data_size);</div><div class="line"> if (!pss-&gt;pss_gs)</div><div class="line"> return -1;</div><div class="line"></div><div class="line"> memset(pss-&gt;pss_gs, 0, vhd-&gt;gsp-&gt;per_session_data_size);</div><div class="line"> break;</div><div class="line"></div><div class="line">case LWS_CALLBACK_HTTP_DROP_PROTOCOL:</div><div class="line"> if (vhd-&gt;gsp-&gt;callback(wsi, reason, pss ? pss-&gt;pss_gs : NULL, in, len))</div><div class="line"> return -1;</div><div class="line"></div><div class="line"> if (pss-&gt;pss_gs) {</div><div class="line"> free(pss-&gt;pss_gs);</div><div class="line"> pss-&gt;pss_gs = NULL;</div><div class="line"> }</div><div class="line"> break;</div></div><!-- fragment --><p>#section gsapsib Getting session-specific information from another protocol</p>
<p>At least at the time when someone tries to upgrade an http(s) connection to ws(s) with your real protocol, it is necessary to confirm the cookie the http(s) connection has with generic-sessions and find out his username and other info.</p>
<p>Generic sessions lets another protocol check it again by calling his callback, and lws itself provides a generic session info struct to pass the related data</p>
<div class="fragment"><div class="line">struct lws_session_info {</div><div class="line"> char username[32];</div><div class="line"> char email[100];</div><div class="line"> char ip[72];</div><div class="line"> unsigned int mask;</div><div class="line"> char session[42];</div><div class="line">};</div><div class="line"></div><div class="line">struct lws_session_info sinfo;</div><div class="line">...</div><div class="line">vhd-&gt;gsp-&gt;callback(wsi, LWS_CALLBACK_SESSION_INFO,</div><div class="line"> &amp;pss-&gt;pss_gs, &amp;sinfo, 0);</div></div><!-- fragment --><p>After the call to generic-sessions, the results can be</p>
<ul>
<li>all the strings will be zero-length and .mask zero, there is no usable cookie<ul>
<li>only .ip and .session are set: the cookie is OK but no user logged in</li>
<li>all the strings contain information about the logged-in user</li>
</ul>
</li>
</ul>
<p>the real protocol can use this to reject attempts to open ws connections from http connections that are not authenticated; afterwards there's no need to check the ws connection auth status again. </p>
</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,170 @@
<!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: Notes about generic-table</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('md_README_8generic-table.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="headertitle">
<div class="title">Notes about generic-table </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1><a class="anchor" id="gtint"></a>
What is generic-table?</h1>
<p>Generic-table is a JSON schema and client-side JS file that makes it easy to display live, table structured HTML over a ws link.</p>
<p>An example plugin and index.html using it are provided, but lwsgt itself doesn't have its own plugin, it's just a JSON schema and client-side JS that other plugins can use to simplify displaying live, table-based data without having to reinvent the wheel each time.</p>
<p>The ws protocol sends JSON describing the table, and then JSON updating the table contents when it chooses, the brower table is updated automatically, live.</p>
<div class="image">
<img src="lwsgt-overview.png" alt="lwsgt-overview.png"/>
</div>
<ul>
<li>Example protocol plugin (displays directory contents): <a href="https://github.com/warmcat/libwebsockets/tree/master/plugins/generic-table/protocol_table_dirlisting.c">https://github.com/warmcat/libwebsockets/tree/master/plugins/generic-table/protocol_table_dirlisting.c</a></li>
<li>Example HTML: <a href="https://github.com/warmcat/libwebsockets/tree/master/plugins/generic-table/assets/index.html">https://github.com/warmcat/libwebsockets/tree/master/plugins/generic-table/assets/index.html</a></li>
<li>lwsgt.js (client-side table rendering / ws link management): <a href="https://github.com/warmcat/libwebsockets/tree/master/plugins/generic-table/assets/lwsgt.js">https://github.com/warmcat/libwebsockets/tree/master/plugins/generic-table/assets/lwsgt.js</a></li>
</ul>
<h1><a class="anchor" id="gteb"></a>
Enabling for build</h1>
<p>Enable the demo plugin at CMake with -DLWS_WITH_PLUGINS=1</p>
<h1><a class="anchor" id="gtinth"></a>
Integrating with your html</h1>
<ul>
<li>In your HEAD section, include lwsgt.js</li>
</ul>
<div class="fragment"><div class="line">&lt;script src=&quot;lwsgt.js&quot;&gt;&lt;/script&gt;</div></div><!-- fragment --><ul>
<li>Also in your HEAD section, style the lwsgt CSS, eg</li>
</ul>
<div class="fragment"><div class="line">&lt;style&gt;</div><div class="line">.lwsgt_title { font-size: 24; text-align:center }</div><div class="line">.lwsgt_breadcrumbs { font-size: 18; text-align:left }</div><div class="line">.lwsgt_table { font-size: 14; padding:12px; margin: 12px; align:center }</div><div class="line">.lwsgt_hdr { font-size: 18; text-align:center;</div><div class="line"> background-color: rgba(40, 40, 40, 0.8); color: white }</div><div class="line">.lwsgt_tr { padding: 10px }</div><div class="line">.lwsgt_td { padding: 3px }</div><div class="line">&lt;/style&gt;</div></div><!-- fragment --><p>You can skip this but the result will be less beautiful until some CSS is provided.</p>
<ul>
<li>In your body section, declare a div with an id (can be whatever you want)</li>
</ul>
<div class="fragment"><div class="line">&lt;tr&gt;&lt;td&gt;&lt;div id=&quot;lwsgt1&quot; class=&quot;group1&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;</div></div><!-- fragment --><p>lwsgt JS will put its content there.</p>
<ul>
<li>Finally in a &lt;script&gt; at the end of your page, instantiate lwsgt and provide a custom callback for clickable links</li>
</ul>
<div class="fragment"><div class="line">&lt;script&gt;</div><div class="line">var v1 = new lwsgt_initial(&quot;Dir listing demo&quot;,</div><div class="line"> &quot;protocol-lws-table-dirlisting&quot;,</div><div class="line"> &quot;lwsgt1&quot;, &quot;lwsgt_dir_click&quot;, &quot;v1&quot;);</div><div class="line"></div><div class="line">function lwsgt_dir_click(gt, u, col, row)</div><div class="line">{</div><div class="line"> if (u[0] == &#39;=&#39;) { /* change directory */</div><div class="line"> window[gt].lwsgt_ws.send(u.substring(1, u.length));</div><div class="line"> return;</div><div class="line"> }</div><div class="line"> var win = window.open(u, &#39;_blank&#39;);</div><div class="line"> win.focus();</div><div class="line">}</div><div class="line"></div><div class="line">&lt;/script&gt;</div></div><!-- fragment --><p>In the callback, you can recover the ws object by <code>window[gt].lwsgt_ws</code>.</p>
<h1><a class="anchor" id="gtc"></a>
Lwsgt constructor</h1>
<p>To instantiate the ws link and lwsgt instance, your HTML must call a lwsgt constructor for each region on the page managed by lwsgt.</p>
<p><code>var myvar = new lwsgt_initial(title, ws_protocol, div_id, click_cb, myvar);</code></p>
<p>All of the arguments are strings.</p>
<table class="doxtable">
<tr>
<th>Parameter </th><th>Description </th></tr>
<tr>
<td>title </td><td>Title string to go above the table </td></tr>
<tr>
<td>ws_protocol </td><td>Protocol name string to use when making ws connection </td></tr>
<tr>
<td>div_id </td><td>HTML id of div to fill with content </td></tr>
<tr>
<td>click_cb </td><td>Callback function name string to handle clickable links </td></tr>
<tr>
<td>myvar </td><td>Name of var used to hold this instantiation globally </td></tr>
</table>
<p>Note "myvar" is needed so it can be passed to the click handling callback.</p>
<h1><a class="anchor" id="gtclick"></a>
Lwsgt click handling function</h1>
<p>When a clickable link produced by lwsgt is clicked, the function named in the click_cb parameter to lwsgt_initial is called.</p>
<p>That function is expected to take four parameters, eg</p>
<p><code>function lwsgt_dir_click(gt, u, col, row)</code></p>
<table class="doxtable">
<tr>
<th>Parameter </th><th>Description </th></tr>
<tr>
<td>gt </td><td>Name of global var holding this lwsgt context (ie, myvar) </td></tr>
<tr>
<td>u </td><td>Link "url" string </td></tr>
<tr>
<td>col </td><td>Table column number link is from </td></tr>
<tr>
<td>row </td><td>Table row number link is from </td></tr>
</table>
<h1><a class="anchor" id="gtgj"></a>
Generic-table JSON</h1>
<h3>Column layout</h3>
<p>When the ws connection is established, the protocol should send a JSON message describing the table columns. For example</p>
<div class="fragment"><div class="line">&quot;cols&quot;: [</div><div class="line"> { &quot;name&quot;: &quot;Date&quot; },</div><div class="line"> { &quot;name&quot;: &quot;Size&quot;, &quot;align&quot;: &quot;right&quot; },</div><div class="line"> { &quot;name&quot;: &quot;Icon&quot; },</div><div class="line"> { &quot;name&quot;: &quot;Name&quot;, &quot;href&quot;: &quot;uri&quot;},</div><div class="line"> { &quot;name&quot;: &quot;uri&quot;, &quot;hide&quot;: &quot;1&quot; }</div><div class="line"> ]</div><div class="line">}</div></div><!-- fragment --><ul>
<li>This describes 5 columns</li>
<li>Only four columns (not "uri") should be visible</li>
<li>"Name" should be presented as a clickable link using "uri" as the destination, when a "uri" field is presented.</li>
<li>"Size" field should be presented aligned to the right</li>
</ul>
<h3>Breadcrumbs</h3>
<p>When a view is hierarchical, it's useful to provide a "path" with links back in the "path", known as "breadcrumbs".</p>
<p>Elements before the last one should provide a "url" member as well as the displayable name, which is used to create the link destination.</p>
<p>The last element, being the current displayed page should not have a url member and be displayed without link style.</p>
<div class="fragment"><div class="line">&quot;breadcrumbs&quot;:[{&quot;name&quot;:&quot;top&quot;, &quot;url&quot;: &quot;/&quot; }, {&quot;name&quot;:&quot;mydir&quot;}]</div></div><!-- fragment --><h3>Table data</h3>
<p>The actual file data consists of an array of rows, containing the columns mentioned in the original "cols" section.</p>
<div class="fragment"><div class="line">&quot;data&quot;:[</div><div class="line"> {</div><div class="line"> &quot;Icon&quot;:&quot; &quot;,</div><div class="line"> &quot;Date&quot;:&quot;2015-Feb-06 03:08:35 +0000&quot;,</div><div class="line"> &quot;Size&quot;:&quot;1406&quot;,</div><div class="line"> &quot;uri&quot;:&quot;./serve//favicon.ico&quot;,</div><div class="line"> &quot;Name&quot;:&quot;favicon.ico&quot;</div><div class="line"> }</div><div class="line">]</div></div><!-- fragment --><h1><a class="anchor" id="gtdirl"></a>
Setting up protocol-lws-table-dirlisting</h1>
<p>The example protocol needs two mounts, one to provide the index.html, js and the protocol itself</p>
<div class="fragment"><div class="line">{</div><div class="line"> &quot;mountpoint&quot;: &quot;/dirtest&quot;,</div><div class="line"> &quot;origin&quot;: &quot;file:///usr/share/libwebsockets-test-server/generic-table&quot;,</div><div class="line"> &quot;origin&quot;: &quot;callback://protocol-lws-table-dirlisting&quot;,</div><div class="line"> &quot;default&quot;: &quot;index.html&quot;,</div><div class="line"> &quot;pmo&quot;: [{</div><div class="line"> &quot;dir&quot;: &quot;/usr/share/libwebsockets-test-server&quot;</div><div class="line"> }]</div><div class="line">},</div></div><!-- fragment --><p>The protocol wants a per-mount option (PMO) to tell it the base directory it is serving from, named "dir".</p>
<p>The other mount is there to simply serve items that get clicked on from the table in a secure way</p>
<div class="fragment"><div class="line">{</div><div class="line"> &quot;mountpoint&quot;: &quot;/dirtest/serve&quot;,</div><div class="line"> &quot;origin&quot;: &quot;file:///usr/share/libwebsockets-test-server&quot;,</div><div class="line"> &quot;default&quot;: &quot;index.html&quot;</div><div class="line">},</div></div><!-- fragment --><p>This last bit is not related to using lwsgt itself. </p>
</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,197 @@
<!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: Notes about lwsws</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('md_README_8lwsws.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="headertitle">
<div class="title">Notes about lwsws </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1><a class="anchor" id="lwsws"></a>
Libwebsockets Web Server</h1>
<p>lwsws is an implementation of a very lightweight, ws-capable generic web server, which uses libwebsockets to implement everything underneath.</p>
<p>If you are basically implementing a standalone server with lws, you can avoid reinventing the wheel and use a debugged server including lws.</p>
<h1><a class="anchor" id="lwswsb"></a>
Build</h1>
<p>Just enable -DLWS_WITH_LWSWS=1 at cmake-time.</p>
<p>It enables libuv and plugin support automatically.</p>
<p>NOTICE on Ubuntu, the default libuv package is called "libuv-0.10". This is ancient.</p>
<p>You should replace this with libuv1 and libuv1-dev before proceeding.</p>
<h1><a class="anchor" id="lwswsc"></a>
Lwsws Configuration</h1>
<p>lwsws uses JSON config files, they're pure JSON except:</p>
<ul>
<li>'#' may be used to turn the rest of the line into a comment.</li>
<li>There's also a single substitution, if a string contains "_lws_ddir_", then that is replaced with the LWS install data directory path, eg, "/usr/share" or whatever was set when LWS was built + installed. That lets you refer to installed paths without having to change the config if your install path was different.</li>
</ul>
<p>There is a single file intended for global settings</p>
<p>/etc/lwsws/conf </p><div class="fragment"><div class="line"># these are the server global settings</div><div class="line"># stuff related to vhosts should go in one</div><div class="line"># file per vhost in ../conf.d/</div><div class="line"></div><div class="line">{</div><div class="line"> &quot;global&quot;: {</div><div class="line"> &quot;uid&quot;: &quot;48&quot;, # apache user</div><div class="line"> &quot;gid&quot;: &quot;48&quot;, # apache user</div><div class="line"> &quot;count-threads&quot;: &quot;1&quot;,</div><div class="line"> &quot;server-string&quot;: &quot;myserver v1&quot;, # returned in http headers</div><div class="line"> &quot;ws-pingpong-secs&quot;: &quot;200&quot;, # confirm idle established ws connections this often</div><div class="line"> &quot;init-ssl&quot;: &quot;yes&quot;</div><div class="line"> }</div><div class="line">}</div></div><!-- fragment --><p> and a config directory intended to take one file per vhost</p>
<p>/etc/lwsws/conf.d/warmcat.com </p><div class="fragment"><div class="line">{</div><div class="line"> &quot;vhosts&quot;: [{</div><div class="line"> &quot;name&quot;: &quot;warmcat.com&quot;,</div><div class="line"> &quot;port&quot;: &quot;443&quot;,</div><div class="line"> &quot;interface&quot;: &quot;eth0&quot;, # optional</div><div class="line"> &quot;host-ssl-key&quot;: &quot;/etc/pki/tls/private/warmcat.com.key&quot;, # if given enable ssl</div><div class="line"> &quot;host-ssl-cert&quot;: &quot;/etc/pki/tls/certs/warmcat.com.crt&quot;,</div><div class="line"> &quot;host-ssl-ca&quot;: &quot;/etc/pki/tls/certs/warmcat.com.cer&quot;,</div><div class="line"> &quot;mounts&quot;: [{ # autoserve</div><div class="line"> &quot;mountpoint&quot;: &quot;/&quot;,</div><div class="line"> &quot;origin&quot;: &quot;file:///var/www/warmcat.com&quot;,</div><div class="line"> &quot;default&quot;: &quot;index.html&quot;</div><div class="line"> }]</div><div class="line"> }]</div><div class="line">}</div></div><!-- fragment --><p> To get started quickly, an example config reproducing the old test server on port 7681, non-SSL is provided. To set it up </p><div class="fragment"><div class="line"># mkdir -p /etc/lwsws/conf.d /var/log/lwsws</div><div class="line"># cp ./lwsws/etc-lwsws-conf-EXAMPLE /etc/lwsws/conf</div><div class="line"># cp ./lwsws/etc-lwsws-conf.d-localhost-EXAMPLE /etc/lwsws/conf.d/test-server</div><div class="line"># sudo lwsws</div></div><!-- fragment --><h1><a class="anchor" id="lwswsv"></a>
Lwsws Vhosts</h1>
<p>One server can run many vhosts, where SSL is in use SNI is used to match the connection to a vhost and its vhost-specific SSL keys during SSL negotiation.</p>
<p>Listing multiple vhosts looks something like this </p><div class="fragment"><div class="line">{</div><div class="line"> &quot;vhosts&quot;: [ {</div><div class="line"> &quot;name&quot;: &quot;localhost&quot;,</div><div class="line"> &quot;port&quot;: &quot;443&quot;,</div><div class="line"> &quot;host-ssl-key&quot;: &quot;/etc/pki/tls/private/libwebsockets.org.key&quot;,</div><div class="line"> &quot;host-ssl-cert&quot;: &quot;/etc/pki/tls/certs/libwebsockets.org.crt&quot;,</div><div class="line"> &quot;host-ssl-ca&quot;: &quot;/etc/pki/tls/certs/libwebsockets.org.cer&quot;,</div><div class="line"> &quot;mounts&quot;: [{</div><div class="line"> &quot;mountpoint&quot;: &quot;/&quot;,</div><div class="line"> &quot;origin&quot;: &quot;file:///var/www/libwebsockets.org&quot;,</div><div class="line"> &quot;default&quot;: &quot;index.html&quot;</div><div class="line"> }, {</div><div class="line"> &quot;mountpoint&quot;: &quot;/testserver&quot;,</div><div class="line"> &quot;origin&quot;: &quot;file:///usr/local/share/libwebsockets-test-server&quot;,</div><div class="line"> &quot;default&quot;: &quot;test.html&quot;</div><div class="line"> }],</div><div class="line"> # which protocols are enabled for this vhost, and optional</div><div class="line"> # vhost-specific config options for the protocol</div><div class="line"> #</div><div class="line"> &quot;ws-protocols&quot;: [{</div><div class="line"> &quot;warmcat,timezoom&quot;: {</div><div class="line"> &quot;status&quot;: &quot;ok&quot;</div><div class="line"> }</div><div class="line"> }]</div><div class="line"> },</div><div class="line"> {</div><div class="line"> &quot;name&quot;: &quot;localhost&quot;,</div><div class="line"> &quot;port&quot;: &quot;7681&quot;,</div><div class="line"> &quot;host-ssl-key&quot;: &quot;/etc/pki/tls/private/libwebsockets.org.key&quot;,</div><div class="line"> &quot;host-ssl-cert&quot;: &quot;/etc/pki/tls/certs/libwebsockets.org.crt&quot;,</div><div class="line"> &quot;host-ssl-ca&quot;: &quot;/etc/pki/tls/certs/libwebsockets.org.cer&quot;,</div><div class="line"> &quot;mounts&quot;: [{</div><div class="line"> &quot;mountpoint&quot;: &quot;/&quot;,</div><div class="line"> &quot;origin&quot;: &quot;&gt;https://localhost&quot;</div><div class="line"> }]</div><div class="line"> },</div><div class="line"> {</div><div class="line"> &quot;name&quot;: &quot;localhost&quot;,</div><div class="line"> &quot;port&quot;: &quot;80&quot;,</div><div class="line"> &quot;mounts&quot;: [{</div><div class="line"> &quot;mountpoint&quot;: &quot;/&quot;,</div><div class="line"> &quot;origin&quot;: &quot;&gt;https://localhost&quot;</div><div class="line"> }]</div><div class="line"> }</div><div class="line"></div><div class="line"> ]</div><div class="line">}</div></div><!-- fragment --><p>That sets up three vhosts all called "localhost" on ports 443 and 7681 with SSL, and port 80 without SSL but with a forced redirect to <a href="https://localhost">https://localhost</a></p>
<h1><a class="anchor" id="lwswsvn"></a>
Lwsws Vhost name and port sharing</h1>
<p>The vhost name field is used to match on incoming SNI or Host: header, so it must always be the host name used to reach the vhost externally.</p>
<ul>
<li>Vhosts may have the same name and different ports, these will each create a listening socket on the appropriate port.</li>
<li>Vhosts may also have the same port and different name: these will be treated as true vhosts on one listening socket and the active vhost decided at SSL negotiation time (via SNI) or if no SSL, then after the Host: header from the client has been parsed.</li>
</ul>
<h1><a class="anchor" id="lwswspr"></a>
Lwsws Protocols</h1>
<p>Vhosts by default have available the union of any initial protocols from context creation time, and any protocols exposed by plugins.</p>
<p>Vhosts can select which plugins they want to offer and give them per-vhost settings using this syntax </p><div class="fragment"><div class="line">&quot;ws-protocols&quot;: [{</div><div class="line"> &quot;warmcat-timezoom&quot;: {</div><div class="line"> &quot;status&quot;: &quot;ok&quot;</div><div class="line"> }</div><div class="line">}]</div></div><!-- fragment --><p>The "x":"y" parameters like "status":"ok" are made available to the protocol during its per-vhost LWS_CALLBACK_PROTOCOL_INIT ( is a pointer to a linked list of struct <a class="el" href="structlws__protocol__vhost__options.html">lws_protocol_vhost_options</a> containing the name and value pointers).</p>
<p>To indicate that a protocol should be used when no Protocol: header is sent by the client, you can use "default": "1" </p><div class="fragment"><div class="line">&quot;ws-protocols&quot;: [{</div><div class="line"> &quot;warmcat-timezoom&quot;: {</div><div class="line"> &quot;status&quot;: &quot;ok&quot;,</div><div class="line"> &quot;default&quot;: &quot;1&quot;</div><div class="line"> }</div><div class="line">}]</div></div><!-- fragment --><h1><a class="anchor" id="lwswsovo"></a>
Lwsws Other vhost options</h1>
<ul>
<li>If the three options <code>host-ssl-cert</code>, <code>host-ssl-ca</code> and <code>host-ssl-key</code> are given, then the vhost supports SSL.</li>
</ul>
<p>Each vhost may have its own certs, SNI is used during the initial connection negotiation to figure out which certs to use by the server name it's asking for from the request DNS name.</p>
<ul>
<li><code>keeplive-timeout</code> (in secs) defaults to 60 for lwsws, it may be set as a vhost option</li>
<li><code>interface</code> lets you specify which network interface to listen on, if not given listens on all</li>
<li>"`unix-socket`": "1" causes the unix socket specified in the interface option to be used instead of an INET socket</li>
<li>"`sts`": "1" causes lwsws to send a Strict Transport Security header with responses that informs the client he should never accept to connect to this address using http. This is needed to get the A+ security rating from SSL Labs for your server.</li>
<li>"`access-log`": "filepath" sets where apache-compatible access logs will be written</li>
<li><code>"enable-client-ssl"</code>: <code>"1"</code> enables the vhost's client SSL context, you will need this if you plan to create client conections on the vhost that will use SSL. You don't need it if you only want http / ws client connections.</li>
<li>"`ciphers`": "&lt;cipher list&gt;" sets the allowed list of ciphers and key exchange protocols for the vhost. The default list is restricted to only those providing PFS (Perfect Forward Secrecy) on the author's Fedora system.</li>
</ul>
<p>If you need to allow weaker ciphers,you can provide an alternative list here per-vhost.</p>
<ul>
<li>"`ecdh-curve`": "&lt;curve name&gt;" The default ecdh curve is "prime256v1", but you can override it here, per-vhost</li>
<li>"`noipv6`": "on" Disable ipv6 completely for this vhost</li>
<li>"`ipv6only`": "on" Only allow ipv6 on this vhost / "off" only allow ipv4 on this vhost</li>
<li>"`ssl-option-set`": "&lt;decimal&gt;" Sets the SSL option flag value for the vhost. It may be used multiple times and OR's the flags together.</li>
</ul>
<p>The values are derived from /usr/include/openssl/ssl.h </p><div class="fragment"><div class="line"># define SSL_OP_NO_TLSv1_1 0x10000000L</div></div><!-- fragment --><p>would equate to</p>
<div class="fragment"><div class="line">&quot;`ssl-option-set`&quot;: &quot;268435456&quot;</div></div><!-- fragment --><ul>
<li>"`ssl-option-clear'": "&lt;decimal&gt;" Clears the SSL option flag value for the vhost. It may be used multiple times and OR's the flags together.</li>
<li>"`headers':: [{ "header1": "h1value", "header2": "h2value" }]</li>
</ul>
<p>allows you to set arbitrary headers on every file served by the vhost</p>
<p>recommended vhost headers for good client security are</p>
<div class="fragment"><div class="line"> &quot;headers&quot;: [{</div><div class="line"> &quot;Content-Security-Policy&quot;: &quot;script-src &#39;self&#39;&quot;,</div><div class="line"> &quot;X-Content-Type-Options&quot;: &quot;nosniff&quot;,</div><div class="line"> &quot;X-XSS-Protection&quot;: &quot;1; mode=block&quot;,</div><div class="line"> &quot;X-Frame-Options&quot;: &quot;SAMEORIGIN&quot;</div><div class="line">}]</div></div><!-- fragment --><h1><a class="anchor" id="lwswsm"></a>
Lwsws Mounts</h1>
<p>Where mounts are given in the vhost definition, then directory contents may be auto-served if it matches the mountpoint.</p>
<p>Mount protocols are used to control what kind of translation happens</p>
<ul>
<li><a href="file://">file://</a> serve the uri using the remainder of the url past the mountpoint based on the origin directory.</li>
</ul>
<p>Eg, with this mountpoint </p><div class="fragment"><div class="line">{</div><div class="line"> &quot;mountpoint&quot;: &quot;/&quot;,</div><div class="line"> &quot;origin&quot;: &quot;file:///var/www/mysite.com&quot;,</div><div class="line"> &quot;default&quot;: &quot;/&quot;</div><div class="line">}</div></div><!-- fragment --><p> The uri /file.jpg would serve /var/www/mysite.com/file.jpg, since / matched.</p>
<ul>
<li>^http:// or ^https:// these cause any url matching the mountpoint to issue a redirect to the origin url</li>
<li>cgi:// this causes any matching url to be given to the named cgi, eg <div class="fragment"><div class="line">{</div><div class="line"> &quot;mountpoint&quot;: &quot;/git&quot;,</div><div class="line"> &quot;origin&quot;: &quot;cgi:///var/www/cgi-bin/cgit&quot;,</div><div class="line"> &quot;default&quot;: &quot;/&quot;</div><div class="line">}, {</div><div class="line"> &quot;mountpoint&quot;: &quot;/cgit-data&quot;,</div><div class="line"> &quot;origin&quot;: &quot;file:///usr/share/cgit&quot;,</div><div class="line"> &quot;default&quot;: &quot;/&quot;</div><div class="line">},</div></div><!-- fragment --> would cause the url /git/myrepo to pass "myrepo" to the cgi /var/www/cgi-bin/cgit and send the results to the client.</li>
</ul>
<h1><a class="anchor" id="lwswsomo"></a>
Lwsws Other mount options</h1>
<p>1) Some protocols may want "per-mount options" in name:value format. You can provide them using "pmo" </p><pre class="fragment"> {
"mountpoint": "/stuff",
"origin": "callback://myprotocol",
"pmo": [{
"myname": "myvalue"
}]
}
</pre><p>2) When using a cgi:// protcol origin at a mountpoint, you may also give cgi environment variables specific to the mountpoint like this </p><div class="fragment"><div class="line">{</div><div class="line"> &quot;mountpoint&quot;: &quot;/git&quot;,</div><div class="line"> &quot;origin&quot;: &quot;cgi:///var/www/cgi-bin/cgit&quot;,</div><div class="line"> &quot;default&quot;: &quot;/&quot;,</div><div class="line"> &quot;cgi-env&quot;: [{</div><div class="line"> &quot;CGIT_CONFIG&quot;: &quot;/etc/cgitrc/libwebsockets.org&quot;</div><div class="line"> }]</div><div class="line">}</div></div><!-- fragment --><p> This allows you to customize one cgi depending on the mountpoint (and / or vhost).</p>
<p>3) It's also possible to set the cgi timeout (in secs) per cgi:// mount, like this </p><div class="fragment"><div class="line">&quot;cgi-timeout&quot;: &quot;30&quot;</div></div><!-- fragment --><p> 4) <code>callback://</code> protocol may be used when defining a mount to associate a named protocol callback with the URL namespace area. For example </p><div class="fragment"><div class="line">{</div><div class="line"> &quot;mountpoint&quot;: &quot;/formtest&quot;,</div><div class="line"> &quot;origin&quot;: &quot;callback://protocol-post-demo&quot;</div><div class="line">}</div></div><!-- fragment --><p> All handling of client access to /formtest[anything] will be passed to the callback registered to the protocol "protocol-post-demo".</p>
<p>This is useful for handling POST http body content or general non-cgi http payload generation inside a plugin.</p>
<p>See the related notes in README.coding.md</p>
<p>5) Cache policy of the files in the mount can also be set. If no options are given, the content is marked uncacheable. </p><div class="fragment"><div class="line">{</div><div class="line"> &quot;mountpoint&quot;: &quot;/&quot;,</div><div class="line"> &quot;origin&quot;: &quot;file:///var/www/mysite.com&quot;,</div><div class="line"> &quot;cache-max-age&quot;: &quot;60&quot;, # seconds</div><div class="line"> &quot;cache-reuse&quot;: &quot;1&quot;, # allow reuse at client at all</div><div class="line"> &quot;cache-revalidate&quot;: &quot;1&quot;, # check it with server each time</div><div class="line"> &quot;cache-intermediaries&quot;: &quot;1&quot; # allow intermediary caches to hold</div><div class="line">}</div></div><!-- fragment --><p>6) You can also define a list of additional mimetypes per-mount </p><div class="fragment"><div class="line">&quot;extra-mimetypes&quot;: {</div><div class="line"> &quot;.zip&quot;: &quot;application/zip&quot;,</div><div class="line"> &quot;.doc&quot;: &quot;text/evil&quot;</div><div class="line"> }</div></div><!-- fragment --><p>Normally a file suffix MUST match one of the canned mimetypes or one of the extra mimetypes, or the file is not served. This adds a little bit of security because even if there is a bug somewhere and the mount dirs are circumvented, lws will not serve, eg, /etc/passwd.</p>
<p>If you provide an extra mimetype entry </p><pre class="fragment"> "*": ""
</pre><p>Then any file is served, if the mimetype was not known then it is served without a Content-Type: header.</p>
<h1><a class="anchor" id="lwswspl"></a>
Lwsws Plugins</h1>
<p>Protcols and extensions may also be provided from "plugins", these are lightweight dynamic libraries. They are scanned for at init time, and any protocols and extensions found are added to the list given at context creation time.</p>
<p>Protocols receive init (LWS_CALLBACK_PROTOCOL_INIT) and destruction (LWS_CALLBACK_PROTOCOL_DESTROY) callbacks per-vhost, and there are arrangements they can make per-vhost allocations and get hold of the correct pointer from the wsi at the callback.</p>
<p>This allows a protocol to choose to strictly segregate data on a per-vhost basis, and also allows the plugin to handle its own initialization and context storage.</p>
<p>To help that happen conveniently, there are some new apis</p>
<ul>
<li>lws_vhost_get(wsi)</li>
<li>lws_protocol_get(wsi)</li>
<li>lws_callback_on_writable_all_protocol_vhost(vhost, protocol)</li>
<li>lws_protocol_vh_priv_zalloc(vhost, protocol, size)</li>
<li>lws_protocol_vh_priv_get(vhost, protocol)</li>
</ul>
<p>dumb increment, mirror and status protocol plugins are provided as examples.</p>
<h1><a class="anchor" id="lwswsplaplp"></a>
Additional plugin search paths</h1>
<p>Packages that have their own lws plugins can install them in their own preferred dir and ask lwsws to scan there by using a config fragment like this, in its own conf.d/ file managed by the other package </p><div class="fragment"><div class="line">{</div><div class="line"> &quot;global&quot;: {</div><div class="line"> &quot;plugin-dir&quot;: &quot;/usr/local/share/coherent-timeline/plugins&quot;</div><div class="line"> }</div><div class="line">}</div></div><!-- fragment --><h1><a class="anchor" id="lwswsssp"></a>
lws-server-status plugin</h1>
<p>One provided protocol can be used to monitor the server status.</p>
<p>Enable the protocol like this on a vhost's ws-protocols section </p><div class="fragment"><div class="line">&quot;lws-server-status&quot;: {</div><div class="line"> &quot;status&quot;: &quot;ok&quot;,</div><div class="line"> &quot;update-ms&quot;: &quot;5000&quot;</div><div class="line">}</div></div><!-- fragment --><p> "update-ms" is used to control how often updated JSON is sent on a ws link.</p>
<p>And map the provided HTML into the vhost in the mounts section </p><div class="fragment"><div class="line">{</div><div class="line"> &quot;mountpoint&quot;: &quot;/server-status&quot;,</div><div class="line"> &quot;origin&quot;: &quot;file:///usr/local/share/libwebsockets-test-server/server-status&quot;,</div><div class="line"> &quot;default&quot;: &quot;server-status.html&quot;</div><div class="line">}</div></div><!-- fragment --><p> You might choose to put it on its own vhost which has "interface": "lo", so it's not externally visible.</p>
<h1><a class="anchor" id="lwswssysd"></a>
Lwsws Integration with Systemd</h1>
<p>lwsws needs a service file like this as <code>/usr/lib/systemd/system/lwsws.service</code> </p><div class="fragment"><div class="line">[Unit]</div><div class="line">Description=Libwebsockets Web Server</div><div class="line">After=syslog.target</div><div class="line"></div><div class="line">[Service]</div><div class="line">ExecStart=/usr/local/bin/lwsws</div><div class="line">StandardError=null</div><div class="line"></div><div class="line">[Install]</div><div class="line">WantedBy=multi-user.target</div></div><!-- fragment --><p>You can find this prepared in <code>./lwsws/usr-lib-systemd-system-lwsws.service</code></p>
<h1><a class="anchor" id="lwswslr"></a>
Lwsws Integration with logrotate</h1>
<p>For correct operation with logrotate, <code>/etc/logrotate.d/lwsws</code> (if that's where we're putting the logs) should contain </p><div class="fragment"><div class="line">/var/log/lwsws/*log {</div><div class="line"> copytruncate</div><div class="line"> missingok</div><div class="line"> notifempty</div><div class="line"> delaycompress</div><div class="line">}</div></div><!-- fragment --><p> You can find this prepared in <code>/lwsws/etc-logrotate.d-lwsws</code></p>
<p>Prepare the log directory like this</p>
<div class="fragment"><div class="line">sudo mkdir /var/log/lwsws</div><div class="line">sudo chmod 700 /var/log/lwsws</div></div><!-- fragment --> </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

@ -3,7 +3,8 @@
<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.11"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Debugging problems</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -57,7 +56,7 @@
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('md_README.problems.html','');});
$(document).ready(function(){initNavTree('md_README_8problems.html','');});
</script>
<div id="doc-content">
<div class="header">
@ -98,7 +97,7 @@ going to show you?" or even "what is wrong with my code?" very difficult.</p>
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Overview of lws test apps</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -57,7 +56,7 @@
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('md_README.test-apps.html','');});
$(document).ready(function(){initNavTree('md_README_8test-apps.html','');});
</script>
<div id="doc-content">
<div class="header">
@ -71,7 +70,7 @@ $(document).ready(function(){initNavTree('md_README.test-apps.html','');});
<p>Lws provides a generic web server app that can be configured with JSON config files. <a href="https://libwebsockets.org">https://libwebsockets.org</a> itself uses this method.</p>
<p>With lwsws handling the serving part, you only need to write an lws protocol plugin. See [plugin-standalone](plugin-standalone) for an example of how to do that outside lws itself, using lws public apis.</p>
<p>$ cmake .. -DLWS_WITH_LWSWS=1</p>
<p>See <a class="el" href="md_README.lwsws.html">README.lwsws.md</a> for information on how to configure lwsws.</p>
<p>See <a class="el" href="md_README_8lwsws.html">README.lwsws.md</a> for information on how to configure lwsws.</p>
<p>NOTE this method implies libuv is used by lws, to provide crossplatform implementations of timers, dynamic lib loading etc for plugins and lwsws.</p>
<p>2) test-server-v2.0.c</p>
<p>This method lets you configure web serving in code, instead of using lwsws.</p>
@ -91,18 +90,18 @@ Testing server with a browser</h1>
Running test server as a Daemon</h1>
<p>You can use the -D option on the test server to have it fork into the background and return immediately. In this daemonized mode all stderr is disabled and logging goes only to syslog, eg, <code>/var/log/messages</code> or similar.</p>
<p>The server maintains a lockfile at <code>/tmp/.lwsts-lock</code> that contains the pid of the master process, and deletes this file when the master process terminates.</p>
<p>To stop the daemon, do </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;$ kill cat /tmp/.lwsts-lock </div></div><!-- fragment --><p> If it finds a stale lock (the pid mentioned in the file does not exist any more) it will delete the lock and create a new one during startup.</p>
<p>To stop the daemon, do </p><div class="fragment"><div class="line">$ kill cat /tmp/.lwsts-lock </div></div><!-- fragment --><p> If it finds a stale lock (the pid mentioned in the file does not exist any more) it will delete the lock and create a new one during startup.</p>
<p>If the lock is valid, the daemon will exit with a note on stderr that it was already running.</p>
<h1><a class="anchor" id="sssl"></a>
Using SSL on the server side</h1>
<p>To test it using SSL/WSS, just run the test server with </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;$ libwebsockets-test-server --ssl</div></div><!-- fragment --><p> and use the URL </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;https://127.0.0.1:7681</div></div><!-- fragment --><p> The connection will be entirely encrypted using some generated certificates that your browser will not accept, since they are not signed by any real Certificate Authority. Just accept the certificates in the browser and the connection will proceed in first https and then websocket wss, acting exactly the same.</p>
<p>To test it using SSL/WSS, just run the test server with </p><div class="fragment"><div class="line">$ libwebsockets-test-server --ssl</div></div><!-- fragment --><p> and use the URL </p><div class="fragment"><div class="line">https://127.0.0.1:7681</div></div><!-- fragment --><p> The connection will be entirely encrypted using some generated certificates that your browser will not accept, since they are not signed by any real Certificate Authority. Just accept the certificates in the browser and the connection will proceed in first https and then websocket wss, acting exactly the same.</p>
<p><a href="test-server/test-server.c">test-server.c</a> is all that is needed to use libwebsockets for serving both the script html over http and websockets.</p>
<h1><a class="anchor" id="wscl"></a>
Testing websocket client support</h1>
<p>If you run the test server as described above, you can also connect to it using the test client as well as a browser.</p>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;$ libwebsockets-test-client localhost</div></div><!-- fragment --><p>will by default connect to the test server on localhost:7681 and print the dumb increment number from the server at the same time as drawing random circles in the mirror protocol; if you connect to the test server using a browser at the same time you will be able to see the circles being drawn.</p>
<div class="fragment"><div class="line">$ libwebsockets-test-client localhost</div></div><!-- fragment --><p>will by default connect to the test server on localhost:7681 and print the dumb increment number from the server at the same time as drawing random circles in the mirror protocol; if you connect to the test server using a browser at the same time you will be able to see the circles being drawn.</p>
<p>The test client supports SSL too, use</p>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;$ libwebsockets-test-client localhost --ssl -s</div></div><!-- fragment --><p>the -s tells it to accept the default self-signed cert from the server, otherwise it will strictly fail the connection if there is no CA cert to validate the server's certificate.</p>
<div class="fragment"><div class="line">$ libwebsockets-test-client localhost --ssl -s</div></div><!-- fragment --><p>the -s tells it to accept the default self-signed cert from the server, otherwise it will strictly fail the connection if there is no CA cert to validate the server's certificate.</p>
<h1><a class="anchor" id="choosingts"></a>
Choosing between test server variations</h1>
<p>If you will be doing standalone serving with lws, ideally you should avoid making your own server at all, and use lwsws with your own protocol plugins.</p>
@ -111,29 +110,29 @@ Choosing between test server variations</h1>
<h1><a class="anchor" id="echo"></a>
Testing simple echo</h1>
<p>You can test against <code>echo.websockets.org</code> as a sanity test like this (the client connects to port <code>80</code> by default):</p>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;$ libwebsockets-test-echo --client echo.websocket.org</div></div><!-- fragment --><p>This echo test is of limited use though because it doesn't negotiate any protocol. You can run the same test app as a local server, by default on localhost:7681 </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;$ libwebsockets-test-echo</div></div><!-- fragment --><p> and do the echo test against the local echo server </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;$ libwebsockets-test-echo --client localhost --port 7681</div></div><!-- fragment --><p> If you add the <code>--ssl</code> switch to both the client and server, you can also test with an encrypted link.</p>
<div class="fragment"><div class="line">$ libwebsockets-test-echo --client echo.websocket.org</div></div><!-- fragment --><p>This echo test is of limited use though because it doesn't negotiate any protocol. You can run the same test app as a local server, by default on localhost:7681 </p><div class="fragment"><div class="line">$ libwebsockets-test-echo</div></div><!-- fragment --><p> and do the echo test against the local echo server </p><div class="fragment"><div class="line">$ libwebsockets-test-echo --client localhost --port 7681</div></div><!-- fragment --><p> If you add the <code>--ssl</code> switch to both the client and server, you can also test with an encrypted link.</p>
<h1><a class="anchor" id="tassl"></a>
Testing SSL on the client side</h1>
<p>To test SSL/WSS client action, just run the client test with </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;$ libwebsockets-test-client localhost --ssl</div></div><!-- fragment --><p> By default the client test applet is set to accept self-signed certificates used by the test server, this is indicated by the <code>use_ssl</code> var being set to <code>2</code>. Set it to <code>1</code> to reject any server certificate that it doesn't have a trusted CA cert for.</p>
<p>To test SSL/WSS client action, just run the client test with </p><div class="fragment"><div class="line">$ libwebsockets-test-client localhost --ssl</div></div><!-- fragment --><p> By default the client test applet is set to accept self-signed certificates used by the test server, this is indicated by the <code>use_ssl</code> var being set to <code>2</code>. Set it to <code>1</code> to reject any server certificate that it doesn't have a trusted CA cert for.</p>
<h1><a class="anchor" id="taping"></a>
Using the websocket ping utility</h1>
<p>libwebsockets-test-ping connects as a client to a remote websocket server and pings it like the normal unix ping utility. </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;$ libwebsockets-test-ping localhost</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;handshake OK for protocol lws-mirror-protocol</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;Websocket PING localhost.localdomain (127.0.0.1) 64 bytes of data.</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;64 bytes from localhost: req=1 time=0.1ms</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;64 bytes from localhost: req=2 time=0.1ms</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;64 bytes from localhost: req=3 time=0.1ms</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;64 bytes from localhost: req=4 time=0.2ms</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;64 bytes from localhost: req=5 time=0.1ms</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;64 bytes from localhost: req=6 time=0.2ms</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;64 bytes from localhost: req=7 time=0.2ms</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;64 bytes from localhost: req=8 time=0.1ms</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;^C</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;--- localhost.localdomain websocket ping statistics ---</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;8 packets transmitted, 8 received, 0% packet loss, time 7458ms</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;rtt min/avg/max = 0.110/0.185/0.218 ms</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;$</div></div><!-- fragment --><p> By default it sends 64 byte payload packets using the 04 PING packet opcode type. You can change the payload size using the <code>-s=</code> flag, up to a maximum of 125 mandated by the 04 standard.</p>
<p>libwebsockets-test-ping connects as a client to a remote websocket server and pings it like the normal unix ping utility. </p><div class="fragment"><div class="line">$ libwebsockets-test-ping localhost</div><div class="line">handshake OK for protocol lws-mirror-protocol</div><div class="line">Websocket PING localhost.localdomain (127.0.0.1) 64 bytes of data.</div><div class="line">64 bytes from localhost: req=1 time=0.1ms</div><div class="line">64 bytes from localhost: req=2 time=0.1ms</div><div class="line">64 bytes from localhost: req=3 time=0.1ms</div><div class="line">64 bytes from localhost: req=4 time=0.2ms</div><div class="line">64 bytes from localhost: req=5 time=0.1ms</div><div class="line">64 bytes from localhost: req=6 time=0.2ms</div><div class="line">64 bytes from localhost: req=7 time=0.2ms</div><div class="line">64 bytes from localhost: req=8 time=0.1ms</div><div class="line">^C</div><div class="line">--- localhost.localdomain websocket ping statistics ---</div><div class="line">8 packets transmitted, 8 received, 0% packet loss, time 7458ms</div><div class="line">rtt min/avg/max = 0.110/0.185/0.218 ms</div><div class="line">$</div></div><!-- fragment --><p> By default it sends 64 byte payload packets using the 04 PING packet opcode type. You can change the payload size using the <code>-s=</code> flag, up to a maximum of 125 mandated by the 04 standard.</p>
<p>Using the lws-mirror protocol that is provided by the test server, libwebsockets-test-ping can also use larger payload sizes up to 4096 is BINARY packets; lws-mirror will copy them back to the client and they appear as a PONG. Use the <code>-m</code> flag to select this operation.</p>
<p>The default interval between pings is 1s, you can use the -i= flag to set this, including fractions like <code>-i=0.01</code> for 10ms interval.</p>
<p>Before you can even use the PING opcode that is part of the standard, you must complete a handshake with a specified protocol. By default lws-mirror-protocol is used which is supported by the test server. But if you are using it on another server, you can specify the protocol to handshake with by <code>--protocol=protocolname</code></p>
<h1><a class="anchor" id="ta"></a>
fraggle Fraggle test app</h1>
<p>By default it runs in server mode </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;$ libwebsockets-test-fraggle</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;libwebsockets test fraggle</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;(C) Copyright 2010-2011 Andy Green &lt;andy@warmcat.com&gt; licensed under LGPL2.1</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160; Compiled with SSL support, not using it</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; Listening on port 7681</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;server sees client connect</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;accepted v06 connection</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;Spamming 360 random fragments</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;Spamming session over, len = 371913. sum = 0x2D3C0AE</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;Spamming 895 random fragments</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;Spamming session over, len = 875970. sum = 0x6A74DA1</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;...</div></div><!-- fragment --><p> You need to run a second session in client mode, you have to give the <code>-c</code> switch and the server address at least: </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;$ libwebsockets-test-fraggle -c localhost</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;libwebsockets test fraggle</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;(C) Copyright 2010-2011 Andy Green &lt;andy@warmcat.com&gt; licensed under LGPL2.1</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160; Client mode</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;Connecting to localhost:7681</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;denied deflate-stream extension</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;handshake OK for protocol fraggle-protocol</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;client connects to server</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;EOM received 371913 correctly from 360 fragments</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;EOM received 875970 correctly from 895 fragments</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;EOM received 247140 correctly from 258 fragments</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;EOM received 695451 correctly from 692 fragments</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;...</div></div><!-- fragment --><p> The fraggle test sends a random number up to 1024 fragmented websocket frames each of a random size between 1 and 2001 bytes in a single message, then sends a checksum and starts sending a new randomly sized and fragmented message.</p>
<p>By default it runs in server mode </p><div class="fragment"><div class="line">$ libwebsockets-test-fraggle</div><div class="line">libwebsockets test fraggle</div><div class="line">(C) Copyright 2010-2011 Andy Green &lt;andy@warmcat.com&gt; licensed under LGPL2.1</div><div class="line"> Compiled with SSL support, not using it</div><div class="line"> Listening on port 7681</div><div class="line">server sees client connect</div><div class="line">accepted v06 connection</div><div class="line">Spamming 360 random fragments</div><div class="line">Spamming session over, len = 371913. sum = 0x2D3C0AE</div><div class="line">Spamming 895 random fragments</div><div class="line">Spamming session over, len = 875970. sum = 0x6A74DA1</div><div class="line">...</div></div><!-- fragment --><p> You need to run a second session in client mode, you have to give the <code>-c</code> switch and the server address at least: </p><div class="fragment"><div class="line">$ libwebsockets-test-fraggle -c localhost</div><div class="line">libwebsockets test fraggle</div><div class="line">(C) Copyright 2010-2011 Andy Green &lt;andy@warmcat.com&gt; licensed under LGPL2.1</div><div class="line"> Client mode</div><div class="line">Connecting to localhost:7681</div><div class="line">denied deflate-stream extension</div><div class="line">handshake OK for protocol fraggle-protocol</div><div class="line">client connects to server</div><div class="line">EOM received 371913 correctly from 360 fragments</div><div class="line">EOM received 875970 correctly from 895 fragments</div><div class="line">EOM received 247140 correctly from 258 fragments</div><div class="line">EOM received 695451 correctly from 692 fragments</div><div class="line">...</div></div><!-- fragment --><p> The fraggle test sends a random number up to 1024 fragmented websocket frames each of a random size between 1 and 2001 bytes in a single message, then sends a checksum and starts sending a new randomly sized and fragmented message.</p>
<p>The fraggle test client receives the same message fragments and computes the same checksum using websocket framing to see when the message has ended. It then accepts the server checksum message and compares that to its checksum.</p>
<h1><a class="anchor" id="taproxy"></a>
proxy support</h1>
<p>The http_proxy environment variable is respected by the client connection code for both <code>ws://</code> and <code>wss://</code>. It doesn't support authentication.</p>
<p>You use it like this </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;$ export http_proxy=myproxy.com:3128</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;$ libwebsockets-test-client someserver.com</div></div><!-- fragment --><h1><a class="anchor" id="talog"></a>
<p>You use it like this </p><div class="fragment"><div class="line">$ export http_proxy=myproxy.com:3128</div><div class="line">$ libwebsockets-test-client someserver.com</div></div><!-- fragment --><h1><a class="anchor" id="talog"></a>
debug logging</h1>
<p>By default logging of severity "notice", "warn" or "err" is enabled to stderr.</p>
<p>Again by default other logging is compiled in but disabled from printing.</p>
<p>By default debug logs below "notice" in severity are not compiled in. To get them included, add this option in CMAKE</p>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;$ cmake .. -DCMAKE_BUILD_TYPE=DEBUG</div></div><!-- fragment --><p>If you want to see more detailed debug logs, you can control a bitfield to select which logs types may print using the <code><a class="el" href="group__log.html#ga244647f9e1bf0097ccdde66d74f41e26">lws_set_log_level()</a></code> api, in the test apps you can use <code>-d &lt;number&gt;</code> to control this. The types of logging available are (OR together the numbers to select multiple)</p>
<div class="fragment"><div class="line">$ cmake .. -DCMAKE_BUILD_TYPE=DEBUG</div></div><!-- fragment --><p>If you want to see more detailed debug logs, you can control a bitfield to select which logs types may print using the <code><a class="el" href="group__log.html#ga244647f9e1bf0097ccdde66d74f41e26">lws_set_log_level()</a></code> api, in the test apps you can use <code>-d &lt;number&gt;</code> to control this. The types of logging available are (OR together the numbers to select multiple)</p>
<ul>
<li>1 ERR</li>
<li>2 WARN</li>
@ -182,7 +181,7 @@ Autobahn Test Notes</h1>
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

26
doc/html/menu.js Normal file
View file

@ -0,0 +1,26 @@
function initMenu(relPath,searchEnabled,serverSide,searchPage,search) {
function makeTree(data,relPath) {
var result='';
if ('children' in data) {
result+='<ul>';
for (var i in data.children) {
result+='<li><a href="'+relPath+data.children[i].url+'">'+
data.children[i].text+'</a>'+
makeTree(data.children[i],relPath)+'</li>';
}
result+='</ul>';
}
return result;
}
$('#main-nav').append(makeTree(menudata,relPath));
$('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');
if (searchEnabled) {
if (serverSide) {
$('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><div class="left"><form id="FSearchBox" action="'+searchPage+'" method="get"><img id="MSearchSelect" src="'+relPath+'search/mag.png" alt=""/><input type="text" id="MSearchField" name="query" value="'+search+'" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)"></form></div><div class="right"></div></div></li>');
} else {
$('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><span class="left"><img id="MSearchSelect" src="'+relPath+'search/mag_sel.png" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" alt=""/><input type="text" id="MSearchField" value="'+search+'" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/></span><span class="right"><a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="'+relPath+'search/close.png" alt=""/></a></span></div></li>');
}
}
$('#main-menu').smartmenus();
}

69
doc/html/menudata.js Normal file
View file

@ -0,0 +1,69 @@
var menudata={children:[
{text:"Main Page",url:"index.html"},
{text:"Related Pages",url:"pages.html"},
{text:"Modules",url:"modules.html"},
{text:"Data Structures",url:"annotated.html",children:[
{text:"Data Structures",url:"annotated.html"},
{text:"Data Structure Index",url:"classes.html"},
{text:"Class Hierarchy",url:"hierarchy.html"},
{text:"Data Fields",url:"functions.html",children:[
{text:"All",url:"functions.html",children:[
{text:"_",url:"functions.html#index__"},
{text:"a",url:"functions.html#index_a"},
{text:"b",url:"functions.html#index_b"},
{text:"c",url:"functions.html#index_c"},
{text:"d",url:"functions.html#index_d"},
{text:"e",url:"functions.html#index_e"},
{text:"f",url:"functions.html#index_f"},
{text:"g",url:"functions.html#index_g"},
{text:"h",url:"functions.html#index_h"},
{text:"i",url:"functions.html#index_i"},
{text:"k",url:"functions.html#index_k"},
{text:"l",url:"functions.html#index_l"},
{text:"m",url:"functions.html#index_m"},
{text:"n",url:"functions.html#index_n"},
{text:"o",url:"functions.html#index_o"},
{text:"p",url:"functions.html#index_p"},
{text:"r",url:"functions.html#index_r"},
{text:"s",url:"functions.html#index_s"},
{text:"t",url:"functions.html#index_t"},
{text:"u",url:"functions.html#index_u"},
{text:"v",url:"functions.html#index_v"},
{text:"w",url:"functions.html#index_w"}]},
{text:"Functions",url:"functions_func.html"},
{text:"Variables",url:"functions_vars.html",children:[
{text:"_",url:"functions_vars.html#index__"},
{text:"a",url:"functions_vars.html#index_a"},
{text:"b",url:"functions_vars.html#index_b"},
{text:"c",url:"functions_vars.html#index_c"},
{text:"d",url:"functions_vars.html#index_d"},
{text:"e",url:"functions_vars.html#index_e"},
{text:"f",url:"functions_vars.html#index_f"},
{text:"g",url:"functions_vars.html#index_g"},
{text:"h",url:"functions_vars.html#index_h"},
{text:"i",url:"functions_vars.html#index_i"},
{text:"k",url:"functions_vars.html#index_k"},
{text:"l",url:"functions_vars.html#index_l"},
{text:"m",url:"functions_vars.html#index_m"},
{text:"n",url:"functions_vars.html#index_n"},
{text:"o",url:"functions_vars.html#index_o"},
{text:"p",url:"functions_vars.html#index_p"},
{text:"r",url:"functions_vars.html#index_r"},
{text:"s",url:"functions_vars.html#index_s"},
{text:"t",url:"functions_vars.html#index_t"},
{text:"u",url:"functions_vars.html#index_u"},
{text:"v",url:"functions_vars.html#index_v"},
{text:"w",url:"functions_vars.html#index_w"}]}]}]},
{text:"Files",url:"files.html",children:[
{text:"File List",url:"files.html"},
{text:"Globals",url:"globals.html",children:[
{text:"All",url:"globals.html",children:[
{text:"e",url:"globals.html#index_e"},
{text:"l",url:"globals_l.html#index_l"}]},
{text:"Functions",url:"globals_func.html",children:[
{text:"l",url:"globals_func.html#index_l"}]},
{text:"Typedefs",url:"globals_type.html"},
{text:"Enumerations",url:"globals_enum.html"},
{text:"Enumerator",url:"globals_eval.html",children:[
{text:"e",url:"globals_eval.html#index_e"},
{text:"l",url:"globals_eval.html#index_l"}]}]}]}]}

View file

@ -3,7 +3,8 @@
<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.11"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Modules</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -107,7 +106,7 @@ $(document).ready(function(){initNavTree('modules.html','');});
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -94,8 +94,11 @@
}
.ui-resizable-e {
background:url("splitbar.png") repeat scroll right center transparent;
cursor:e-resize;
background-image:url("splitbar.png");
background-size:100%;
background-repeat:no-repeat;
background-attachment: scroll;
cursor:ew-resize;
height:100%;
right:0;
top:0;

View file

@ -1,4 +1,6 @@
var navTreeSubIndices = new Array();
var arrowDown = '&#9660;';
var arrowRight = '&#9658;';
function getData(varName)
{
@ -71,17 +73,17 @@ function cachedLink()
function getScript(scriptName,func,show)
{
var head = document.getElementsByTagName("head")[0];
var head = document.getElementsByTagName("head")[0];
var script = document.createElement('script');
script.id = scriptName;
script.type = 'text/javascript';
script.onload = func;
script.src = scriptName+'.js';
if ($.browser.msie && $.browser.version<=8) {
script.onload = func;
script.src = scriptName+'.js';
if ($.browser.msie && $.browser.version<=8) {
// script.onload does not work with older versions of IE
script.onreadystatechange = function() {
if (script.readyState=='complete' || script.readyState=='loaded') {
func(); if (show) showRoot();
if (script.readyState=='complete' || script.readyState=='loaded') {
func(); if (show) showRoot();
}
}
}
@ -94,18 +96,17 @@ function createIndent(o,domNode,node,level)
var n = node;
while (n.parentNode) { level++; n=n.parentNode; }
if (node.childrenData) {
var imgNode = document.createElement("img");
var imgNode = document.createElement("span");
imgNode.className = 'arrow';
imgNode.style.paddingLeft=(16*level).toString()+'px';
imgNode.width = 16;
imgNode.height = 22;
imgNode.border = 0;
imgNode.innerHTML=arrowRight;
node.plus_img = imgNode;
node.expandToggle = document.createElement("a");
node.expandToggle.href = "javascript:void(0)";
node.expandToggle.onclick = function() {
if (node.expanded) {
$(node.getChildrenUL()).slideUp("fast");
node.plus_img.src = node.relpath+"arrowright.png";
node.plus_img.innerHTML=arrowRight;
node.expanded = false;
} else {
expandNode(o, node, false, false);
@ -113,15 +114,13 @@ function createIndent(o,domNode,node,level)
}
node.expandToggle.appendChild(imgNode);
domNode.appendChild(node.expandToggle);
imgNode.src = node.relpath+"arrowright.png";
} else {
var span = document.createElement("span");
span.style.display = 'inline-block';
span.className = 'arrow';
span.style.width = 16*(level+1)+'px';
span.style.height = '22px';
span.innerHTML = '&#160;';
domNode.appendChild(span);
}
}
}
var animationInProgress = false;
@ -195,7 +194,7 @@ function newNode(o, po, text, link, childrenData, lastNode)
var aname = '#'+link.split('#')[1];
var srcPage = stripPath(pathName());
var targetPage = stripPath(link.split('#')[0]);
a.href = srcPage!=targetPage ? url : "javascript:void(0)";
a.href = srcPage!=targetPage ? url : "javascript:void(0)";
a.onclick = function(){
storeLink(link);
if (!$(a).parent().parent().hasClass('selected'))
@ -213,7 +212,7 @@ function newNode(o, po, text, link, childrenData, lastNode)
a.onclick = function() { storeLink(link); }
}
} else {
if (childrenData != null)
if (childrenData != null)
{
a.className = "nolink";
a.href = "javascript:void(0)";
@ -262,17 +261,13 @@ function expandNode(o, node, imm, showRoot)
} else {
if (!node.childrenVisited) {
getNode(o, node);
} if (imm || ($.browser.msie && $.browser.version>8)) {
} if (imm || ($.browser.msie && $.browser.version>8)) {
// somehow slideDown jumps to the start of tree for IE9 :-(
$(node.getChildrenUL()).show();
} else {
$(node.getChildrenUL()).slideDown("fast");
}
if (node.isLast) {
node.plus_img.src = node.relpath+"arrowdown.png";
} else {
node.plus_img.src = node.relpath+"arrowdown.png";
}
node.plus_img.innerHTML = arrowDown;
node.expanded = true;
}
}
@ -341,7 +336,7 @@ function showNode(o, node, index, hash)
getNode(o, node);
}
$(node.getChildrenUL()).css({'display':'block'});
node.plus_img.src = node.relpath+"arrowdown.png";
node.plus_img.innerHTML = arrowDown;
node.expanded = true;
var n = node.children[o.breadcrumbs[index]];
if (index+1<o.breadcrumbs.length) {
@ -478,10 +473,9 @@ function initNavTree(toroot,relpath)
o.node.relpath = relpath;
o.node.expanded = false;
o.node.isLast = true;
o.node.plus_img = document.createElement("img");
o.node.plus_img.src = relpath+"arrowright.png";
o.node.plus_img.width = 16;
o.node.plus_img.height = 22;
o.node.plus_img = document.createElement("span");
o.node.plus_img.className = 'arrow';
o.node.plus_img.innerHTML = arrowRight;
if (localStorageSupported()) {
var navSync = $('#nav-sync');

View file

@ -2,107 +2,107 @@ var NAVTREE =
[
[ "libwebsockets", "index.html", [
[ "Libwebsockets API introduction", "index.html", null ],
[ "Notes about building lws", "md_README.build.html", [
[ "Introduction to CMake", "md_README.build.html#cm", null ],
[ "Building the library and test apps", "md_README.build.html#build1", null ],
[ "Building on Unix:", "md_README.build.html#bu", null ],
[ "Quirk of cmake", "md_README.build.html#cmq", null ],
[ "Building on Windows (Visual Studio)", "md_README.build.html#cmw", null ],
[ "Building on Windows (MinGW)", "md_README.build.html#cmwmgw", null ],
[ "Building on mbed3", "md_README.build.html#mbed3", null ],
[ "Setting compile options", "md_README.build.html#cmco", [
[ "Command line", "md_README.build.html#cmcocl", null ],
[ "Unix GUI", "md_README.build.html#cmcoug", null ],
[ "Windows GUI", "md_README.build.html#cmcowg", null ]
[ "Notes about building lws", "md_README_8build.html", [
[ "Introduction to CMake", "md_README_8build.html#cm", null ],
[ "Building the library and test apps", "md_README_8build.html#build1", null ],
[ "Building on Unix:", "md_README_8build.html#bu", null ],
[ "Quirk of cmake", "md_README_8build.html#cmq", null ],
[ "Building on Windows (Visual Studio)", "md_README_8build.html#cmw", null ],
[ "Building on Windows (MinGW)", "md_README_8build.html#cmwmgw", null ],
[ "Building on mbed3", "md_README_8build.html#mbed3", null ],
[ "Setting compile options", "md_README_8build.html#cmco", [
[ "Command line", "md_README_8build.html#cmcocl", null ],
[ "Unix GUI", "md_README_8build.html#cmcoug", null ],
[ "Windows GUI", "md_README_8build.html#cmcowg", null ]
] ],
[ "wolfSSL/CyaSSL replacement for OpenSSL", "md_README.build.html#wolf", null ],
[ "Compiling libwebsockets with wolfSSL", "md_README.build.html#wolf1", null ],
[ "Compiling libwebsockets with CyaSSL", "md_README.build.html#cya", null ],
[ "Building plugins outside of lws itself", "md_README.build.html#extplugins", null ],
[ "Reproducing HTTP2.0 tests", "md_README.build.html#http2rp", null ],
[ "Cross compiling", "md_README.build.html#cross", null ],
[ "Memory efficiency", "md_README.build.html#mem", null ]
[ "wolfSSL/CyaSSL replacement for OpenSSL", "md_README_8build.html#wolf", null ],
[ "Compiling libwebsockets with wolfSSL", "md_README_8build.html#wolf1", null ],
[ "Compiling libwebsockets with CyaSSL", "md_README_8build.html#cya", null ],
[ "Building plugins outside of lws itself", "md_README_8build.html#extplugins", null ],
[ "Reproducing HTTP2.0 tests", "md_README_8build.html#http2rp", null ],
[ "Cross compiling", "md_README_8build.html#cross", null ],
[ "Memory efficiency", "md_README_8build.html#mem", null ]
] ],
[ "Debugging problems", "md_README.problems.html", null ],
[ "Notes about lwsws", "md_README.lwsws.html", [
[ "Libwebsockets Web Server", "md_README.lwsws.html#lwsws", null ],
[ "Build", "md_README.lwsws.html#lwswsb", null ],
[ "Lwsws Configuration", "md_README.lwsws.html#lwswsc", null ],
[ "Lwsws Vhosts", "md_README.lwsws.html#lwswsv", null ],
[ "Lwsws Vhost name and port sharing", "md_README.lwsws.html#lwswsvn", null ],
[ "Lwsws Protocols", "md_README.lwsws.html#lwswspr", null ],
[ "Lwsws Other vhost options", "md_README.lwsws.html#lwswsovo", null ],
[ "Lwsws Mounts", "md_README.lwsws.html#lwswsm", null ],
[ "Lwsws Other mount options", "md_README.lwsws.html#lwswsomo", null ],
[ "Lwsws Plugins", "md_README.lwsws.html#lwswspl", null ],
[ "Additional plugin search paths", "md_README.lwsws.html#lwswsplaplp", null ],
[ "lws-server-status plugin", "md_README.lwsws.html#lwswsssp", null ],
[ "Lwsws Integration with Systemd", "md_README.lwsws.html#lwswssysd", null ],
[ "Lwsws Integration with logrotate", "md_README.lwsws.html#lwswslr", null ]
[ "Debugging problems", "md_README_8problems.html", null ],
[ "Notes about lwsws", "md_README_8lwsws.html", [
[ "Libwebsockets Web Server", "md_README_8lwsws.html#lwsws", null ],
[ "Build", "md_README_8lwsws.html#lwswsb", null ],
[ "Lwsws Configuration", "md_README_8lwsws.html#lwswsc", null ],
[ "Lwsws Vhosts", "md_README_8lwsws.html#lwswsv", null ],
[ "Lwsws Vhost name and port sharing", "md_README_8lwsws.html#lwswsvn", null ],
[ "Lwsws Protocols", "md_README_8lwsws.html#lwswspr", null ],
[ "Lwsws Other vhost options", "md_README_8lwsws.html#lwswsovo", null ],
[ "Lwsws Mounts", "md_README_8lwsws.html#lwswsm", null ],
[ "Lwsws Other mount options", "md_README_8lwsws.html#lwswsomo", null ],
[ "Lwsws Plugins", "md_README_8lwsws.html#lwswspl", null ],
[ "Additional plugin search paths", "md_README_8lwsws.html#lwswsplaplp", null ],
[ "lws-server-status plugin", "md_README_8lwsws.html#lwswsssp", null ],
[ "Lwsws Integration with Systemd", "md_README_8lwsws.html#lwswssysd", null ],
[ "Lwsws Integration with logrotate", "md_README_8lwsws.html#lwswslr", null ]
] ],
[ "Notes about coding with lws", "md_README.coding.html", [
[ "Daemonization", "md_README.coding.html#dae", null ],
[ "Maximum number of connections", "md_README.coding.html#conns", null ],
[ "Libwebsockets is singlethreaded", "md_README.coding.html#evtloop", null ],
[ "Only send data when socket writeable", "md_README.coding.html#writeable", null ],
[ "Do not rely on only your own WRITEABLE requests appearing", "md_README.coding.html#otherwr", null ],
[ "Closing connections from the user side", "md_README.coding.html#closing", null ],
[ "Fragmented messages", "md_README.coding.html#frags", null ],
[ "Debug Logging", "md_README.coding.html#debuglog", null ],
[ "External Polling Loop support", "md_README.coding.html#extpoll", null ],
[ "Using with in c++ apps", "md_README.coding.html#cpp", null ],
[ "Availability of header information", "md_README.coding.html#headerinfo", null ],
[ "TCP Keepalive", "md_README.coding.html#ka", null ],
[ "Optimizing SSL connections", "md_README.coding.html#sslopt", null ],
[ "Async nature of client connections", "md_README.coding.html#clientasync", null ],
[ "Lws platform-independent file access apis", "md_README.coding.html#fileapi", null ],
[ "ECDH Support", "md_README.coding.html#ecdh", null ],
[ "SMP / Multithreaded service", "md_README.coding.html#smp", null ],
[ "Libev / Libuv support", "md_README.coding.html#libevuv", null ],
[ "Extension option control from user code", "md_README.coding.html#extopts", null ],
[ "Client connections as HTTP[S] rather than WS[S]", "md_README.coding.html#httpsclient", null ],
[ "Using lws vhosts", "md_README.coding.html#vhosts", null ],
[ "How lws matches hostname or SNI to a vhost", "md_README.coding.html#sni", null ],
[ "Using lws mounts on a vhost", "md_README.coding.html#mounts", null ],
[ "Operation of LWSMPRO_CALLBACK mounts", "md_README.coding.html#mountcallback", null ],
[ "Dimming webpage when connection lost", "md_README.coding.html#dim", null ]
[ "Notes about coding with lws", "md_README_8coding.html", [
[ "Daemonization", "md_README_8coding.html#dae", null ],
[ "Maximum number of connections", "md_README_8coding.html#conns", null ],
[ "Libwebsockets is singlethreaded", "md_README_8coding.html#evtloop", null ],
[ "Only send data when socket writeable", "md_README_8coding.html#writeable", null ],
[ "Do not rely on only your own WRITEABLE requests appearing", "md_README_8coding.html#otherwr", null ],
[ "Closing connections from the user side", "md_README_8coding.html#closing", null ],
[ "Fragmented messages", "md_README_8coding.html#frags", null ],
[ "Debug Logging", "md_README_8coding.html#debuglog", null ],
[ "External Polling Loop support", "md_README_8coding.html#extpoll", null ],
[ "Using with in c++ apps", "md_README_8coding.html#cpp", null ],
[ "Availability of header information", "md_README_8coding.html#headerinfo", null ],
[ "TCP Keepalive", "md_README_8coding.html#ka", null ],
[ "Optimizing SSL connections", "md_README_8coding.html#sslopt", null ],
[ "Async nature of client connections", "md_README_8coding.html#clientasync", null ],
[ "Lws platform-independent file access apis", "md_README_8coding.html#fileapi", null ],
[ "ECDH Support", "md_README_8coding.html#ecdh", null ],
[ "SMP / Multithreaded service", "md_README_8coding.html#smp", null ],
[ "Libev / Libuv support", "md_README_8coding.html#libevuv", null ],
[ "Extension option control from user code", "md_README_8coding.html#extopts", null ],
[ "Client connections as HTTP[S] rather than WS[S]", "md_README_8coding.html#httpsclient", null ],
[ "Using lws vhosts", "md_README_8coding.html#vhosts", null ],
[ "How lws matches hostname or SNI to a vhost", "md_README_8coding.html#sni", null ],
[ "Using lws mounts on a vhost", "md_README_8coding.html#mounts", null ],
[ "Operation of LWSMPRO_CALLBACK mounts", "md_README_8coding.html#mountcallback", null ],
[ "Dimming webpage when connection lost", "md_README_8coding.html#dim", null ]
] ],
[ "Notes about generic-sessions Plugin", "md_README.generic-sessions.html", [
[ "Enabling lwsgs for build", "md_README.generic-sessions.html#gseb", null ],
[ "lwsgs Introduction", "md_README.generic-sessions.html#gsi", null ],
[ "Lwsgs Integration to HTML", "md_README.generic-sessions.html#gsin", null ],
[ "Lwsgs Overall Flow@", "md_README.generic-sessions.html#gsof", null ],
[ "Lwsgs Configuration", "md_README.generic-sessions.html#gsconf", null ],
[ "Lwsgs Password Confounder", "md_README.generic-sessions.html#gspwc", null ],
[ "Lwsgs Preparing the db directory", "md_README.generic-sessions.html#gsprep", null ],
[ "Lwsgs Email configuration", "md_README.generic-sessions.html#gsrmail", null ],
[ "Lwsgs Integration with another protocol", "md_README.generic-sessions.html#gsap", null ]
[ "Notes about generic-sessions Plugin", "md_README_8generic-sessions.html", [
[ "Enabling lwsgs for build", "md_README_8generic-sessions.html#gseb", null ],
[ "lwsgs Introduction", "md_README_8generic-sessions.html#gsi", null ],
[ "Lwsgs Integration to HTML", "md_README_8generic-sessions.html#gsin", null ],
[ "Lwsgs Overall Flow@", "md_README_8generic-sessions.html#gsof", null ],
[ "Lwsgs Configuration", "md_README_8generic-sessions.html#gsconf", null ],
[ "Lwsgs Password Confounder", "md_README_8generic-sessions.html#gspwc", null ],
[ "Lwsgs Preparing the db directory", "md_README_8generic-sessions.html#gsprep", null ],
[ "Lwsgs Email configuration", "md_README_8generic-sessions.html#gsrmail", null ],
[ "Lwsgs Integration with another protocol", "md_README_8generic-sessions.html#gsap", null ]
] ],
[ "Notes about generic-table", "md_README.generic-table.html", [
[ "What is generic-table?", "md_README.generic-table.html#gtint", null ],
[ "Enabling for build", "md_README.generic-table.html#gteb", null ],
[ "Integrating with your html", "md_README.generic-table.html#gtinth", null ],
[ "Lwsgt constructor", "md_README.generic-table.html#gtc", null ],
[ "Lwsgt click handling function", "md_README.generic-table.html#gtclick", null ],
[ "Generic-table JSON", "md_README.generic-table.html#gtgj", null ],
[ "Setting up protocol-lws-table-dirlisting", "md_README.generic-table.html#gtdirl", null ]
[ "Notes about generic-table", "md_README_8generic-table.html", [
[ "What is generic-table?", "md_README_8generic-table.html#gtint", null ],
[ "Enabling for build", "md_README_8generic-table.html#gteb", null ],
[ "Integrating with your html", "md_README_8generic-table.html#gtinth", null ],
[ "Lwsgt constructor", "md_README_8generic-table.html#gtc", null ],
[ "Lwsgt click handling function", "md_README_8generic-table.html#gtclick", null ],
[ "Generic-table JSON", "md_README_8generic-table.html#gtgj", null ],
[ "Setting up protocol-lws-table-dirlisting", "md_README_8generic-table.html#gtdirl", null ]
] ],
[ "Overview of lws test apps", "md_README.test-apps.html", [
[ "Testing server with a browser", "md_README.test-apps.html#tsb", null ],
[ "Running test server as a Daemon", "md_README.test-apps.html#tsd", null ],
[ "Using SSL on the server side", "md_README.test-apps.html#sssl", null ],
[ "Testing websocket client support", "md_README.test-apps.html#wscl", null ],
[ "Choosing between test server variations", "md_README.test-apps.html#choosingts", null ],
[ "Testing simple echo", "md_README.test-apps.html#echo", null ],
[ "Testing SSL on the client side", "md_README.test-apps.html#tassl", null ],
[ "Using the websocket ping utility", "md_README.test-apps.html#taping", null ],
[ "fraggle Fraggle test app", "md_README.test-apps.html#ta", null ],
[ "proxy support", "md_README.test-apps.html#taproxy", null ],
[ "debug logging", "md_README.test-apps.html#talog", null ],
[ "Websocket version supported", "md_README.test-apps.html#ws13", null ],
[ "Latency Tracking", "md_README.test-apps.html#latency", null ],
[ "Autobahn Test Suite", "md_README.test-apps.html#autobahn", null ],
[ "Autobahn Test Notes", "md_README.test-apps.html#autobahnnotes", null ]
[ "Overview of lws test apps", "md_README_8test-apps.html", [
[ "Testing server with a browser", "md_README_8test-apps.html#tsb", null ],
[ "Running test server as a Daemon", "md_README_8test-apps.html#tsd", null ],
[ "Using SSL on the server side", "md_README_8test-apps.html#sssl", null ],
[ "Testing websocket client support", "md_README_8test-apps.html#wscl", null ],
[ "Choosing between test server variations", "md_README_8test-apps.html#choosingts", null ],
[ "Testing simple echo", "md_README_8test-apps.html#echo", null ],
[ "Testing SSL on the client side", "md_README_8test-apps.html#tassl", null ],
[ "Using the websocket ping utility", "md_README_8test-apps.html#taping", null ],
[ "fraggle Fraggle test app", "md_README_8test-apps.html#ta", null ],
[ "proxy support", "md_README_8test-apps.html#taproxy", null ],
[ "debug logging", "md_README_8test-apps.html#talog", null ],
[ "Websocket version supported", "md_README_8test-apps.html#ws13", null ],
[ "Latency Tracking", "md_README_8test-apps.html#latency", null ],
[ "Autobahn Test Suite", "md_README_8test-apps.html#autobahn", null ],
[ "Autobahn Test Notes", "md_README_8test-apps.html#autobahnnotes", null ]
] ],
[ "Deprecated List", "deprecated.html", null ],
[ "Modules", "modules.html", "modules" ],

View file

@ -15,7 +15,7 @@ var NAVTREEINDEX1 =
"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aff121db04a10cf8b2c5df9d4f2b89f1e":[11,0,0,0,26,9],
"group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aff121db04a10cf8b2c5df9d4f2b89f1e":[9,4,3,9],
"group__ev.html":[9,21],
"group__ev.html#ga3b0ffd4d2b4fa791c0fd75353a330208":[11,0,0,0,9],
"group__ev.html#ga3fd389d64c6fa45a3c1427d2f6988741":[11,0,0,0,9],
"group__ev.html#ga3fdd23ded693b21853356dc9eaef5ccc":[11,0,0,0,80],
"group__ev.html#ga5caf14a420a2a0bd687a1fc952f8d64e":[11,0,0,0,82],
"group__ev.html#gaabfc0880d6a98133550c61aa01ef3563":[11,0,0,0,81],
@ -155,6 +155,7 @@ var NAVTREEINDEX1 =
"group__httpft.html#gab4da87a4800413f15e7aba649fb1d77c":[9,6,2,0],
"group__httpft.html#gab4da87a4800413f15e7aba649fb1d77c":[11,0,0,0,93],
"group__log.html":[9,7],
"group__log.html#ga0cdc1065ae7f003d59a3c8525acf545e":[11,0,0,0,39],
"group__log.html#ga14542b84d2c76efa7814124bb10f9c5f":[11,0,0,0,31],
"group__log.html#ga244647f9e1bf0097ccdde66d74f41e26":[11,0,0,0,143],
"group__log.html#ga244647f9e1bf0097ccdde66d74f41e26":[9,7,0],
@ -165,7 +166,6 @@ var NAVTREEINDEX1 =
"group__log.html#ga898b1f03872ad019f507d4e35bbefa90":[9,7,2],
"group__log.html#gab7c0fc936cc9f1eb58e2bb234c15147c":[11,0,0,0,166],
"group__log.html#gab7c0fc936cc9f1eb58e2bb234c15147c":[9,7,1],
"group__log.html#gaf5f07837692b2f231a79da8a058288aa":[11,0,0,0,39],
"group__log.html#gga14542b84d2c76efa7814124bb10f9c5fa083a44e71966a0e768426e477e1bc358":[11,0,0,0,31,8],
"group__log.html#gga14542b84d2c76efa7814124bb10f9c5fa2be9c1d50d05756078e9abc72c9e50cc":[11,0,0,0,31,5],
"group__log.html#gga14542b84d2c76efa7814124bb10f9c5fa52e5cd60bbb85f30ec0078a2c4be0c59":[11,0,0,0,31,3],
@ -183,6 +183,8 @@ var NAVTREEINDEX1 =
"group__misc.html#ga0e705d498e8c8500649a26ba30a1e106":[11,0,0,0,128],
"group__misc.html#ga1ec0d9faac5d3a5824d765c287c043aa":[11,0,0,0,122],
"group__misc.html#ga1ec0d9faac5d3a5824d765c287c043aa":[9,8,8],
"group__misc.html#ga2163492f17db959a36967adb73d823b4":[11,0,0,0,147],
"group__misc.html#ga2163492f17db959a36967adb73d823b4":[9,8,10],
"group__misc.html#ga33bf2635033710b25f931b57ed663e1e":[11,0,0,0,121],
"group__misc.html#ga33bf2635033710b25f931b57ed663e1e":[9,8,7],
"group__misc.html#ga58f906c6be0ca80efd813f694569dd4a":[9,8,6],
@ -191,8 +193,6 @@ var NAVTREEINDEX1 =
"group__misc.html#ga629f48268fd1856b54b11172991b97d9":[11,0,0,0,90],
"group__misc.html#ga8930fe36a3f3eefe4a6a4fd499d8e899":[9,8,5],
"group__misc.html#ga8930fe36a3f3eefe4a6a4fd499d8e899":[11,0,0,0,94],
"group__misc.html#ga9f37d0e357de2ab4170723fcdb665d21":[11,0,0,0,147],
"group__misc.html#ga9f37d0e357de2ab4170723fcdb665d21":[9,8,10],
"group__misc.html#gaa194584fff9698f3b280658f770ccd0f":[11,0,0,0,165],
"group__misc.html#gaa194584fff9698f3b280658f770ccd0f":[9,8,11],
"group__misc.html#gab321ed812f46f6dc7ef9e3ca6f00cf1b":[11,0,0,0,141],

View file

@ -191,8 +191,8 @@ var NAVTREEINDEX2 =
"group__vhost-mounts.html#ga31eca18e50cb4357480f2fcad36ff437":[11,0,0,0,32],
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69":[9,4,0,2,3],
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69":[11,0,0,0,32,3],
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0":[11,0,0,0,32,0],
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0":[9,4,0,2,0],
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0":[11,0,0,0,32,0],
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2":[9,4,0,2,2],
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2":[11,0,0,0,32,2],
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67":[9,4,0,2,5],
@ -204,14 +204,14 @@ var NAVTREEINDEX2 =
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1":[11,0,0,0,32,1],
"group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1":[9,4,0,2,1],
"group__wsclose.html":[9,17],
"group__wsclose.html#gaa1c863415d1783cd8de7938aa6efa262":[11,0,0,0,71],
"group__wsclose.html#gaa1c863415d1783cd8de7938aa6efa262":[9,17,1],
"group__wsclose.html#gaa1c863415d1783cd8de7938aa6efa262":[11,0,0,0,71],
"group__wsclose.html#gae399c571df32ba532c0ca67da9284985":[11,0,0,0,25],
"group__wsclose.html#gae399c571df32ba532c0ca67da9284985":[9,17,0],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98":[11,0,0,0,25,3],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98":[9,17,0,2],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8":[11,0,0,0,25,10],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8":[9,17,0,9],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8":[11,0,0,0,25,10],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a32c38edab10d1379febac0c479ab2e9c":[11,0,0,0,25,14],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4":[11,0,0,0,25,1],
"group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4":[9,17,0,0],

View file

@ -25,8 +25,8 @@ var NAVTREEINDEX3 =
"libwebsockets_8h.html#a4e877a4f0bb027d05d3a90c8e6a632de":[11,0,0,0,41],
"libwebsockets_8h.html#a5326d3402af8429a166dd991dc65c4a2":[11,0,0,0,65],
"libwebsockets_8h.html#a5e627dbf1db48170ef486edbaf268672":[11,0,0,0,131],
"libwebsockets_8h.html#a71451ba21aadc2fa3e25674d04c31ab7":[11,0,0,0,43],
"libwebsockets_8h.html#a72fe65e83b8bb03f904a1a256c673536":[11,0,0,0,129],
"libwebsockets_8h.html#a75e9827318684877deb4189121a8cd2a":[11,0,0,0,43],
"libwebsockets_8h.html#a863bdd5bca33bcbaa424c42fb7b2fc96":[11,0,0,0,175],
"libwebsockets_8h.html#a9032a3062641d334161c29adcc4fa15d":[11,0,0,0,173],
"libwebsockets_8h.html#a9b1bfc6f34319188d2aa40500d825bab":[11,0,0,0,42],
@ -40,101 +40,101 @@ var NAVTREEINDEX3 =
"libwebsockets_8h.html#af52923473c59e643a974d65e12290831":[11,0,0,0,63],
"libwebsockets_8h.html#aff42d53861afdc1a6edfb999ba688ecb":[11,0,0,0,11],
"libwebsockets_8h_source.html":[11,0,0,0],
"md_README.build.html":[1],
"md_README.build.html#bu":[1,2],
"md_README.build.html#build1":[1,1],
"md_README.build.html#cm":[1,0],
"md_README.build.html#cmco":[1,7],
"md_README.build.html#cmcocl":[1,7,0],
"md_README.build.html#cmcoug":[1,7,1],
"md_README.build.html#cmcowg":[1,7,2],
"md_README.build.html#cmq":[1,3],
"md_README.build.html#cmw":[1,4],
"md_README.build.html#cmwmgw":[1,5],
"md_README.build.html#cross":[1,13],
"md_README.build.html#cya":[1,10],
"md_README.build.html#extplugins":[1,11],
"md_README.build.html#http2rp":[1,12],
"md_README.build.html#mbed3":[1,6],
"md_README.build.html#mem":[1,14],
"md_README.build.html#wolf":[1,8],
"md_README.build.html#wolf1":[1,9],
"md_README.coding.html":[4],
"md_README.coding.html#clientasync":[4,13],
"md_README.coding.html#closing":[4,5],
"md_README.coding.html#conns":[4,1],
"md_README.coding.html#cpp":[4,9],
"md_README.coding.html#dae":[4,0],
"md_README.coding.html#debuglog":[4,7],
"md_README.coding.html#dim":[4,24],
"md_README.coding.html#ecdh":[4,15],
"md_README.coding.html#evtloop":[4,2],
"md_README.coding.html#extopts":[4,18],
"md_README.coding.html#extpoll":[4,8],
"md_README.coding.html#fileapi":[4,14],
"md_README.coding.html#frags":[4,6],
"md_README.coding.html#headerinfo":[4,10],
"md_README.coding.html#httpsclient":[4,19],
"md_README.coding.html#ka":[4,11],
"md_README.coding.html#libevuv":[4,17],
"md_README.coding.html#mountcallback":[4,23],
"md_README.coding.html#mounts":[4,22],
"md_README.coding.html#otherwr":[4,4],
"md_README.coding.html#smp":[4,16],
"md_README.coding.html#sni":[4,21],
"md_README.coding.html#sslopt":[4,12],
"md_README.coding.html#vhosts":[4,20],
"md_README.coding.html#writeable":[4,3],
"md_README.generic-sessions.html":[5],
"md_README.generic-sessions.html#gsap":[5,8],
"md_README.generic-sessions.html#gsconf":[5,4],
"md_README.generic-sessions.html#gseb":[5,0],
"md_README.generic-sessions.html#gsi":[5,1],
"md_README.generic-sessions.html#gsin":[5,2],
"md_README.generic-sessions.html#gsof":[5,3],
"md_README.generic-sessions.html#gsprep":[5,6],
"md_README.generic-sessions.html#gspwc":[5,5],
"md_README.generic-sessions.html#gsrmail":[5,7],
"md_README.generic-table.html":[6],
"md_README.generic-table.html#gtc":[6,3],
"md_README.generic-table.html#gtclick":[6,4],
"md_README.generic-table.html#gtdirl":[6,6],
"md_README.generic-table.html#gteb":[6,1],
"md_README.generic-table.html#gtgj":[6,5],
"md_README.generic-table.html#gtint":[6,0],
"md_README.generic-table.html#gtinth":[6,2],
"md_README.lwsws.html":[3],
"md_README.lwsws.html#lwsws":[3,0],
"md_README.lwsws.html#lwswsb":[3,1],
"md_README.lwsws.html#lwswsc":[3,2],
"md_README.lwsws.html#lwswslr":[3,13],
"md_README.lwsws.html#lwswsm":[3,7],
"md_README.lwsws.html#lwswsomo":[3,8],
"md_README.lwsws.html#lwswsovo":[3,6],
"md_README.lwsws.html#lwswspl":[3,9],
"md_README.lwsws.html#lwswsplaplp":[3,10],
"md_README.lwsws.html#lwswspr":[3,5],
"md_README.lwsws.html#lwswsssp":[3,11],
"md_README.lwsws.html#lwswssysd":[3,12],
"md_README.lwsws.html#lwswsv":[3,3],
"md_README.lwsws.html#lwswsvn":[3,4],
"md_README.problems.html":[2],
"md_README.test-apps.html":[7],
"md_README.test-apps.html#autobahn":[7,13],
"md_README.test-apps.html#autobahnnotes":[7,14],
"md_README.test-apps.html#choosingts":[7,4],
"md_README.test-apps.html#echo":[7,5],
"md_README.test-apps.html#latency":[7,12],
"md_README.test-apps.html#sssl":[7,2],
"md_README.test-apps.html#ta":[7,8],
"md_README.test-apps.html#talog":[7,10],
"md_README.test-apps.html#taping":[7,7],
"md_README.test-apps.html#taproxy":[7,9],
"md_README.test-apps.html#tassl":[7,6],
"md_README.test-apps.html#tsb":[7,0],
"md_README.test-apps.html#tsd":[7,1],
"md_README.test-apps.html#ws13":[7,11],
"md_README.test-apps.html#wscl":[7,3],
"md_README_8build.html":[1],
"md_README_8build.html#bu":[1,2],
"md_README_8build.html#build1":[1,1],
"md_README_8build.html#cm":[1,0],
"md_README_8build.html#cmco":[1,7],
"md_README_8build.html#cmcocl":[1,7,0],
"md_README_8build.html#cmcoug":[1,7,1],
"md_README_8build.html#cmcowg":[1,7,2],
"md_README_8build.html#cmq":[1,3],
"md_README_8build.html#cmw":[1,4],
"md_README_8build.html#cmwmgw":[1,5],
"md_README_8build.html#cross":[1,13],
"md_README_8build.html#cya":[1,10],
"md_README_8build.html#extplugins":[1,11],
"md_README_8build.html#http2rp":[1,12],
"md_README_8build.html#mbed3":[1,6],
"md_README_8build.html#mem":[1,14],
"md_README_8build.html#wolf":[1,8],
"md_README_8build.html#wolf1":[1,9],
"md_README_8coding.html":[4],
"md_README_8coding.html#clientasync":[4,13],
"md_README_8coding.html#closing":[4,5],
"md_README_8coding.html#conns":[4,1],
"md_README_8coding.html#cpp":[4,9],
"md_README_8coding.html#dae":[4,0],
"md_README_8coding.html#debuglog":[4,7],
"md_README_8coding.html#dim":[4,24],
"md_README_8coding.html#ecdh":[4,15],
"md_README_8coding.html#evtloop":[4,2],
"md_README_8coding.html#extopts":[4,18],
"md_README_8coding.html#extpoll":[4,8],
"md_README_8coding.html#fileapi":[4,14],
"md_README_8coding.html#frags":[4,6],
"md_README_8coding.html#headerinfo":[4,10],
"md_README_8coding.html#httpsclient":[4,19],
"md_README_8coding.html#ka":[4,11],
"md_README_8coding.html#libevuv":[4,17],
"md_README_8coding.html#mountcallback":[4,23],
"md_README_8coding.html#mounts":[4,22],
"md_README_8coding.html#otherwr":[4,4],
"md_README_8coding.html#smp":[4,16],
"md_README_8coding.html#sni":[4,21],
"md_README_8coding.html#sslopt":[4,12],
"md_README_8coding.html#vhosts":[4,20],
"md_README_8coding.html#writeable":[4,3],
"md_README_8generic-sessions.html":[5],
"md_README_8generic-sessions.html#gsap":[5,8],
"md_README_8generic-sessions.html#gsconf":[5,4],
"md_README_8generic-sessions.html#gseb":[5,0],
"md_README_8generic-sessions.html#gsi":[5,1],
"md_README_8generic-sessions.html#gsin":[5,2],
"md_README_8generic-sessions.html#gsof":[5,3],
"md_README_8generic-sessions.html#gsprep":[5,6],
"md_README_8generic-sessions.html#gspwc":[5,5],
"md_README_8generic-sessions.html#gsrmail":[5,7],
"md_README_8generic-table.html":[6],
"md_README_8generic-table.html#gtc":[6,3],
"md_README_8generic-table.html#gtclick":[6,4],
"md_README_8generic-table.html#gtdirl":[6,6],
"md_README_8generic-table.html#gteb":[6,1],
"md_README_8generic-table.html#gtgj":[6,5],
"md_README_8generic-table.html#gtint":[6,0],
"md_README_8generic-table.html#gtinth":[6,2],
"md_README_8lwsws.html":[3],
"md_README_8lwsws.html#lwsws":[3,0],
"md_README_8lwsws.html#lwswsb":[3,1],
"md_README_8lwsws.html#lwswsc":[3,2],
"md_README_8lwsws.html#lwswslr":[3,13],
"md_README_8lwsws.html#lwswsm":[3,7],
"md_README_8lwsws.html#lwswsomo":[3,8],
"md_README_8lwsws.html#lwswsovo":[3,6],
"md_README_8lwsws.html#lwswspl":[3,9],
"md_README_8lwsws.html#lwswsplaplp":[3,10],
"md_README_8lwsws.html#lwswspr":[3,5],
"md_README_8lwsws.html#lwswsssp":[3,11],
"md_README_8lwsws.html#lwswssysd":[3,12],
"md_README_8lwsws.html#lwswsv":[3,3],
"md_README_8lwsws.html#lwswsvn":[3,4],
"md_README_8problems.html":[2],
"md_README_8test-apps.html":[7],
"md_README_8test-apps.html#autobahn":[7,13],
"md_README_8test-apps.html#autobahnnotes":[7,14],
"md_README_8test-apps.html#choosingts":[7,4],
"md_README_8test-apps.html#echo":[7,5],
"md_README_8test-apps.html#latency":[7,12],
"md_README_8test-apps.html#sssl":[7,2],
"md_README_8test-apps.html#ta":[7,8],
"md_README_8test-apps.html#talog":[7,10],
"md_README_8test-apps.html#taping":[7,7],
"md_README_8test-apps.html#taproxy":[7,9],
"md_README_8test-apps.html#tassl":[7,6],
"md_README_8test-apps.html#tsb":[7,0],
"md_README_8test-apps.html#tsd":[7,1],
"md_README_8test-apps.html#ws13":[7,11],
"md_README_8test-apps.html#wscl":[7,3],
"modules.html":[9],
"pages.html":[],
"structlws__cgi__args.html":[10,0,0],

View file

@ -52,12 +52,12 @@ var NAVTREEINDEX4 =
"structlws__protocol__vhost__options.html":[9,4,0,0],
"structlws__protocol__vhost__options.html#a0640a92513c70ee6b9b295a9ad1658e7":[9,4,0,0,3],
"structlws__protocol__vhost__options.html#a0640a92513c70ee6b9b295a9ad1658e7":[9,4,2,3],
"structlws__protocol__vhost__options.html#abc714ddb4171756fc8196e9823a1e21c":[9,4,0,0,1],
"structlws__protocol__vhost__options.html#abc714ddb4171756fc8196e9823a1e21c":[9,4,2,1],
"structlws__protocol__vhost__options.html#abc714ddb4171756fc8196e9823a1e21c":[9,4,0,0,1],
"structlws__protocol__vhost__options.html#acf9db77f8eb64cd4e314be9b43d8a8b9":[9,4,0,0,0],
"structlws__protocol__vhost__options.html#acf9db77f8eb64cd4e314be9b43d8a8b9":[9,4,2,0],
"structlws__protocol__vhost__options.html#afd99fbc90be51ea2465b550c2ec47822":[9,4,2,2],
"structlws__protocol__vhost__options.html#afd99fbc90be51ea2465b550c2ec47822":[9,4,0,0,2],
"structlws__protocol__vhost__options.html#afd99fbc90be51ea2465b550c2ec47822":[9,4,2,2],
"structlws__protocols.html":[9,10,1],
"structlws__protocols.html#a0d1d4996d81b2f5e125bcec981e461c5":[9,10,1,4],
"structlws__protocols.html#a0e63edb457a613c3fa4271e0a8f19624":[9,10,1,2],
@ -77,8 +77,8 @@ var NAVTREEINDEX4 =
"structlws__tokens.html":[9,6,4,0],
"structlws__tokens.html#a855b7375d1d58516c0ecd4b60e9a7766":[9,6,6,1],
"structlws__tokens.html#a855b7375d1d58516c0ecd4b60e9a7766":[9,6,4,0,1],
"structlws__tokens.html#a9f3635412bc71a5cb78e9862b55f10cd":[9,6,6,0],
"structlws__tokens.html#a9f3635412bc71a5cb78e9862b55f10cd":[9,6,4,0,0],
"structlws__tokens.html#a9f3635412bc71a5cb78e9862b55f10cd":[9,6,6,0],
"structlwsgw__hash.html":[9,10,0,1],
"structlwsgw__hash.html#a29435f5cf78747d4257695b0f141d164":[9,10,0,1,0],
"structlwsgw__hash__bin.html":[9,10,0,0],

View file

@ -3,7 +3,8 @@
<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.11"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: Related Pages</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,16 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<!-- 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">
@ -67,13 +66,13 @@ $(document).ready(function(){initNavTree('pages.html','');});
<div class="contents">
<div class="textblock">Here is a list of all related documentation pages:</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><a class="el" href="md_README.build.html" target="_self">Notes about building lws</a></td><td class="desc"></td></tr>
<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="md_README.problems.html" target="_self">Debugging problems</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><a class="el" href="md_README.lwsws.html" target="_self">Notes about lwsws</a></td><td class="desc"></td></tr>
<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="md_README.coding.html" target="_self">Notes about coding with lws</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><a class="el" href="md_README.generic-sessions.html" target="_self">Notes about generic-sessions Plugin</a></td><td class="desc"></td></tr>
<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="md_README.generic-table.html" target="_self">Notes about generic-table</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><a class="el" href="md_README.test-apps.html" target="_self">Overview of lws test apps</a></td><td class="desc"></td></tr>
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="md_README_8build.html" target="_self">Notes about building lws</a></td><td class="desc"></td></tr>
<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="md_README_8problems.html" target="_self">Debugging problems</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><a class="el" href="md_README_8lwsws.html" target="_self">Notes about lwsws</a></td><td class="desc"></td></tr>
<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="md_README_8coding.html" target="_self">Notes about coding with lws</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><a class="el" href="md_README_8generic-sessions.html" target="_self">Notes about generic-sessions Plugin</a></td><td class="desc"></td></tr>
<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="md_README_8generic-table.html" target="_self">Notes about generic-table</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><a class="el" href="md_README_8test-apps.html" target="_self">Overview of lws test apps</a></td><td class="desc"></td></tr>
<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="deprecated.html" target="_self">Deprecated List</a></td><td class="desc"></td></tr>
</table>
</div><!-- directory -->
@ -84,7 +83,7 @@ $(document).ready(function(){initNavTree('pages.html','');});
<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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -1,73 +1,104 @@
var cookie_namespace = 'doxygen';
var sidenav,navtree,content,header;
function readCookie(cookie)
{
var myCookie = cookie_namespace+"_"+cookie+"=";
if (document.cookie)
{
var index = document.cookie.indexOf(myCookie);
if (index != -1)
{
var valStart = index + myCookie.length;
var valEnd = document.cookie.indexOf(";", valStart);
if (valEnd == -1)
{
valEnd = document.cookie.length;
}
var val = document.cookie.substring(valStart, valEnd);
return val;
}
}
return 0;
}
function writeCookie(cookie, val, expiration)
{
if (val==undefined) return;
if (expiration == null)
{
var date = new Date();
date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week
expiration = date.toGMTString();
}
document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; expires=" + expiration+"; path=/";
}
function resizeWidth()
{
var windowWidth = $(window).width() + "px";
var sidenavWidth = $(sidenav).outerWidth();
content.css({marginLeft:parseInt(sidenavWidth)+"px"});
writeCookie('width',sidenavWidth, null);
}
function restoreWidth(navWidth)
{
var windowWidth = $(window).width() + "px";
content.css({marginLeft:parseInt(navWidth)+6+"px"});
sidenav.css({width:navWidth + "px"});
}
function resizeHeight()
{
var headerHeight = header.outerHeight();
var footerHeight = footer.outerHeight();
var windowHeight = $(window).height() - headerHeight - footerHeight;
content.css({height:windowHeight + "px"});
navtree.css({height:windowHeight + "px"});
sidenav.css({height:windowHeight + "px"});
}
function initResizable()
{
var cookie_namespace = 'doxygen';
var sidenav,navtree,content,header,collapsed,collapsedWidth=0,barWidth=6,desktop_vp=768,titleHeight;
function readCookie(cookie)
{
var myCookie = cookie_namespace+"_"+cookie+"=";
if (document.cookie) {
var index = document.cookie.indexOf(myCookie);
if (index != -1) {
var valStart = index + myCookie.length;
var valEnd = document.cookie.indexOf(";", valStart);
if (valEnd == -1) {
valEnd = document.cookie.length;
}
var val = document.cookie.substring(valStart, valEnd);
return val;
}
}
return 0;
}
function writeCookie(cookie, val, expiration)
{
if (val==undefined) return;
if (expiration == null) {
var date = new Date();
date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week
expiration = date.toGMTString();
}
document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; expires=" + expiration+"; path=/";
}
function resizeWidth()
{
var windowWidth = $(window).width() + "px";
var sidenavWidth = $(sidenav).outerWidth();
content.css({marginLeft:parseInt(sidenavWidth)+"px"});
writeCookie('width',sidenavWidth-barWidth, null);
}
function restoreWidth(navWidth)
{
var windowWidth = $(window).width() + "px";
content.css({marginLeft:parseInt(navWidth)+barWidth+"px"});
sidenav.css({width:navWidth + "px"});
}
function resizeHeight()
{
var headerHeight = header.outerHeight();
var footerHeight = footer.outerHeight();
var windowHeight = $(window).height() - headerHeight - footerHeight;
content.css({height:windowHeight + "px"});
navtree.css({height:windowHeight + "px"});
sidenav.css({height:windowHeight + "px"});
var width=$(window).width();
if (width!=collapsedWidth) {
if (width<desktop_vp && collapsedWidth>=desktop_vp) {
if (!collapsed) {
collapseExpand();
}
} else if (width>desktop_vp && collapsedWidth<desktop_vp) {
if (collapsed) {
collapseExpand();
}
}
collapsedWidth=width;
}
}
function collapseExpand()
{
if (sidenav.width()>0) {
restoreWidth(0);
collapsed=true;
}
else {
var width = readCookie('width');
if (width>200 && width<$(window).width()) { restoreWidth(width); } else { restoreWidth(200); }
collapsed=false;
}
}
header = $("#top");
sidenav = $("#side-nav");
content = $("#doc-content");
navtree = $("#nav-tree");
footer = $("#nav-path");
$(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } });
$(sidenav).resizable({ minWidth: 0 });
$(window).resize(function() { resizeHeight(); });
var device = navigator.userAgent.toLowerCase();
var touch_device = device.match(/(iphone|ipod|ipad|android)/);
if (touch_device) { /* wider split bar for touch only devices */
$(sidenav).css({ paddingRight:'20px' });
$('.ui-resizable-e').css({ width:'20px' });
$('#nav-sync').css({ right:'34px' });
barWidth=20;
}
var width = readCookie('width');
if (width) { restoreWidth(width); } else { resizeWidth(); }
resizeHeight();
@ -76,22 +107,8 @@ function initResizable()
if (i>=0) window.location.hash=url.substr(i);
var _preventDefault = function(evt) { evt.preventDefault(); };
$("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault);
$(document).bind('touchmove',function(e){
var device = navigator.userAgent.toLowerCase();
var ios = device.match(/(iphone|ipod|ipad)/);
if (ios) {
try {
var target = e.target;
while (target) {
if ($(target).css('-webkit-overflow-scrolling')=='touch') return;
target = target.parentNode;
}
e.preventDefault();
} catch(err) {
e.preventDefault();
}
}
});
$(".ui-resizable-handle").dblclick(collapseExpand);
$(window).load(resizeHeight);
}

View file

@ -3,7 +3,8 @@
<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.11"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: lws_cgi_args Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,24 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
</ul>
</div>
<!-- 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">
@ -90,7 +81,9 @@ Data Fields</h2></td></tr>
<tr class="separator:a36e5c256433c187bd0eaa9c1ca667f1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Field Documentation</h2>
<a class="anchor" id="adeee220b29aeacc34632c38e50f0f5a5"></a>
<a id="adeee220b29aeacc34632c38e50f0f5a5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adeee220b29aeacc34632c38e50f0f5a5">&#9670;&nbsp;</a></span>ch</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -103,7 +96,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a8ac842084688c02f3f94694ef700d8f7"></a>
<a id="a8ac842084688c02f3f94694ef700d8f7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8ac842084688c02f3f94694ef700d8f7">&#9670;&nbsp;</a></span>data</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -116,7 +111,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a741c11b9aa05997ec45a3400d7fb7739"></a>
<a id="a741c11b9aa05997ec45a3400d7fb7739"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a741c11b9aa05997ec45a3400d7fb7739">&#9670;&nbsp;</a></span>hdr_state</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -129,7 +126,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a36e5c256433c187bd0eaa9c1ca667f1d"></a>
<a id="a36e5c256433c187bd0eaa9c1ca667f1d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a36e5c256433c187bd0eaa9c1ca667f1d">&#9670;&nbsp;</a></span>len</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -142,7 +141,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a4ccc1058e7e914a26eef31ab2ad46aa1"></a>
<a id="a4ccc1058e7e914a26eef31ab2ad46aa1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4ccc1058e7e914a26eef31ab2ad46aa1">&#9670;&nbsp;</a></span>stdwsi</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -166,7 +167,7 @@ Data Fields</h2></td></tr>
<li class="navelem"><a class="el" href="structlws__cgi__args.html">lws_cgi_args</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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: lws_client_connect_info Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,24 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
</ul>
</div>
<!-- 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">
@ -120,7 +111,9 @@ Data Fields</h2></td></tr>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>struct <a class="el" href="structlws__client__connect__info.html">lws_client_connect_info</a> - parameters to connect with when using <a class="el" href="group__client.html#ga0c966136905f467816307cfba6deb5fd">lws_client_connect_via_info()</a> </p>
</div><h2 class="groupheader">Field Documentation</h2>
<a class="anchor" id="ad47f50d1633dc5df74548606c9a66d73"></a>
<a id="ad47f50d1633dc5df74548606c9a66d73"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad47f50d1633dc5df74548606c9a66d73">&#9670;&nbsp;</a></span>_unused</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -133,7 +126,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="aa364094f94ef1bcaaabbd9161971d502"></a>
<a id="aa364094f94ef1bcaaabbd9161971d502"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa364094f94ef1bcaaabbd9161971d502">&#9670;&nbsp;</a></span>address</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -146,7 +141,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a7732b996e977393c3e1076be2a8ded6c"></a>
<a id="a7732b996e977393c3e1076be2a8ded6c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7732b996e977393c3e1076be2a8ded6c">&#9670;&nbsp;</a></span>client_exts</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -159,7 +156,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="afe999d133cc240a0bfd02aade0514cfd"></a>
<a id="afe999d133cc240a0bfd02aade0514cfd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afe999d133cc240a0bfd02aade0514cfd">&#9670;&nbsp;</a></span>context</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -172,7 +171,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a9b36d47c3422329df32c21040a35ebc7"></a>
<a id="a9b36d47c3422329df32c21040a35ebc7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9b36d47c3422329df32c21040a35ebc7">&#9670;&nbsp;</a></span>host</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -185,7 +186,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a69abb5aeed755750b9755e5c91db6895"></a>
<a id="a69abb5aeed755750b9755e5c91db6895"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a69abb5aeed755750b9755e5c91db6895">&#9670;&nbsp;</a></span>ietf_version_or_minus_one</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -198,7 +201,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="aa9e8e3da4e783a0651b0dea62c2dd1db"></a>
<a id="aa9e8e3da4e783a0651b0dea62c2dd1db"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa9e8e3da4e783a0651b0dea62c2dd1db">&#9670;&nbsp;</a></span>method</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -211,7 +216,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a8595f83e64147cb687b6418cf500dd4c"></a>
<a id="a8595f83e64147cb687b6418cf500dd4c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8595f83e64147cb687b6418cf500dd4c">&#9670;&nbsp;</a></span>origin</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -224,7 +231,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a6843a60e1050b10db9d98d7eeb45f587"></a>
<a id="a6843a60e1050b10db9d98d7eeb45f587"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6843a60e1050b10db9d98d7eeb45f587">&#9670;&nbsp;</a></span>parent_wsi</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -237,7 +246,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a76a8388733f114fb8fd3643874781185"></a>
<a id="a76a8388733f114fb8fd3643874781185"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a76a8388733f114fb8fd3643874781185">&#9670;&nbsp;</a></span>path</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -250,7 +261,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a1af124d81c3c22a46d39387c5bc3d6b9"></a>
<a id="a1af124d81c3c22a46d39387c5bc3d6b9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1af124d81c3c22a46d39387c5bc3d6b9">&#9670;&nbsp;</a></span>port</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -263,7 +276,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="aba35adfb74845a5fd0c3dc141cbdddd2"></a>
<a id="aba35adfb74845a5fd0c3dc141cbdddd2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aba35adfb74845a5fd0c3dc141cbdddd2">&#9670;&nbsp;</a></span>protocol</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -276,7 +291,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a065063b5117ecd0a59567c97f04bda2e"></a>
<a id="a065063b5117ecd0a59567c97f04bda2e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a065063b5117ecd0a59567c97f04bda2e">&#9670;&nbsp;</a></span>pwsi</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -289,7 +306,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a9862297827639238a7a0b4054c3ddf3d"></a>
<a id="a9862297827639238a7a0b4054c3ddf3d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9862297827639238a7a0b4054c3ddf3d">&#9670;&nbsp;</a></span>ssl_connection</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -302,7 +321,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a03c305fdca809667b6a9a83b3edfd83a"></a>
<a id="a03c305fdca809667b6a9a83b3edfd83a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a03c305fdca809667b6a9a83b3edfd83a">&#9670;&nbsp;</a></span>uri_replace_from</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -315,7 +336,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a9959ba103d3d2484e559a9f7879eebe3"></a>
<a id="a9959ba103d3d2484e559a9f7879eebe3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9959ba103d3d2484e559a9f7879eebe3">&#9670;&nbsp;</a></span>uri_replace_to</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -328,7 +351,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a9831b9f9ab54a1aec4bb15324f1c3836"></a>
<a id="a9831b9f9ab54a1aec4bb15324f1c3836"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9831b9f9ab54a1aec4bb15324f1c3836">&#9670;&nbsp;</a></span>userdata</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -341,7 +366,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a3893181d728f326f9f5b47c1459cb8be"></a>
<a id="a3893181d728f326f9f5b47c1459cb8be"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3893181d728f326f9f5b47c1459cb8be">&#9670;&nbsp;</a></span>vhost</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -365,7 +392,7 @@ Data Fields</h2></td></tr>
<li class="navelem"><a class="el" href="structlws__client__connect__info.html">lws_client_connect_info</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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: lws_context_creation_info Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,24 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
</ul>
</div>
<!-- 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">
@ -136,7 +127,7 @@ Data Fields</h2></td></tr>
<tr class="separator:afa5d4e7d9f86b58a1c6fac14f0a5f5f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad50db098a208f045f7811207d2bee4b9"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__context__creation__info.html#ad50db098a208f045f7811207d2bee4b9">vhost_name</a></td></tr>
<tr class="separator:ad50db098a208f045f7811207d2bee4b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8122cfc0810bafe51edb3ba6bf9a1251"><td class="memItemLeft" align="right" valign="top">const char *const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__context__creation__info.html#a8122cfc0810bafe51edb3ba6bf9a1251">plugin_dirs</a></td></tr>
<tr class="memitem:a8122cfc0810bafe51edb3ba6bf9a1251"><td class="memItemLeft" align="right" valign="top">const char *const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__context__creation__info.html#a8122cfc0810bafe51edb3ba6bf9a1251">plugin_dirs</a></td></tr>
<tr class="separator:a8122cfc0810bafe51edb3ba6bf9a1251"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a999866fcd15dbd621773436f97190458"><td class="memItemLeft" align="right" valign="top">const struct <a class="el" href="structlws__protocol__vhost__options.html">lws_protocol_vhost_options</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__context__creation__info.html#a999866fcd15dbd621773436f97190458">pvo</a></td></tr>
<tr class="separator:a999866fcd15dbd621773436f97190458"><td class="memSeparator" colspan="2">&#160;</td></tr>
@ -168,7 +159,9 @@ Data Fields</h2></td></tr>
<p>This is also used to create vhosts.... if LWS_SERVER_OPTION_EXPLICIT_VHOSTS is not given, then for backwards compatibility one vhost is created at context-creation time using the info from this struct.</p>
<p>If LWS_SERVER_OPTION_EXPLICIT_VHOSTS is given, then no vhosts are created at the same time as the context, they are expected to be created afterwards. </p>
</div><h2 class="groupheader">Field Documentation</h2>
<a class="anchor" id="afce3b59950eca3203faa07381bbed5d7"></a>
<a id="afce3b59950eca3203faa07381bbed5d7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afce3b59950eca3203faa07381bbed5d7">&#9670;&nbsp;</a></span>_unused</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -181,7 +174,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="ae52f3237e144e9ddcab5e2cf91d1e419"></a>
<a id="ae52f3237e144e9ddcab5e2cf91d1e419"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae52f3237e144e9ddcab5e2cf91d1e419">&#9670;&nbsp;</a></span>count_threads</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -194,7 +189,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="afa5d4e7d9f86b58a1c6fac14f0a5f5f9"></a>
<a id="afa5d4e7d9f86b58a1c6fac14f0a5f5f9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afa5d4e7d9f86b58a1c6fac14f0a5f5f9">&#9670;&nbsp;</a></span>ecdh_curve</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -207,7 +204,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a4a3d1155fc52f5048b481884f6fb947c"></a>
<a id="a4a3d1155fc52f5048b481884f6fb947c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4a3d1155fc52f5048b481884f6fb947c">&#9670;&nbsp;</a></span>extensions</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -220,7 +219,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a45e63e24c88289e0c8352377ef4d3646"></a>
<a id="a45e63e24c88289e0c8352377ef4d3646"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a45e63e24c88289e0c8352377ef4d3646">&#9670;&nbsp;</a></span>fd_limit_per_thread</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -233,7 +234,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a9c9d22437de92c197f3cee52912b2c03"></a>
<a id="a9c9d22437de92c197f3cee52912b2c03"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9c9d22437de92c197f3cee52912b2c03">&#9670;&nbsp;</a></span>gid</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -246,7 +249,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a8ca0ec6b8675c13849bbdcdc0d50c9a3"></a>
<a id="a8ca0ec6b8675c13849bbdcdc0d50c9a3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8ca0ec6b8675c13849bbdcdc0d50c9a3">&#9670;&nbsp;</a></span>headers</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -259,7 +264,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="aef917c0b23976a264d2474901b4f5aa3"></a>
<a id="aef917c0b23976a264d2474901b4f5aa3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aef917c0b23976a264d2474901b4f5aa3">&#9670;&nbsp;</a></span>http_proxy_address</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -272,7 +279,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a7b59f2bdc869871e7bde232db94f5ca6"></a>
<a id="a7b59f2bdc869871e7bde232db94f5ca6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7b59f2bdc869871e7bde232db94f5ca6">&#9670;&nbsp;</a></span>http_proxy_port</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -285,7 +294,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a75434932bb5df54665ea678eb8ac104a"></a>
<a id="a75434932bb5df54665ea678eb8ac104a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a75434932bb5df54665ea678eb8ac104a">&#9670;&nbsp;</a></span>iface</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -298,7 +309,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a381342a398883d6204955ff3c1849ddd"></a>
<a id="a381342a398883d6204955ff3c1849ddd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a381342a398883d6204955ff3c1849ddd">&#9670;&nbsp;</a></span>ka_interval</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -311,7 +324,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a3baab4285c679fbe027c2504621d7410"></a>
<a id="a3baab4285c679fbe027c2504621d7410"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3baab4285c679fbe027c2504621d7410">&#9670;&nbsp;</a></span>ka_probes</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -324,7 +339,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="ac583ce92b8e1c949cb6fef6bfe713d56"></a>
<a id="ac583ce92b8e1c949cb6fef6bfe713d56"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac583ce92b8e1c949cb6fef6bfe713d56">&#9670;&nbsp;</a></span>ka_time</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -337,7 +354,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a81697c6b763b5ef3ee52862bc70b07d6"></a>
<a id="a81697c6b763b5ef3ee52862bc70b07d6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a81697c6b763b5ef3ee52862bc70b07d6">&#9670;&nbsp;</a></span>keepalive_timeout</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -350,7 +369,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="ad0e95ba721f7bd2b676719f8093c23a2"></a>
<a id="ad0e95ba721f7bd2b676719f8093c23a2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad0e95ba721f7bd2b676719f8093c23a2">&#9670;&nbsp;</a></span>log_filepath</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -363,7 +384,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a0cdfd3c484689ba6f0f2cc91b38ce948"></a>
<a id="a0cdfd3c484689ba6f0f2cc91b38ce948"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0cdfd3c484689ba6f0f2cc91b38ce948">&#9670;&nbsp;</a></span>max_http_header_data</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -376,7 +399,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="aa8d9e85e137f35fb006f2e4a53f0887a"></a>
<a id="aa8d9e85e137f35fb006f2e4a53f0887a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa8d9e85e137f35fb006f2e4a53f0887a">&#9670;&nbsp;</a></span>max_http_header_data2</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -389,7 +414,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a0b154e79abc1167ba4ac3539f4af6720"></a>
<a id="a0b154e79abc1167ba4ac3539f4af6720"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0b154e79abc1167ba4ac3539f4af6720">&#9670;&nbsp;</a></span>max_http_header_pool</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -402,7 +429,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a13ffbb0d010309669611f8c4eda7d7f8"></a>
<a id="a13ffbb0d010309669611f8c4eda7d7f8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a13ffbb0d010309669611f8c4eda7d7f8">&#9670;&nbsp;</a></span>mounts</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -415,7 +444,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a9d3b17a25e1fbc772f21eb4959a82724"></a>
<a id="a9d3b17a25e1fbc772f21eb4959a82724"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9d3b17a25e1fbc772f21eb4959a82724">&#9670;&nbsp;</a></span>options</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -428,7 +459,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a8122cfc0810bafe51edb3ba6bf9a1251"></a>
<a id="a8122cfc0810bafe51edb3ba6bf9a1251"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8122cfc0810bafe51edb3ba6bf9a1251">&#9670;&nbsp;</a></span>plugin_dirs</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -441,7 +474,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a424a5ce268d6903e42243be94487ab85"></a>
<a id="a424a5ce268d6903e42243be94487ab85"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a424a5ce268d6903e42243be94487ab85">&#9670;&nbsp;</a></span>port</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -454,7 +489,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="abb90ffb3e6d6db2db20f529d61bd9122"></a>
<a id="abb90ffb3e6d6db2db20f529d61bd9122"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abb90ffb3e6d6db2db20f529d61bd9122">&#9670;&nbsp;</a></span>protocols</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -467,7 +504,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a1654d41bea6fb2f619b57e6a264b26a4"></a>
<a id="a1654d41bea6fb2f619b57e6a264b26a4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1654d41bea6fb2f619b57e6a264b26a4">&#9670;&nbsp;</a></span>provided_client_ssl_ctx <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -480,7 +519,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a0e790dda6202604f73a03b6149bc12bb"></a>
<a id="a0e790dda6202604f73a03b6149bc12bb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0e790dda6202604f73a03b6149bc12bb">&#9670;&nbsp;</a></span>provided_client_ssl_ctx <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -493,7 +534,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a57f88c0745adbd1d6b9b619b8de30209"></a>
<a id="a57f88c0745adbd1d6b9b619b8de30209"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a57f88c0745adbd1d6b9b619b8de30209">&#9670;&nbsp;</a></span>pt_serv_buf_size</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -506,7 +549,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a999866fcd15dbd621773436f97190458"></a>
<a id="a999866fcd15dbd621773436f97190458"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a999866fcd15dbd621773436f97190458">&#9670;&nbsp;</a></span>pvo</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -519,7 +564,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a137a9b9de4f6a7993fed8746d551e616"></a>
<a id="a137a9b9de4f6a7993fed8746d551e616"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a137a9b9de4f6a7993fed8746d551e616">&#9670;&nbsp;</a></span>server_string</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -532,7 +579,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a4f8e65c3a059d3b586fafa9ef3282c29"></a>
<a id="a4f8e65c3a059d3b586fafa9ef3282c29"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4f8e65c3a059d3b586fafa9ef3282c29">&#9670;&nbsp;</a></span>ssl_ca_filepath</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -545,7 +594,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="ac62b0f0e8e402412ba5011d15c244103"></a>
<a id="ac62b0f0e8e402412ba5011d15c244103"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac62b0f0e8e402412ba5011d15c244103">&#9670;&nbsp;</a></span>ssl_cert_filepath</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -558,7 +609,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a3e1516fd7fed26bfa77c0246ed26c2eb"></a>
<a id="a3e1516fd7fed26bfa77c0246ed26c2eb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3e1516fd7fed26bfa77c0246ed26c2eb">&#9670;&nbsp;</a></span>ssl_cipher_list</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -571,7 +624,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="adb0bc0b28cd7d90ab306723d8ffa96fa"></a>
<a id="adb0bc0b28cd7d90ab306723d8ffa96fa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adb0bc0b28cd7d90ab306723d8ffa96fa">&#9670;&nbsp;</a></span>ssl_options_clear</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -584,7 +639,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a704940261951ced6b5d8191bd8b9bb2d"></a>
<a id="a704940261951ced6b5d8191bd8b9bb2d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a704940261951ced6b5d8191bd8b9bb2d">&#9670;&nbsp;</a></span>ssl_options_set</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -597,7 +654,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="ab9ec8893e0f7843cf5d783d2f350ef14"></a>
<a id="ab9ec8893e0f7843cf5d783d2f350ef14"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab9ec8893e0f7843cf5d783d2f350ef14">&#9670;&nbsp;</a></span>ssl_private_key_filepath</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -610,7 +669,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="af3fb447be15c4fcb01d3285a6678ab54"></a>
<a id="af3fb447be15c4fcb01d3285a6678ab54"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af3fb447be15c4fcb01d3285a6678ab54">&#9670;&nbsp;</a></span>ssl_private_key_password</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -623,7 +684,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a6cfa3d51df2def3349a5cbf0d712822d"></a>
<a id="a6cfa3d51df2def3349a5cbf0d712822d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6cfa3d51df2def3349a5cbf0d712822d">&#9670;&nbsp;</a></span>timeout_secs</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -636,7 +699,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="ac8a75b7b259a3c3a5fbb4219a3f06c29"></a>
<a id="ac8a75b7b259a3c3a5fbb4219a3f06c29"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac8a75b7b259a3c3a5fbb4219a3f06c29">&#9670;&nbsp;</a></span>token_limits</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -649,7 +714,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="ac105b4180008cb3e672d57beead8382e"></a>
<a id="ac105b4180008cb3e672d57beead8382e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac105b4180008cb3e672d57beead8382e">&#9670;&nbsp;</a></span>uid</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -662,7 +729,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a0e9d94cdfb893d777b4a4db81e7b5ac0"></a>
<a id="a0e9d94cdfb893d777b4a4db81e7b5ac0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0e9d94cdfb893d777b4a4db81e7b5ac0">&#9670;&nbsp;</a></span>user</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -675,7 +744,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="ad50db098a208f045f7811207d2bee4b9"></a>
<a id="ad50db098a208f045f7811207d2bee4b9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad50db098a208f045f7811207d2bee4b9">&#9670;&nbsp;</a></span>vhost_name</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -688,7 +759,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a33a1a25a7df3793f59047e20dd580078"></a>
<a id="a33a1a25a7df3793f59047e20dd580078"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a33a1a25a7df3793f59047e20dd580078">&#9670;&nbsp;</a></span>ws_ping_pong_interval</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -712,7 +785,7 @@ Data Fields</h2></td></tr>
<li class="navelem"><a class="el" href="structlws__context__creation__info.html">lws_context_creation_info</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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: lws_email Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,24 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
</ul>
</div>
<!-- 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">
@ -118,7 +109,9 @@ Data Fields</h2></td></tr>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>struct <a class="el" href="structlws__email.html">lws_email</a> - abstract context for performing SMTP operations </p>
</div><h2 class="groupheader">Field Documentation</h2>
<a class="anchor" id="a6fff03c5a5d369a2aa3cab0c897b1bed"></a>
<a id="a6fff03c5a5d369a2aa3cab0c897b1bed"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6fff03c5a5d369a2aa3cab0c897b1bed">&#9670;&nbsp;</a></span>content</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -131,7 +124,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="add1341456045382c183f4c763bdea6bc"></a>
<a id="add1341456045382c183f4c763bdea6bc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#add1341456045382c183f4c763bdea6bc">&#9670;&nbsp;</a></span>data</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -144,7 +139,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a8f34ec0643a817be67ef4276aeb7fb82"></a>
<a id="a8f34ec0643a817be67ef4276aeb7fb82"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8f34ec0643a817be67ef4276aeb7fb82">&#9670;&nbsp;</a></span>email_buf</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -157,7 +154,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a01f31934166dc6d01e8a375012f8ad1e"></a>
<a id="a01f31934166dc6d01e8a375012f8ad1e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a01f31934166dc6d01e8a375012f8ad1e">&#9670;&nbsp;</a></span>email_client</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -170,7 +169,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a5f53d4c5a1e34b0dcaa8787e2eabb1b3"></a>
<a id="a5f53d4c5a1e34b0dcaa8787e2eabb1b3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5f53d4c5a1e34b0dcaa8787e2eabb1b3">&#9670;&nbsp;</a></span>email_connect_req</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -183,7 +184,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a9747ca85597788c2d118d287df47b7c1"></a>
<a id="a9747ca85597788c2d118d287df47b7c1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9747ca85597788c2d118d287df47b7c1">&#9670;&nbsp;</a></span>email_connect_started</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -196,7 +199,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="af7f0ae934347d81071f63a963301f9e2"></a>
<a id="af7f0ae934347d81071f63a963301f9e2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af7f0ae934347d81071f63a963301f9e2">&#9670;&nbsp;</a></span>email_from</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -209,7 +214,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a939e5d7ee0339a16de73bde71ab4d4d9"></a>
<a id="a939e5d7ee0339a16de73bde71ab4d4d9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a939e5d7ee0339a16de73bde71ab4d4d9">&#9670;&nbsp;</a></span>email_helo</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -222,7 +229,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a472ae23fc9fca6599e5c512bc21458d2"></a>
<a id="a472ae23fc9fca6599e5c512bc21458d2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a472ae23fc9fca6599e5c512bc21458d2">&#9670;&nbsp;</a></span>email_smtp_ip</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -235,7 +244,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a6453a8b92b3de6d2c2101af3edce685e"></a>
<a id="a6453a8b92b3de6d2c2101af3edce685e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6453a8b92b3de6d2c2101af3edce685e">&#9670;&nbsp;</a></span>email_to</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -248,7 +259,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="ac6115d3cbef2e8bac62cc00895bf5fd3"></a>
<a id="ac6115d3cbef2e8bac62cc00895bf5fd3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac6115d3cbef2e8bac62cc00895bf5fd3">&#9670;&nbsp;</a></span>estate</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -261,7 +274,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="ab5fbf121195a8e67509c78a42cfbe168"></a>
<a id="ab5fbf121195a8e67509c78a42cfbe168"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab5fbf121195a8e67509c78a42cfbe168">&#9670;&nbsp;</a></span>loop</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -274,7 +289,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a7bbc1964889c984b3da723c86a210e05"></a>
<a id="a7bbc1964889c984b3da723c86a210e05"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7bbc1964889c984b3da723c86a210e05">&#9670;&nbsp;</a></span>max_content_size</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -287,7 +304,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a2aff78c8e04db243052aa91b4d87e987"></a>
<a id="a2aff78c8e04db243052aa91b4d87e987"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2aff78c8e04db243052aa91b4d87e987">&#9670;&nbsp;</a></span>on_get_body</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -300,7 +319,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="ad8dc60353ee246d84dd59ec0591e9719"></a>
<a id="ad8dc60353ee246d84dd59ec0591e9719"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad8dc60353ee246d84dd59ec0591e9719">&#9670;&nbsp;</a></span>on_next</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -313,7 +334,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a39ef6263d58eb40cca417c8697b227d8"></a>
<a id="a39ef6263d58eb40cca417c8697b227d8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a39ef6263d58eb40cca417c8697b227d8">&#9670;&nbsp;</a></span>on_sent</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -326,7 +349,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a77723e2f2b940b1c879ef5e1cd88c2be"></a>
<a id="a77723e2f2b940b1c879ef5e1cd88c2be"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a77723e2f2b940b1c879ef5e1cd88c2be">&#9670;&nbsp;</a></span>timeout_email</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -350,7 +375,7 @@ Data Fields</h2></td></tr>
<li class="navelem"><a class="el" href="structlws__email.html">lws_email</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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: lws_ext_option_arg Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,24 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
</ul>
</div>
<!-- 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">
@ -92,7 +83,9 @@ Data Fields</h2></td></tr>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>struct <a class="el" href="structlws__ext__option__arg.html">lws_ext_option_arg</a> </p>
</div><h2 class="groupheader">Field Documentation</h2>
<a class="anchor" id="af37f0b6caa7735af51a1ac12b68d5bc5"></a>
<a id="af37f0b6caa7735af51a1ac12b68d5bc5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af37f0b6caa7735af51a1ac12b68d5bc5">&#9670;&nbsp;</a></span>len</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -105,7 +98,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="af57fffcfa253dfa8d98681ac1fb1785f"></a>
<a id="af57fffcfa253dfa8d98681ac1fb1785f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af57fffcfa253dfa8d98681ac1fb1785f">&#9670;&nbsp;</a></span>option_index</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -118,7 +113,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a0a320c56b79271b8f059eeaad9423ac9"></a>
<a id="a0a320c56b79271b8f059eeaad9423ac9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0a320c56b79271b8f059eeaad9423ac9">&#9670;&nbsp;</a></span>option_name</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -131,7 +128,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a0b1f7b30c3ceaf5f1bf9d105c24568d1"></a>
<a id="a0b1f7b30c3ceaf5f1bf9d105c24568d1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0b1f7b30c3ceaf5f1bf9d105c24568d1">&#9670;&nbsp;</a></span>start</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -155,7 +154,7 @@ Data Fields</h2></td></tr>
<li class="navelem"><a class="el" href="structlws__ext__option__arg.html">lws_ext_option_arg</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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: lws_ext_options Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,24 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
</ul>
</div>
<!-- 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">
@ -88,7 +79,9 @@ Data Fields</h2></td></tr>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>struct <a class="el" href="structlws__ext__options.html">lws_ext_options</a> - Option arguments to the extension. These are used in the negotiation at ws upgrade time. The helper function <a class="el" href="group__extensions.html#ga6fb3e2c3dfb9d64dc87026a4e99c128b">lws_ext_parse_options()</a> uses these to generate callbacks </p>
</div><h2 class="groupheader">Field Documentation</h2>
<a class="anchor" id="a1769e4a9805bbdda227821e9578ddc7e"></a>
<a id="a1769e4a9805bbdda227821e9578ddc7e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1769e4a9805bbdda227821e9578ddc7e">&#9670;&nbsp;</a></span>name</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -101,7 +94,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a7c4dbd62dbeba63a9d50d2306bd1cc61"></a>
<a id="a7c4dbd62dbeba63a9d50d2306bd1cc61"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7c4dbd62dbeba63a9d50d2306bd1cc61">&#9670;&nbsp;</a></span>type</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -125,7 +120,7 @@ Data Fields</h2></td></tr>
<li class="navelem"><a class="el" href="structlws__ext__options.html">lws_ext_options</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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: lws_extension Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,24 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
</ul>
</div>
<!-- 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">
@ -90,7 +81,9 @@ Data Fields</h2></td></tr>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>struct <a class="el" href="structlws__extension.html">lws_extension</a> - An extension we support </p>
</div><h2 class="groupheader">Field Documentation</h2>
<a class="anchor" id="afa21f3b3c8c2c9212a276c52b680c3af"></a>
<a id="afa21f3b3c8c2c9212a276c52b680c3af"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afa21f3b3c8c2c9212a276c52b680c3af">&#9670;&nbsp;</a></span>callback</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -103,7 +96,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a36b06c213aedb02bf9a402651751855b"></a>
<a id="a36b06c213aedb02bf9a402651751855b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a36b06c213aedb02bf9a402651751855b">&#9670;&nbsp;</a></span>client_offer</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -116,7 +111,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a1e5018c883d85176f5c2152176843f9e"></a>
<a id="a1e5018c883d85176f5c2152176843f9e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1e5018c883d85176f5c2152176843f9e">&#9670;&nbsp;</a></span>name</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -140,7 +137,7 @@ Data Fields</h2></td></tr>
<li class="navelem"><a class="el" href="structlws__extension.html">lws_extension</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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: lws_gs_event_args Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,24 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
</ul>
</div>
<!-- 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">
@ -90,7 +81,9 @@ Data Fields</h2></td></tr>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>struct <a class="el" href="structlws__gs__event__args.html">lws_gs_event_args</a> </p>
</div><h2 class="groupheader">Field Documentation</h2>
<a class="anchor" id="acd17e4f9f91f7f9a8f0fbf0744a3a463"></a>
<a id="acd17e4f9f91f7f9a8f0fbf0744a3a463"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acd17e4f9f91f7f9a8f0fbf0744a3a463">&#9670;&nbsp;</a></span>email</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -103,7 +96,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a477274f8ca22ba7411b9285b9dc8dd06"></a>
<a id="a477274f8ca22ba7411b9285b9dc8dd06"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a477274f8ca22ba7411b9285b9dc8dd06">&#9670;&nbsp;</a></span>event</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -116,7 +111,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a2bec693d8a43730d487004a44326178b"></a>
<a id="a2bec693d8a43730d487004a44326178b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2bec693d8a43730d487004a44326178b">&#9670;&nbsp;</a></span>username</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -140,7 +137,7 @@ Data Fields</h2></td></tr>
<li class="navelem"><a class="el" href="structlws__gs__event__args.html">lws_gs_event_args</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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: lws_http_mount Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,24 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
</ul>
</div>
<!-- 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">
@ -117,7 +108,9 @@ Data Fields</h2></td></tr>
<div class="textblock"><p>struct <a class="el" href="structlws__http__mount.html">lws_http_mount</a></p>
<p>arguments for mounting something in a vhost's url namespace </p>
</div><h2 class="groupheader">Field Documentation</h2>
<a class="anchor" id="a614364c770b0bd4db464ad65cddab477"></a>
<a id="a614364c770b0bd4db464ad65cddab477"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a614364c770b0bd4db464ad65cddab477">&#9670;&nbsp;</a></span>auth_mask</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -130,7 +123,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="aabec1a326780aafe11b977000983be0c"></a>
<a id="aabec1a326780aafe11b977000983be0c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aabec1a326780aafe11b977000983be0c">&#9670;&nbsp;</a></span>cache_intermediaries</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -143,7 +138,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a4283e30ea89d27ae7d061ad760d1d146"></a>
<a id="a4283e30ea89d27ae7d061ad760d1d146"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4283e30ea89d27ae7d061ad760d1d146">&#9670;&nbsp;</a></span>cache_max_age</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -156,7 +153,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a8316dd183ffbef50419a5a4968d35d84"></a>
<a id="a8316dd183ffbef50419a5a4968d35d84"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8316dd183ffbef50419a5a4968d35d84">&#9670;&nbsp;</a></span>cache_reusable</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -169,7 +168,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="ae137203040c6153694bd88a708da5395"></a>
<a id="ae137203040c6153694bd88a708da5395"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae137203040c6153694bd88a708da5395">&#9670;&nbsp;</a></span>cache_revalidate</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -182,7 +183,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a4a7239d6d4c03986e6e1a72abb6c83aa"></a>
<a id="a4a7239d6d4c03986e6e1a72abb6c83aa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4a7239d6d4c03986e6e1a72abb6c83aa">&#9670;&nbsp;</a></span>cgi_timeout</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -195,7 +198,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="ae7b5c0f4c5408061e6ea3a8d281f45af"></a>
<a id="ae7b5c0f4c5408061e6ea3a8d281f45af"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae7b5c0f4c5408061e6ea3a8d281f45af">&#9670;&nbsp;</a></span>cgienv</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -208,7 +213,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="ae90d1efe7178199fad39de2926902ee4"></a>
<a id="ae90d1efe7178199fad39de2926902ee4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae90d1efe7178199fad39de2926902ee4">&#9670;&nbsp;</a></span>def</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -221,7 +228,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a4437423df85ee3dbcae0e15974c89ec7"></a>
<a id="a4437423df85ee3dbcae0e15974c89ec7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4437423df85ee3dbcae0e15974c89ec7">&#9670;&nbsp;</a></span>extra_mimetypes</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -234,7 +243,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a11ea62b952710d59733dbcf9794a5773"></a>
<a id="a11ea62b952710d59733dbcf9794a5773"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a11ea62b952710d59733dbcf9794a5773">&#9670;&nbsp;</a></span>interpret</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -247,7 +258,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a0109baf93f23c07c824c997c3533ee44"></a>
<a id="a0109baf93f23c07c824c997c3533ee44"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0109baf93f23c07c824c997c3533ee44">&#9670;&nbsp;</a></span>mount_next</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -260,7 +273,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="aa2391bfcada0b7a290b3c6651f64586c"></a>
<a id="aa2391bfcada0b7a290b3c6651f64586c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa2391bfcada0b7a290b3c6651f64586c">&#9670;&nbsp;</a></span>mountpoint</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -273,7 +288,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="ac8489b60b8f969eb19c9abbdeac90743"></a>
<a id="ac8489b60b8f969eb19c9abbdeac90743"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac8489b60b8f969eb19c9abbdeac90743">&#9670;&nbsp;</a></span>mountpoint_len</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -286,7 +303,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a21d86fd6043ec00e121ababbc29af39a"></a>
<a id="a21d86fd6043ec00e121ababbc29af39a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a21d86fd6043ec00e121ababbc29af39a">&#9670;&nbsp;</a></span>origin</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -299,7 +318,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a6a9b1492a0b9749e39bd19932717a0b7"></a>
<a id="a6a9b1492a0b9749e39bd19932717a0b7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6a9b1492a0b9749e39bd19932717a0b7">&#9670;&nbsp;</a></span>origin_protocol</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -312,7 +333,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a05347d92c3d379809564bd4f3eab259b"></a>
<a id="a05347d92c3d379809564bd4f3eab259b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a05347d92c3d379809564bd4f3eab259b">&#9670;&nbsp;</a></span>protocol</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -336,7 +359,7 @@ Data Fields</h2></td></tr>
<li class="navelem"><a class="el" href="structlws__http__mount.html">lws_http_mount</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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: lws_plat_file_ops Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,24 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
</ul>
</div>
<!-- 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">
@ -95,7 +86,9 @@ Data Fields</h2></td></tr>
<div class="textblock"><p>struct <a class="el" href="structlws__plat__file__ops.html">lws_plat_file_ops</a> - Platform-specific file operations</p>
<p>These provide platform-agnostic ways to deal with filesystem access in the library and in the user code. </p>
</div><h2 class="groupheader">Field Documentation</h2>
<a class="anchor" id="a034ec96f2fbaf52b4aa3e82d20795f7b"></a>
<a id="a034ec96f2fbaf52b4aa3e82d20795f7b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a034ec96f2fbaf52b4aa3e82d20795f7b">&#9670;&nbsp;</a></span>close</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -108,7 +101,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="ad37a97abc68d0af967cef874f4d8df32"></a>
<a id="ad37a97abc68d0af967cef874f4d8df32"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad37a97abc68d0af967cef874f4d8df32">&#9670;&nbsp;</a></span>open</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -121,7 +116,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a01f483807a9862736b17ba9ed5110c40"></a>
<a id="a01f483807a9862736b17ba9ed5110c40"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a01f483807a9862736b17ba9ed5110c40">&#9670;&nbsp;</a></span>read</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -134,7 +131,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="abfcda19b003dcc13c61ff9e2bb4ff869"></a>
<a id="abfcda19b003dcc13c61ff9e2bb4ff869"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abfcda19b003dcc13c61ff9e2bb4ff869">&#9670;&nbsp;</a></span>seek_cur</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -147,7 +146,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a1fae8330ee94649a3551e31a30809793"></a>
<a id="a1fae8330ee94649a3551e31a30809793"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1fae8330ee94649a3551e31a30809793">&#9670;&nbsp;</a></span>write</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -171,7 +172,7 @@ Data Fields</h2></td></tr>
<li class="navelem"><a class="el" href="structlws__plat__file__ops.html">lws_plat_file_ops</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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: lws_plugin Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,24 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
</ul>
</div>
<!-- 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">
@ -94,7 +85,9 @@ Data Fields</h2></td></tr>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>struct <a class="el" href="structlws__plugin.html">lws_plugin</a> </p>
</div><h2 class="groupheader">Field Documentation</h2>
<a class="anchor" id="ac7f1fdfe8cf8a21f8ee9720c21934a3f"></a>
<a id="ac7f1fdfe8cf8a21f8ee9720c21934a3f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac7f1fdfe8cf8a21f8ee9720c21934a3f">&#9670;&nbsp;</a></span>caps</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -107,7 +100,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a4ef37a43653715b6c69cbf8a7be747f4"></a>
<a id="a4ef37a43653715b6c69cbf8a7be747f4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4ef37a43653715b6c69cbf8a7be747f4">&#9670;&nbsp;</a></span>l</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -120,7 +115,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="af9e1042dc1de5b9d202c2f5fd1834330"></a>
<a id="af9e1042dc1de5b9d202c2f5fd1834330"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af9e1042dc1de5b9d202c2f5fd1834330">&#9670;&nbsp;</a></span>lib</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -133,7 +130,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a65dffd68fd267ce17b988790d1d35f22"></a>
<a id="a65dffd68fd267ce17b988790d1d35f22"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a65dffd68fd267ce17b988790d1d35f22">&#9670;&nbsp;</a></span>list</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -146,7 +145,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="af4ac8fcb79e10e0c2d960e1804d98105"></a>
<a id="af4ac8fcb79e10e0c2d960e1804d98105"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af4ac8fcb79e10e0c2d960e1804d98105">&#9670;&nbsp;</a></span>name</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -170,7 +171,7 @@ Data Fields</h2></td></tr>
<li class="navelem"><a class="el" href="structlws__plugin.html">lws_plugin</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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: lws_plugin_capability Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,24 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
</ul>
</div>
<!-- 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">
@ -94,7 +85,9 @@ Data Fields</h2></td></tr>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>struct <a class="el" href="structlws__plugin__capability.html">lws_plugin_capability</a> - how a plugin introduces itself to lws </p>
</div><h2 class="groupheader">Field Documentation</h2>
<a class="anchor" id="a523c7cde6f15bba345f56493dcf6b32a"></a>
<a id="a523c7cde6f15bba345f56493dcf6b32a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a523c7cde6f15bba345f56493dcf6b32a">&#9670;&nbsp;</a></span>api_magic</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -107,7 +100,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="abcf51db969522fdda9aaf902e65739d3"></a>
<a id="abcf51db969522fdda9aaf902e65739d3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abcf51db969522fdda9aaf902e65739d3">&#9670;&nbsp;</a></span>count_extensions</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -120,7 +115,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="ae38f7cf1246b9ca3af3cbf9d46b7090f"></a>
<a id="ae38f7cf1246b9ca3af3cbf9d46b7090f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae38f7cf1246b9ca3af3cbf9d46b7090f">&#9670;&nbsp;</a></span>count_protocols</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -133,7 +130,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a7936f0eb93d79dea76b903d0f8a5f623"></a>
<a id="a7936f0eb93d79dea76b903d0f8a5f623"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7936f0eb93d79dea76b903d0f8a5f623">&#9670;&nbsp;</a></span>extensions</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -146,7 +145,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a6a4d9d01e770f378ddadc77b37522033"></a>
<a id="a6a4d9d01e770f378ddadc77b37522033"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6a4d9d01e770f378ddadc77b37522033">&#9670;&nbsp;</a></span>protocols</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -170,7 +171,7 @@ Data Fields</h2></td></tr>
<li class="navelem"><a class="el" href="structlws__plugin__capability.html">lws_plugin_capability</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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: lws_polarssl_context Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,24 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
</ul>
</div>
<!-- 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">
@ -86,7 +77,9 @@ Data Fields</h2></td></tr>
<tr class="separator:a919c33af37aab170f828d954de1fa270"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Field Documentation</h2>
<a class="anchor" id="a1872f2ea24878d807ae20ca8513674af"></a>
<a id="a1872f2ea24878d807ae20ca8513674af"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1872f2ea24878d807ae20ca8513674af">&#9670;&nbsp;</a></span>ca</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -99,7 +92,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="ae7e11c9129ff71c7ee71b3b2e320ff27"></a>
<a id="ae7e11c9129ff71c7ee71b3b2e320ff27"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae7e11c9129ff71c7ee71b3b2e320ff27">&#9670;&nbsp;</a></span>certificate</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -112,7 +107,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a919c33af37aab170f828d954de1fa270"></a>
<a id="a919c33af37aab170f828d954de1fa270"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a919c33af37aab170f828d954de1fa270">&#9670;&nbsp;</a></span>key</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -136,7 +133,7 @@ Data Fields</h2></td></tr>
<li class="navelem"><a class="el" href="structlws__polarssl__context.html">lws_polarssl_context</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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: lws_pollargs Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,24 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
</ul>
</div>
<!-- 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">
@ -90,7 +81,9 @@ Data Fields</h2></td></tr>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>struct <a class="el" href="structlws__pollargs.html">lws_pollargs</a> - argument structure for all external poll related calls passed in via 'in' </p>
</div><h2 class="groupheader">Field Documentation</h2>
<a class="anchor" id="a00bbffea9f55de342783e32d71ce1de6"></a>
<a id="a00bbffea9f55de342783e32d71ce1de6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a00bbffea9f55de342783e32d71ce1de6">&#9670;&nbsp;</a></span>events</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -103,7 +96,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="af14a48ef4e78128aef9a76902b104a81"></a>
<a id="af14a48ef4e78128aef9a76902b104a81"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af14a48ef4e78128aef9a76902b104a81">&#9670;&nbsp;</a></span>fd</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -116,7 +111,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a437fec0de5cf264371e1ab5a401e86d8"></a>
<a id="a437fec0de5cf264371e1ab5a401e86d8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a437fec0de5cf264371e1ab5a401e86d8">&#9670;&nbsp;</a></span>prev_events</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -140,7 +137,7 @@ Data Fields</h2></td></tr>
<li class="navelem"><a class="el" href="structlws__pollargs.html">lws_pollargs</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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

View file

@ -3,7 +3,8 @@
<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.11"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libwebsockets: lws_pollfd Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
@ -35,24 +35,15 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
</ul>
</div>
<!-- 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">
@ -86,7 +77,9 @@ Data Fields</h2></td></tr>
<tr class="separator:ae7cecfe7511c59d4a3a44f876d030932"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Field Documentation</h2>
<a class="anchor" id="ac393db6fc7fb6ed8fe7ca20936908ee9"></a>
<a id="ac393db6fc7fb6ed8fe7ca20936908ee9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac393db6fc7fb6ed8fe7ca20936908ee9">&#9670;&nbsp;</a></span>events</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -99,7 +92,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="a714cf5ca90b41926117fdde9fa6542be"></a>
<a id="a714cf5ca90b41926117fdde9fa6542be"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a714cf5ca90b41926117fdde9fa6542be">&#9670;&nbsp;</a></span>fd</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -112,7 +107,9 @@ Data Fields</h2></td></tr>
</div>
</div>
<a class="anchor" id="ae7cecfe7511c59d4a3a44f876d030932"></a>
<a id="ae7cecfe7511c59d4a3a44f876d030932"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae7cecfe7511c59d4a3a44f876d030932">&#9670;&nbsp;</a></span>revents</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -136,7 +133,7 @@ Data Fields</h2></td></tr>
<li class="navelem"><a class="el" href="structlws__pollfd.html">lws_pollfd</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.11 </li>
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>

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