documentation convert to doxygen

Signed-off-by: Andy Green <andy@warmcat.com>
This commit is contained in:
Andy Green 2016-06-20 17:05:31 +08:00
parent 4e75ae3b4e
commit 014481e912
297 changed files with 39301 additions and 7659 deletions

View file

@ -1396,22 +1396,6 @@ if (LWS_WITH_LWSWS)
endif (LWS_WITH_LWSWS)
if (UNIX)
# Generate documentation.
# TODO: Fix this on Windows.
message("Generating API documentation")
file(GLOB C_FILES "${PROJECT_SOURCE_DIR}/lib/*.c")
list(SORT C_FILES)
execute_process(COMMAND "${CMAKE_COMMAND}" -E make_directory "${PROJECT_BINARY_DIR}/doc/")
execute_process(
COMMAND "${PROJECT_SOURCE_DIR}/scripts/kernel-doc" -html ${C_FILES} ${HDR_PUBLIC}
OUTPUT_FILE "${PROJECT_BINARY_DIR}/doc/libwebsockets-api-doc.html"
ERROR_QUIET)
execute_process(
COMMAND "${PROJECT_SOURCE_DIR}/scripts/kernel-doc" -text ${C_FILES} ${HDR_PUBLIC}
OUTPUT_FILE "${PROJECT_BINARY_DIR}/doc/libwebsockets-api-doc.txt"
ERROR_QUIET)
# Generate and install pkgconfig.
# (This is not indented, because the tabs will be part of the output)

View file

@ -1,3 +1,7 @@
Notes about building lws
========================
Introduction to CMake
---------------------
@ -38,73 +42,64 @@ Building on Unix:
2. Install OpenSSL.
3. Generate the build files (default is Make files):
```
$ cd /path/to/src
$ mkdir build
$ cd build
$ cmake ..
```
```bash
$ cd /path/to/src
$ mkdir build
$ cd build
$ cmake ..
```
4. Finally you can build using the generated Makefile:
```
$ make && sudo make install
```
**NOTE**: The `build/`` directory can have any name and be located anywhere
on your filesystem, and that the argument `..` given to cmake is simply
the source directory of **libwebsockets** containing the [CMakeLists.txt](CMakeLists.txt)
project file. All examples in this file assumes you use ".."
(**NOTE**: The `build/`` directory can have any name and be located anywhere
on your filesystem, and that the argument `..` given to cmake is simply
the source directory of **libwebsockets** containing the [CMakeLists.txt](CMakeLists.txt)
project file. All examples in this file assumes you use "..")
**NOTE2**:
A common option you may want to give is to set the install path, same
as --prefix= with autotools. It defaults to /usr/local.
You can do this by, eg
```
$ cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr .
```
**NOTE2**:
A common option you may want to give is to set the install path, same
as --prefix= with autotools. It defaults to /usr/local.
You can do this by, eg
```bash
$ cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ..
```
**NOTE3**:
On machines that want libraries in lib64, you can also add the
following to the cmake line
```bash
**NOTE3**:
On machines that want libraries in lib64, you can also add the
following to the cmake line
```
-DLIB_SUFFIX=64
```
```
**NOTE4**:
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,
```bash
**NOTE4**:
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,
```
$ cmake .. -DOPENSSL_ROOT_DIR=/usr/local/ssl \
-DCMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE=/usr/local/ssl \
-DLWS_WITH_HTTP2=1
```
```
When you run the test apps using non-distro SSL, you have to force them
to use your libs, not the distro ones
```bash
When you run the test apps using non-distro SSL, you have to force them
to use your libs, not the distro ones
```
$ LD_LIBRARY_PATH=/usr/local/ssl/lib libwebsockets-test-server --ssl
```
```
To get it to build on latest openssl (2016-04-10) it needed this approach
```bash
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"
```
```
**NOTE5**:
To build with debug info and _DEBUG for lower priority debug messages
compiled in, use
```bash
**NOTE5**:
To build with debug info and _DEBUG for lower priority debug messages
compiled in, use
```
$ cmake .. -DCMAKE_BUILD_TYPE=DEBUG
````
4. Finally you can build using the generated Makefile:
```bash
$ make
```
```
Quirk of cmake
--------------
@ -127,12 +122,12 @@ Building on Windows (Visual Studio)
3. Generate the Visual studio project by opening the Visual Studio cmd prompt:
```bash
cd <path to src>
md build
cd build
cmake -G "Visual Studio 10" ..
```
```
cd <path to src>
md build
cd build
cmake -G "Visual Studio 10" ..
```
(**NOTE**: There is also a cmake-gui available on Windows if you prefer that)
@ -161,23 +156,21 @@ Building on Windows (MinGW)
2. Fix up MinGW headers
a) Add the following lines to C:\MinGW\include\winsock2.h:
```c
#if(_WIN32_WINNT >= 0x0600)
```
#if(_WIN32_WINNT >= 0x0600)
typedef struct pollfd {
typedef struct pollfd {
SOCKET fd;
SHORT events;
SHORT revents;
SOCKET fd;
SHORT events;
SHORT revents;
} WSAPOLLFD, *PWSAPOLLFD, FAR *LPWSAPOLLFD;
} WSAPOLLFD, *PWSAPOLLFD, FAR *LPWSAPOLLFD;
WINSOCK_API_LINKAGE int WSAAPI WSAPoll(LPWSAPOLLFD fdArray, ULONG fds, INT timeout);
#endif // (_WIN32_WINNT >= 0x0600)
```
WINSOCK_API_LINKAGE int WSAAPI WSAPoll(LPWSAPOLLFD fdArray, ULONG fds, INT timeout);
#endif // (_WIN32_WINNT >= 0x0600)
```
b) Create C:\MinGW\include\mstcpip.h and copy and paste the content from following link into it:
http://wine-unstable.sourcearchive.com/documentation/1.1.32/mstcpip_8h-source.html
@ -193,14 +186,12 @@ Building on Windows (MinGW)
<OpenSSL install location>\bin\openssl.cfg
5. Generate the build files (default is Make files) using MSYS shell:
```bash
$ cd /drive/path/to/src
$ mkdir build
$ cd build
$ cmake -G "MSYS Makefiles" -DCMAKE_INSTALL_PREFIX=C:/MinGW ..
```
```
$ cd /drive/path/to/src
$ mkdir build
$ cd build
$ cmake -G "MSYS Makefiles" -DCMAKE_INSTALL_PREFIX=C:/MinGW ..
```
(**NOTE**: The `build/`` directory can have any name and be located anywhere
on your filesystem, and that the argument `..` given to cmake is simply
the source directory of **libwebsockets** containing the [CMakeLists.txt](CMakeLists.txt)
@ -209,17 +200,15 @@ Building on Windows (MinGW)
**NOTE2**:
To generate build files allowing to create libwebsockets binaries with debug information
set the CMAKE_BUILD_TYPE flag to DEBUG:
```bash
$ cmake -G "MSYS Makefiles" -DCMAKE_INSTALL_PREFIX=C:/MinGW -DCMAKE_BUILD_TYPE=DEBUG ..
```
```
$ cmake -G "MSYS Makefiles" -DCMAKE_INSTALL_PREFIX=C:/MinGW -DCMAKE_BUILD_TYPE=DEBUG ..
```
6. Finally you can build using the generated Makefile and get the results deployed into your MinGW installation:
```bash
$ make
$ make install
```
```
$ make
$ make install
```
Setting compile options
-----------------------
@ -307,22 +296,20 @@ this to work.
Compiling libwebsockets with wolfSSL
------------------------------------
```bash
cmake .. -DLWS_USE_WOLFSSL=1 \
-DLWS_WOLFSSL_INCLUDE_DIRS=/path/to/wolfssl \
-DLWS_WOLFSSL_LIBRARIES=/path/to/wolfssl/wolfssl.a ..
```
cmake .. -DLWS_USE_WOLFSSL=1 \
-DLWS_WOLFSSL_INCLUDE_DIRS=/path/to/wolfssl \
-DLWS_WOLFSSL_LIBRARIES=/path/to/wolfssl/wolfssl.a ..
```
**NOTE**: On windows use the .lib file extension for `LWS_WOLFSSL_LIBRARIES` instead.
Compiling libwebsockets with CyaSSL
-----------------------------------
```bash
cmake .. -DLWS_USE_CYASSL=1 \
-DLWS_CYASSL_INCLUDE_DIRS=/path/to/cyassl \
-DLWS_CYASSL_LIBRARIES=/path/to/wolfssl/cyassl.a ..
```
cmake .. -DLWS_USE_CYASSL=1 \
-DLWS_CYASSL_INCLUDE_DIRS=/path/to/cyassl \
-DLWS_CYASSL_LIBRARIES=/path/to/wolfssl/cyassl.a ..
```
**NOTE**: On windows use the .lib file extension for `LWS_CYASSL_LIBRARIES` instead.
@ -336,10 +323,10 @@ there is an "mbedtls" package which is actually using polarssl for the include d
and polarssl apis... this should be treated as polarssl then.
Example config for this case is
```
cmake .. -DLWS_USE_POLARSSL=1 -DLWS_POLARSSL_LIBRARIES=/usr/lib64/libmbedtls.so \
-DLWS_POLARSSL_INCLUDE_DIRS=/usr/include/polarssl/
```
Building plugins outside of lws itself
--------------------------------------
@ -347,13 +334,12 @@ Building plugins outside of lws itself
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
```
cd ./plugin-standalone
mkdir build
cd build
cmake ..
make && sudo make install
cd ./plugin-standalone
mkdir build
cd build
cmake ..
make && sudo make install
```
if you changed the default plugin directory when you built lws, you must
@ -362,16 +348,14 @@ also give the same arguments to cmake here (eg,
Otherwise if you run lwsws or libwebsockets-test-server-v2.0, it will now
find the additional plugin "libprotocol_example_standalone.so"
```
lwsts[21257]: Plugins:
lwsts[21257]: libprotocol_dumb_increment.so
lwsts[21257]: libprotocol_example_standalone.so
lwsts[21257]: libprotocol_lws_mirror.so
lwsts[21257]: libprotocol_lws_server_status.so
lwsts[21257]: libprotocol_lws_status.so
lwsts[21257]: Plugins:
lwsts[21257]: libprotocol_dumb_increment.so
lwsts[21257]: libprotocol_example_standalone.so
lwsts[21257]: libprotocol_lws_mirror.so
lwsts[21257]: libprotocol_lws_server_status.so
lwsts[21257]: libprotocol_lws_status.so
```
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->pvo or for lwsws, in the JSON config.
@ -383,25 +367,20 @@ Reproducing HTTP2.0 tests
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
```bash
lwsts[4752]: Compiled with OpenSSL support
lwsts[4752]: Using SSL mode
lwsts[4752]: HTTP2 / ALPN enabled
```
lwsts[4752]: Compiled with OpenSSL support
lwsts[4752]: Using SSL mode
lwsts[4752]: HTTP2 / ALPN enabled
```
at lws startup.
For non-SSL HTTP2.0 upgrade
```bash
$ nghttp -nvasu http://localhost:7681/test.htm
```
$ nghttp -nvasu http://localhost:7681/test.htm
```
For SSL / ALPN HTTP2.0 upgrade
```
$ nghttp -nvas https://localhost:7681/test.html
$ nghttp -nvas https://localhost:7681/test.html
```
Cross compiling
@ -415,13 +394,11 @@ to look for dependencies and such.
you can use as a starting point.
The commandline to configure for cross with this would look like
```bash
$ cmake .. -DCMAKE_INSTALL_PREFIX:PATH=/usr \
-DCMAKE_TOOLCHAIN_FILE=../cross-arm-linux-gnueabihf.cmake \
-DWITHOUT_EXTENSIONS=1 -DWITH_SSL=0
```
$ cmake .. -DCMAKE_INSTALL_PREFIX:PATH=/usr \
-DCMAKE_TOOLCHAIN_FILE=../cross-arm-linux-gnueabihf.cmake \
-DWITHOUT_EXTENSIONS=1 -DWITH_SSL=0
```
The example shows how to build with no external cross lib dependencies, you
need to provide the cross libraries otherwise.
@ -439,17 +416,15 @@ on websocket connections), but with full v13 websocket features and http
server, built on ARM Cortex-A9:
Update at 8dac94d (2013-02-18)
```bash
$ ./configure --without-client --without-extensions --disable-debug --without-daemonize
Context Creation, 1024 fd limit[2]: 16720 (includes 12 bytes per fd)
Per-connection [3]: 72 bytes, +1328 during headers
.text .rodata .data .bss
11512 2784 288 4
```
$ ./configure --without-client --without-extensions --disable-debug --without-daemonize
Context Creation, 1024 fd limit[2]: 16720 (includes 12 bytes per fd)
Per-connection [3]: 72 bytes, +1328 during headers
.text .rodata .data .bss
11512 2784 288 4
```
This shows the impact of the major configuration with/without options at
13ba5bbc633ea962d46d using Ubuntu ARM on a PandaBoard ES.

View file

@ -1,3 +1,6 @@
Notes about coding with lws
===========================
Daemonization
-------------
@ -74,7 +77,8 @@ clients).
If you want to send something, do not just send it but request a callback
when the socket is writeable using
- `lws_callback_on_writable(context, wsi)`` for a specific `wsi`, or
- `lws_callback_on_writable(context, wsi)` for a specific `wsi`, or
- `lws_callback_on_writable_all_protocol(protocol)` for all connections
using that protocol to get a callback when next writeable.
@ -130,24 +134,24 @@ check can be combined with `libwebsockets_remaining_packet_payload`
to gather the whole contents of a message, eg:
```
case LWS_CALLBACK_RECEIVE:
{
Client * const client = (Client *)user;
const size_t remaining = lws_remaining_packet_payload(wsi);
if (!remaining && lws_is_final_fragment(wsi)) {
if (client->HasFragments()) {
client->AppendMessageFragment(in, len, 0);
in = (void *)client->GetMessage();
len = client->GetMessageLength();
}
client->ProcessMessage((char *)in, len, wsi);
client->ResetMessage();
} else
client->AppendMessageFragment(in, len, remaining);
}
break;
case LWS_CALLBACK_RECEIVE:
{
Client * const client = (Client *)user;
const size_t remaining = lws_remaining_packet_payload(wsi);
if (!remaining && lws_is_final_fragment(wsi)) {
if (client->HasFragments()) {
client->AppendMessageFragment(in, len, 0);
in = (void *)client->GetMessage();
len = client->GetMessageLength();
}
client->ProcessMessage((char *)in, len, wsi);
client->ResetMessage();
} else
client->AppendMessageFragment(in, len, remaining);
}
break;
```
The test app libwebsockets-test-fraggle sources also show how to
@ -205,14 +209,14 @@ Using with in c++ apps
The library is ready for use by C++ apps. You can get started quickly by
copying the test server
```bash
$ cp test-server/test-server.c test.cpp
```
$ cp test-server/test-server.c test.cpp
```
and building it in C++ like this
```bash
$ g++ -DINSTALL_DATADIR=\"/usr/share\" -ocpptest test.cpp -lwebsockets
```
$ g++ -DINSTALL_DATADIR=\"/usr/share\" -ocpptest test.cpp -lwebsockets
```
`INSTALL_DATADIR` is only needed because the test server uses it as shipped, if
@ -266,10 +270,12 @@ context-creation time.
You might want to look into that to stop the ssl peers selecting a cipher which
is too computationally expensive. To use it, point it to a string like
`"RC4-MD5:RC4-SHA:AES128-SHA:AES256-SHA:HIGH:!DSS:!aNULL"`
`"RC4-MD5:RC4-SHA:AES128-SHA:AES256-SHA:HIGH:!DSS:!aNULL"`
if left `NULL`, then the "DEFAULT" set of ciphers are all possible to select.
You can also set it to `"ALL"` to allow everything (including insecure ciphers).
Async nature of client connections
----------------------------------
@ -306,27 +312,31 @@ lws prepares a file operations structure that lives in the lws context.
The user code can get a pointer to the file operations struct
LWS_VISIBLE LWS_EXTERN struct lws_plat_file_ops *
`lws_get_fops`(struct lws_context *context);
```
LWS_VISIBLE LWS_EXTERN struct lws_plat_file_ops *
`lws_get_fops`(struct lws_context *context);
```
and then can use helpers to also leverage these platform-independent
file handling apis
static inline lws_filefd_type
`lws_plat_file_open`(struct lws *wsi, const char *filename, unsigned long *filelen, int flags)
```
static inline lws_filefd_type
`lws_plat_file_open`(struct lws *wsi, const char *filename, unsigned long *filelen, int flags)
static inline int
`lws_plat_file_close`(struct lws *wsi, lws_filefd_type fd)
static inline int
`lws_plat_file_close`(struct lws *wsi, lws_filefd_type fd)
static inline unsigned long
`lws_plat_file_seek_cur`(struct lws *wsi, lws_filefd_type fd, long offset_from_cur_pos)
static inline unsigned long
`lws_plat_file_seek_cur`(struct lws *wsi, lws_filefd_type fd, long offset_from_cur_pos)
static inline int
`lws_plat_file_read`(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
static inline int
`lws_plat_file_read`(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
static inline int
`lws_plat_file_write`(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
```
static inline int
`lws_plat_file_write`(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len)
The user code can also override or subclass the file operations, to either
wrap or replace them. An example is shown in test server.
@ -335,11 +345,11 @@ ECDH Support
ECDH Certs are now supported. Enable the CMake option
cmake .. -DLWS_SSL_SERVER_WITH_ECDH_CERT=1
cmake .. -DLWS_SSL_SERVER_WITH_ECDH_CERT=1
**and** the info->options flag
LWS_SERVER_OPTION_SSL_ECDH
LWS_SERVER_OPTION_SSL_ECDH
to build in support and select it at runtime.
@ -397,14 +407,14 @@ Libev / Libuv support
You can select either or both
-DLWS_WITH_LIBEV=1
-DLWS_WITH_LIBUV=1
-DLWS_WITH_LIBEV=1
-DLWS_WITH_LIBUV=1
at cmake configure-time. The user application may use one of the
context init options flags
LWS_SERVER_OPTION_LIBEV
LWS_SERVER_OPTION_LIBUV
LWS_SERVER_OPTION_LIBEV
LWS_SERVER_OPTION_LIBUV
to indicate it will use either of the event libraries.
@ -413,12 +423,13 @@ Extension option control from user code
---------------------------------------
User code may set per-connection extension options now, using a new api
"lws_set_extension_option()".
`lws_set_extension_option()`.
This should be called from the ESTABLISHED callback like this
lws_set_extension_option(wsi, "permessage-deflate",
"rx_buf_size", "12"); /* 1 << 12 */
```
lws_set_extension_option(wsi, "permessage-deflate",
"rx_buf_size", "12"); /* 1 << 12 */
```
If the extension is not active (missing or not negotiated for the
connection, or extensions are disabled on the library) the call is
@ -450,7 +461,7 @@ flow control, and process the data in the writable callback.
Either way you use the api `lws_http_client_read()` to access the
data, eg
```
case LWS_CALLBACK_RECEIVE_CLIENT_HTTP:
{
char buffer[1024 + LWS_PRE];
@ -472,7 +483,8 @@ data, eg
putchar(*px++);
}
break;
```
Using lws v2 vhosts
-------------------
@ -482,10 +494,10 @@ members for compatibility. Instead you can call lws_create_vhost()
afterwards to attach one or more vhosts manually.
```
LWS_VISIBLE struct lws_vhost *
lws_create_vhost(struct lws_context *context,
struct lws_context_creation_info *info,
struct lws_http_mount *mounts);
LWS_VISIBLE struct lws_vhost *
lws_create_vhost(struct lws_context *context,
struct lws_context_creation_info *info,
struct lws_http_mount *mounts);
```
lws_create_vhost() uses the same info struct as lws_create_context(),
@ -493,12 +505,12 @@ it ignores members related to context and uses the ones meaningful
for vhost (marked with VH in libwebsockets.h).
```
struct lws_context_creation_info {
int port; /* VH */
const char *iface; /* VH */
const struct lws_protocols *protocols; /* VH */
const struct lws_extension *extensions; /* VH */
...
struct lws_context_creation_info {
int port; /* VH */
const char *iface; /* VH */
const struct lws_protocols *protocols; /* VH */
const struct lws_extension *extensions; /* VH */
...
```
When you attach the vhost, if the vhost's port already has a listen socket
@ -519,24 +531,24 @@ a similar way that unix lets you mount filesystems into areas of your /
filesystem how you like and deal with the contents transparently.
```
struct lws_http_mount {
struct lws_http_mount *mount_next;
const char *mountpoint; /* mountpoint in http pathspace, eg, "/" */
const char *origin; /* path to be mounted, eg, "/var/www/warmcat.com" */
const char *def; /* default target, eg, "index.html" */
struct lws_protocol_vhost_options *cgienv;
int cgi_timeout;
int cache_max_age;
unsigned int cache_reusable:1;
unsigned int cache_revalidate:1;
unsigned int cache_intermediaries:1;
unsigned char origin_protocol;
unsigned char mountpoint_len;
};
struct lws_http_mount {
struct lws_http_mount *mount_next;
const char *mountpoint; /* mountpoint in http pathspace, eg, "/" */
const char *origin; /* path to be mounted, eg, "/var/www/warmcat.com" */
const char *def; /* default target, eg, "index.html" */
struct lws_protocol_vhost_options *cgienv;
int cgi_timeout;
int cache_max_age;
unsigned int cache_reusable:1;
unsigned int cache_revalidate:1;
unsigned int cache_intermediaries:1;
unsigned char origin_protocol;
unsigned char mountpoint_len;
};
```
The last mount structure should have a NULL mount_next, otherwise it should
@ -548,27 +560,27 @@ destroyed, since they are not copied but used in place.
`.origin_protocol` should be one of
```
enum {
LWSMPRO_HTTP,
LWSMPRO_HTTPS,
LWSMPRO_FILE,
LWSMPRO_CGI,
LWSMPRO_REDIR_HTTP,
LWSMPRO_REDIR_HTTPS,
LWSMPRO_CALLBACK,
};
enum {
LWSMPRO_HTTP,
LWSMPRO_HTTPS,
LWSMPRO_FILE,
LWSMPRO_CGI,
LWSMPRO_REDIR_HTTP,
LWSMPRO_REDIR_HTTPS,
LWSMPRO_CALLBACK,
};
```
LWSMPRO_FILE is used for mapping url namespace to a filesystem directory and
- LWSMPRO_FILE is used for mapping url namespace to a filesystem directory and
serve it automatically.
LWSMPRO_CGI associates the url namespace with the given CGI executable, which
- 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.
LWSMPRO_REDIR_HTTP and LWSMPRO_REDIR_HTTPS auto-redirect clients to the given
- LWSMPRO_REDIR_HTTP and LWSMPRO_REDIR_HTTPS auto-redirect clients to the given
origin URL.
LWSMPRO_CALLBACK causes the http connection to attach to the callback
- LWSMPRO_CALLBACK causes the http connection to attach to the callback
associated with the named protocol (which may be a plugin).
@ -583,20 +595,20 @@ in test-server-v2.0.c, the URL area "/formtest" is associated with the plugin
providing "protocol-post-demo" like this
```
static const struct lws_http_mount mount_post = {
NULL, /* linked-list pointer to next*/
"/formtest", /* mountpoint in URL namespace on this vhost */
"protocol-post-demo", /* handler */
NULL, /* default filename if none given */
NULL,
0,
0,
0,
0,
0,
LWSMPRO_CALLBACK, /* origin points to a callback */
9, /* strlen("/formtest"), ie length of the mountpoint */
};
static const struct lws_http_mount mount_post = {
NULL, /* linked-list pointer to next*/
"/formtest", /* mountpoint in URL namespace on this vhost */
"protocol-post-demo", /* handler */
NULL, /* default filename if none given */
NULL,
0,
0,
0,
0,
0,
LWSMPRO_CALLBACK, /* origin points to a callback */
9, /* strlen("/formtest"), ie length of the mountpoint */
};
```
Client access to /formtest[anything] will be passed to the callback registered

View file

@ -1,5 +1,5 @@
Generic Sessions Plugin
-----------------------
Notes about generic-sessions Plugin
===================================
Enabling for build
------------------
@ -34,7 +34,7 @@ authenticated as. Everything underneath is managed in generic-sessions.
- admin account (with user-selectable username) is defined in config with a SHA-1 of the password; rest of the accounts are in sqlite3
- user account passwords stored as salted SHA-1 with additional confounder
- user account passwords stored as salted SHA-1 with additional confounder
only stored in the JSON config, not the database
- login, logout, register account + email verification built-in with examples
@ -65,35 +65,33 @@ import that script file in your head section
That's it. An example is below
```
<html>
<head>
<script src="lwsgs.js"></script>
<style>
.body { font-size: 12 }
.gstitle { font-size: 18 }
</style>
</head>
<body style="background-image:url(seats.jpg)">
<table style="width:100%;transition: max-height 2s;">
<tr>
<td style="vertical-align:top;text-align:left;width=200px">
<img src="lwsgs-logo.png">
</td>
<td style="vertical-align:top;float:right">
<div id=lwsgs style="text-align:right;background-color: rgba(255, 255, 255, 0.8);"></div>
</td>
</tr>
</table>
</form>
<script>lwsgs_initial();</script>
</body>
</html>
<html>
<head>
<script src="lwsgs.js"></script>
<style>
.body { font-size: 12 }
.gstitle { font-size: 18 }
</style>
</head>
<body style="background-image:url(seats.jpg)">
<table style="width:100%;transition: max-height 2s;">
<tr>
<td style="vertical-align:top;text-align:left;width=200px">
<img src="lwsgs-logo.png">
</td>
<td style="vertical-align:top;float:right">
<div id=lwsgs style="text-align:right;background-color: rgba(255, 255, 255, 0.8);"></div>
</td>
</tr>
</table>
</form>
<script>lwsgs_initial();</script>
</body>
</html>
```
Overall Flow
------------
@ -124,76 +122,76 @@ Configuration
- b0 is set if you are logged in as a user at all.
- b1 is set if you are logged in with the user configured to be admin
- b2 is set if the account has been verified (the account configured for admin is always verified)
- b3 is set if your session just did the forgot password flow successfully
```
{
# things in here can always be served
"mountpoint": "/lwsgs",
"origin": "file:///usr/share/libwebsockets-test-server/generic-sessions",
"origin": "callback://protocol-lws-messageboard",
"default": "generic-sessions-login-example.html",
"auth-mask": "0",
"interpret": {
".js": "protocol-lws-messageboard"
}
}, {
# things in here can only be served if logged in as a user
"mountpoint": "/lwsgs/needauth",
"origin": "file:///usr/share/libwebsockets-test-server/generic-sessions/needauth",
"origin": "callback://protocol-lws-messageboard",
"default": "generic-sessions-login-example.html",
"auth-mask": "5", # logged in as a verified user
"interpret": {
".js": "protocol-lws-messageboard"
}
}, {
# things in here can only be served if logged in as admin
"mountpoint": "/lwsgs/needadmin",
"origin": "file:///usr/share/libwebsockets-test-server/generic-sessions/needadmin",
"origin": "callback://protocol-lws-messageboard",
"default": "generic-sessions-login-example.html",
"auth-mask": "7", # b2 = verified (by email / or admin), b1 = admin, b0 = logged in with any user name
"interpret": {
".js": "protocol-lws-messageboard"
}
}
{
# things in here can always be served
"mountpoint": "/lwsgs",
"origin": "file:///usr/share/libwebsockets-test-server/generic-sessions",
"origin": "callback://protocol-lws-messageboard",
"default": "generic-sessions-login-example.html",
"auth-mask": "0",
"interpret": {
".js": "protocol-lws-messageboard"
}
}, {
# things in here can only be served if logged in as a user
"mountpoint": "/lwsgs/needauth",
"origin": "file:///usr/share/libwebsockets-test-server/generic-sessions/needauth",
"origin": "callback://protocol-lws-messageboard",
"default": "generic-sessions-login-example.html",
"auth-mask": "5", # logged in as a verified user
"interpret": {
".js": "protocol-lws-messageboard"
}
}, {
# things in here can only be served if logged in as admin
"mountpoint": "/lwsgs/needadmin",
"origin": "file:///usr/share/libwebsockets-test-server/generic-sessions/needadmin",
"origin": "callback://protocol-lws-messageboard",
"default": "generic-sessions-login-example.html",
"auth-mask": "7", # b2 = verified (by email / or admin), b1 = admin, b0 = logged in with any user name
"interpret": {
".js": "protocol-lws-messageboard"
}
}
```
Note that the name of the real application protocol that uses generic-sessions
is used, not generic-sessions itself.
The vhost configures the storage dir, admin credentials and session cookie lifetimes:
```
"ws-protocols": [{
"protocol-generic-sessions": {
"status": "ok",
"admin-user": "admin",
# create the pw hash like this (for the example pw, "jipdocesExunt" )
# $ echo -n "jipdocesExunt" | sha1sum
# 046ce9a9cca769e85798133be06ef30c9c0122c9 -
#
# Obviously ** change this password hash to a secret one before deploying **
#
"admin-password-sha1": "046ce9a9cca769e85798133be06ef30c9c0122c9",
"session-db": "/var/www/sessions/lws.sqlite3",
"timeout-idle-secs": "600",
"timeout-anon-idle-secs": "1200",
"timeout-absolute-secs": "6000",
# the confounder is part of the salted password hashes. If this config
# file is in a 0700 root:root dir, an attacker with apache credentials
# will have to get the confounder out of the process image to even try
# to guess the password hashes.
"confounder": "Change to <=31 chars of junk",
"email-from": "noreply@example.com",
"email-smtp-ip": "127.0.0.1",
"email-expire": "3600",
"email-helo": "myhost.com",
"email-contact-person": "Set Me <real-person@email.com>",
"email-confirm-url-base": "http://localhost:7681/lwsgs"
}
"ws-protocols": [{
"protocol-generic-sessions": {
"status": "ok",
"admin-user": "admin",
# create the pw hash like this (for the example pw, "jipdocesExunt" )
# $ echo -n "jipdocesExunt" | sha1sum
# 046ce9a9cca769e85798133be06ef30c9c0122c9 -
#
# Obviously ** change this password hash to a secret one before deploying **
#
"admin-password-sha1": "046ce9a9cca769e85798133be06ef30c9c0122c9",
"session-db": "/var/www/sessions/lws.sqlite3",
"timeout-idle-secs": "600",
"timeout-anon-idle-secs": "1200",
"timeout-absolute-secs": "6000",
# the confounder is part of the salted password hashes. If this config
# file is in a 0700 root:root dir, an attacker with apache credentials
# will have to get the confounder out of the process image to even try
# to guess the password hashes.
"confounder": "Change to <=31 chars of junk",
"email-from": "noreply@example.com",
"email-smtp-ip": "127.0.0.1",
"email-expire": "3600",
"email-helo": "myhost.com",
"email-contact-person": "Set Me <real-person@email.com>",
"email-confirm-url-base": "http://localhost:7681/lwsgs"
}
```
The email- related settings control generation of automatic emails for
@ -219,11 +217,12 @@ The real protocol that makes use of generic-sessions must also be listed and
any configuration it needs given
```
"protocol-lws-messageboard": {
"status": "ok",
"message-db": "/var/www/sessions/messageboard.sqlite3"
},
"protocol-lws-messageboard": {
"status": "ok",
"message-db": "/var/www/sessions/messageboard.sqlite3"
},
```
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.
@ -244,9 +243,9 @@ You will have to prepare the db directory so it's suitable for the lwsws user to
that usually means apache, eg
```
# mkdir -p /var/www/sessions
# chown root:apache /var/www/sessions
# chmod 770 /var/www/sessions
# mkdir -p /var/www/sessions
# chown root:apache /var/www/sessions
# chmod 770 /var/www/sessions
```
Email configuration
@ -295,11 +294,11 @@ real protocol must allocate that space at runtime, using the pss size
the generic-sessions protocol struct exposes
```
struct per_session_data__myapp {
void *pss_gs;
...
pss->pss_gs = malloc(vhd->gsp->per_session_data_size);
struct per_session_data__myapp {
void *pss_gs;
...
pss->pss_gs = malloc(vhd->gsp->per_session_data_size);
```
The allocation reserved for generic-sessions is then used as user_space when
@ -317,7 +316,6 @@ 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.
```
case LWS_CALLBACK_HTTP_BIND_PROTOCOL:
if (!pss || pss->pss_gs)
@ -353,16 +351,14 @@ 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
```
struct lws_session_info {
char username[32];
char email[100];
char ip[72];
unsigned int mask;
char session[42];
};
```
struct lws_session_info {
char username[32];
char email[100];
char ip[72];
unsigned int mask;
char session[42];
};
```
struct lws_session_info sinfo;
...
vhd->gsp->callback(wsi, LWS_CALLBACK_SESSION_INFO,

View file

@ -1,3 +1,6 @@
Notes about lwsws
=================
Libwebsockets Web Server
------------------------
@ -20,55 +23,49 @@ lwsws uses JSON config files, they're pure JSON but # may be used to turn the re
There is a single file intended for global settings
/etc/lwsws/conf
```
# these are the server global settings
# stuff related to vhosts should go in one
# file per vhost in ../conf.d/
# these are the server global settings
# stuff related to vhosts should go in one
# file per vhost in ../conf.d/
{
"global": {
"uid": "48", # apache user
"gid": "48", # apache user
"count-threads": "1",
"server-string": "myserver v1", # returned in http headers
"init-ssl": "yes"
}
}
{
"global": {
"uid": "48", # apache user
"gid": "48", # apache user
"count-threads": "1",
"server-string": "myserver v1", # returned in http headers
"init-ssl": "yes"
}
}
```
and a config directory intended to take one file per vhost
/etc/lwsws/conf.d/warmcat.com
```
{
"vhosts": [{
"name": "warmcat.com",
"port": "443",
"interface": "eth0", # optional
"host-ssl-key": "/etc/pki/tls/private/warmcat.com.key", # if given enable ssl
"host-ssl-cert": "/etc/pki/tls/certs/warmcat.com.crt",
"host-ssl-ca": "/etc/pki/tls/certs/warmcat.com.cer",
"mounts": [{ # autoserve
"mountpoint": "/",
"origin": "file:///var/www/warmcat.com",
"default": "index.html"
{
"vhosts": [{
"name": "warmcat.com",
"port": "443",
"interface": "eth0", # optional
"host-ssl-key": "/etc/pki/tls/private/warmcat.com.key", # if given enable ssl
"host-ssl-cert": "/etc/pki/tls/certs/warmcat.com.crt",
"host-ssl-ca": "/etc/pki/tls/certs/warmcat.com.cer",
"mounts": [{ # autoserve
"mountpoint": "/",
"origin": "file:///var/www/warmcat.com",
"default": "index.html"
}]
}]
}]
}
}
```
To get started quickly, an example config reproducing the old test server
on port 7681, non-SSL is provided. To set it up
```
# mkdir -p /etc/lwsws/conf.d /var/log/lwsws
# cp ./lwsws/etc-lwsws-conf-EXAMPLE /etc/lwsws/conf
# cp ./lwsws/etc-lwsws-conf.d-localhost-EXAMPLE /etc/lwsws/conf.d/test-server
# sudo lwsws
# mkdir -p /etc/lwsws/conf.d /var/log/lwsws
# cp ./lwsws/etc-lwsws-conf-EXAMPLE /etc/lwsws/conf
# cp ./lwsws/etc-lwsws-conf.d-localhost-EXAMPLE /etc/lwsws/conf.d/test-server
# sudo lwsws
```
Vhosts
------
@ -77,55 +74,54 @@ the connection to a vhost and its vhost-specific SSL keys during SSL
negotiation.
Listing multiple vhosts looks something like this
```
{
"vhosts": [ {
"name": "localhost",
"port": "443",
"host-ssl-key": "/etc/pki/tls/private/libwebsockets.org.key",
"host-ssl-cert": "/etc/pki/tls/certs/libwebsockets.org.crt",
"host-ssl-ca": "/etc/pki/tls/certs/libwebsockets.org.cer",
"mounts": [{
"mountpoint": "/",
"origin": "file:///var/www/libwebsockets.org",
"default": "index.html"
}, {
"mountpoint": "/testserver",
"origin": "file:///usr/local/share/libwebsockets-test-server",
"default": "test.html"
}],
# which protocols are enabled for this vhost, and optional
# vhost-specific config options for the protocol
#
"ws-protocols": [{
"warmcat,timezoom": {
"status": "ok"
}
}]
},
{
"name": "localhost",
"port": "7681",
"host-ssl-key": "/etc/pki/tls/private/libwebsockets.org.key",
"host-ssl-cert": "/etc/pki/tls/certs/libwebsockets.org.crt",
"host-ssl-ca": "/etc/pki/tls/certs/libwebsockets.org.cer",
"mounts": [{
"mountpoint": "/",
"origin": ">https://localhost"
}]
},
{
"name": "localhost",
"port": "80",
"mounts": [{
"mountpoint": "/",
"origin": ">https://localhost"
}]
}
]
}
{
"vhosts": [ {
"name": "localhost",
"port": "443",
"host-ssl-key": "/etc/pki/tls/private/libwebsockets.org.key",
"host-ssl-cert": "/etc/pki/tls/certs/libwebsockets.org.crt",
"host-ssl-ca": "/etc/pki/tls/certs/libwebsockets.org.cer",
"mounts": [{
"mountpoint": "/",
"origin": "file:///var/www/libwebsockets.org",
"default": "index.html"
}, {
"mountpoint": "/testserver",
"origin": "file:///usr/local/share/libwebsockets-test-server",
"default": "test.html"
}],
# which protocols are enabled for this vhost, and optional
# vhost-specific config options for the protocol
#
"ws-protocols": [{
"warmcat,timezoom": {
"status": "ok"
}
}]
},
{
"name": "localhost",
"port": "7681",
"host-ssl-key": "/etc/pki/tls/private/libwebsockets.org.key",
"host-ssl-cert": "/etc/pki/tls/certs/libwebsockets.org.crt",
"host-ssl-ca": "/etc/pki/tls/certs/libwebsockets.org.cer",
"mounts": [{
"mountpoint": "/",
"origin": ">https://localhost"
}]
},
{
"name": "localhost",
"port": "80",
"mounts": [{
"mountpoint": "/",
"origin": ">https://localhost"
}]
}
]
}
```
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 https://localhost
@ -153,14 +149,12 @@ Vhosts by default have available the union of any initial protocols from context
any protocols exposed by plugins.
Vhosts can select which plugins they want to offer and give them per-vhost settings using this syntax
```
"ws-protocols": [{
"warmcat-timezoom": {
"status": "ok"
}
}]
```
"ws-protocols": [{
"warmcat-timezoom": {
"status": "ok"
}
}]
```
The "x":"y" parameters like "status":"ok" are made available to the protocol during its per-vhost
@ -169,15 +163,13 @@ containing the name and value pointers).
To indicate that a protocol should be used when no Protocol: header is sent
by the client, you can use "default": "1"
```
"ws-protocols": [{
"warmcat-timezoom": {
"status": "ok",
"default": "1"
}
}]
```
"ws-protocols": [{
"warmcat-timezoom": {
"status": "ok",
"default": "1"
}
}]
```
@ -214,17 +206,15 @@ Other vhost options
It may be used multiple times and OR's the flags together.
The values are derived from /usr/include/openssl/ssl.h
```
# define SSL_OP_NO_TLSv1_1 0x10000000L
```
```
# define SSL_OP_NO_TLSv1_1 0x10000000L
```
would equate to
```
"`ssl-option-set`": "268435456"
```
"`ssl-option-set`": "268435456"
```
- "`ssl-option-clear'": "<decimal>" Clears the SSL option flag value for the vhost.
It may be used multiple times and OR's the flags together.
@ -239,72 +229,61 @@ Mount protocols are used to control what kind of translation happens
- file:// serve the uri using the remainder of the url past the mountpoint based on the origin directory.
Eg, with this mountpoint
```
{
"mountpoint": "/",
"origin": "file:///var/www/mysite.com",
"default": "/"
}
{
"mountpoint": "/",
"origin": "file:///var/www/mysite.com",
"default": "/"
}
```
The uri /file.jpg would serve /var/www/mysite.com/file.jpg, since / matched.
- ^http:// or ^https:// these cause any url matching the mountpoint to issue a redirect to the origin url
- cgi:// this causes any matching url to be given to the named cgi, eg
```
{
"mountpoint": "/git",
"origin": "cgi:///var/www/cgi-bin/cgit",
"default": "/"
}, {
"mountpoint": "/cgit-data",
"origin": "file:///usr/share/cgit",
"default": "/"
},
{
"mountpoint": "/git",
"origin": "cgi:///var/www/cgi-bin/cgit",
"default": "/"
}, {
"mountpoint": "/cgit-data",
"origin": "file:///usr/share/cgit",
"default": "/"
},
```
would cause the url /git/myrepo to pass "myrepo" to the cgi /var/www/cgi-bin/cgit and send the results to the client.
Note: currently only a fixed set of mimetypes are supported.
Other mount options
-------------------
1) When using a cgi:// protcol origin at a mountpoint, you may also give cgi environment variables specific to the mountpoint like this
```
{
"mountpoint": "/git",
"origin": "cgi:///var/www/cgi-bin/cgit",
"default": "/",
"cgi-env": [{
"CGIT_CONFIG": "/etc/cgitrc/libwebsockets.org"
}]
}
{
"mountpoint": "/git",
"origin": "cgi:///var/www/cgi-bin/cgit",
"default": "/",
"cgi-env": [{
"CGIT_CONFIG": "/etc/cgitrc/libwebsockets.org"
}]
}
```
This allows you to customize one cgi depending on the mountpoint (and / or vhost).
2) It's also possible to set the cgi timeout (in secs) per cgi:// mount, like this
```
"cgi-timeout": "30"
```
3) `callback://` protocol may be used when defining a mount to associate a
named protocol callback with the URL namespace area. For example
```
{
"mountpoint": "/formtest",
"origin": "callback://protocol-post-demo"
}
{
"mountpoint": "/formtest",
"origin": "callback://protocol-post-demo"
}
```
All handling of client access to /formtest[anything] will be passed to the
callback registered to the protocol "protocol-post-demo".
@ -315,24 +294,24 @@ See the related notes in README.coding.md
4) Cache policy of the files in the mount can also be set. If no
options are given, the content is marked uncacheable.
{
"mountpoint": "/",
"origin": "file:///var/www/mysite.com",
"cache-max-age": "60", # seconds
"cache-reuse": "1", # allow reuse at client at all
"cache-revalidate": "1", # check it with server each time
"cache-intermediaries": "1" # allow intermediary caches to hold
}
```
{
"mountpoint": "/",
"origin": "file:///var/www/mysite.com",
"cache-max-age": "60", # seconds
"cache-reuse": "1", # allow reuse at client at all
"cache-revalidate": "1", # check it with server each time
"cache-intermediaries": "1" # allow intermediary caches to hold
}
```
4) You can also define a list of additional mimetypes per-mount
"extra-mimetypes": {
".zip": "application/zip",
".doc": "text/evil"
}
```
"extra-mimetypes": {
".zip": "application/zip",
".doc": "text/evil"
}
```
Plugins
-------
@ -368,13 +347,13 @@ Additional plugin search paths
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
{
"global": {
"plugin-dir": "/usr/local/share/coherent-timeline/plugins"
}
}
```
{
"global": {
"plugin-dir": "/usr/local/share/coherent-timeline/plugins"
}
}
```
lws-server-status plugin
------------------------
@ -382,22 +361,22 @@ lws-server-status plugin
One provided protocol can be used to monitor the server status.
Enable the protocol like this on a vhost's ws-protocols section
"lws-server-status": {
"status": "ok",
"update-ms": "5000"
}
```
"lws-server-status": {
"status": "ok",
"update-ms": "5000"
}
```
"update-ms" is used to control how often updated JSON is sent on a ws link.
And map the provided HTML into the vhost in the mounts section
{
"mountpoint": "/server-status",
"origin": "file:///usr/local/share/libwebsockets-test-server/server-status",
"default": "server-status.html"
}
```
{
"mountpoint": "/server-status",
"origin": "file:///usr/local/share/libwebsockets-test-server/server-status",
"default": "server-status.html"
}
```
You might choose to put it on its own vhost which has "interface": "lo", so it's not
externally visible.
@ -406,19 +385,17 @@ Integration with Systemd
------------------------
lwsws needs a service file like this as `/usr/lib/systemd/system/lwsws.service`
```
[Unit]
Description=Libwebsockets Web Server
After=syslog.target
[Service]
ExecStart=/usr/local/bin/lwsws
StandardError=null
[Install]
WantedBy=multi-user.target
[Unit]
Description=Libwebsockets Web Server
After=syslog.target
[Service]
ExecStart=/usr/local/bin/lwsws
StandardError=null
[Install]
WantedBy=multi-user.target
```
You can find this prepared in `./lwsws/usr-lib-systemd-system-lwsws.service`
@ -429,21 +406,19 @@ Integration with logrotate
For correct operation with logrotate, `/etc/logrotate.d/lwsws` (if that's
where we're putting the logs) should contain
```
/var/log/lwsws/*log {
copytruncate
missingok
notifempty
delaycompress
}
/var/log/lwsws/*log {
copytruncate
missingok
notifempty
delaycompress
}
```
You can find this prepared in `/lwsws/etc-logrotate.d-lwsws`
Prepare the log directory like this
```
sudo mkdir /var/log/lwsws
sudo chmod 700 /var/log/lwsws
sudo mkdir /var/log/lwsws
sudo chmod 700 /var/log/lwsws
```

View file

@ -24,11 +24,8 @@ You can get the latest version of the library from git:
- https://github.com/warmcat/libwebsockets
- https://libwebsockets.org/git
for more information:
Doxygen API docs for master: https://libwebsockets.org/lws-api-doc-master/html/index.html
- [README.build.md](README.build.md) - information on building the library
- [README.coding.md](README.coding.md) - information for writing code using the library
- [README.test-apps.md](README.test-apps.md) - information about the test apps built with the library
After libwebsockets 1.3, tags will be signed using a key corresponding to this public key

View file

@ -1,10 +1,13 @@
Notes about lws test apps
=========================
Testing server with a browser
-----------------------------
If you run [libwebsockets-test-server](test-server/test-server.c) and point your browser
(eg, Chrome) to
http://127.0.0.1:7681
http://127.0.0.1:7681
It will fetch a script in the form of `test.html`, and then run the
script in there on the browser to open a websocket connection.
@ -26,11 +29,9 @@ of the master process, and deletes this file when the master process
terminates.
To stop the daemon, do
```bash
$ kill `cat /tmp/.lwsts-lock`
```
$ kill cat /tmp/.lwsts-lock
```
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.
@ -42,15 +43,13 @@ Using SSL on the server side
----------------------------
To test it using SSL/WSS, just run the test server with
```bash
$ libwebsockets-test-server --ssl
```
$ libwebsockets-test-server --ssl
```
and use the URL
https://127.0.0.1:7681
```
https://127.0.0.1:7681
```
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
@ -68,8 +67,8 @@ Testing websocket client support
If you run the test server as described above, you can also
connect to it using the test client as well as a browser.
```bash
$ libwebsockets-test-client localhost
```
$ libwebsockets-test-client localhost
```
will by default connect to the test server on localhost:7681
@ -80,8 +79,8 @@ same time you will be able to see the circles being drawn.
The test client supports SSL too, use
```bash
$ libwebsockets-test-client localhost --ssl -s
```
$ libwebsockets-test-client localhost --ssl -s
```
the -s tells it to accept the default selfsigned cert from the server,
@ -110,24 +109,20 @@ Testing simple echo
You can test against `echo.websockets.org` as a sanity test like
this (the client connects to port `80` by default):
```bash
$ libwebsockets-test-echo --client echo.websocket.org
```
$ libwebsockets-test-echo --client echo.websocket.org
```
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
```bash
$ libwebsockets-test-echo
```
$ libwebsockets-test-echo
```
and do the echo test against the local echo server
```bash
$ libwebsockets-test-echo --client localhost --port 7681
```
$ libwebsockets-test-echo --client localhost --port 7681
```
If you add the `--ssl` switch to both the client and server, you can also test
with an encrypted link.
@ -136,11 +131,9 @@ Testing SSL on the client side
------------------------------
To test SSL/WSS client action, just run the client test with
```bash
$ libwebsockets-test-client localhost --ssl
```
$ libwebsockets-test-client localhost --ssl
```
By default the client test applet is set to accept selfsigned
certificates used by the test server, this is indicated by the
`use_ssl` var being set to `2`. Set it to `1` to reject any server
@ -151,28 +144,26 @@ Using the websocket ping utility
--------------------------------
libwebsockets-test-ping connects as a client to a remote
websocket server using 04 protocol and pings it like the
websocket server and pings it like the
normal unix ping utility.
```bash
$ libwebsockets-test-ping localhost
handshake OK for protocol lws-mirror-protocol
Websocket PING localhost.localdomain (127.0.0.1) 64 bytes of data.
64 bytes from localhost: req=1 time=0.1ms
64 bytes from localhost: req=2 time=0.1ms
64 bytes from localhost: req=3 time=0.1ms
64 bytes from localhost: req=4 time=0.2ms
64 bytes from localhost: req=5 time=0.1ms
64 bytes from localhost: req=6 time=0.2ms
64 bytes from localhost: req=7 time=0.2ms
64 bytes from localhost: req=8 time=0.1ms
^C
--- localhost.localdomain websocket ping statistics ---
8 packets transmitted, 8 received, 0% packet loss, time 7458ms
rtt min/avg/max = 0.110/0.185/0.218 ms
$
```
$ libwebsockets-test-ping localhost
handshake OK for protocol lws-mirror-protocol
Websocket PING localhost.localdomain (127.0.0.1) 64 bytes of data.
64 bytes from localhost: req=1 time=0.1ms
64 bytes from localhost: req=2 time=0.1ms
64 bytes from localhost: req=3 time=0.1ms
64 bytes from localhost: req=4 time=0.2ms
64 bytes from localhost: req=5 time=0.1ms
64 bytes from localhost: req=6 time=0.2ms
64 bytes from localhost: req=7 time=0.2ms
64 bytes from localhost: req=8 time=0.1ms
^C
--- localhost.localdomain websocket ping statistics ---
8 packets transmitted, 8 received, 0% packet loss, time 7458ms
rtt min/avg/max = 0.110/0.185/0.218 ms
$
```
By default it sends 64 byte payload packets using the 04
PING packet opcode type. You can change the payload size
using the `-s=` flag, up to a maximum of 125 mandated by the
@ -200,41 +191,37 @@ Fraggle test app
----------------
By default it runs in server mode
```bash
$ libwebsockets-test-fraggle
libwebsockets test fraggle
(C) Copyright 2010-2011 Andy Green <andy@warmcat.com> licensed under LGPL2.1
Compiled with SSL support, not using it
Listening on port 7681
server sees client connect
accepted v06 connection
Spamming 360 random fragments
Spamming session over, len = 371913. sum = 0x2D3C0AE
Spamming 895 random fragments
Spamming session over, len = 875970. sum = 0x6A74DA1
...
```
$ libwebsockets-test-fraggle
libwebsockets test fraggle
(C) Copyright 2010-2011 Andy Green <andy@warmcat.com> licensed under LGPL2.1
Compiled with SSL support, not using it
Listening on port 7681
server sees client connect
accepted v06 connection
Spamming 360 random fragments
Spamming session over, len = 371913. sum = 0x2D3C0AE
Spamming 895 random fragments
Spamming session over, len = 875970. sum = 0x6A74DA1
...
```
You need to run a second session in client mode, you have to
give the `-c` switch and the server address at least:
```bash
$ libwebsockets-test-fraggle -c localhost
libwebsockets test fraggle
(C) Copyright 2010-2011 Andy Green <andy@warmcat.com> licensed under LGPL2.1
Client mode
Connecting to localhost:7681
denied deflate-stream extension
handshake OK for protocol fraggle-protocol
client connects to server
EOM received 371913 correctly from 360 fragments
EOM received 875970 correctly from 895 fragments
EOM received 247140 correctly from 258 fragments
EOM received 695451 correctly from 692 fragments
...
```
$ libwebsockets-test-fraggle -c localhost
libwebsockets test fraggle
(C) Copyright 2010-2011 Andy Green <andy@warmcat.com> licensed under LGPL2.1
Client mode
Connecting to localhost:7681
denied deflate-stream extension
handshake OK for protocol fraggle-protocol
client connects to server
EOM received 371913 correctly from 360 fragments
EOM received 875970 correctly from 895 fragments
EOM received 247140 correctly from 258 fragments
EOM received 695451 correctly from 692 fragments
...
```
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.
@ -252,12 +239,10 @@ connection code for both `ws://` and `wss://`. It doesn't support
authentication.
You use it like this
```bash
$ export http_proxy=myproxy.com:3128
$ libwebsockets-test-client someserver.com
```
$ export http_proxy=myproxy.com:3128
$ libwebsockets-test-client someserver.com
```
debug logging
-------------

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

@ -0,0 +1,118 @@
<!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: Data Structures</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('annotated.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="headertitle">
<div class="title">Data Structures</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock">Here are the data structures with brief descriptions:</div><div class="directory">
<table class="directory">
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__cgi__args.html" target="_self">lws_cgi_args</a></td><td class="desc"></td></tr>
<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__client__connect__info.html" target="_self">lws_client_connect_info</a></td><td class="desc"></td></tr>
<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classlws__conn.html" target="_self">lws_conn</a></td><td class="desc"></td></tr>
<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classlws__conn__listener.html" target="_self">lws_conn_listener</a></td><td class="desc"></td></tr>
<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__context__creation__info.html" target="_self">lws_context_creation_info</a></td><td class="desc"></td></tr>
<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__email.html" target="_self">lws_email</a></td><td class="desc"></td></tr>
<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__ext__option__arg.html" target="_self">lws_ext_option_arg</a></td><td class="desc"></td></tr>
<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__ext__options.html" target="_self">lws_ext_options</a></td><td class="desc"></td></tr>
<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__extension.html" target="_self">lws_extension</a></td><td class="desc"></td></tr>
<tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__gs__event__args.html" target="_self">lws_gs_event_args</a></td><td class="desc"></td></tr>
<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__http__mount.html" target="_self">lws_http_mount</a></td><td class="desc"></td></tr>
<tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__plat__file__ops.html" target="_self">lws_plat_file_ops</a></td><td class="desc"></td></tr>
<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__plugin.html" target="_self">lws_plugin</a></td><td class="desc"></td></tr>
<tr id="row_13_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__plugin__capability.html" target="_self">lws_plugin_capability</a></td><td class="desc"></td></tr>
<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__polarssl__context.html" target="_self">lws_polarssl_context</a></td><td class="desc"></td></tr>
<tr id="row_15_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__pollargs.html" target="_self">lws_pollargs</a></td><td class="desc"></td></tr>
<tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__pollfd.html" target="_self">lws_pollfd</a></td><td class="desc"></td></tr>
<tr id="row_17_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__process__html__args.html" target="_self">lws_process_html_args</a></td><td class="desc"></td></tr>
<tr id="row_18_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__process__html__state.html" target="_self">lws_process_html_state</a></td><td class="desc"></td></tr>
<tr id="row_19_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__protocol__vhost__options.html" target="_self">lws_protocol_vhost_options</a></td><td class="desc"></td></tr>
<tr id="row_20_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__protocols.html" target="_self">lws_protocols</a></td><td class="desc"></td></tr>
<tr id="row_21_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__session__info.html" target="_self">lws_session_info</a></td><td class="desc"></td></tr>
<tr id="row_22_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__token__limits.html" target="_self">lws_token_limits</a></td><td class="desc"></td></tr>
<tr id="row_23_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlws__tokens.html" target="_self">lws_tokens</a></td><td class="desc"></td></tr>
<tr id="row_24_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlwsgw__hash.html" target="_self">lwsgw_hash</a></td><td class="desc"></td></tr>
<tr id="row_25_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structlwsgw__hash__bin.html" target="_self">lwsgw_hash_bin</a></td><td class="desc"></td></tr>
<tr id="row_26_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structpollfd.html" target="_self">pollfd</a></td><td class="desc"></td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

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

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

BIN
doc/html/arrowdown.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

BIN
doc/html/arrowright.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 B

BIN
doc/html/bc_s.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 676 B

BIN
doc/html/bdwn.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 B

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

@ -0,0 +1,101 @@
<!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: Data Structure Index</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('classes.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="headertitle">
<div class="title">Data Structure Index</div> </div>
</div><!--header-->
<div class="contents">
<div class="qindex"><a class="qindex" href="#letter_L">L</a>&#160;|&#160;<a class="qindex" href="#letter_P">P</a></div>
<table class="classindex">
<tr><td rowspan="2" valign="bottom"><a name="letter_l"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;l&#160;&#160;</div></td></tr></table>
</td><td valign="top"><a class="el" href="structlws__email.html">lws_email</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__plugin.html">lws_plugin</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__protocol__vhost__options.html">lws_protocol_vhost_options</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_p"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;p&#160;&#160;</div></td></tr></table>
</td></tr>
<tr><td valign="top"><a class="el" href="structlws__ext__option__arg.html">lws_ext_option_arg</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__plugin__capability.html">lws_plugin_capability</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__protocols.html">lws_protocols</a>&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="structlws__cgi__args.html">lws_cgi_args</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__ext__options.html">lws_ext_options</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__polarssl__context.html">lws_polarssl_context</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__session__info.html">lws_session_info</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structpollfd.html">pollfd</a>&#160;&#160;&#160;</td></tr>
<tr><td valign="top"><a class="el" href="structlws__client__connect__info.html">lws_client_connect_info</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__extension.html">lws_extension</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__pollargs.html">lws_pollargs</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__token__limits.html">lws_token_limits</a>&#160;&#160;&#160;</td><td></td></tr>
<tr><td valign="top"><a class="el" href="classlws__conn.html">lws_conn</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__gs__event__args.html">lws_gs_event_args</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__pollfd.html">lws_pollfd</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__tokens.html">lws_tokens</a>&#160;&#160;&#160;</td><td></td></tr>
<tr><td valign="top"><a class="el" href="classlws__conn__listener.html">lws_conn_listener</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__http__mount.html">lws_http_mount</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__process__html__args.html">lws_process_html_args</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlwsgw__hash.html">lwsgw_hash</a>&#160;&#160;&#160;</td><td></td></tr>
<tr><td valign="top"><a class="el" href="structlws__context__creation__info.html">lws_context_creation_info</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__plat__file__ops.html">lws_plat_file_ops</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlws__process__html__state.html">lws_process_html_state</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structlwsgw__hash__bin.html">lwsgw_hash_bin</a>&#160;&#160;&#160;</td><td></td></tr>
<tr><td></td><td></td><td></td><td></td><td></td></tr>
</table>
<div class="qindex"><a class="qindex" href="#letter_L">L</a>&#160;|&#160;<a class="qindex" href="#letter_P">P</a></div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,143 @@
<!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: lws_conn Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('classlws__conn.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pub-attribs">Data Fields</a> </div>
<div class="headertitle">
<div class="title">lws_conn Class Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="dynheader">
Inheritance diagram for lws_conn:</div>
<div class="dyncontent">
<div class="center">
<img src="classlws__conn.png" usemap="#lws_5Fconn_map" alt=""/>
<map id="lws_5Fconn_map" name="lws_conn_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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
char&#160;</td><td class="memItemRight" valign="bottom"><b>awaiting_on_writeable</b></td></tr>
<tr class="separator:a5226010afdf5421f279454e5cbb282a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>lib/<a class="el" href="libwebsockets_8h_source.html">libwebsockets.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="classlws__conn.html">lws_conn</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

View file

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

BIN
doc/html/classlws__conn.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 480 B

View file

@ -0,0 +1,265 @@
<!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: lws_conn_listener Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('classlws__conn__listener.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pub-attribs">Data Fields</a> &#124;
<a href="#pro-methods">Protected Member Functions</a> </div>
<div class="headertitle">
<div class="title">lws_conn_listener Class Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="dynheader">
Inheritance diagram for lws_conn_listener:</div>
<div class="dyncontent">
<div class="center">
<img src="classlws__conn__listener.png" usemap="#lws_5Fconn_5Flistener_map" alt=""/>
<map id="lws_5Fconn_5Flistener_map" name="lws_conn_listener_map">
<area href="classlws__conn.html" alt="lws_conn" shape="rect" coords="0,0,113,24"/>
</map>
</div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a3c19c314f2ea2b758407b4041e4c4010"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classlws__conn__listener.html#a3c19c314f2ea2b758407b4041e4c4010">start</a> (const uint16_t port)</td></tr>
<tr class="separator:a3c19c314f2ea2b758407b4041e4c4010"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
Data Fields</h2></td></tr>
<tr class="memitem:aa7076f8965bb9df268798fd9a0283374"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa7076f8965bb9df268798fd9a0283374"></a>
TCPListener&#160;</td><td class="memItemRight" valign="bottom"><b>srv</b></td></tr>
<tr class="separator:aa7076f8965bb9df268798fd9a0283374"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
Protected Member Functions</h2></td></tr>
<tr class="memitem:ab3bc839797ba14554ac70ad09fd155c7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classlws__conn__listener.html#ab3bc839797ba14554ac70ad09fd155c7">onRX</a> (Socket *s)</td></tr>
<tr class="separator:ab3bc839797ba14554ac70ad09fd155c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a271ac4f8ad5770b3bc96cce5b265b72c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classlws__conn__listener.html#a271ac4f8ad5770b3bc96cce5b265b72c">onError</a> (Socket *s, socket_error_t err)</td></tr>
<tr class="separator:a271ac4f8ad5770b3bc96cce5b265b72c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab432a456c3a961ec562e06141897806b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classlws__conn__listener.html#ab432a456c3a961ec562e06141897806b">onIncoming</a> (TCPListener *s, void *impl)</td></tr>
<tr class="separator:ab432a456c3a961ec562e06141897806b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aab3c7bf550a8f15d20f1e093125c2e60"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classlws__conn__listener.html#aab3c7bf550a8f15d20f1e093125c2e60">onDisconnect</a> (TCPStream *s)</td></tr>
<tr class="separator:aab3c7bf550a8f15d20f1e093125c2e60"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Member Function Documentation</h2>
<a class="anchor" id="aab3c7bf550a8f15d20f1e093125c2e60"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void lws_conn_listener::onDisconnect </td>
<td>(</td>
<td class="paramtype">TCPStream *&#160;</td>
<td class="paramname"><em>s</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>disconnection </p>
</div>
</div>
<a class="anchor" id="a271ac4f8ad5770b3bc96cce5b265b72c"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void lws_conn_listener::onError </td>
<td>(</td>
<td class="paramtype">Socket *&#160;</td>
<td class="paramname"><em>s</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">socket_error_t&#160;</td>
<td class="paramname"><em>err</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>if error occurs </p>
</div>
</div>
<a class="anchor" id="ab432a456c3a961ec562e06141897806b"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void lws_conn_listener::onIncoming </td>
<td>(</td>
<td class="paramtype">TCPListener *&#160;</td>
<td class="paramname"><em>s</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>impl</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>new connection </p>
</div>
</div>
<a class="anchor" id="ab3bc839797ba14554ac70ad09fd155c7"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void lws_conn_listener::onRX </td>
<td>(</td>
<td class="paramtype">Socket *&#160;</td>
<td class="paramname"><em>s</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>incoming data ready </p>
</div>
</div>
<a class="anchor" id="a3c19c314f2ea2b758407b4041e4c4010"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lws_conn_listener::start </td>
<td>(</td>
<td class="paramtype">const uint16_t&#160;</td>
<td class="paramname"><em>port</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>start listening </p>
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>lib/<a class="el" href="libwebsockets_8h_source.html">libwebsockets.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="classlws__conn__listener.html">lws_conn_listener</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

View file

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 477 B

BIN
doc/html/closed.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 B

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

@ -0,0 +1,87 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>libwebsockets: Deprecated List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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('deprecated.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="headertitle">
<div class="title">Deprecated List </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><dl class="reflist">
<dt><a class="anchor" id="_deprecated000002"></a>Global <a class="el" href="group__client.html#ga4af0a20108a95e8b6d94dd4d80055ff3">lws_client_connect</a> (struct lws_context *clients, const char *address, int port, int ssl_connection, const char *path, const char *host, const char *origin, const char *protocol, int ietf_version_or_minus_one) LWS_WARN_DEPRECATED</dt>
<dd>DEPRECATED use lws_client_connect_via_info </dd>
<dt><a class="anchor" id="_deprecated000003"></a>Global <a class="el" href="group__client.html#gac6a8558b4410961a880241c2ac1271e2">lws_client_connect_extended</a> (struct lws_context *clients, const char *address, int port, int ssl_connection, const char *path, const char *host, const char *origin, const char *protocol, int ietf_version_or_minus_one, void *userdata) LWS_WARN_DEPRECATED</dt>
<dd>DEPRECATED use lws_client_connect_via_info </dd>
<dt><a class="anchor" id="_deprecated000001"></a>Global <a class="el" href="group__context-and-vhost.html#ga8db03e19a372e34ac25cf21af894a02c">lws_vhost_get</a> (struct lws *wsi) LWS_WARN_DEPRECATED</dt>
<dd>deprecated: use <a class="el" href="group__context-and-vhost.html#ga06e77ce2916f8bc9826ef8d9d68e3932">lws_get_vhost()</a> </dd>
</dl>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,92 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>libwebsockets: lib Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('dir_97aefd0d527b934f1d99a682da8fe6a9.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="headertitle">
<div class="title">lib Directory Reference</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
Files</h2></td></tr>
<tr class="memitem:libwebsockets_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="libwebsockets_8h.html">libwebsockets.h</a> <a href="libwebsockets_8h_source.html">[code]</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_97aefd0d527b934f1d99a682da8fe6a9.html">lib</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

View file

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

BIN
doc/html/doc.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 746 B

1475
doc/html/doxygen.css Normal file

File diff suppressed because it is too large Load diff

BIN
doc/html/doxygen.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

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

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

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

@ -0,0 +1,91 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>libwebsockets: File List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('files.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="headertitle">
<div class="title">File List</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock">Here is a list of all documented files with brief descriptions:</div><div class="directory">
<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span id="img_0_" class="iconfopen" onclick="toggleFolder('0_')">&#160;</span><a class="el" href="dir_97aefd0d527b934f1d99a682da8fe6a9.html" target="_self">lib</a></td><td class="desc"></td></tr>
<tr id="row_0_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="libwebsockets_8h_source.html"><span class="icondoc"></span></a><a class="el" href="libwebsockets_8h.html" target="_self">libwebsockets.h</a></td><td class="desc"></td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

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

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

BIN
doc/html/folderclosed.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 616 B

BIN
doc/html/folderopen.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 597 B

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

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

View file

@ -0,0 +1,107 @@
<!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: Data Fields - Functions</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('functions_func.html','');});
</script>
<div id="doc-content">
<div class="contents">
&#160;<ul>
<li>onDisconnect()
: <a class="el" href="classlws__conn__listener.html#aab3c7bf550a8f15d20f1e093125c2e60">lws_conn_listener</a>
</li>
<li>onError()
: <a class="el" href="classlws__conn__listener.html#a271ac4f8ad5770b3bc96cce5b265b72c">lws_conn_listener</a>
</li>
<li>onIncoming()
: <a class="el" href="classlws__conn__listener.html#ab432a456c3a961ec562e06141897806b">lws_conn_listener</a>
</li>
<li>onRX()
: <a class="el" href="classlws__conn__listener.html#ab3bc839797ba14554ac70ad09fd155c7">lws_conn_listener</a>
</li>
<li>start()
: <a class="el" href="classlws__conn__listener.html#a3c19c314f2ea2b758407b4041e4c4010">lws_conn_listener</a>
</li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

View file

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

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

@ -0,0 +1,109 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>libwebsockets: Globals</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('globals.html','');});
</script>
<div id="doc-content">
<div class="contents">
<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
<li>EXTARG_DEC
: <a class="el" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea1c86adf924c8786a12bee9687094673e">libwebsockets.h</a>
</li>
<li>EXTARG_NONE
: <a class="el" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89eaabcf56c456c1ff6e81dc82586a16f14c">libwebsockets.h</a>
</li>
<li>EXTARG_OPT_DEC
: <a class="el" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea5265abe3e1c3f64412f2affe7bffd880">libwebsockets.h</a>
</li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

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

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

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

@ -0,0 +1,122 @@
<!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: Globals</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('globals_enum.html','');});
</script>
<div id="doc-content">
<div class="contents">
&#160;<ul>
<li>lws_callback_reasons
: <a class="el" href="group__usercb.html#gad62860e19975ba4c4af401c3cdb6abf7">libwebsockets.h</a>
</li>
<li>lws_close_status
: <a class="el" href="group__wsclose.html#gae399c571df32ba532c0ca67da9284985">libwebsockets.h</a>
</li>
<li>lws_context_options
: <a class="el" href="group__context-and-vhost.html#ga41c2d763f78cc248df3b9f8645dbd2a5">libwebsockets.h</a>
</li>
<li>lws_ext_options_types
: <a class="el" href="group__extensions.html#gacc9f55936dc165257a2e1f7d47bce89e">libwebsockets.h</a>
</li>
<li>lws_gs_event
: <a class="el" href="group__generic-sessions.html#gaa93946b3d921072209d5cd8cdfa5332e">libwebsockets.h</a>
</li>
<li>lws_mount_protocols
: <a class="el" href="group__vhost-mounts.html#ga31eca18e50cb4357480f2fcad36ff437">libwebsockets.h</a>
</li>
<li>lws_spa_fileupload_states
: <a class="el" href="group__form-parsing.html#ga41a74a822771d3dce89751aa3bce28ae">libwebsockets.h</a>
</li>
<li>lws_write_protocol
: <a class="el" href="group__sending-data.html#ga98b099cf8c1c7e38ad78501f270e193d">libwebsockets.h</a>
</li>
<li>lwsgs_auth_bits
: <a class="el" href="group__generic-sessions.html#ga7c2dc7bfb4ccb91c5d771f9e9ea237e1">libwebsockets.h</a>
</li>
<li>lwsgs_smtp_states
: <a class="el" href="group__smtp.html#ga116be79bf44f9dc2a97f46e051fe4dc0">libwebsockets.h</a>
</li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

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

@ -0,0 +1,419 @@
<!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: Globals</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('globals_eval.html','');});
</script>
<div id="doc-content">
<div class="contents">
&#160;
<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
<li>EXTARG_DEC
: <a class="el" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea1c86adf924c8786a12bee9687094673e">libwebsockets.h</a>
</li>
<li>EXTARG_NONE
: <a class="el" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89eaabcf56c456c1ff6e81dc82586a16f14c">libwebsockets.h</a>
</li>
<li>EXTARG_OPT_DEC
: <a class="el" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea5265abe3e1c3f64412f2affe7bffd880">libwebsockets.h</a>
</li>
</ul>
<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
<li>LGSSMTP_CONNECTED
: <a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d">libwebsockets.h</a>
</li>
<li>LGSSMTP_CONNECTING
: <a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933">libwebsockets.h</a>
</li>
<li>LGSSMTP_IDLE
: <a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c">libwebsockets.h</a>
</li>
<li>LGSSMTP_SENT_BODY
: <a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69">libwebsockets.h</a>
</li>
<li>LGSSMTP_SENT_DATA
: <a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14">libwebsockets.h</a>
</li>
<li>LGSSMTP_SENT_FROM
: <a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab">libwebsockets.h</a>
</li>
<li>LGSSMTP_SENT_HELO
: <a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad">libwebsockets.h</a>
</li>
<li>LGSSMTP_SENT_QUIT
: <a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5">libwebsockets.h</a>
</li>
<li>LGSSMTP_SENT_TO
: <a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_ADD_POLL_FD
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ab69783a9fbf2ca71ad70706bda77b412">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CHANGE_MODE_POLL_FD
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa87d2e82fffa42c3680c7403ef94216e">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a909cc2a7018864b0b71abacc4058fd8f">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a1ce5b22039ca37ee224d00047596ea46">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLIENT_CONNECTION_ERROR
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad8c6207b0c4e732f3d507f0fb79370e8">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLIENT_ESTABLISHED
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7e12418eec9bce85735e6460176ab604">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa536e574a642ff3ab9e12bff7ba2c6a2">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLIENT_RECEIVE
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7abbbe7a0a67c5866ca9109d46823fc5b1">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLIENT_RECEIVE_PONG
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a136a7cec11c3afd13245623bd84e76c9">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLIENT_WRITEABLE
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8e8b2e6dbeac76d8d126947d2166a514">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLOSED
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a48a9590e5e18c7920282e094a0bfd9d8">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CLOSED_HTTP
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a838b18d255c1b94a533287ba302a2eba">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_CONFIRM_EXTENSION_OKAY
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a390da3639296660a78cc1a5dcb19037e">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_DEL_POLL_FD
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a1df60f314710236f9b53efbf468da768">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_ESTABLISHED
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a24d39bf1cfc0bad9d92da9ac1717e439">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_FILTER_HTTP_CONNECTION
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a75199176c82c1a56e4a6bbf1cc30c12c">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_FILTER_NETWORK_CONNECTION
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a026502768778b8d79d62dd0fe4375fc6">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7accd8753672d319a30b4b4c2fb775e84d">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_GET_THREAD_ID
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7adfb41c92e2522712207ef7f2462b5e34">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_HTTP
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae8d1de0bb56e03aa58cb4d44b18edd2e">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_HTTP_BODY
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac4c68e00efcf1ff7bda7ada462aff8ae">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_HTTP_BODY_COMPLETION
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2fce9a8608220f32abbf1422a5498804">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_HTTP_FILE_COMPLETION
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa627548e1296e654fcfab463ec3c9587">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_HTTP_WRITEABLE
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afedadfb3cde37a8ea4c84ed535f26d09">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_LOCK_POLL
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8909732521d379179003d97ab7a05428">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_OPENSSL_CONTEXT_REQUIRES_PRIVATE_KEY
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa46f705dcf97502e95627ffde614f98b">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_OPENSSL_LOAD_EXTRA_CLIENT_VERIFY_CERTS
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae4986291b7a810fe290851d73bebeb1c">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a06006e98d27e1e884364d88317f83493">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_OPENSSL_PERFORM_CLIENT_CERT_VERIFICATION
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae5ad65d779b7eab32ab67ceff91a3bac">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_PROTOCOL_DESTROY
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a54269ca88508e6efd3afdb9d360a9caa">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_PROTOCOL_INIT
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad5d34583e3556e153eda91620b48cc49">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_RECEIVE
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a492c1b1c0ac0ed980042ee732fe2990c">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_RECEIVE_PONG
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2db02fc6e1c17ab62b52109d1aa9d738">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae9734e1d7af2abf291665ce9e4a728d3">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_SERVER_WRITEABLE
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7ec8e2e9557ee02a4fc9f7dec7e2babc">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_UNLOCK_POLL
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a0e9e3dd667c0c42cdbe1a3d921f4fd79">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_USER
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a982579753e70e59a9ea13ce628ac891a">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_WS_PEER_INITIATED_CLOSE
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac3fc5bbb55e69f90396526287ee84a51">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_WSI_CREATE
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afd8fd77a1cc9405fcb4f26915d7f2d01">libwebsockets.h</a>
</li>
<li>LWS_CALLBACK_WSI_DESTROY
: <a class="el" href="group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aca834dc035b7f7486f9ce40fde54fe9e">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_ABNORMAL_CLOSE
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a68b3d34bebd88547dcfa5cadba0acd6c">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_EXTENSION_REQUIRED
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_GOINGAWAY
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_INVALID_PAYLOAD
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_MESSAGE_TOO_LARGE
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_NO_STATUS
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a4b8a3b7ce6f731e5248e4b0fb64a5044">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_NORMAL
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_POLICY_VIOLATION
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_PROTOCOL_ERR
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_RESERVED
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_TLS_FAILURE
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_UNACCEPTABLE_OPCODE
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a462c99b05459df700919cfd3f53c8276">libwebsockets.h</a>
</li>
<li>LWS_CLOSE_STATUS_UNEXPECTED_CONDITION
: <a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a1cc4562d05cba52a6dfa0697a65ade0d">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_DISABLE_IPV6
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a34ab36e68c0d593b6f19b8d5ef1240a9">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_DISABLE_OS_CA_CERTS
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a4933347a821e73c3f1e13fb6bfc7ad93">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a7fed6a527c8d5e0acac1b4179644583a">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_EXPLICIT_VHOSTS
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5accc9d0d11d1124a21659586164b0962e">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_IPV6_V6ONLY_MODIFY
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5af62887536e25e053e68741006dba46d8">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_IPV6_V6ONLY_VALUE
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aca5d42820b65eac5618ec3f0bd8a1160">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_LIBEV
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a273d9975675130de0c6dc937dde7c8a6">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_LIBUV
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aff121db04a10cf8b2c5df9d4f2b89f1e">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_PEER_CERT_NOT_REQUIRED
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5ac56a8a6590e74a8016d0fae09fb404fc">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a4832187186c4d130c68051214cd42ada">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a274ed462a1a9239eb6ddf9007f5b7092">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_SKIP_SERVER_CANONICAL_NAME
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a6582c985ee0ceaadc1d277030eae2d7c">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_SSL_ECDH
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a1b2f8bde0f62adc7ebe81b2043f34c0c">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_STS
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5ac962efd35abf6c402f9fb14aa14f5016">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_UNIX_SOCK
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5a9637e9001d8c8b2521086bcafbd8a941">libwebsockets.h</a>
</li>
<li>LWS_SERVER_OPTION_VALIDATE_UTF8
: <a class="el" href="group__context-and-vhost.html#gga41c2d763f78cc248df3b9f8645dbd2a5aa0158b4e85420811e6b0f1378c6ded0f">libwebsockets.h</a>
</li>
<li>LWS_UFS_CONTENT
: <a class="el" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aead3a958e7719ac273c3ba4f684f00c87f">libwebsockets.h</a>
</li>
<li>LWS_UFS_FINAL_CONTENT
: <a class="el" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea6ce2a55a4c3695cdb640c893d95bd3a7">libwebsockets.h</a>
</li>
<li>LWS_UFS_OPEN
: <a class="el" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83">libwebsockets.h</a>
</li>
<li>LWS_WRITE_BINARY
: <a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2">libwebsockets.h</a>
</li>
<li>LWS_WRITE_CLIENT_IGNORE_XOR_MASK
: <a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da220d8e8652d9b97fb66e476e2a60ffce">libwebsockets.h</a>
</li>
<li>LWS_WRITE_CONTINUATION
: <a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da10047eb05b5e1c298151dc47a5b44826">libwebsockets.h</a>
</li>
<li>LWS_WRITE_HTTP
: <a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e">libwebsockets.h</a>
</li>
<li>LWS_WRITE_HTTP_HEADERS
: <a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dafe5a38e940ce56708ac814627e9c0917">libwebsockets.h</a>
</li>
<li>LWS_WRITE_NO_FIN
: <a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3">libwebsockets.h</a>
</li>
<li>LWS_WRITE_TEXT
: <a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da80e8f169fda236c56bfb795ed62903db">libwebsockets.h</a>
</li>
<li>LWSGS_AUTH_ADMIN
: <a class="el" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a0657a9e846814781b128c397fe4b10bf">libwebsockets.h</a>
</li>
<li>LWSGS_AUTH_FORGOT_FLOW
: <a class="el" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a2cd8fb86e3b85c106e7711c03f0ddd0a">libwebsockets.h</a>
</li>
<li>LWSGS_AUTH_LOGGED_IN
: <a class="el" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a81e63075115dedd150265d81b8f7fa57">libwebsockets.h</a>
</li>
<li>LWSGS_AUTH_VERIFIED
: <a class="el" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a5a607e4668d20cadada62c4b8007f887">libwebsockets.h</a>
</li>
<li>LWSGSE_CREATED
: <a class="el" href="group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ea596010a165bf13473c5eea3a34cd4308">libwebsockets.h</a>
</li>
<li>LWSGSE_DELETED
: <a class="el" href="group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ead908cdc5689c5d22c9d3c8934e94dcde">libwebsockets.h</a>
</li>
<li>LWSMPRO_CALLBACK
: <a class="el" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da">libwebsockets.h</a>
</li>
<li>LWSMPRO_CGI
: <a class="el" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69">libwebsockets.h</a>
</li>
<li>LWSMPRO_FILE
: <a class="el" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2">libwebsockets.h</a>
</li>
<li>LWSMPRO_HTTP
: <a class="el" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0">libwebsockets.h</a>
</li>
<li>LWSMPRO_HTTPS
: <a class="el" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1">libwebsockets.h</a>
</li>
<li>LWSMPRO_REDIR_HTTP
: <a class="el" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970">libwebsockets.h</a>
</li>
<li>LWSMPRO_REDIR_HTTPS
: <a class="el" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67">libwebsockets.h</a>
</li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

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

@ -0,0 +1,423 @@
<!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: Globals</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('globals_func.html','');});
</script>
<div id="doc-content">
<div class="contents">
&#160;
<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
<li>lws_add_http_header_by_name()
: <a class="el" href="group__HTTP-headers-create.html#ga2b36bf44405755ff51c1939303b995a8">libwebsockets.h</a>
</li>
<li>lws_add_http_header_by_token()
: <a class="el" href="group__HTTP-headers-create.html#gaf74adb761b22566ad70004882712dce1">libwebsockets.h</a>
</li>
<li>lws_add_http_header_content_length()
: <a class="el" href="group__HTTP-headers-create.html#gacc76a5babcb4dce1b01b1955aa7a2faf">libwebsockets.h</a>
</li>
<li>lws_add_http_header_status()
: <a class="el" href="group__HTTP-headers-create.html#ga29b7d6d2ddfdbaff3d8b607e7e3151b6">libwebsockets.h</a>
</li>
<li>lws_adopt_socket()
: <a class="el" href="group__sock-adopt.html#gabe71b7462afb21c767bdc67334f305af">libwebsockets.h</a>
</li>
<li>lws_adopt_socket_readbuf()
: <a class="el" href="group__sock-adopt.html#gab2d045df0f81afe00891aaed312d552b">libwebsockets.h</a>
</li>
<li>lws_b64_decode_string()
: <a class="el" href="group__sha.html#ga66316e6a5a0644a09d5a10e919dfdd8d">libwebsockets.h</a>
</li>
<li>lws_b64_encode_string()
: <a class="el" href="group__sha.html#gaf39765e4a3b413efb65e4698b2ec3575">libwebsockets.h</a>
</li>
<li>lws_callback_all_protocol()
: <a class="el" href="group__callback-when-writeable.html#gacf04bbe089f47c971c6408c5efe2ac70">libwebsockets.h</a>
</li>
<li>lws_callback_all_protocol_vhost()
: <a class="el" href="group__callback-when-writeable.html#ga13c984d8c5a44a745fd02bc2fba36053">libwebsockets.h</a>
</li>
<li>lws_callback_on_writable()
: <a class="el" href="group__callback-when-writeable.html#ga941caaa468bc507b1cae52275f58800d">libwebsockets.h</a>
</li>
<li>lws_callback_on_writable_all_protocol()
: <a class="el" href="group__callback-when-writeable.html#gabbe4655c7eeb3eb1671b2323ec6b3107">libwebsockets.h</a>
</li>
<li>lws_callback_on_writable_all_protocol_vhost()
: <a class="el" href="group__callback-when-writeable.html#ga8570860e191b62db264f2bac67354ea8">libwebsockets.h</a>
</li>
<li>lws_callback_vhost_protocols()
: <a class="el" href="group__callback-when-writeable.html#ga60939cf0c073d933fde3d17f3591caf5">libwebsockets.h</a>
</li>
<li>lws_cancel_service()
: <a class="el" href="group__service.html#ga53e3d0801dfda7960a7249dd559e68a2">libwebsockets.h</a>
</li>
<li>lws_cancel_service_pt()
: <a class="el" href="group__service.html#ga29c246707997ab7a466aa709aecd2d7b">libwebsockets.h</a>
</li>
<li>lws_canonical_hostname()
: <a class="el" href="group__net.html#gad0df22db2be9fc65a667a1e83f9a92a4">libwebsockets.h</a>
</li>
<li>lws_cgi()
: <a class="el" href="libwebsockets_8h.html#af52923473c59e643a974d65e12290831">libwebsockets.h</a>
</li>
<li>lws_cgi_kill()
: <a class="el" href="libwebsockets_8h.html#a27bb0b3cdcd0af839c928c253b521ff4">libwebsockets.h</a>
</li>
<li>lws_cgi_write_split_stdout_headers()
: <a class="el" href="libwebsockets_8h.html#a5326d3402af8429a166dd991dc65c4a2">libwebsockets.h</a>
</li>
<li>lws_chunked_html_process()
: <a class="el" href="group__html-chunked-substitution.html#ga643073f918c0a7016b690aae9793fd60">libwebsockets.h</a>
</li>
<li>lws_client_connect()
: <a class="el" href="group__client.html#ga4af0a20108a95e8b6d94dd4d80055ff3">libwebsockets.h</a>
</li>
<li>lws_client_connect_extended()
: <a class="el" href="group__client.html#gac6a8558b4410961a880241c2ac1271e2">libwebsockets.h</a>
</li>
<li>lws_client_connect_via_info()
: <a class="el" href="group__client.html#gac30a7be106abd0cedfbb2e8b8fe3a2f5">libwebsockets.h</a>
</li>
<li>lws_close_reason()
: <a class="el" href="group__wsclose.html#gaa1c863415d1783cd8de7938aa6efa262">libwebsockets.h</a>
</li>
<li>lws_context_destroy()
: <a class="el" href="group__context-and-vhost.html#ga8ee0314028755f1ddfa9428e09b4fddb">libwebsockets.h</a>
</li>
<li>lws_context_user()
: <a class="el" href="group__context-and-vhost.html#gaeb12f934bfd178bd2132a9e73fc641da">libwebsockets.h</a>
</li>
<li>lws_create_context()
: <a class="el" href="group__context-and-vhost.html#gaf2fff58562caab7510c41eeac85a8648">libwebsockets.h</a>
</li>
<li>lws_create_vhost()
: <a class="el" href="group__context-and-vhost.html#ga0c54c667ccd9b8b3dddcd123ca72f87c">libwebsockets.h</a>
</li>
<li>lws_daemonize()
: <a class="el" href="group__misc.html#gace5171b1dbbc03ec89a98f8afdb5c9af">libwebsockets.h</a>
</li>
<li>lws_email_check()
: <a class="el" href="group__smtp.html#ga5e535e346d92a9daf00be33abf79d4eb">libwebsockets.h</a>
</li>
<li>lws_email_destroy()
: <a class="el" href="group__smtp.html#ga25298a5afc1074e13b2d5711a86432b2">libwebsockets.h</a>
</li>
<li>lws_email_init()
: <a class="el" href="group__smtp.html#ga77fc9b56a1bb39484844981ec375fc29">libwebsockets.h</a>
</li>
<li>lws_ext_parse_options()
: <a class="el" href="group__extensions.html#ga6fb3e2c3dfb9d64dc87026a4e99c128b">libwebsockets.h</a>
</li>
<li>lws_extension_callback_pm_deflate()
: <a class="el" href="group__extensions.html#ga4cdbe42d872e21a448a947714d6c607e">libwebsockets.h</a>
</li>
<li>lws_finalize_http_header()
: <a class="el" href="group__HTTP-headers-create.html#ga4887605ff2242a54db3a7fa01f6f864b">libwebsockets.h</a>
</li>
<li>lws_finalize_startup()
: <a class="el" href="group__Protocols-and-Plugins.html#ga106b37ae9c247e84d191ab09441adc43">libwebsockets.h</a>
</li>
<li>lws_frame_is_binary()
: <a class="el" href="group__wsstatus.html#gaccd9c59336efad8af0554f79cc5966fd">libwebsockets.h</a>
</li>
<li>lws_get_child()
: <a class="el" href="group__misc.html#gacae4d7b6a8d22e4c2d82ff8b12c1e234">libwebsockets.h</a>
</li>
<li>lws_get_context()
: <a class="el" href="group__misc.html#ga0af4f7d2dd375aeedcfa7eb0e1101c4b">libwebsockets.h</a>
</li>
<li>lws_get_count_threads()
: <a class="el" href="group__misc.html#ga629f48268fd1856b54b11172991b97d9">libwebsockets.h</a>
</li>
<li>lws_get_fops()
: <a class="el" href="group__fops.html#gac08aef64c4c34647ed699b24759b6b0e">libwebsockets.h</a>
</li>
<li>lws_get_library_version()
: <a class="el" href="group__misc.html#gac6abfc0b2bd5b2f09281a4432bb2f5f0">libwebsockets.h</a>
</li>
<li>lws_get_parent()
: <a class="el" href="group__misc.html#ga8930fe36a3f3eefe4a6a4fd499d8e899">libwebsockets.h</a>
</li>
<li>lws_get_peer_addresses()
: <a class="el" href="group__net.html#ga092e5f473b3347f03ffeef8a950080f3">libwebsockets.h</a>
</li>
<li>lws_get_peer_simple()
: <a class="el" href="group__net.html#gad01014fed09759741b6d23afccfdaacc">libwebsockets.h</a>
</li>
<li>lws_get_peer_write_allowance()
: <a class="el" href="group__callback-when-writeable.html#gac4643fe16b0940ae5b68b4ee6195cbde">libwebsockets.h</a>
</li>
<li>lws_get_protocol()
: <a class="el" href="group__Protocols-and-Plugins.html#ga72ad550786ca7976463589d347e62112">libwebsockets.h</a>
</li>
<li>lws_get_random()
: <a class="el" href="group__misc.html#ga58f906c6be0ca80efd813f694569dd4a">libwebsockets.h</a>
</li>
<li>lws_get_reserved_bits()
: <a class="el" href="group__wsstatus.html#ga3df5045656dfb6b0e63a38de2dca79d2">libwebsockets.h</a>
</li>
<li>lws_get_socket_fd()
: <a class="el" href="group__callback-when-writeable.html#gaa709e02a10558753c851e58f1e2c16ba">libwebsockets.h</a>
</li>
<li>lws_get_urlarg_by_name()
: <a class="el" href="group__HTTP-headers-read.html#ga84e9ce5e71a77501a0998ac403a984c2">libwebsockets.h</a>
</li>
<li>lws_get_vhost()
: <a class="el" href="group__context-and-vhost.html#ga06e77ce2916f8bc9826ef8d9d68e3932">libwebsockets.h</a>
</li>
<li>lws_hdr_copy()
: <a class="el" href="group__HTTP-headers-read.html#ga6ce6aa1c0155ea42b7708bed271d1c77">libwebsockets.h</a>
</li>
<li>lws_hdr_copy_fragment()
: <a class="el" href="group__HTTP-headers-read.html#gaa427cad61a9a5e3004afd65c4527b5e9">libwebsockets.h</a>
</li>
<li>lws_hdr_fragment_length()
: <a class="el" href="group__HTTP-headers-read.html#ga594f3d0ece5b09c2ccf9f98ea533bb4e">libwebsockets.h</a>
</li>
<li>lws_hdr_total_length()
: <a class="el" href="group__HTTP-headers-read.html#ga8ade0e1ffb0da7e62b989d8d867bf6c8">libwebsockets.h</a>
</li>
<li>lws_http_redirect()
: <a class="el" href="group__http.html#ga8fbf01e473ac421fc33ad9f8da8b8a25">libwebsockets.h</a>
</li>
<li>lws_http_transaction_completed()
: <a class="el" href="group__http.html#gad27aed6c66a41b2b89ffe4da2a309e8a">libwebsockets.h</a>
</li>
<li>lws_init_vhost_client_ssl()
: <a class="el" href="group__client.html#ga4f44b8230e6732816ca5cd8d1aaaf340">libwebsockets.h</a>
</li>
<li>lws_interface_to_sa()
: <a class="el" href="group__net.html#ga869d8bdffb0f2a7ce08e3ce10d6be3d8">libwebsockets.h</a>
</li>
<li>lws_is_cgi()
: <a class="el" href="group__wsstatus.html#ga4ad226d5e01024b4046f4a5a37199aa1">libwebsockets.h</a>
</li>
<li>lws_is_final_fragment()
: <a class="el" href="group__wsstatus.html#ga08e9ee165fca503fd9427d55cfecac37">libwebsockets.h</a>
</li>
<li>lws_is_ssl()
: <a class="el" href="group__wsstatus.html#ga26a140623d202dd2bf2004deb6994baa">libwebsockets.h</a>
</li>
<li>lws_json_dump_context()
: <a class="el" href="group__context-and-vhost.html#gae2134657cdd2ea7a59e13ad314e4c50d">libwebsockets.h</a>
</li>
<li>lws_json_dump_vhost()
: <a class="el" href="group__context-and-vhost.html#ga94e6cc2223c4eec316b13bcebc3628b6">libwebsockets.h</a>
</li>
<li>lws_json_purify()
: <a class="el" href="group__pur.html#gab15187efcfa256b7c928562c182b92a3">libwebsockets.h</a>
</li>
<li>lws_now_secs()
: <a class="el" href="group__misc.html#ga33bf2635033710b25f931b57ed663e1e">libwebsockets.h</a>
</li>
<li>lws_parse_uri()
: <a class="el" href="group__misc.html#ga1ec0d9faac5d3a5824d765c287c043aa">libwebsockets.h</a>
</li>
<li>lws_partial_buffered()
: <a class="el" href="group__wsstatus.html#gaeca4afc94b1f026034f99cbba37e2f85">libwebsockets.h</a>
</li>
<li>lws_protocol_get()
: <a class="el" href="group__Protocols-and-Plugins.html#ga8bbe5e65faca068845704bab911a5030">libwebsockets.h</a>
</li>
<li>lws_protocol_vh_priv_get()
: <a class="el" href="group__Protocols-and-Plugins.html#gaf3be4243443baac0f8be1fcfb4d25129">libwebsockets.h</a>
</li>
<li>lws_protocol_vh_priv_zalloc()
: <a class="el" href="group__Protocols-and-Plugins.html#gaec0c0477288ff3f83aff38d357b883d1">libwebsockets.h</a>
</li>
<li>lws_remaining_packet_payload()
: <a class="el" href="libwebsockets_8h.html#a72fe65e83b8bb03f904a1a256c673536">libwebsockets.h</a>
</li>
<li>lws_return_http_status()
: <a class="el" href="group__http.html#gac8a4a71240857dc6b2ed70456b6923f4">libwebsockets.h</a>
</li>
<li>lws_rx_flow_allow_all_protocol()
: <a class="el" href="libwebsockets_8h.html#a5e627dbf1db48170ef486edbaf268672">libwebsockets.h</a>
</li>
<li>lws_rx_flow_control()
: <a class="el" href="libwebsockets_8h.html#adf4abd01e8c43f07c6e498ce13590c3e">libwebsockets.h</a>
</li>
<li>lws_send_pipe_choked()
: <a class="el" href="group__wsstatus.html#ga2bb3655329b4651cd06f79ee3a764421">libwebsockets.h</a>
</li>
<li>lws_serve_http_file()
: <a class="el" href="group__httpft.html#gab393a06d3d2722af4c3f8b06842c80d7">libwebsockets.h</a>
</li>
<li>lws_service()
: <a class="el" href="group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8">libwebsockets.h</a>
</li>
<li>lws_service_fd()
: <a class="el" href="group__service.html#gad82efa5466d14a9f05aa06416375b28d">libwebsockets.h</a>
</li>
<li>lws_service_fd_tsi()
: <a class="el" href="group__service.html#gaebf426eda371ba23642fc11d8e0ace6b">libwebsockets.h</a>
</li>
<li>lws_service_tsi()
: <a class="el" href="group__service.html#ga9b3cc4473fd8848e5bbee7f310712939">libwebsockets.h</a>
</li>
<li>lws_set_allocator()
: <a class="el" href="group__misc.html#gab321ed812f46f6dc7ef9e3ca6f00cf1b">libwebsockets.h</a>
</li>
<li>lws_set_extension_option()
: <a class="el" href="group__extensions.html#gae0e24e1768f83a7fb07896ce975704b9">libwebsockets.h</a>
</li>
<li>lws_set_log_level()
: <a class="el" href="group__log.html#ga244647f9e1bf0097ccdde66d74f41e26">libwebsockets.h</a>
</li>
<li>lws_set_proxy()
: <a class="el" href="group__context-and-vhost.html#ga7e9d5405547a457d86e0b4f0ae2bb1c4">libwebsockets.h</a>
</li>
<li>lws_set_timeout()
: <a class="el" href="group__timeout.html#gaced9f9237f6172fed9f730a2af51345a">libwebsockets.h</a>
</li>
<li>lws_SHA1()
: <a class="el" href="group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5">libwebsockets.h</a>
</li>
<li>lws_spa_create()
: <a class="el" href="group__form-parsing.html#ga162f86762173a2bc8c28497941d74815">libwebsockets.h</a>
</li>
<li>lws_spa_destroy()
: <a class="el" href="group__form-parsing.html#gaaa482f07dad3f04b391cccf0a814e13b">libwebsockets.h</a>
</li>
<li>lws_spa_finalize()
: <a class="el" href="group__form-parsing.html#ga83835bf250ee3d4a60f36a182f2b8d24">libwebsockets.h</a>
</li>
<li>lws_spa_get_length()
: <a class="el" href="group__form-parsing.html#ga3fbe378632f85ec9a14cc2c1687bf05f">libwebsockets.h</a>
</li>
<li>lws_spa_get_string()
: <a class="el" href="group__form-parsing.html#ga2da476217166da02704b90d3a8d4f3cd">libwebsockets.h</a>
</li>
<li>lws_spa_process()
: <a class="el" href="group__form-parsing.html#ga9ad9ebf5ea1a7108415ed7e04cb231d2">libwebsockets.h</a>
</li>
<li>lws_sql_purify()
: <a class="el" href="group__pur.html#ga9cc82f06e5ae7e71458626d7a39a5865">libwebsockets.h</a>
</li>
<li>lws_token_to_string()
: <a class="el" href="group__HTTP-headers-read.html#ga2c0597b2ef1d2cee35736c338bcbd17b">libwebsockets.h</a>
</li>
<li>lws_urldecode()
: <a class="el" href="group__urlendec.html#gaa373a9c16acdd96c395af61ab915ece3">libwebsockets.h</a>
</li>
<li>lws_urlencode()
: <a class="el" href="group__urlendec.html#gabc2888476e50e001c875c1a8abf455b7">libwebsockets.h</a>
</li>
<li>lws_vhost_get()
: <a class="el" href="group__context-and-vhost.html#ga8db03e19a372e34ac25cf21af894a02c">libwebsockets.h</a>
</li>
<li>lws_vhost_name_to_protocol()
: <a class="el" href="group__Protocols-and-Plugins.html#ga25754726d97c5f519d313e691a9fe29d">libwebsockets.h</a>
</li>
<li>lws_write()
: <a class="el" href="group__sending-data.html#gafd5fdd285a0e25ba7e3e1051deec1001">libwebsockets.h</a>
</li>
<li>lws_wsi_user()
: <a class="el" href="group__misc.html#gaa194584fff9698f3b280658f770ccd0f">libwebsockets.h</a>
</li>
<li>lwsl_emit_syslog()
: <a class="el" href="group__log.html#gab7c0fc936cc9f1eb58e2bb234c15147c">libwebsockets.h</a>
</li>
<li>lwsl_hexdump()
: <a class="el" href="group__log.html#ga898b1f03872ad019f507d4e35bbefa90">libwebsockets.h</a>
</li>
<li>lwsl_timestamp()
: <a class="el" href="group__log.html#ga42e39775c6b69b7251bdbf5a2cdd5dcd">libwebsockets.h</a>
</li>
<li>lwsws_get_config_globals()
: <a class="el" href="group__context-and-vhost.html#ga98d88c9080fd89c37114363a6474ea73">libwebsockets.h</a>
</li>
<li>lwsws_get_config_vhosts()
: <a class="el" href="group__context-and-vhost.html#ga341064721add2618ae1b29717493a212">libwebsockets.h</a>
</li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

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

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

101
doc/html/globals_type.html Normal file
View file

@ -0,0 +1,101 @@
<!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: Globals</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('globals_type.html','');});
</script>
<div id="doc-content">
<div class="contents">
&#160;<ul>
<li>lws_callback_function
: <a class="el" href="group__usercb.html#gad4fcb82e68d60ffacca61a3f783a0a2f">libwebsockets.h</a>
</li>
<li>lws_extension_callback_function
: <a class="el" href="group__extensions.html#gaae7169b2cd346b34fa33d0250db2afd0">libwebsockets.h</a>
</li>
<li>lws_spa_fileupload_cb
: <a class="el" href="group__form-parsing.html#ga5a70527c0861c2ffa3d29333a6aa7f8e">libwebsockets.h</a>
</li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,377 @@
<!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: HTTP headers: create</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__HTTP-headers-create.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">HTTP headers: create<div class="ingroups"><a class="el" href="group__http.html">HTTP</a></div></div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga29b7d6d2ddfdbaff3d8b607e7e3151b6"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__HTTP-headers-create.html#ga29b7d6d2ddfdbaff3d8b607e7e3151b6">lws_add_http_header_status</a> (struct lws *wsi, unsigned int code, unsigned char **p, unsigned char *end)</td></tr>
<tr class="separator:ga29b7d6d2ddfdbaff3d8b607e7e3151b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga2b36bf44405755ff51c1939303b995a8"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__HTTP-headers-create.html#ga2b36bf44405755ff51c1939303b995a8">lws_add_http_header_by_name</a> (struct lws *wsi, const unsigned char *name, const unsigned char *value, int length, unsigned char **p, unsigned char *end)</td></tr>
<tr class="separator:ga2b36bf44405755ff51c1939303b995a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf74adb761b22566ad70004882712dce1"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__HTTP-headers-create.html#gaf74adb761b22566ad70004882712dce1">lws_add_http_header_by_token</a> (struct lws *wsi, enum lws_token_indexes token, const unsigned char *value, int length, unsigned char **p, unsigned char *end)</td></tr>
<tr class="separator:gaf74adb761b22566ad70004882712dce1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gacc76a5babcb4dce1b01b1955aa7a2faf"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__HTTP-headers-create.html#gacc76a5babcb4dce1b01b1955aa7a2faf">lws_add_http_header_content_length</a> (struct lws *wsi, unsigned long content_length, unsigned char **p, unsigned char *end)</td></tr>
<tr class="separator:gacc76a5babcb4dce1b01b1955aa7a2faf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4887605ff2242a54db3a7fa01f6f864b"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__HTTP-headers-create.html#ga4887605ff2242a54db3a7fa01f6f864b">lws_finalize_http_header</a> (struct lws *wsi, unsigned char **p, unsigned char *end)</td></tr>
<tr class="separator:ga4887605ff2242a54db3a7fa01f6f864b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>HTTP headers: Create</h2>
<p>These apis allow you to create HTTP response headers in a way compatible with both HTTP/1.x and HTTP/2.</p>
<p>They each append to a buffer taking care about the buffer end, which is passed in as a pointer. When data is written to the buffer, the current position p is updated accordingly.</p>
<p>All of these apis are LWS_WARN_UNUSED_RESULT as they can run out of space and fail with nonzero return. </p>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="ga2b36bf44405755ff51c1939303b995a8"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_by_name </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>name</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>value</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>length</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char **&#160;</td>
<td class="paramname"><em>p</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char *&#160;</td>
<td class="paramname"><em>end</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__HTTP-headers-create.html#ga2b36bf44405755ff51c1939303b995a8">lws_add_http_header_by_name()</a> - append named header and value</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>the connection to check </td></tr>
<tr><td class="paramname">name</td><td>the hdr name, like "my-header" </td></tr>
<tr><td class="paramname">value</td><td>the value after the = for this header </td></tr>
<tr><td class="paramname">length</td><td>the length of the value </td></tr>
<tr><td class="paramname">p</td><td>pointer to current position in buffer pointer </td></tr>
<tr><td class="paramname">end</td><td>pointer to end of buffer</td></tr>
</table>
</dd>
</dl>
<p>Appends name: value to the headers </p>
</div>
</div>
<a class="anchor" id="gaf74adb761b22566ad70004882712dce1"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_by_token </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">enum lws_token_indexes&#160;</td>
<td class="paramname"><em>token</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>value</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>length</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char **&#160;</td>
<td class="paramname"><em>p</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char *&#160;</td>
<td class="paramname"><em>end</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__HTTP-headers-create.html#gaf74adb761b22566ad70004882712dce1">lws_add_http_header_by_token()</a> - append given header and value</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>the connection to check </td></tr>
<tr><td class="paramname">token</td><td>the token index for the hdr </td></tr>
<tr><td class="paramname">value</td><td>the value after the = for this header </td></tr>
<tr><td class="paramname">length</td><td>the length of the value </td></tr>
<tr><td class="paramname">p</td><td>pointer to current position in buffer pointer </td></tr>
<tr><td class="paramname">end</td><td>pointer to end of buffer</td></tr>
</table>
</dd>
</dl>
<p>Appends name=value to the headers, but is able to take advantage of better HTTP/2 coding mechanisms where possible. </p>
</div>
</div>
<a class="anchor" id="gacc76a5babcb4dce1b01b1955aa7a2faf"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_content_length </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned long&#160;</td>
<td class="paramname"><em>content_length</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char **&#160;</td>
<td class="paramname"><em>p</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char *&#160;</td>
<td class="paramname"><em>end</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__HTTP-headers-create.html#ga2b36bf44405755ff51c1939303b995a8">lws_add_http_header_by_name()</a> - append content-length helper</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>the connection to check </td></tr>
<tr><td class="paramname">content_length</td><td>the content length to use </td></tr>
<tr><td class="paramname">p</td><td>pointer to current position in buffer pointer </td></tr>
<tr><td class="paramname">end</td><td>pointer to end of buffer</td></tr>
</table>
</dd>
</dl>
<p>Appends content-length: content_length to the headers </p>
</div>
</div>
<a class="anchor" id="ga29b7d6d2ddfdbaff3d8b607e7e3151b6"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_status </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>code</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char **&#160;</td>
<td class="paramname"><em>p</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char *&#160;</td>
<td class="paramname"><em>end</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__HTTP-headers-create.html#ga29b7d6d2ddfdbaff3d8b607e7e3151b6">lws_add_http_header_status()</a> - add the HTTP response status code</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>the connection to check </td></tr>
<tr><td class="paramname">code</td><td>an HTTP code like 200, 404 etc (see enum http_status) </td></tr>
<tr><td class="paramname">p</td><td>pointer to current position in buffer pointer </td></tr>
<tr><td class="paramname">end</td><td>pointer to end of buffer</td></tr>
</table>
</dd>
</dl>
<p>Adds the initial response code, so should be called first </p>
</div>
</div>
<a class="anchor" id="ga4887605ff2242a54db3a7fa01f6f864b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_finalize_http_header </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char **&#160;</td>
<td class="paramname"><em>p</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char *&#160;</td>
<td class="paramname"><em>end</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__HTTP-headers-create.html#ga4887605ff2242a54db3a7fa01f6f864b">lws_finalize_http_header()</a> - terminate header block</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>the connection to check </td></tr>
<tr><td class="paramname">p</td><td>pointer to current position in buffer pointer </td></tr>
<tr><td class="paramname">end</td><td>pointer to end of buffer</td></tr>
</table>
</dd>
</dl>
<p>Indicates no more headers will be added </p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

View file

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

View file

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

View file

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

View file

@ -0,0 +1,316 @@
<!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: Protocols and Plugins</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__Protocols-and-Plugins.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#groups">Modules</a> &#124;
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Protocols and Plugins</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
Modules</h2></td></tr>
<tr class="memitem:group__generic-sessions"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__generic-sessions.html">plugin: generic-sessions</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__protocols.html">lws_protocols</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__plugin__capability.html">lws_plugin_capability</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__plugin.html">lws_plugin</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:ga40994491e1567f91f579d2b444775266"><td class="memItemLeft" align="right" valign="top"><a class="anchor" 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>
typedef int(*&#160;</td><td class="memItemRight" valign="bottom"><b>lws_plugin_destroy_func</b>) (struct lws_context *)</td></tr>
<tr class="separator:ga83f7a924ba790fa273476075a59f08b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga25754726d97c5f519d313e691a9fe29d"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN const struct <a class="el" href="structlws__protocols.html">lws_protocols</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Protocols-and-Plugins.html#ga25754726d97c5f519d313e691a9fe29d">lws_vhost_name_to_protocol</a> (struct lws_vhost *vh, const char *name)</td></tr>
<tr class="separator:ga25754726d97c5f519d313e691a9fe29d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga72ad550786ca7976463589d347e62112"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN const struct <a class="el" href="structlws__protocols.html">lws_protocols</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Protocols-and-Plugins.html#ga72ad550786ca7976463589d347e62112">lws_get_protocol</a> (struct lws *wsi)</td></tr>
<tr class="separator:ga72ad550786ca7976463589d347e62112"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga8bbe5e65faca068845704bab911a5030"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN const struct <a class="el" href="structlws__protocols.html">lws_protocols</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Protocols-and-Plugins.html#ga8bbe5e65faca068845704bab911a5030">lws_protocol_get</a> (struct lws *wsi) LWS_WARN_DEPRECATED</td></tr>
<tr class="separator:ga8bbe5e65faca068845704bab911a5030"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaec0c0477288ff3f83aff38d357b883d1"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Protocols-and-Plugins.html#gaec0c0477288ff3f83aff38d357b883d1">lws_protocol_vh_priv_zalloc</a> (struct lws_vhost *vhost, const struct <a class="el" href="structlws__protocols.html">lws_protocols</a> *prot, int size)</td></tr>
<tr class="separator:gaec0c0477288ff3f83aff38d357b883d1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf3be4243443baac0f8be1fcfb4d25129"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Protocols-and-Plugins.html#gaf3be4243443baac0f8be1fcfb4d25129">lws_protocol_vh_priv_get</a> (struct lws_vhost *vhost, const struct <a class="el" href="structlws__protocols.html">lws_protocols</a> *prot)</td></tr>
<tr class="separator:gaf3be4243443baac0f8be1fcfb4d25129"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga106b37ae9c247e84d191ab09441adc43"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Protocols-and-Plugins.html#ga106b37ae9c247e84d191ab09441adc43">lws_finalize_startup</a> (struct lws_context *context)</td></tr>
<tr class="separator:ga106b37ae9c247e84d191ab09441adc43"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>Protocol and protocol plugin -related apis</h2>
<p>Protocols bind ws protocol names to a custom callback specific to that protocol implementaion.</p>
<p>A list of protocols can be passed in at context creation time, but it is also legal to leave that NULL and add the protocols and their callback code using plugins.</p>
<p>Plugins are much preferable compared to cut and pasting code into an application each time, since they can be used standalone. </p>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="ga106b37ae9c247e84d191ab09441adc43"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_finalize_startup </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>context</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__Protocols-and-Plugins.html#ga106b37ae9c247e84d191ab09441adc43">lws_finalize_startup()</a> - drop initial process privileges</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>lws context</td></tr>
</table>
</dd>
</dl>
<p>This is called after the end of the vhost protocol initializations, but you may choose to call it earlier </p>
</div>
</div>
<a class="anchor" id="ga72ad550786ca7976463589d347e62112"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN const struct <a class="el" href="structlws__protocols.html">lws_protocols</a>* lws_get_protocol </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__Protocols-and-Plugins.html#ga72ad550786ca7976463589d347e62112">lws_get_protocol()</a> - Returns a protocol pointer from a websocket connection. </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>pointer to struct websocket you want to know the protocol of</td></tr>
</table>
</dd>
</dl>
<pre class="fragment"> Some apis can act on all live connections of a given protocol,
this is how you can get a pointer to the active protocol if needed.</pre>
</div>
</div>
<a class="anchor" id="ga8bbe5e65faca068845704bab911a5030"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN const struct <a class="el" href="structlws__protocols.html">lws_protocols</a>* lws_protocol_get </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__Protocols-and-Plugins.html#ga8bbe5e65faca068845704bab911a5030">lws_protocol_get()</a> - deprecated: use lws_get_protocol </p>
</div>
</div>
<a class="anchor" id="gaf3be4243443baac0f8be1fcfb4d25129"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN void* lws_protocol_vh_priv_get </td>
<td>(</td>
<td class="paramtype">struct lws_vhost *&#160;</td>
<td class="paramname"><em>vhost</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const struct <a class="el" href="structlws__protocols.html">lws_protocols</a> *&#160;</td>
<td class="paramname"><em>prot</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__Protocols-and-Plugins.html#gaf3be4243443baac0f8be1fcfb4d25129">lws_protocol_vh_priv_get()</a> - retreive a protocol's per-vhost storage</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">vhost</td><td>vhost the instance is related to </td></tr>
<tr><td class="paramname">prot</td><td>protocol the instance is related to</td></tr>
</table>
</dd>
</dl>
<p>Recover a pointer to the allocated per-vhost storage for the protocol created by <a class="el" href="group__Protocols-and-Plugins.html#gaec0c0477288ff3f83aff38d357b883d1">lws_protocol_vh_priv_zalloc()</a> earlier </p>
</div>
</div>
<a class="anchor" id="gaec0c0477288ff3f83aff38d357b883d1"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN void* lws_protocol_vh_priv_zalloc </td>
<td>(</td>
<td class="paramtype">struct lws_vhost *&#160;</td>
<td class="paramname"><em>vhost</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const struct <a class="el" href="structlws__protocols.html">lws_protocols</a> *&#160;</td>
<td class="paramname"><em>prot</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>size</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__Protocols-and-Plugins.html#gaec0c0477288ff3f83aff38d357b883d1">lws_protocol_vh_priv_zalloc()</a> - Allocate and zero down a protocol's per-vhost storage </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">vhost</td><td>vhost the instance is related to </td></tr>
<tr><td class="paramname">prot</td><td>protocol the instance is related to </td></tr>
<tr><td class="paramname">size</td><td>bytes to allocate</td></tr>
</table>
</dd>
</dl>
<p>Protocols often find it useful to allocate a per-vhost struct, this is a helper to be called in the per-vhost init LWS_CALLBACK_PROTOCOL_INIT </p>
</div>
</div>
<a class="anchor" id="ga25754726d97c5f519d313e691a9fe29d"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN const struct <a class="el" href="structlws__protocols.html">lws_protocols</a>* lws_vhost_name_to_protocol </td>
<td>(</td>
<td class="paramtype">struct lws_vhost *&#160;</td>
<td class="paramname"><em>vh</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>name</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__Protocols-and-Plugins.html#ga25754726d97c5f519d313e691a9fe29d">lws_vhost_name_to_protocol()</a> - get vhost's protocol object from its name</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">vh</td><td>vhost to search </td></tr>
<tr><td class="paramname">name</td><td>protocol name</td></tr>
</table>
</dd>
</dl>
<p>Returns NULL or a pointer to the vhost's protocol of the requested name </p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

View file

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

View file

@ -0,0 +1,426 @@
<!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: Callback when writeable</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__callback-when-writeable.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Callback when writeable</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga941caaa468bc507b1cae52275f58800d"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__callback-when-writeable.html#ga941caaa468bc507b1cae52275f58800d">lws_callback_on_writable</a> (struct lws *wsi)</td></tr>
<tr class="separator:ga941caaa468bc507b1cae52275f58800d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gabbe4655c7eeb3eb1671b2323ec6b3107"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__callback-when-writeable.html#gabbe4655c7eeb3eb1671b2323ec6b3107">lws_callback_on_writable_all_protocol</a> (const struct lws_context *context, const struct <a class="el" href="structlws__protocols.html">lws_protocols</a> *protocol)</td></tr>
<tr class="separator:gabbe4655c7eeb3eb1671b2323ec6b3107"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga8570860e191b62db264f2bac67354ea8"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__callback-when-writeable.html#ga8570860e191b62db264f2bac67354ea8">lws_callback_on_writable_all_protocol_vhost</a> (const struct lws_vhost *vhost, const struct <a class="el" href="structlws__protocols.html">lws_protocols</a> *protocol)</td></tr>
<tr class="separator:ga8570860e191b62db264f2bac67354ea8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gacf04bbe089f47c971c6408c5efe2ac70"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__callback-when-writeable.html#gacf04bbe089f47c971c6408c5efe2ac70">lws_callback_all_protocol</a> (struct lws_context *context, const struct <a class="el" href="structlws__protocols.html">lws_protocols</a> *protocol, int reason)</td></tr>
<tr class="separator:gacf04bbe089f47c971c6408c5efe2ac70"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga13c984d8c5a44a745fd02bc2fba36053"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__callback-when-writeable.html#ga13c984d8c5a44a745fd02bc2fba36053">lws_callback_all_protocol_vhost</a> (struct lws_vhost *vh, const struct <a class="el" href="structlws__protocols.html">lws_protocols</a> *protocol, int reason)</td></tr>
<tr class="separator:ga13c984d8c5a44a745fd02bc2fba36053"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga60939cf0c073d933fde3d17f3591caf5"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__callback-when-writeable.html#ga60939cf0c073d933fde3d17f3591caf5">lws_callback_vhost_protocols</a> (struct lws *wsi, int reason, void *in, int len)</td></tr>
<tr class="separator:ga60939cf0c073d933fde3d17f3591caf5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa709e02a10558753c851e58f1e2c16ba"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__callback-when-writeable.html#gaa709e02a10558753c851e58f1e2c16ba">lws_get_socket_fd</a> (struct lws *wsi)</td></tr>
<tr class="separator:gaa709e02a10558753c851e58f1e2c16ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac4643fe16b0940ae5b68b4ee6195cbde"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__callback-when-writeable.html#gac4643fe16b0940ae5b68b4ee6195cbde">lws_get_peer_write_allowance</a> (struct lws *wsi)</td></tr>
<tr class="separator:gac4643fe16b0940ae5b68b4ee6195cbde"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>Callback When Writeable</h2>
<p>lws can only write data on a connection when it is able to accept more data without blocking.</p>
<p>So a basic requirement is we should only use the <a class="el" href="group__sending-data.html#gafd5fdd285a0e25ba7e3e1051deec1001">lws_write()</a> apis when the connection we want to write on says that he can accept more data.</p>
<p>When lws cannot complete your send at the time, it will buffer the data and send it in the background, suppressing any further WRITEABLE callbacks on that connection until it completes. So it is important to write new things in a new writeable callback.</p>
<p>These apis reflect the various ways we can indicate we would like to be called back when one or more connections is writeable. </p>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="gacf04bbe089f47c971c6408c5efe2ac70"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_callback_all_protocol </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>context</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const struct <a class="el" href="structlws__protocols.html">lws_protocols</a> *&#160;</td>
<td class="paramname"><em>protocol</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>reason</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__callback-when-writeable.html#gacf04bbe089f47c971c6408c5efe2ac70">lws_callback_all_protocol()</a> - Callback all connections using the given protocol with the given reason</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>lws_context </td></tr>
<tr><td class="paramname">protocol</td><td>Protocol whose connections will get callbacks </td></tr>
<tr><td class="paramname">reason</td><td>Callback reason index</td></tr>
</table>
</dd>
</dl>
<ul>
<li>Which: connections using this protocol on ALL VHOSTS</li>
<li>When: when the individual connection becomes writeable</li>
<li>What: reason </li>
</ul>
</div>
</div>
<a class="anchor" id="ga13c984d8c5a44a745fd02bc2fba36053"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_callback_all_protocol_vhost </td>
<td>(</td>
<td class="paramtype">struct lws_vhost *&#160;</td>
<td class="paramname"><em>vh</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const struct <a class="el" href="structlws__protocols.html">lws_protocols</a> *&#160;</td>
<td class="paramname"><em>protocol</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>reason</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__callback-when-writeable.html#ga13c984d8c5a44a745fd02bc2fba36053">lws_callback_all_protocol_vhost()</a> - Callback all connections using the given protocol with the given reason</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">vh</td><td>Vhost whose connections will get callbacks </td></tr>
<tr><td class="paramname">protocol</td><td>Which protocol to match </td></tr>
<tr><td class="paramname">reason</td><td>Callback reason index</td></tr>
</table>
</dd>
</dl>
<ul>
<li>Which: connections using this protocol on GIVEN VHOST ONLY</li>
<li>When: now</li>
<li>What: reason </li>
</ul>
</div>
</div>
<a class="anchor" id="ga941caaa468bc507b1cae52275f58800d"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_callback_on_writable </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__callback-when-writeable.html#ga941caaa468bc507b1cae52275f58800d">lws_callback_on_writable()</a> - Request a callback when this socket becomes able to be written to without blocking</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>Websocket connection instance to get callback for</td></tr>
</table>
</dd>
</dl>
<ul>
<li>Which: only this wsi</li>
<li>When: when the individual connection becomes writeable</li>
<li>What: LWS_CALLBACK_*_WRITEABLE </li>
</ul>
</div>
</div>
<a class="anchor" id="gabbe4655c7eeb3eb1671b2323ec6b3107"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_callback_on_writable_all_protocol </td>
<td>(</td>
<td class="paramtype">const struct lws_context *&#160;</td>
<td class="paramname"><em>context</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const struct <a class="el" href="structlws__protocols.html">lws_protocols</a> *&#160;</td>
<td class="paramname"><em>protocol</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__callback-when-writeable.html#gabbe4655c7eeb3eb1671b2323ec6b3107">lws_callback_on_writable_all_protocol()</a> - Request a callback for all connections on same vhost using the given protocol when it becomes possible to write to each socket without blocking in turn.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>lws_context </td></tr>
<tr><td class="paramname">protocol</td><td>Protocol whose connections will get callbacks</td></tr>
</table>
</dd>
</dl>
<ul>
<li>Which: connections using this protocol on ANY VHOST</li>
<li>When: when the individual connection becomes writeable</li>
<li>What: LWS_CALLBACK_*_WRITEABLE </li>
</ul>
</div>
</div>
<a class="anchor" id="ga8570860e191b62db264f2bac67354ea8"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_callback_on_writable_all_protocol_vhost </td>
<td>(</td>
<td class="paramtype">const struct lws_vhost *&#160;</td>
<td class="paramname"><em>vhost</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const struct <a class="el" href="structlws__protocols.html">lws_protocols</a> *&#160;</td>
<td class="paramname"><em>protocol</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__callback-when-writeable.html#ga8570860e191b62db264f2bac67354ea8">lws_callback_on_writable_all_protocol_vhost()</a> - Request a callback for all connections using the given protocol when it becomes possible to write to each socket without blocking in turn.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">vhost</td><td>Only consider connections on this lws_vhost </td></tr>
<tr><td class="paramname">protocol</td><td>Protocol whose connections will get callbacks</td></tr>
</table>
</dd>
</dl>
<ul>
<li>Which: connections using this protocol on GIVEN VHOST ONLY</li>
<li>When: when the individual connection becomes writeable</li>
<li>What: LWS_CALLBACK_*_WRITEABLE </li>
</ul>
</div>
</div>
<a class="anchor" id="ga60939cf0c073d933fde3d17f3591caf5"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_callback_vhost_protocols </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>reason</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>in</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__callback-when-writeable.html#ga60939cf0c073d933fde3d17f3591caf5">lws_callback_vhost_protocols()</a> - Callback all protocols enabled on a vhost with the given reason</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>wsi whose vhost will get callbacks </td></tr>
<tr><td class="paramname">reason</td><td>Callback reason index </td></tr>
<tr><td class="paramname">in</td><td>in argument to callback </td></tr>
<tr><td class="paramname">len</td><td>len argument to callback</td></tr>
</table>
</dd>
</dl>
<ul>
<li>Which: connections using this protocol on same VHOST as wsi ONLY</li>
<li>When: now</li>
<li>What: reason </li>
</ul>
</div>
</div>
<a class="anchor" id="gac4643fe16b0940ae5b68b4ee6195cbde"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN size_t lws_get_peer_write_allowance </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__callback-when-writeable.html#gac4643fe16b0940ae5b68b4ee6195cbde">lws_get_peer_write_allowance()</a> - get the amount of data writeable to peer if known</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>Websocket connection instance</td></tr>
</table>
</dd>
</dl>
<p>if the protocol does not have any guidance, returns -1. Currently only http2 connections get send window information from this API. But your code should use it so it can work properly with any protocol.</p>
<p>If nonzero return is the amount of payload data the peer or intermediary has reported it has buffer space for. That has NO relationship with the amount of buffer space your OS can accept on this connection for a write action.</p>
<p>This number represents the maximum you could send to the peer or intermediary on this connection right now without the protocol complaining.</p>
<p>lws manages accounting for send window updates and payload writes automatically, so this number reflects the situation at the peer or intermediary dynamically. </p>
</div>
</div>
<a class="anchor" id="gaa709e02a10558753c851e58f1e2c16ba"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_get_socket_fd </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__callback-when-writeable.html#gaa709e02a10558753c851e58f1e2c16ba">lws_get_socket_fd()</a> - returns the socket file descriptor</p>
<p>You will not need this unless you are doing something special</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>Websocket connection instance </td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

View file

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

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

@ -0,0 +1,82 @@
<!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: cgi handling</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__cgi.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="headertitle">
<div class="title">cgi handling</div> </div>
</div><!--header-->
<div class="contents">
<h2>CGI handling</h2>
<p>These functions allow low-level control over stdin/out/err of the cgi.</p>
<p>However for most cases, binding the cgi to http in and out, the default lws implementation already does the right thing. </p>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

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

@ -0,0 +1,353 @@
<!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: Client</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__client.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Client</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__client__connect__info.html">lws_client_connect_info</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gac30a7be106abd0cedfbb2e8b8fe3a2f5"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN struct lws *LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__client.html#gac30a7be106abd0cedfbb2e8b8fe3a2f5">lws_client_connect_via_info</a> (struct <a class="el" href="structlws__client__connect__info.html">lws_client_connect_info</a> *ccinfo)</td></tr>
<tr class="separator:gac30a7be106abd0cedfbb2e8b8fe3a2f5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4af0a20108a95e8b6d94dd4d80055ff3"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN struct lws *LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__client.html#ga4af0a20108a95e8b6d94dd4d80055ff3">lws_client_connect</a> (struct lws_context *clients, const char *address, int port, int ssl_connection, const char *path, const char *host, const char *origin, const char *protocol, int ietf_version_or_minus_one) LWS_WARN_DEPRECATED</td></tr>
<tr class="separator:ga4af0a20108a95e8b6d94dd4d80055ff3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac6a8558b4410961a880241c2ac1271e2"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN struct lws *LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__client.html#gac6a8558b4410961a880241c2ac1271e2">lws_client_connect_extended</a> (struct lws_context *clients, const char *address, int port, int ssl_connection, const char *path, const char *host, const char *origin, const char *protocol, int ietf_version_or_minus_one, void *userdata) LWS_WARN_DEPRECATED</td></tr>
<tr class="separator:gac6a8558b4410961a880241c2ac1271e2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4f44b8230e6732816ca5cd8d1aaaf340"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__client.html#ga4f44b8230e6732816ca5cd8d1aaaf340">lws_init_vhost_client_ssl</a> (const struct <a class="el" href="structlws__context__creation__info.html">lws_context_creation_info</a> *info, struct lws_vhost *vhost)</td></tr>
<tr class="separator:ga4f44b8230e6732816ca5cd8d1aaaf340"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4450c34200bf9dab3beb90ef23221870"><td class="memItemLeft" align="right" valign="top"><a class="anchor" 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>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>Client releated functions</h2>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="ga4af0a20108a95e8b6d94dd4d80055ff3"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN struct lws* LWS_WARN_UNUSED_RESULT lws_client_connect </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>clients</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>address</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>port</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>ssl_connection</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>path</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>host</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>origin</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>protocol</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>ietf_version_or_minus_one</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__client.html#ga4af0a20108a95e8b6d94dd4d80055ff3">lws_client_connect()</a> - Connect to another websocket server </p><dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000002">Deprecated:</a></b></dt><dd>DEPRECATED use lws_client_connect_via_info </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">clients</td><td>Websocket context </td></tr>
<tr><td class="paramname">address</td><td>Remote server address, eg, "myserver.com" </td></tr>
<tr><td class="paramname">port</td><td>Port to connect to on the remote server, eg, 80 </td></tr>
<tr><td class="paramname">ssl_connection</td><td>0 = ws://, 1 = wss:// encrypted, 2 = wss:// allow self signed certs </td></tr>
<tr><td class="paramname">path</td><td>Websocket path on server </td></tr>
<tr><td class="paramname">host</td><td>Hostname on server </td></tr>
<tr><td class="paramname">origin</td><td>Socket origin name </td></tr>
<tr><td class="paramname">protocol</td><td>Comma-separated list of protocols being asked for from the server, or just one. The server will pick the one it likes best. If you don't want to specify a protocol, which is legal, use NULL here. </td></tr>
<tr><td class="paramname">ietf_version_or_minus_one</td><td>-1 to ask to connect using the default, latest protocol supported, or the specific protocol ordinal</td></tr>
</table>
</dd>
</dl>
<p>This function creates a connection to a remote server </p>
</div>
</div>
<a class="anchor" id="gac6a8558b4410961a880241c2ac1271e2"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN struct lws* LWS_WARN_UNUSED_RESULT lws_client_connect_extended </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>clients</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>address</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>port</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>ssl_connection</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>path</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>host</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>origin</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>protocol</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>ietf_version_or_minus_one</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>userdata</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__client.html#gac6a8558b4410961a880241c2ac1271e2">lws_client_connect_extended()</a> - Connect to another websocket server </p><dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000003">Deprecated:</a></b></dt><dd>DEPRECATED use lws_client_connect_via_info </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">clients</td><td>Websocket context </td></tr>
<tr><td class="paramname">address</td><td>Remote server address, eg, "myserver.com" </td></tr>
<tr><td class="paramname">port</td><td>Port to connect to on the remote server, eg, 80 </td></tr>
<tr><td class="paramname">ssl_connection</td><td>0 = ws://, 1 = wss:// encrypted, 2 = wss:// allow self signed certs </td></tr>
<tr><td class="paramname">path</td><td>Websocket path on server </td></tr>
<tr><td class="paramname">host</td><td>Hostname on server </td></tr>
<tr><td class="paramname">origin</td><td>Socket origin name </td></tr>
<tr><td class="paramname">protocol</td><td>Comma-separated list of protocols being asked for from the server, or just one. The server will pick the one it likes best. </td></tr>
<tr><td class="paramname">ietf_version_or_minus_one</td><td>-1 to ask to connect using the default, latest protocol supported, or the specific protocol ordinal </td></tr>
<tr><td class="paramname">userdata</td><td>Pre-allocated user data <pre class="fragment"> This function creates a connection to a remote server</pre> </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gac30a7be106abd0cedfbb2e8b8fe3a2f5"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN struct lws* LWS_WARN_UNUSED_RESULT lws_client_connect_via_info </td>
<td>(</td>
<td class="paramtype">struct <a class="el" href="structlws__client__connect__info.html">lws_client_connect_info</a> *&#160;</td>
<td class="paramname"><em>ccinfo</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__client.html#gac30a7be106abd0cedfbb2e8b8fe3a2f5">lws_client_connect_via_info()</a> - Connect to another websocket server </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">ccinfo</td><td>pointer to <a class="el" href="structlws__client__connect__info.html">lws_client_connect_info</a> struct <pre class="fragment"> This function creates a connection to a remote server</pre> </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga4f44b8230e6732816ca5cd8d1aaaf340"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_init_vhost_client_ssl </td>
<td>(</td>
<td class="paramtype">const struct <a class="el" href="structlws__context__creation__info.html">lws_context_creation_info</a> *&#160;</td>
<td class="paramname"><em>info</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">struct lws_vhost *&#160;</td>
<td class="paramname"><em>vhost</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__client.html#ga4f44b8230e6732816ca5cd8d1aaaf340">lws_init_vhost_client_ssl()</a> - also enable client SSL on an existing vhost</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">info</td><td>client ssl related info </td></tr>
<tr><td class="paramname">vhost</td><td>which vhost to initialize client ssl operations on</td></tr>
</table>
</dd>
</dl>
<p>You only need to call this if you plan on using SSL client connections on the vhost. For non-SSL client connections, it's not necessary to call this.</p>
<p>The following members of info are used during the call </p><pre class="fragment"> - options must have LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT set,
otherwise the call does nothing
- provided_client_ssl_ctx must be NULL to get a generated client
ssl context, otherwise you can pass a prepared one in by setting it
- ssl_cipher_list may be NULL or set to the client valid cipher list
- ssl_ca_filepath may be NULL or client cert filepath
- ssl_cert_filepath may be NULL or client cert filepath
- ssl_private_key_filepath may be NULL or client cert private key
</pre><p>You must create your vhost explicitly if you want to use this, so you have a pointer to the vhost. Create the context first with the option flag LWS_SERVER_OPTION_EXPLICIT_VHOSTS and then call <a class="el" href="group__context-and-vhost.html#ga0c54c667ccd9b8b3dddcd123ca72f87c">lws_create_vhost()</a> with the same info struct. </p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

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

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

File diff suppressed because one or more lines are too long

View file

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

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

@ -0,0 +1,104 @@
<!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: libev helpers</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__ev.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">libev helpers</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem: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>
</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>
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>
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>
LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><b>lws_ev_sigint_cb</b> (struct ev_loop *loop, struct ev_signal *watcher, int revents)</td></tr>
<tr class="separator:gaabfc0880d6a98133550c61aa01ef3563"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>libev helpers</h2>
<p>APIs specific to libev event loop itegration </p>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,449 @@
<!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: Extensions</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__extensions.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Extensions</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__ext__options.html">lws_ext_options</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__ext__option__arg.html">lws_ext_option_arg</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__extension.html">lws_extension</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:gaae7169b2cd346b34fa33d0250db2afd0"><td class="memItemLeft" align="right" valign="top">typedef int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__extensions.html#gaae7169b2cd346b34fa33d0250db2afd0">lws_extension_callback_function</a>(struct lws_context *context, const struct <a class="el" href="structlws__extension.html">lws_extension</a> *ext, struct lws *wsi, enum lws_extension_callback_reasons reason, void *user, void *in, size_t len)</td></tr>
<tr class="separator:gaae7169b2cd346b34fa33d0250db2afd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:gae9993815eee72c6070300a0ae2f022d7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae9993815eee72c6070300a0ae2f022d7"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>lws_extension_callback_reasons</b> { <br />
&#160;&#160;<b>LWS_EXT_CB_SERVER_CONTEXT_CONSTRUCT</b> = 0,
<b>LWS_EXT_CB_CLIENT_CONTEXT_CONSTRUCT</b> = 1,
<b>LWS_EXT_CB_SERVER_CONTEXT_DESTRUCT</b> = 2,
<b>LWS_EXT_CB_CLIENT_CONTEXT_DESTRUCT</b> = 3,
<br />
&#160;&#160;<b>LWS_EXT_CB_CONSTRUCT</b> = 4,
<b>LWS_EXT_CB_CLIENT_CONSTRUCT</b> = 5,
<b>LWS_EXT_CB_CHECK_OK_TO_REALLY_CLOSE</b> = 6,
<b>LWS_EXT_CB_CHECK_OK_TO_PROPOSE_EXTENSION</b> = 7,
<br />
&#160;&#160;<b>LWS_EXT_CB_DESTROY</b> = 8,
<b>LWS_EXT_CB_DESTROY_ANY_WSI_CLOSING</b> = 9,
<b>LWS_EXT_CB_ANY_WSI_ESTABLISHED</b> = 10,
<b>LWS_EXT_CB_PACKET_RX_PREPARSE</b> = 11,
<br />
&#160;&#160;<b>LWS_EXT_CB_PACKET_TX_PRESEND</b> = 12,
<b>LWS_EXT_CB_PACKET_TX_DO_SEND</b> = 13,
<b>LWS_EXT_CB_HANDSHAKE_REPLY_TX</b> = 14,
<b>LWS_EXT_CB_FLUSH_PENDING_TX</b> = 15,
<br />
&#160;&#160;<b>LWS_EXT_CB_EXTENDED_PAYLOAD_RX</b> = 16,
<b>LWS_EXT_CB_CAN_PROXY_CLIENT_CONNECTION</b> = 17,
<b>LWS_EXT_CB_1HZ</b> = 18,
<b>LWS_EXT_CB_REQUEST_ON_WRITEABLE</b> = 19,
<br />
&#160;&#160;<b>LWS_EXT_CB_IS_WRITEABLE</b> = 20,
<b>LWS_EXT_CB_PAYLOAD_TX</b> = 21,
<b>LWS_EXT_CB_PAYLOAD_RX</b> = 22,
<b>LWS_EXT_CB_OPTION_DEFAULT</b> = 23,
<br />
&#160;&#160;<b>LWS_EXT_CB_OPTION_SET</b> = 24,
<b>LWS_EXT_CB_OPTION_CONFIRM</b> = 25,
<b>LWS_EXT_CB_NAMED_OPTION_SET</b> = 26
<br />
}</td></tr>
<tr class="separator:gae9993815eee72c6070300a0ae2f022d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gacc9f55936dc165257a2e1f7d47bce89e"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__extensions.html#gacc9f55936dc165257a2e1f7d47bce89e">lws_ext_options_types</a> { <a class="el" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89eaabcf56c456c1ff6e81dc82586a16f14c">EXTARG_NONE</a>,
<a class="el" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea1c86adf924c8786a12bee9687094673e">EXTARG_DEC</a>,
<a class="el" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea5265abe3e1c3f64412f2affe7bffd880">EXTARG_OPT_DEC</a>
}</td></tr>
<tr class="separator:gacc9f55936dc165257a2e1f7d47bce89e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gae0e24e1768f83a7fb07896ce975704b9"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__extensions.html#gae0e24e1768f83a7fb07896ce975704b9">lws_set_extension_option</a> (struct lws *wsi, const char *ext_name, const char *opt_name, const char *opt_val)</td></tr>
<tr class="separator:gae0e24e1768f83a7fb07896ce975704b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga6fb3e2c3dfb9d64dc87026a4e99c128b"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__extensions.html#ga6fb3e2c3dfb9d64dc87026a4e99c128b">lws_ext_parse_options</a> (const struct <a class="el" href="structlws__extension.html">lws_extension</a> *ext, struct lws *wsi, void *ext_user, const struct <a class="el" href="structlws__ext__options.html">lws_ext_options</a> *opts, const char *o, int len)</td></tr>
<tr class="separator:ga6fb3e2c3dfb9d64dc87026a4e99c128b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4cdbe42d872e21a448a947714d6c607e"><td class="memItemLeft" align="right" valign="top">LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__extensions.html#ga4cdbe42d872e21a448a947714d6c607e">lws_extension_callback_pm_deflate</a> (struct lws_context *context, const struct <a class="el" href="structlws__extension.html">lws_extension</a> *ext, struct lws *wsi, enum lws_extension_callback_reasons reason, void *user, void *in, size_t len)</td></tr>
<tr class="separator:ga4cdbe42d872e21a448a947714d6c607e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>Extension releated functions</h2>
<p>Ws defines optional extensions, lws provides the ability to implement these in user code if so desired.</p>
<p>We provide one extensions permessage-deflate. </p>
<h2 class="groupheader">Typedef Documentation</h2>
<a class="anchor" id="gaae7169b2cd346b34fa33d0250db2afd0"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef int lws_extension_callback_function(struct lws_context *context, const struct <a class="el" href="structlws__extension.html">lws_extension</a> *ext, struct lws *wsi, enum lws_extension_callback_reasons reason, void *user, void *in, size_t len)</td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p>typedef <a class="el" href="group__extensions.html#gaae7169b2cd346b34fa33d0250db2afd0">lws_extension_callback_function()</a> - Hooks to allow extensions to operate </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>Websockets context </td></tr>
<tr><td class="paramname">ext</td><td>This extension </td></tr>
<tr><td class="paramname">wsi</td><td>Opaque websocket instance pointer </td></tr>
<tr><td class="paramname">reason</td><td>The reason for the call </td></tr>
<tr><td class="paramname">user</td><td>Pointer to ptr to per-session user data allocated by library </td></tr>
<tr><td class="paramname">in</td><td>Pointer used for some callback reasons </td></tr>
<tr><td class="paramname">len</td><td>Length set for some callback reasons <pre class="fragment"> Each extension that is active on a particular connection receives
callbacks during the connection lifetime to allow the extension to
operate on websocket data and manage itself.
Libwebsockets takes care of allocating and freeing "user" memory for
each active extension on each connection. That is what is pointed to
by the user parameter.
LWS_EXT_CB_CONSTRUCT: called when the server has decided to
select this extension from the list provided by the client,
just before the server will send back the handshake accepting
the connection with this extension active. This gives the
extension a chance to initialize its connection context found
in user.
LWS_EXT_CB_CLIENT_CONSTRUCT: same as LWS_EXT_CB_CONSTRUCT
but called when client is instantiating this extension. Some
extensions will work the same on client and server side and then
you can just merge handlers for both CONSTRUCTS.
LWS_EXT_CB_DESTROY: called when the connection the extension was
being used on is about to be closed and deallocated. It's the
last chance for the extension to deallocate anything it has
allocated in the user data (pointed to by user) before the
user data is deleted. This same callback is used whether you
are in client or server instantiation context.
LWS_EXT_CB_PACKET_RX_PREPARSE: when this extension was active on
a connection, and a packet of data arrived at the connection,
it is passed to this callback to give the extension a chance to
change the data, eg, decompress it. user is pointing to the
extension's private connection context data, in is pointing
to an lws_tokens struct, it consists of a char * pointer called
token, and an int called token_len. At entry, these are
set to point to the received buffer and set to the content
length. If the extension will grow the content, it should use
a new buffer allocated in its private user context data and
set the pointed-to lws_tokens members to point to its buffer.
LWS_EXT_CB_PACKET_TX_PRESEND: this works the same way as
LWS_EXT_CB_PACKET_RX_PREPARSE above, except it gives the
extension a chance to change websocket data just before it will
be sent out. Using the same lws_token pointer scheme in in,
the extension can change the buffer and the length to be
transmitted how it likes. Again if it wants to grow the
buffer safely, it should copy the data into its own buffer and
set the lws_tokens token pointer to it.
LWS_EXT_CB_ARGS_VALIDATE:</pre> </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a class="anchor" id="gacc9f55936dc165257a2e1f7d47bce89e"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="group__extensions.html#gacc9f55936dc165257a2e1f7d47bce89e">lws_ext_options_types</a></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p>enum lws_ext_options_types </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" 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>
</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>
</td></tr>
</table>
<div class="fragment"><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; {</div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; <a class="code" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89eaabcf56c456c1ff6e81dc82586a16f14c">EXTARG_NONE</a>, </div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; <a class="code" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea1c86adf924c8786a12bee9687094673e">EXTARG_DEC</a>, </div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; <a class="code" href="group__extensions.html#ggacc9f55936dc165257a2e1f7d47bce89ea5265abe3e1c3f64412f2affe7bffd880">EXTARG_OPT_DEC</a> </div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; <span class="comment">/* Add new things just above here ---^</span></div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160;<span class="comment"> * This is part of the ABI, don&#39;t needlessly break compatibility */</span></div><div class="line"><a name="l00956"></a><span class="lineno"> 956</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:952</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:950</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:951</div></div>
</div><!-- fragment -->
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="ga6fb3e2c3dfb9d64dc87026a4e99c128b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_ext_parse_options </td>
<td>(</td>
<td class="paramtype">const struct <a class="el" href="structlws__extension.html">lws_extension</a> *&#160;</td>
<td class="paramname"><em>ext</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>ext_user</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const struct <a class="el" href="structlws__ext__options.html">lws_ext_options</a> *&#160;</td>
<td class="paramname"><em>opts</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>o</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__extensions.html#ga6fb3e2c3dfb9d64dc87026a4e99c128b">lws_ext_parse_options()</a> - deal with parsing negotiated extension options</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">ext</td><td>related extension struct </td></tr>
<tr><td class="paramname">wsi</td><td>websocket connection </td></tr>
<tr><td class="paramname">ext_user</td><td>per-connection extension private data </td></tr>
<tr><td class="paramname">opts</td><td>list of supported options </td></tr>
<tr><td class="paramname">o</td><td>option string to parse </td></tr>
<tr><td class="paramname">len</td><td>length </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga4cdbe42d872e21a448a947714d6c607e"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_EXTERN int lws_extension_callback_pm_deflate </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>context</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const struct <a class="el" href="structlws__extension.html">lws_extension</a> *&#160;</td>
<td class="paramname"><em>ext</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">enum lws_extension_callback_reasons&#160;</td>
<td class="paramname"><em>reason</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>user</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>in</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__extensions.html#ga4cdbe42d872e21a448a947714d6c607e">lws_extension_callback_pm_deflate()</a> - extension for RFC7692</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>lws context </td></tr>
<tr><td class="paramname">ext</td><td>related <a class="el" href="structlws__extension.html">lws_extension</a> struct </td></tr>
<tr><td class="paramname">wsi</td><td>websocket connection </td></tr>
<tr><td class="paramname">reason</td><td>incoming callback reason </td></tr>
<tr><td class="paramname">user</td><td>per-connection extension private data </td></tr>
<tr><td class="paramname">in</td><td>pointer parameter </td></tr>
<tr><td class="paramname">len</td><td>length parameter</td></tr>
</table>
</dd>
</dl>
<p>Built-in callback implementing RFC7692 permessage-deflate </p>
</div>
</div>
<a class="anchor" id="gae0e24e1768f83a7fb07896ce975704b9"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_set_extension_option </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>ext_name</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>opt_name</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>opt_val</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__extensions.html#gae0e24e1768f83a7fb07896ce975704b9">lws_set_extension_option()</a>: set extension option if possible</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>websocket connection </td></tr>
<tr><td class="paramname">ext_name</td><td>name of ext, like "permessage-deflate" </td></tr>
<tr><td class="paramname">opt_name</td><td>name of option, like "rx_buf_size" </td></tr>
<tr><td class="paramname">opt_val</td><td>value to set option to </td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

View file

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

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

@ -0,0 +1,124 @@
<!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: file operation wrapping</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__fops.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">file operation wrapping</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__plat__file__ops.html">lws_plat_file_ops</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gac08aef64c4c34647ed699b24759b6b0e"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN struct <a class="el" href="structlws__plat__file__ops.html">lws_plat_file_ops</a> *LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fops.html#gac08aef64c4c34647ed699b24759b6b0e">lws_get_fops</a> (struct lws_context *context)</td></tr>
<tr class="separator:gac08aef64c4c34647ed699b24759b6b0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>File operation wrapping</h2>
<p>Use these helper functions if you want to access a file from the perspective of a specific wsi, which is usually the case. If you just want contextless file access, use the fops callbacks directly with NULL wsi instead of these helpers.</p>
<p>If so, then it calls the platform handler or user overrides where present (as defined in info-&gt;fops)</p>
<p>The advantage from all this is user code can be portable for file operations without having to deal with differences between platforms. </p>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="gac08aef64c4c34647ed699b24759b6b0e"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN struct <a class="el" href="structlws__plat__file__ops.html">lws_plat_file_ops</a>* LWS_WARN_UNUSED_RESULT lws_get_fops </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>context</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__fops.html#gac08aef64c4c34647ed699b24759b6b0e">lws_get_fops()</a> - get current file ops</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>context </td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

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

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

View file

@ -0,0 +1,408 @@
<!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: Form Parsing</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__form-parsing.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Form Parsing<div class="ingroups"><a class="el" href="group__http.html">HTTP</a></div></div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:ga5a70527c0861c2ffa3d29333a6aa7f8e"><td class="memItemLeft" align="right" valign="top">typedef int(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__form-parsing.html#ga5a70527c0861c2ffa3d29333a6aa7f8e">lws_spa_fileupload_cb</a>) (void *data, const char *name, const char *filename, char *buf, int len, enum <a class="el" href="group__form-parsing.html#ga41a74a822771d3dce89751aa3bce28ae">lws_spa_fileupload_states</a> state)</td></tr>
<tr class="separator:ga5a70527c0861c2ffa3d29333a6aa7f8e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ga41a74a822771d3dce89751aa3bce28ae"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__form-parsing.html#ga41a74a822771d3dce89751aa3bce28ae">lws_spa_fileupload_states</a> { <a class="el" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aead3a958e7719ac273c3ba4f684f00c87f">LWS_UFS_CONTENT</a>,
<a class="el" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea6ce2a55a4c3695cdb640c893d95bd3a7">LWS_UFS_FINAL_CONTENT</a>,
<a class="el" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83">LWS_UFS_OPEN</a>
}</td></tr>
<tr class="separator:ga41a74a822771d3dce89751aa3bce28ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga162f86762173a2bc8c28497941d74815"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN struct lws_spa *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__form-parsing.html#ga162f86762173a2bc8c28497941d74815">lws_spa_create</a> (struct lws *wsi, const char *const *param_names, int count_params, int max_storage, <a class="el" href="group__form-parsing.html#ga5a70527c0861c2ffa3d29333a6aa7f8e">lws_spa_fileupload_cb</a> opt_cb, void *opt_data)</td></tr>
<tr class="separator:ga162f86762173a2bc8c28497941d74815"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga9ad9ebf5ea1a7108415ed7e04cb231d2"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__form-parsing.html#ga9ad9ebf5ea1a7108415ed7e04cb231d2">lws_spa_process</a> (struct lws_spa *spa, const char *in, int len)</td></tr>
<tr class="separator:ga9ad9ebf5ea1a7108415ed7e04cb231d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga83835bf250ee3d4a60f36a182f2b8d24"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__form-parsing.html#ga83835bf250ee3d4a60f36a182f2b8d24">lws_spa_finalize</a> (struct lws_spa *spa)</td></tr>
<tr class="separator:ga83835bf250ee3d4a60f36a182f2b8d24"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga3fbe378632f85ec9a14cc2c1687bf05f"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__form-parsing.html#ga3fbe378632f85ec9a14cc2c1687bf05f">lws_spa_get_length</a> (struct lws_spa *spa, int n)</td></tr>
<tr class="separator:ga3fbe378632f85ec9a14cc2c1687bf05f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga2da476217166da02704b90d3a8d4f3cd"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__form-parsing.html#ga2da476217166da02704b90d3a8d4f3cd">lws_spa_get_string</a> (struct lws_spa *spa, int n)</td></tr>
<tr class="separator:ga2da476217166da02704b90d3a8d4f3cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaaa482f07dad3f04b391cccf0a814e13b"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__form-parsing.html#gaaa482f07dad3f04b391cccf0a814e13b">lws_spa_destroy</a> (struct lws_spa *spa)</td></tr>
<tr class="separator:gaaa482f07dad3f04b391cccf0a814e13b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>POSTed form parsing functions</h2>
<p>These lws_spa (stateful post arguments) apis let you parse and urldecode POSTed form arguments, both using simple urlencoded and multipart transfer encoding.</p>
<p>It's capable of handling file uploads as well a named input parsing, and the apis are the same for both form upload styles.</p>
<p>You feed it a list of parameter names and it creates pointers to the urldecoded arguments: file upload parameters pass the file data in chunks to a user-supplied callback as they come.</p>
<p>Since it's stateful, it handles the incoming data needing more than one POST_BODY callback and has no limit on uploaded file size. </p>
<h2 class="groupheader">Typedef Documentation</h2>
<a class="anchor" id="ga5a70527c0861c2ffa3d29333a6aa7f8e"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef int(* lws_spa_fileupload_cb) (void *data, const char *name, const char *filename, char *buf, int len, enum <a class="el" href="group__form-parsing.html#ga41a74a822771d3dce89751aa3bce28ae">lws_spa_fileupload_states</a> state)</td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__form-parsing.html#ga5a70527c0861c2ffa3d29333a6aa7f8e">lws_spa_fileupload_cb()</a> - callback to receive file upload data</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">data</td><td>opt_data pointer set in lws_spa_create </td></tr>
<tr><td class="paramname">name</td><td>name of the form field being uploaded </td></tr>
<tr><td class="paramname">filename</td><td>original filename from client </td></tr>
<tr><td class="paramname">buf</td><td>start of data to receive </td></tr>
<tr><td class="paramname">len</td><td>length of data to receive </td></tr>
<tr><td class="paramname">state</td><td>information about how this call relates to file</td></tr>
</table>
</dd>
</dl>
<p>Notice name and filename shouldn't be trusted, as they are passed from HTTP provided by the client. </p>
</div>
</div>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a class="anchor" id="ga41a74a822771d3dce89751aa3bce28ae"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="group__form-parsing.html#ga41a74a822771d3dce89751aa3bce28ae">lws_spa_fileupload_states</a></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p>enum lws_spa_fileupload_states </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" 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>
</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>
</td></tr>
</table>
<div class="fragment"><div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>&#160; {</div><div class="line"><a name="l02553"></a><span class="lineno"> 2553</span>&#160; <a class="code" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aead3a958e7719ac273c3ba4f684f00c87f">LWS_UFS_CONTENT</a>,</div><div class="line"><a name="l02555"></a><span class="lineno"> 2555</span>&#160; <a class="code" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea6ce2a55a4c3695cdb640c893d95bd3a7">LWS_UFS_FINAL_CONTENT</a>,</div><div class="line"><a name="l02557"></a><span class="lineno"> 2557</span>&#160; <a class="code" href="group__form-parsing.html#gga41a74a822771d3dce89751aa3bce28aea2d25de44865bd44e5a3903a2bab9ca83">LWS_UFS_OPEN</a></div><div class="line"><a name="l02559"></a><span class="lineno"> 2559</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:2555</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:2557</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:2553</div></div>
</div><!-- fragment -->
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="ga162f86762173a2bc8c28497941d74815"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN struct lws_spa* lws_spa_create </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *const *&#160;</td>
<td class="paramname"><em>param_names</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>count_params</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>max_storage</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__form-parsing.html#ga5a70527c0861c2ffa3d29333a6aa7f8e">lws_spa_fileupload_cb</a>&#160;</td>
<td class="paramname"><em>opt_cb</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>opt_data</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__form-parsing.html#ga162f86762173a2bc8c28497941d74815">lws_spa_create()</a> - create urldecode parser</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>lws connection (used to find Content Type) </td></tr>
<tr><td class="paramname">param_names</td><td>array of form parameter names, like "username" </td></tr>
<tr><td class="paramname">count_params</td><td>count of param_names </td></tr>
<tr><td class="paramname">max_storage</td><td>total amount of form parameter values we can store </td></tr>
<tr><td class="paramname">opt_cb</td><td>NULL, or callback to receive file upload data. </td></tr>
<tr><td class="paramname">opt_data</td><td>NULL, or user pointer provided to opt_cb.</td></tr>
</table>
</dd>
</dl>
<p>Creates a urldecode parser and initializes it.</p>
<p>opt_cb can be NULL if you just want normal name=value parsing, however if one or more entries in your form are bulk data (file transfer), you can provide this callback and filter on the name callback parameter to treat that urldecoded data separately. The callback should return -1 in case of fatal error, and 0 if OK. </p>
</div>
</div>
<a class="anchor" id="gaaa482f07dad3f04b391cccf0a814e13b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_spa_destroy </td>
<td>(</td>
<td class="paramtype">struct lws_spa *&#160;</td>
<td class="paramname"><em>spa</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__form-parsing.html#gaaa482f07dad3f04b391cccf0a814e13b">lws_spa_destroy()</a> - destroy parser object</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">spa</td><td>the parser object previously created </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga83835bf250ee3d4a60f36a182f2b8d24"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_spa_finalize </td>
<td>(</td>
<td class="paramtype">struct lws_spa *&#160;</td>
<td class="paramname"><em>spa</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__form-parsing.html#ga83835bf250ee3d4a60f36a182f2b8d24">lws_spa_finalize()</a> - indicate incoming data completed</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">spa</td><td>the parser object previously created </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga3fbe378632f85ec9a14cc2c1687bf05f"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_spa_get_length </td>
<td>(</td>
<td class="paramtype">struct lws_spa *&#160;</td>
<td class="paramname"><em>spa</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>n</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__form-parsing.html#ga3fbe378632f85ec9a14cc2c1687bf05f">lws_spa_get_length()</a> - return length of parameter value</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">spa</td><td>the parser object previously created </td></tr>
<tr><td class="paramname">n</td><td>parameter ordinal to return length of value for </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga2da476217166da02704b90d3a8d4f3cd"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN const char* lws_spa_get_string </td>
<td>(</td>
<td class="paramtype">struct lws_spa *&#160;</td>
<td class="paramname"><em>spa</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>n</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__form-parsing.html#ga2da476217166da02704b90d3a8d4f3cd">lws_spa_get_string()</a> - return pointer to parameter value </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">spa</td><td>the parser object previously created </td></tr>
<tr><td class="paramname">n</td><td>parameter ordinal to return pointer to value for </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga9ad9ebf5ea1a7108415ed7e04cb231d2"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_spa_process </td>
<td>(</td>
<td class="paramtype">struct lws_spa *&#160;</td>
<td class="paramname"><em>spa</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>in</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__form-parsing.html#ga9ad9ebf5ea1a7108415ed7e04cb231d2">lws_spa_process()</a> - parses a chunk of input data</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">spa</td><td>the parser object previously created </td></tr>
<tr><td class="paramname">in</td><td>incoming, urlencoded data </td></tr>
<tr><td class="paramname">len</td><td>count of bytes valid at </td></tr>
<tr><td class="paramname">in</td><td></td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

View file

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

View file

@ -0,0 +1,169 @@
<!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: plugin: generic-sessions</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__generic-sessions.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#enum-members">Enumerations</a> </div>
<div class="headertitle">
<div class="title">plugin: generic-sessions<div class="ingroups"><a class="el" href="group__Protocols-and-Plugins.html">Protocols and Plugins</a></div></div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlwsgw__hash__bin.html">lwsgw_hash_bin</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlwsgw__hash.html">lwsgw_hash</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__session__info.html">lws_session_info</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__gs__event__args.html">lws_gs_event_args</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ga7c2dc7bfb4ccb91c5d771f9e9ea237e1"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__generic-sessions.html#ga7c2dc7bfb4ccb91c5d771f9e9ea237e1">lwsgs_auth_bits</a> { <a class="el" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a81e63075115dedd150265d81b8f7fa57">LWSGS_AUTH_LOGGED_IN</a> = 1,
<a class="el" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a0657a9e846814781b128c397fe4b10bf">LWSGS_AUTH_ADMIN</a> = 2,
<a class="el" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a5a607e4668d20cadada62c4b8007f887">LWSGS_AUTH_VERIFIED</a> = 4,
<a class="el" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a2cd8fb86e3b85c106e7711c03f0ddd0a">LWSGS_AUTH_FORGOT_FLOW</a> = 8
}</td></tr>
<tr class="separator:ga7c2dc7bfb4ccb91c5d771f9e9ea237e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa93946b3d921072209d5cd8cdfa5332e"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__generic-sessions.html#gaa93946b3d921072209d5cd8cdfa5332e">lws_gs_event</a> { <a class="el" href="group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ea596010a165bf13473c5eea3a34cd4308">LWSGSE_CREATED</a>,
<a class="el" href="group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ead908cdc5689c5d22c9d3c8934e94dcde">LWSGSE_DELETED</a>
}</td></tr>
<tr class="separator:gaa93946b3d921072209d5cd8cdfa5332e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>Plugin Generic-sessions related</h2>
<p>generic-sessions plugin provides a reusable, generic session and login / register / forgot password framework including email verification. </p>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a class="anchor" id="gaa93946b3d921072209d5cd8cdfa5332e"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="group__generic-sessions.html#gaa93946b3d921072209d5cd8cdfa5332e">lws_gs_event</a></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p>enum lws_gs_event </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" 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>
</td></tr>
</table>
<div class="fragment"><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; {</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; <a class="code" href="group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ea596010a165bf13473c5eea3a34cd4308">LWSGSE_CREATED</a>, </div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; <a class="code" href="group__generic-sessions.html#ggaa93946b3d921072209d5cd8cdfa5332ead908cdc5689c5d22c9d3c8934e94dcde">LWSGSE_DELETED</a> </div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</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:1313</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:1312</div></div>
</div><!-- fragment -->
</div>
</div>
<a class="anchor" id="ga7c2dc7bfb4ccb91c5d771f9e9ea237e1"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="group__generic-sessions.html#ga7c2dc7bfb4ccb91c5d771f9e9ea237e1">lwsgs_auth_bits</a></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p>enum lwsgs_auth_bits </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" 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>
</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>
</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>
</td></tr>
</table>
<div class="fragment"><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; {</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; <a class="code" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a81e63075115dedd150265d81b8f7fa57">LWSGS_AUTH_LOGGED_IN</a> = 1, </div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; <a class="code" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a0657a9e846814781b128c397fe4b10bf">LWSGS_AUTH_ADMIN</a> = 2, </div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; <a class="code" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a5a607e4668d20cadada62c4b8007f887">LWSGS_AUTH_VERIFIED</a> = 4, </div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; <a class="code" href="group__generic-sessions.html#gga7c2dc7bfb4ccb91c5d771f9e9ea237e1a2cd8fb86e3b85c106e7711c03f0ddd0a">LWSGS_AUTH_FORGOT_FLOW</a> = 8, </div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</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:1296</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:1297</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:1295</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:1294</div></div>
</div><!-- fragment -->
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

View file

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

View file

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

View file

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

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

@ -0,0 +1,249 @@
<!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: HTTP</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__http.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#groups">Modules</a> &#124;
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">HTTP</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
Modules</h2></td></tr>
<tr class="memitem:group__form-parsing"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__form-parsing.html">Form Parsing</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:group__html-chunked-substitution"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__html-chunked-substitution.html">HTML Chunked Substitution</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:group__httpft"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__httpft.html">HTTP File transfer</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:group__HTTP-headers-create"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__HTTP-headers-create.html">HTTP headers: create</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:group__HTTP-headers-read"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__HTTP-headers-read.html">HTTP headers: read</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:group__urlendec"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__urlendec.html">Urlencode and Urldecode</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__tokens.html">lws_tokens</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gac8a4a71240857dc6b2ed70456b6923f4"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__http.html#gac8a4a71240857dc6b2ed70456b6923f4">lws_return_http_status</a> (struct lws *wsi, unsigned int code, const char *html_body)</td></tr>
<tr class="separator:gac8a4a71240857dc6b2ed70456b6923f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga8fbf01e473ac421fc33ad9f8da8b8a25"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__http.html#ga8fbf01e473ac421fc33ad9f8da8b8a25">lws_http_redirect</a> (struct lws *wsi, int code, const unsigned char *loc, int len, unsigned char **p, unsigned char *end)</td></tr>
<tr class="separator:ga8fbf01e473ac421fc33ad9f8da8b8a25"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad27aed6c66a41b2b89ffe4da2a309e8a"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__http.html#gad27aed6c66a41b2b89ffe4da2a309e8a">lws_http_transaction_completed</a> (struct lws *wsi)</td></tr>
<tr class="separator:gad27aed6c66a41b2b89ffe4da2a309e8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>Modules related to handling HTTP </p>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="ga8fbf01e473ac421fc33ad9f8da8b8a25"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_http_redirect </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>code</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>loc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>len</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char **&#160;</td>
<td class="paramname"><em>p</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char *&#160;</td>
<td class="paramname"><em>end</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__http.html#ga8fbf01e473ac421fc33ad9f8da8b8a25">lws_http_redirect()</a> - write http redirect into buffer</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>websocket connection </td></tr>
<tr><td class="paramname">code</td><td>HTTP response code (eg, 301) </td></tr>
<tr><td class="paramname">loc</td><td>where to redirect to </td></tr>
<tr><td class="paramname">len</td><td>length of loc </td></tr>
<tr><td class="paramname">p</td><td>pointer current position in buffer (updated as we write) </td></tr>
<tr><td class="paramname">end</td><td>pointer to end of buffer </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gad27aed6c66a41b2b89ffe4da2a309e8a"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_http_transaction_completed </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__http.html#gad27aed6c66a41b2b89ffe4da2a309e8a">lws_http_transaction_completed()</a> - wait for new http transaction or close </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>websocket connection <pre class="fragment"> Returns 1 if the HTTP connection must close now
Returns 0 and resets connection to wait for new HTTP header /
transaction if possible</pre> </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gac8a4a71240857dc6b2ed70456b6923f4"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_return_http_status </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&#160;</td>
<td class="paramname"><em>code</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>html_body</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__http.html#gac8a4a71240857dc6b2ed70456b6923f4">lws_return_http_status()</a> - Return simple http status </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>Websocket instance (available from user callback) </td></tr>
<tr><td class="paramname">code</td><td>Status index, eg, 404 </td></tr>
<tr><td class="paramname">html_body</td><td>User-readable HTML description &lt; 1KB, or NULL <pre class="fragment"> Helper to report HTTP errors back to the client cleanly and
consistently</pre> </td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

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

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

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

@ -0,0 +1,157 @@
<!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: HTTP File transfer</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__httpft.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">HTTP File transfer<div class="ingroups"><a class="el" href="group__http.html">HTTP</a></div></div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem: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>
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="gab393a06d3d2722af4c3f8b06842c80d7"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_serve_http_file </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>file</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>content_type</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>other_headers</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>other_headers_len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__httpft.html#gab393a06d3d2722af4c3f8b06842c80d7">lws_serve_http_file()</a> - Send a file back to the client using http </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>Websocket instance (available from user callback) </td></tr>
<tr><td class="paramname">file</td><td>The file to issue over http </td></tr>
<tr><td class="paramname">content_type</td><td>The http content type, eg, text/html </td></tr>
<tr><td class="paramname">other_headers</td><td>NULL or pointer to header string </td></tr>
<tr><td class="paramname">other_headers_len</td><td>length of the other headers if non-NULL <pre class="fragment"> This function is intended to be called from the callback in response
to http requests from the client. It allows the callback to issue
local files down the http link in a single step.
Returning &lt;0 indicates error and the wsi should be closed. Returning
&gt;0 indicates the file was completely sent and
lws_http_transaction_completed() called on the wsi (and close if != 0)
==0 indicates the file transfer is started and needs more service later,
the wsi should be left alone.</pre> </td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

View file

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

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

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

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

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

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

@ -0,0 +1,432 @@
<!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: Miscellaneous APIs</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__misc.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Miscellaneous APIs</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga58f906c6be0ca80efd813f694569dd4a"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga58f906c6be0ca80efd813f694569dd4a">lws_get_random</a> (struct lws_context *context, void *buf, int len)</td></tr>
<tr class="separator:ga58f906c6be0ca80efd813f694569dd4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gace5171b1dbbc03ec89a98f8afdb5c9af"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#gace5171b1dbbc03ec89a98f8afdb5c9af">lws_daemonize</a> (const char *_lock_path)</td></tr>
<tr class="separator:gace5171b1dbbc03ec89a98f8afdb5c9af"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac6abfc0b2bd5b2f09281a4432bb2f5f0"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN const char *LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#gac6abfc0b2bd5b2f09281a4432bb2f5f0">lws_get_library_version</a> (void)</td></tr>
<tr class="separator:gac6abfc0b2bd5b2f09281a4432bb2f5f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa194584fff9698f3b280658f770ccd0f"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#gaa194584fff9698f3b280658f770ccd0f">lws_wsi_user</a> (struct lws *wsi)</td></tr>
<tr class="separator:gaa194584fff9698f3b280658f770ccd0f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga1ec0d9faac5d3a5824d765c287c043aa"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga1ec0d9faac5d3a5824d765c287c043aa">lws_parse_uri</a> (char *p, const char **prot, const char **ads, int *port, const char **path)</td></tr>
<tr class="separator:ga1ec0d9faac5d3a5824d765c287c043aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga33bf2635033710b25f931b57ed663e1e"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga33bf2635033710b25f931b57ed663e1e">lws_now_secs</a> (void)</td></tr>
<tr class="separator:ga33bf2635033710b25f931b57ed663e1e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga0af4f7d2dd375aeedcfa7eb0e1101c4b"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN struct lws_context *LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga0af4f7d2dd375aeedcfa7eb0e1101c4b">lws_get_context</a> (const struct lws *wsi)</td></tr>
<tr class="separator:ga0af4f7d2dd375aeedcfa7eb0e1101c4b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga629f48268fd1856b54b11172991b97d9"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga629f48268fd1856b54b11172991b97d9">lws_get_count_threads</a> (struct lws_context *context)</td></tr>
<tr class="separator:ga629f48268fd1856b54b11172991b97d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga8930fe36a3f3eefe4a6a4fd499d8e899"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN struct lws *LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga8930fe36a3f3eefe4a6a4fd499d8e899">lws_get_parent</a> (const struct lws *wsi)</td></tr>
<tr class="separator:ga8930fe36a3f3eefe4a6a4fd499d8e899"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gacae4d7b6a8d22e4c2d82ff8b12c1e234"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN struct lws *LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#gacae4d7b6a8d22e4c2d82ff8b12c1e234">lws_get_child</a> (const struct lws *wsi)</td></tr>
<tr class="separator:gacae4d7b6a8d22e4c2d82ff8b12c1e234"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga0e705d498e8c8500649a26ba30a1e106"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0e705d498e8c8500649a26ba30a1e106"></a>
LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><b>lws_read</b> (struct lws *wsi, unsigned char *buf, size_t len)</td></tr>
<tr class="separator:ga0e705d498e8c8500649a26ba30a1e106"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab321ed812f46f6dc7ef9e3ca6f00cf1b"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#gab321ed812f46f6dc7ef9e3ca6f00cf1b">lws_set_allocator</a> (void *(*realloc)(void *ptr, size_t size))</td></tr>
<tr class="separator:gab321ed812f46f6dc7ef9e3ca6f00cf1b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>Miscellaneous APIs</h2>
<p>Various APIs outside of other categories </p>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="gace5171b1dbbc03ec89a98f8afdb5c9af"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_daemonize </td>
<td>(</td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>_lock_path</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__misc.html#gace5171b1dbbc03ec89a98f8afdb5c9af">lws_daemonize()</a>: fill a buffer with platform random data</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">_lock_path</td><td>the filepath to write the lock file</td></tr>
</table>
</dd>
</dl>
<p>Spawn lws as a background process, taking care of various things </p>
</div>
</div>
<a class="anchor" id="gacae4d7b6a8d22e4c2d82ff8b12c1e234"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN struct lws* LWS_WARN_UNUSED_RESULT lws_get_child </td>
<td>(</td>
<td class="paramtype">const struct lws *&#160;</td>
<td class="paramname"><em>wsi</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__misc.html#gacae4d7b6a8d22e4c2d82ff8b12c1e234">lws_get_child()</a> - get child wsi or NULL </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>lws connection</td></tr>
</table>
</dd>
</dl>
<p>Allows you to find a related wsi from the parent wsi. </p>
</div>
</div>
<a class="anchor" id="ga0af4f7d2dd375aeedcfa7eb0e1101c4b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN struct lws_context* LWS_WARN_UNUSED_RESULT lws_get_context </td>
<td>(</td>
<td class="paramtype">const struct lws *&#160;</td>
<td class="paramname"><em>wsi</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p>lws_get_context - Allow geting lws_context from a Websocket connection instance</p>
<p>With this function, users can access context in the callback function. Otherwise users may have to declare context as a global variable.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>Websocket connection instance </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga629f48268fd1856b54b11172991b97d9"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_get_count_threads </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>context</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__misc.html#ga629f48268fd1856b54b11172991b97d9">lws_get_count_threads()</a>: how many service threads the context uses</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>the lws context</td></tr>
</table>
</dd>
</dl>
<p>By default this is always 1, if you asked for more than lws can handle it will clip the number of threads. So you can use this to find out how many threads are actually in use. </p>
</div>
</div>
<a class="anchor" id="gac6abfc0b2bd5b2f09281a4432bb2f5f0"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN const char* LWS_WARN_UNUSED_RESULT lws_get_library_version </td>
<td>(</td>
<td class="paramtype">void&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__misc.html#gac6abfc0b2bd5b2f09281a4432bb2f5f0">lws_get_library_version()</a>: return string describing the version of lws</p>
<p>On unix, also includes the git describe </p>
</div>
</div>
<a class="anchor" id="ga8930fe36a3f3eefe4a6a4fd499d8e899"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN struct lws* LWS_WARN_UNUSED_RESULT lws_get_parent </td>
<td>(</td>
<td class="paramtype">const struct lws *&#160;</td>
<td class="paramname"><em>wsi</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__misc.html#ga8930fe36a3f3eefe4a6a4fd499d8e899">lws_get_parent()</a> - get parent wsi or NULL </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>lws connection</td></tr>
</table>
</dd>
</dl>
<p>Specialized wsi like cgi stdin/out/err are associated to a parent wsi, this allows you to get their parent. </p>
</div>
</div>
<a class="anchor" id="ga58f906c6be0ca80efd813f694569dd4a"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_get_random </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>context</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>buf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__misc.html#ga58f906c6be0ca80efd813f694569dd4a">lws_get_random()</a>: fill a buffer with platform random data</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>the lws context </td></tr>
<tr><td class="paramname">buf</td><td>buffer to fill </td></tr>
<tr><td class="paramname">len</td><td>how much to fill</td></tr>
</table>
</dd>
</dl>
<p>This is intended to be called from the LWS_CALLBACK_RECEIVE callback if it's interested to see if the frame it's dealing with was sent in binary mode. </p>
</div>
</div>
<a class="anchor" id="ga33bf2635033710b25f931b57ed663e1e"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN unsigned long lws_now_secs </td>
<td>(</td>
<td class="paramtype">void&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__misc.html#ga33bf2635033710b25f931b57ed663e1e">lws_now_secs()</a>: return seconds since 1970-1-1 </p>
</div>
</div>
<a class="anchor" id="ga1ec0d9faac5d3a5824d765c287c043aa"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_parse_uri </td>
<td>(</td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>p</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char **&#160;</td>
<td class="paramname"><em>prot</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char **&#160;</td>
<td class="paramname"><em>ads</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int *&#160;</td>
<td class="paramname"><em>port</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char **&#160;</td>
<td class="paramname"><em>path</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p>lws_parse_uri: cut up prot:/ads:port/path into pieces Notice it does so by dropping '\0' into input string and the leading / on the path is consequently lost</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">p</td><td>incoming uri string.. will get written to </td></tr>
<tr><td class="paramname">prot</td><td>result pointer for protocol part (<a href="https://">https://</a>) </td></tr>
<tr><td class="paramname">ads</td><td>result pointer for address part </td></tr>
<tr><td class="paramname">port</td><td>result pointer for port part </td></tr>
<tr><td class="paramname">path</td><td>result pointer for path part </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gab321ed812f46f6dc7ef9e3ca6f00cf1b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN void lws_set_allocator </td>
<td>(</td>
<td class="paramtype">void *(*)(void *ptr, size_t size)&#160;</td>
<td class="paramname"><em>realloc</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__misc.html#gab321ed812f46f6dc7ef9e3ca6f00cf1b">lws_set_allocator()</a> - custom allocator support</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">realloc</td><td>Allows you to replace the allocator (and deallocator) used by lws </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gaa194584fff9698f3b280658f770ccd0f"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN void* lws_wsi_user </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__misc.html#gaa194584fff9698f3b280658f770ccd0f">lws_wsi_user()</a> - get the user data associated with the connection </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>lws connection</td></tr>
</table>
</dd>
</dl>
<p>Not normally needed since it's passed into the callback </p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

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

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

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

@ -0,0 +1,284 @@
<!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: Network related helper APIs</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__net.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Network related helper APIs</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gad0df22db2be9fc65a667a1e83f9a92a4"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN const char *LWS_WARN_UNUSED_RESULT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__net.html#gad0df22db2be9fc65a667a1e83f9a92a4">lws_canonical_hostname</a> (struct lws_context *context)</td></tr>
<tr class="separator:gad0df22db2be9fc65a667a1e83f9a92a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga092e5f473b3347f03ffeef8a950080f3"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__net.html#ga092e5f473b3347f03ffeef8a950080f3">lws_get_peer_addresses</a> (struct lws *wsi, lws_sockfd_type fd, char *name, int name_len, char *rip, int rip_len)</td></tr>
<tr class="separator:ga092e5f473b3347f03ffeef8a950080f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad01014fed09759741b6d23afccfdaacc"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__net.html#gad01014fed09759741b6d23afccfdaacc">lws_get_peer_simple</a> (struct lws *wsi, char *name, int namelen)</td></tr>
<tr class="separator:gad01014fed09759741b6d23afccfdaacc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga869d8bdffb0f2a7ce08e3ce10d6be3d8"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__net.html#ga869d8bdffb0f2a7ce08e3ce10d6be3d8">lws_interface_to_sa</a> (int ipv6, const char *ifname, struct sockaddr_in *addr, size_t addrlen)</td></tr>
<tr class="separator:ga869d8bdffb0f2a7ce08e3ce10d6be3d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>Network related helper APIs</h2>
<p>These wrap miscellaneous useful network-related functions </p>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="gad0df22db2be9fc65a667a1e83f9a92a4"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN const char* LWS_WARN_UNUSED_RESULT lws_canonical_hostname </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>context</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__net.html#gad0df22db2be9fc65a667a1e83f9a92a4">lws_canonical_hostname()</a> - returns this host's hostname</p>
<p>This is typically used by client code to fill in the host parameter when making a client connection. You can only call it after the context has been created.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>Websocket context </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga092e5f473b3347f03ffeef8a950080f3"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN void lws_get_peer_addresses </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">lws_sockfd_type&#160;</td>
<td class="paramname"><em>fd</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>name</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>name_len</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>rip</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>rip_len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__net.html#ga092e5f473b3347f03ffeef8a950080f3">lws_get_peer_addresses()</a> - Get client address information </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>Local struct lws associated with </td></tr>
<tr><td class="paramname">fd</td><td>Connection socket descriptor </td></tr>
<tr><td class="paramname">name</td><td>Buffer to take client address name </td></tr>
<tr><td class="paramname">name_len</td><td>Length of client address name buffer </td></tr>
<tr><td class="paramname">rip</td><td>Buffer to take client address IP dotted quad </td></tr>
<tr><td class="paramname">rip_len</td><td>Length of client address IP buffer <pre class="fragment"> This function fills in name and rip with the name and IP of
the client connected with socket descriptor fd. Names may be
truncated if there is not enough room. If either cannot be
determined, they will be returned as valid zero-length strings.</pre> </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gad01014fed09759741b6d23afccfdaacc"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN const char* lws_get_peer_simple </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>name</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>namelen</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__net.html#gad01014fed09759741b6d23afccfdaacc">lws_get_peer_simple()</a> - Get client address information without RDNS</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>Local struct lws associated with </td></tr>
<tr><td class="paramname">name</td><td>Buffer to take client address name </td></tr>
<tr><td class="paramname">namelen</td><td>Length of client address name buffer</td></tr>
</table>
</dd>
</dl>
<p>This provides a 123.123.123.123 type IP address in name from the peer that has connected to wsi </p>
</div>
</div>
<a class="anchor" id="ga869d8bdffb0f2a7ce08e3ce10d6be3d8"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_interface_to_sa </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>ipv6</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>ifname</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">struct sockaddr_in *&#160;</td>
<td class="paramname"><em>addr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>addrlen</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__net.html#ga869d8bdffb0f2a7ce08e3ce10d6be3d8">lws_interface_to_sa()</a> - Convert interface name or IP to sockaddr struct</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">ipv6</td><td>Allow IPV6 addresses </td></tr>
<tr><td class="paramname">ifname</td><td>Interface name or IP </td></tr>
<tr><td class="paramname">addr</td><td>struct sockaddr_in * to be written </td></tr>
<tr><td class="paramname">addrlen</td><td>Length of addr</td></tr>
</table>
</dd>
</dl>
<p>This converts a textual network interface name to a sockaddr usable by other network functions </p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

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

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

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

@ -0,0 +1,181 @@
<!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: Sanitize / purify SQL and JSON helpers</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__pur.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Sanitize / purify SQL and JSON helpers</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga9cc82f06e5ae7e71458626d7a39a5865"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pur.html#ga9cc82f06e5ae7e71458626d7a39a5865">lws_sql_purify</a> (char *escaped, const char *string, int len)</td></tr>
<tr class="separator:ga9cc82f06e5ae7e71458626d7a39a5865"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab15187efcfa256b7c928562c182b92a3"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pur.html#gab15187efcfa256b7c928562c182b92a3">lws_json_purify</a> (char *escaped, const char *string, int len)</td></tr>
<tr class="separator:gab15187efcfa256b7c928562c182b92a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>Sanitize / purify SQL and JSON helpers</h2>
<p>APIs for escaping untrusted JSON and SQL safely before use </p>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="gab15187efcfa256b7c928562c182b92a3"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN const char* lws_json_purify </td>
<td>(</td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>escaped</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>string</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__pur.html#gab15187efcfa256b7c928562c182b92a3">lws_json_purify()</a> - like strncpy but with escaping for json chars</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">escaped</td><td>output buffer </td></tr>
<tr><td class="paramname">string</td><td>input buffer ('/0' terminated) </td></tr>
<tr><td class="paramname">len</td><td>output buffer max length</td></tr>
</table>
</dd>
</dl>
<p>Because escaping expands the output string, it's not possible to do it in-place, ie, with escaped == string </p>
</div>
</div>
<a class="anchor" id="ga9cc82f06e5ae7e71458626d7a39a5865"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN const char* lws_sql_purify </td>
<td>(</td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>escaped</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>string</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__pur.html#ga9cc82f06e5ae7e71458626d7a39a5865">lws_sql_purify()</a> - like strncpy but with escaping for sql quotes</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">escaped</td><td>output buffer </td></tr>
<tr><td class="paramname">string</td><td>input buffer ('/0' terminated) </td></tr>
<tr><td class="paramname">len</td><td>output buffer max length</td></tr>
</table>
</dd>
</dl>
<p>Because escaping expands the output string, it's not possible to do it in-place, ie, with escaped == string </p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

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

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

View file

@ -0,0 +1,226 @@
<!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: Sending data</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__sending-data.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Sending data</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ga98b099cf8c1c7e38ad78501f270e193d"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sending-data.html#ga98b099cf8c1c7e38ad78501f270e193d">lws_write_protocol</a> { <br />
&#160;&#160;<a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da80e8f169fda236c56bfb795ed62903db">LWS_WRITE_TEXT</a> = 0,
<a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2">LWS_WRITE_BINARY</a> = 1,
<a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da10047eb05b5e1c298151dc47a5b44826">LWS_WRITE_CONTINUATION</a> = 2,
<a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e">LWS_WRITE_HTTP</a> = 3,
<br />
&#160;&#160;<b>LWS_WRITE_PING</b> = 5,
<b>LWS_WRITE_PONG</b> = 6,
<b>LWS_WRITE_HTTP_FINAL</b> = 7,
<a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dafe5a38e940ce56708ac814627e9c0917">LWS_WRITE_HTTP_HEADERS</a> = 8,
<br />
&#160;&#160;<a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3">LWS_WRITE_NO_FIN</a> = 0x40,
<a class="el" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da220d8e8652d9b97fb66e476e2a60ffce">LWS_WRITE_CLIENT_IGNORE_XOR_MASK</a> = 0x80
<br />
}</td></tr>
<tr class="separator:ga98b099cf8c1c7e38ad78501f270e193d"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gafd5fdd285a0e25ba7e3e1051deec1001"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sending-data.html#gafd5fdd285a0e25ba7e3e1051deec1001">lws_write</a> (struct lws *wsi, unsigned char *buf, size_t len, enum <a class="el" href="group__sending-data.html#ga98b099cf8c1c7e38ad78501f270e193d">lws_write_protocol</a> protocol)</td></tr>
<tr class="separator:gafd5fdd285a0e25ba7e3e1051deec1001"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>APIs related to writing data on a connection </p>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a class="anchor" id="ga98b099cf8c1c7e38ad78501f270e193d"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="group__sending-data.html#ga98b099cf8c1c7e38ad78501f270e193d">lws_write_protocol</a></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a 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>
</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>
</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>
</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>
</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>
</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>
</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>
</td></tr>
</table>
<div class="fragment"><div class="line"><a name="l02893"></a><span class="lineno"> 2893</span>&#160; {</div><div class="line"><a name="l02894"></a><span class="lineno"> 2894</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da80e8f169fda236c56bfb795ed62903db">LWS_WRITE_TEXT</a> = 0,</div><div class="line"><a name="l02898"></a><span class="lineno"> 2898</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193daf6486c0dba50c44198100717721d9ab2">LWS_WRITE_BINARY</a> = 1,</div><div class="line"><a name="l02901"></a><span class="lineno"> 2901</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da10047eb05b5e1c298151dc47a5b44826">LWS_WRITE_CONTINUATION</a> = 2,</div><div class="line"><a name="l02904"></a><span class="lineno"> 2904</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dabb6705e1d1327cdda5025be28f07712e">LWS_WRITE_HTTP</a> = 3,</div><div class="line"><a name="l02907"></a><span class="lineno"> 2907</span>&#160; <span class="comment">/* LWS_WRITE_CLOSE is handled by lws_close_reason() */</span></div><div class="line"><a name="l02908"></a><span class="lineno"> 2908</span>&#160; LWS_WRITE_PING = 5,</div><div class="line"><a name="l02909"></a><span class="lineno"> 2909</span>&#160; LWS_WRITE_PONG = 6,</div><div class="line"><a name="l02910"></a><span class="lineno"> 2910</span>&#160;</div><div class="line"><a name="l02911"></a><span class="lineno"> 2911</span>&#160; <span class="comment">/* Same as write_http but we know this write ends the transaction */</span></div><div class="line"><a name="l02912"></a><span class="lineno"> 2912</span>&#160; LWS_WRITE_HTTP_FINAL = 7,</div><div class="line"><a name="l02913"></a><span class="lineno"> 2913</span>&#160;</div><div class="line"><a name="l02914"></a><span class="lineno"> 2914</span>&#160; <span class="comment">/* HTTP2 */</span></div><div class="line"><a name="l02915"></a><span class="lineno"> 2915</span>&#160;</div><div class="line"><a name="l02916"></a><span class="lineno"> 2916</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193dafe5a38e940ce56708ac814627e9c0917">LWS_WRITE_HTTP_HEADERS</a> = 8,</div><div class="line"><a name="l02923"></a><span class="lineno"> 2923</span>&#160; <span class="comment">/****** add new things just above ---^ ******/</span></div><div class="line"><a name="l02924"></a><span class="lineno"> 2924</span>&#160;</div><div class="line"><a name="l02925"></a><span class="lineno"> 2925</span>&#160; <span class="comment">/* flags */</span></div><div class="line"><a name="l02926"></a><span class="lineno"> 2926</span>&#160;</div><div class="line"><a name="l02927"></a><span class="lineno"> 2927</span>&#160; <a class="code" href="group__sending-data.html#gga98b099cf8c1c7e38ad78501f270e193da115440f272a5d55518adfc8099acfee3">LWS_WRITE_NO_FIN</a> = 0x40,</div><div class="line"><a name="l02930"></a><span class="lineno"> 2930</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="l02934"></a><span class="lineno"> 2934</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:2904</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:2927</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:2894</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:2898</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:2930</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:2901</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:2916</div></div>
</div><!-- fragment -->
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="gafd5fdd285a0e25ba7e3e1051deec1001"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_write </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char *&#160;</td>
<td class="paramname"><em>buf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>len</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">enum <a class="el" href="group__sending-data.html#ga98b099cf8c1c7e38ad78501f270e193d">lws_write_protocol</a>&#160;</td>
<td class="paramname"><em>protocol</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__sending-data.html#gafd5fdd285a0e25ba7e3e1051deec1001">lws_write()</a> - Apply protocol then write data to client </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>Websocket instance (available from user callback) </td></tr>
<tr><td class="paramname">buf</td><td>The data to send. For data being sent on a websocket connection (ie, not default http), this buffer MUST have LWS_PRE bytes valid BEFORE the pointer. This is so the protocol header data can be added in-situ. </td></tr>
<tr><td class="paramname">len</td><td>Count of the data bytes in the payload starting from buf </td></tr>
<tr><td class="paramname">protocol</td><td>Use LWS_WRITE_HTTP to reply to an http connection, and one of LWS_WRITE_BINARY or LWS_WRITE_TEXT to send appropriate data on a websockets connection. Remember to allow the extra bytes before and after buf if LWS_WRITE_BINARY or LWS_WRITE_TEXT are used.</td></tr>
</table>
</dd>
</dl>
<p>This function provides the way to issue data back to the client for both http and websocket protocols.</p>
<p>IMPORTANT NOTICE!</p>
<p>When sending with websocket protocol</p>
<p>LWS_WRITE_TEXT, LWS_WRITE_BINARY, LWS_WRITE_CONTINUATION, LWS_WRITE_PING, LWS_WRITE_PONG</p>
<p>the send buffer has to have LWS_PRE bytes valid BEFORE the buffer pointer you pass to <a class="el" href="group__sending-data.html#gafd5fdd285a0e25ba7e3e1051deec1001">lws_write()</a>.</p>
<p>This allows us to add protocol info before and after the data, and send as one packet on the network without payload copying, for maximum efficiency.</p>
<p>So for example you need this kind of code to use lws_write with a 128-byte payload</p>
<p>char buf[LWS_PRE + 128];</p>
<p>// fill your part of the buffer... for example here it's all zeros memset(&amp;buf[LWS_PRE], 0, 128);</p>
<p>lws_write(wsi, &amp;buf[LWS_PRE], 128, LWS_WRITE_TEXT);</p>
<p>When sending HTTP, with</p>
<p>LWS_WRITE_HTTP, LWS_WRITE_HTTP_HEADERS LWS_WRITE_HTTP_FINAL</p>
<p>there is no protocol data prepended, and don't need to take care about the LWS_PRE bytes valid before the buffer pointer.</p>
<p>LWS_PRE is at least the frame nonce + 2 header + 8 length LWS_SEND_BUFFER_POST_PADDING is deprecated, it's now 0 and can be left off. The example apps no longer use it.</p>
<p>Pad LWS_PRE to the CPU word size, so that word references to the address immediately after the padding won't cause an unaligned access error. Sometimes for performance reasons the recommended padding is even larger than sizeof(void *). </p><pre class="fragment"> In the case of sending using websocket protocol, be sure to allocate
valid storage before and after buf as explained above. This scheme
allows maximum efficiency of sending data and protocol in a single
packet while not burdening the user code with any protocol knowledge.
Return may be -1 for a fatal error needing connection close, or 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>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

View file

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

View file

@ -0,0 +1,328 @@
<!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: Built-in service loop entry</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__service.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Built-in service loop entry</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gaf95bd0c663d6516a0c80047d9b1167a8"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8">lws_service</a> (struct lws_context *context, int timeout_ms)</td></tr>
<tr class="separator:gaf95bd0c663d6516a0c80047d9b1167a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga9b3cc4473fd8848e5bbee7f310712939"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__service.html#ga9b3cc4473fd8848e5bbee7f310712939">lws_service_tsi</a> (struct lws_context *context, int timeout_ms, int tsi)</td></tr>
<tr class="separator:ga9b3cc4473fd8848e5bbee7f310712939"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga29c246707997ab7a466aa709aecd2d7b"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__service.html#ga29c246707997ab7a466aa709aecd2d7b">lws_cancel_service_pt</a> (struct lws *wsi)</td></tr>
<tr class="separator:ga29c246707997ab7a466aa709aecd2d7b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga53e3d0801dfda7960a7249dd559e68a2"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__service.html#ga53e3d0801dfda7960a7249dd559e68a2">lws_cancel_service</a> (struct lws_context *context)</td></tr>
<tr class="separator:ga53e3d0801dfda7960a7249dd559e68a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad82efa5466d14a9f05aa06416375b28d"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__service.html#gad82efa5466d14a9f05aa06416375b28d">lws_service_fd</a> (struct lws_context *context, struct <a class="el" href="structlws__pollfd.html">lws_pollfd</a> *<a class="el" href="structpollfd.html">pollfd</a>)</td></tr>
<tr class="separator:gad82efa5466d14a9f05aa06416375b28d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaebf426eda371ba23642fc11d8e0ace6b"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__service.html#gaebf426eda371ba23642fc11d8e0ace6b">lws_service_fd_tsi</a> (struct lws_context *context, struct <a class="el" href="structlws__pollfd.html">lws_pollfd</a> *<a class="el" href="structpollfd.html">pollfd</a>, int tsi)</td></tr>
<tr class="separator:gaebf426eda371ba23642fc11d8e0ace6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<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>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN void lws_cancel_service </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>context</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__service.html#ga53e3d0801dfda7960a7249dd559e68a2">lws_cancel_service()</a> - Cancel wait for new pending socket activity </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>Websocket context <pre class="fragment"> This function let a call to lws_service() waiting for a timeout
immediately return.
What it basically does is provide a fake event that will be swallowed,
so the wait in poll() is ended. That's useful because poll() doesn't
attend to changes in POLLIN/OUT/ERR until it re-enters the wait.</pre> </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga29c246707997ab7a466aa709aecd2d7b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN void lws_cancel_service_pt </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__service.html#ga29c246707997ab7a466aa709aecd2d7b">lws_cancel_service_pt()</a> - Cancel servicing of pending socket activity on one thread </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>Cancel service on the thread this wsi is serviced by <pre class="fragment"> This function lets a call to lws_service() waiting for a timeout
immediately return.
It works by creating a phony event and then swallowing it silently.
The reason it may be needed is when waiting in poll(), changes to
the event masks are ignored by the OS until poll() is reentered. This
lets you halt the poll() wait and make the reentry happen immediately
instead of having the wait out the rest of the poll timeout.</pre> </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gaf95bd0c663d6516a0c80047d9b1167a8"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_service </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>context</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>timeout_ms</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8">lws_service()</a> - Service any pending websocket activity </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>Websocket context </td></tr>
<tr><td class="paramname">timeout_ms</td><td>Timeout for poll; 0 means return immediately if nothing needed service otherwise block and service immediately, returning after the timeout if nothing needed service.</td></tr>
</table>
</dd>
</dl>
<p>This function deals with any pending websocket traffic, for three kinds of event. It handles these events on both server and client types of connection the same.</p>
<p>1) Accept new connections to our context's server</p>
<p>2) Call the receive callback for incoming frame data received by server or client connections.</p>
<p>You need to call this service function periodically to all the above functions to happen; if your application is single-threaded you can just call it in your main event loop.</p>
<p>Alternatively you can fork a new process that asynchronously handles calling this service in a loop. In that case you are happy if this call blocks your thread until it needs to take care of something and would call it with a large nonzero timeout. Your loop then takes no CPU while there is nothing happening.</p>
<p>If you are calling it in a single-threaded app, you don't want it to wait around blocking other things in your loop from happening, so you would call it with a timeout_ms of 0, so it returns immediately if nothing is pending, or as soon as it services whatever was pending. </p>
</div>
</div>
<a class="anchor" id="gad82efa5466d14a9f05aa06416375b28d"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_service_fd </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>context</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">struct <a class="el" href="structlws__pollfd.html">lws_pollfd</a> *&#160;</td>
<td class="paramname"><em>pollfd</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__service.html#gad82efa5466d14a9f05aa06416375b28d">lws_service_fd()</a> - Service polled socket with something waiting </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>Websocket context </td></tr>
<tr><td class="paramname">pollfd</td><td>The pollfd entry describing the socket fd and which events happened.</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>
</div>
</div>
<a class="anchor" id="gaebf426eda371ba23642fc11d8e0ace6b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_service_fd_tsi </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>context</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">struct <a class="el" href="structlws__pollfd.html">lws_pollfd</a> *&#160;</td>
<td class="paramname"><em>pollfd</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>tsi</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__service.html#gaebf426eda371ba23642fc11d8e0ace6b">lws_service_fd_tsi()</a> - Service polled socket in specific service thread </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>Websocket context </td></tr>
<tr><td class="paramname">pollfd</td><td>The pollfd entry describing the socket fd and which events happened. </td></tr>
<tr><td class="paramname">tsi</td><td>thread service index</td></tr>
</table>
</dd>
</dl>
<p>Same as <a class="el" href="group__service.html#gad82efa5466d14a9f05aa06416375b28d">lws_service_fd()</a> but used with multiple service threads </p>
</div>
</div>
<a class="anchor" id="ga9b3cc4473fd8848e5bbee7f310712939"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_service_tsi </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>context</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>timeout_ms</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>tsi</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8">lws_service()</a> - Service any pending websocket activity</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>Websocket context </td></tr>
<tr><td class="paramname">timeout_ms</td><td>Timeout for poll; 0 means return immediately if nothing needed service otherwise block and service immediately, returning after the timeout if nothing needed service.</td></tr>
</table>
</dd>
</dl>
<p>Same as <a class="el" href="group__service.html#gaf95bd0c663d6516a0c80047d9b1167a8">lws_service()</a>, but for a specific thread service index. Only needed if you are spawning multiple service threads. </p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

View file

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

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

@ -0,0 +1,234 @@
<!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: SHA and B64 helpers</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__sha.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">SHA and B64 helpers</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga7b09ab74646266f0b555103b3bb8dfe5"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN unsigned char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5">lws_SHA1</a> (const unsigned char *d, size_t n, unsigned char *md)</td></tr>
<tr class="separator:ga7b09ab74646266f0b555103b3bb8dfe5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf39765e4a3b413efb65e4698b2ec3575"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sha.html#gaf39765e4a3b413efb65e4698b2ec3575">lws_b64_encode_string</a> (const char *in, int in_len, char *out, int out_size)</td></tr>
<tr class="separator:gaf39765e4a3b413efb65e4698b2ec3575"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga66316e6a5a0644a09d5a10e919dfdd8d"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sha.html#ga66316e6a5a0644a09d5a10e919dfdd8d">lws_b64_decode_string</a> (const char *in, char *out, int out_size)</td></tr>
<tr class="separator:ga66316e6a5a0644a09d5a10e919dfdd8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>SHA and B64 helpers</h2>
<p>These provide SHA-1 and B64 helper apis </p>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="ga66316e6a5a0644a09d5a10e919dfdd8d"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_b64_decode_string </td>
<td>(</td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>in</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>out</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>out_size</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__sha.html#ga66316e6a5a0644a09d5a10e919dfdd8d">lws_b64_decode_string()</a>: decode a string from base 64</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">in</td><td>incoming buffer </td></tr>
<tr><td class="paramname">out</td><td>result buffer </td></tr>
<tr><td class="paramname">out_size</td><td>length of result buffer</td></tr>
</table>
</dd>
</dl>
<p>Decodes a string using b64 </p>
</div>
</div>
<a class="anchor" id="gaf39765e4a3b413efb65e4698b2ec3575"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_b64_encode_string </td>
<td>(</td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>in</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>in_len</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>out</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>out_size</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__sha.html#gaf39765e4a3b413efb65e4698b2ec3575">lws_b64_encode_string()</a>: encode a string into base 64</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">in</td><td>incoming buffer </td></tr>
<tr><td class="paramname">in_len</td><td>length of incoming buffer </td></tr>
<tr><td class="paramname">out</td><td>result buffer </td></tr>
<tr><td class="paramname">out_size</td><td>length of result buffer</td></tr>
</table>
</dd>
</dl>
<p>Encodes a string using b64 </p>
</div>
</div>
<a class="anchor" id="ga7b09ab74646266f0b555103b3bb8dfe5"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN unsigned char* lws_SHA1 </td>
<td>(</td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>d</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>n</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char *&#160;</td>
<td class="paramname"><em>md</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__sha.html#ga7b09ab74646266f0b555103b3bb8dfe5">lws_SHA1()</a>: make a SHA-1 digest of a buffer</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">d</td><td>incoming buffer </td></tr>
<tr><td class="paramname">n</td><td>length of incoming buffer </td></tr>
<tr><td class="paramname">md</td><td>buffer for message digest (must be &gt;= 20 bytes)</td></tr>
</table>
</dd>
</dl>
<p>Reduces any size buffer into a 20-byte SHA-1 hash. </p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

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

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

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

@ -0,0 +1,280 @@
<!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: Smtp</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__smtp.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Smtp</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__email.html">lws_email</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ga116be79bf44f9dc2a97f46e051fe4dc0"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__smtp.html#ga116be79bf44f9dc2a97f46e051fe4dc0">lwsgs_smtp_states</a> { <br />
&#160;&#160;<a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c">LGSSMTP_IDLE</a>,
<a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933">LGSSMTP_CONNECTING</a>,
<a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d">LGSSMTP_CONNECTED</a>,
<a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad">LGSSMTP_SENT_HELO</a>,
<br />
&#160;&#160;<a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab">LGSSMTP_SENT_FROM</a>,
<a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83">LGSSMTP_SENT_TO</a>,
<a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14">LGSSMTP_SENT_DATA</a>,
<a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69">LGSSMTP_SENT_BODY</a>,
<br />
&#160;&#160;<a class="el" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5">LGSSMTP_SENT_QUIT</a>
<br />
}</td></tr>
<tr class="separator:ga116be79bf44f9dc2a97f46e051fe4dc0"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga77fc9b56a1bb39484844981ec375fc29"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__smtp.html#ga77fc9b56a1bb39484844981ec375fc29">lws_email_init</a> (struct <a class="el" href="structlws__email.html">lws_email</a> *email, uv_loop_t *loop, int max_content)</td></tr>
<tr class="separator:ga77fc9b56a1bb39484844981ec375fc29"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5e535e346d92a9daf00be33abf79d4eb"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__smtp.html#ga5e535e346d92a9daf00be33abf79d4eb">lws_email_check</a> (struct <a class="el" href="structlws__email.html">lws_email</a> *email)</td></tr>
<tr class="separator:ga5e535e346d92a9daf00be33abf79d4eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga25298a5afc1074e13b2d5711a86432b2"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__smtp.html#ga25298a5afc1074e13b2d5711a86432b2">lws_email_destroy</a> (struct <a class="el" href="structlws__email.html">lws_email</a> *email)</td></tr>
<tr class="separator:ga25298a5afc1074e13b2d5711a86432b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>SMTP related functions</h2>
<p>These apis let you communicate with a local SMTP server to send email from lws. It handles all the SMTP sequencing and protocol actions.</p>
<p>Your system should have postfix, sendmail or another MTA listening on port 25 and able to send email using the "mail" commandline app. Usually distro MTAs are configured for this by default.</p>
<p>It runs via its own libuv events if initialized (which requires giving it a libuv loop to attach to).</p>
<p>It operates using three callbacks, on_next() queries if there is a new email to send, on_get_body() asks for the body of the email, and on_sent() is called after the email is successfully sent.</p>
<p>To use it</p>
<ul>
<li>create an <a class="el" href="structlws__email.html">lws_email</a> struct</li>
<li>initialize data, loop, the email_* strings, max_content_size and the callbacks</li>
<li>call <a class="el" href="group__smtp.html#ga77fc9b56a1bb39484844981ec375fc29">lws_email_init()</a></li>
</ul>
<p>When you have at least one email to send, call <a class="el" href="group__smtp.html#ga5e535e346d92a9daf00be33abf79d4eb">lws_email_check()</a> to schedule starting to send it. </p>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a class="anchor" id="ga116be79bf44f9dc2a97f46e051fe4dc0"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="group__smtp.html#ga116be79bf44f9dc2a97f46e051fe4dc0">lwsgs_smtp_states</a></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p>enum lwsgs_smtp_states - where we are in SMTP protocol sequence </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" 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>
</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>
</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>
</td></tr>
<tr><td class="fieldname"><a class="anchor" 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>
</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>
</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>
</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>
</td></tr>
</table>
<div class="fragment"><div class="line"><a name="l03815"></a><span class="lineno"> 3815</span>&#160; {</div><div class="line"><a name="l03816"></a><span class="lineno"> 3816</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a29e5b0ecf75375b5a643faa3d6222b7c">LGSSMTP_IDLE</a>, </div><div class="line"><a name="l03817"></a><span class="lineno"> 3817</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab89442b7a3ca2b94c3cdcf33756eb933">LGSSMTP_CONNECTING</a>, </div><div class="line"><a name="l03818"></a><span class="lineno"> 3818</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0ab61778f70ecac007b334bb14942eb41d">LGSSMTP_CONNECTED</a>, </div><div class="line"><a name="l03819"></a><span class="lineno"> 3819</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a1dfec948a864205cec875f63cbe0d4ad">LGSSMTP_SENT_HELO</a>, </div><div class="line"><a name="l03820"></a><span class="lineno"> 3820</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a929bb4623ff3f585108aba2a1b047fab">LGSSMTP_SENT_FROM</a>, </div><div class="line"><a name="l03821"></a><span class="lineno"> 3821</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0aae20a0cb95b97a70f6b45d0ed2d5be83">LGSSMTP_SENT_TO</a>, </div><div class="line"><a name="l03822"></a><span class="lineno"> 3822</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a85e3c452950c09a79086bff4b9be5c14">LGSSMTP_SENT_DATA</a>, </div><div class="line"><a name="l03823"></a><span class="lineno"> 3823</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a38fba41f28d754e38079b31418a86a69">LGSSMTP_SENT_BODY</a>, </div><div class="line"><a name="l03824"></a><span class="lineno"> 3824</span>&#160; <a class="code" href="group__smtp.html#gga116be79bf44f9dc2a97f46e051fe4dc0a2c2ed16ffc572326e3040684084b21d5">LGSSMTP_SENT_QUIT</a>, </div><div class="line"><a name="l03825"></a><span class="lineno"> 3825</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:3818</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:3823</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:3816</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:3817</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:3821</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:3820</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:3824</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:3819</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:3822</div></div>
</div><!-- fragment -->
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="ga5e535e346d92a9daf00be33abf79d4eb"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN void lws_email_check </td>
<td>(</td>
<td class="paramtype">struct <a class="el" href="structlws__email.html">lws_email</a> *&#160;</td>
<td class="paramname"><em>email</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__smtp.html#ga5e535e346d92a9daf00be33abf79d4eb">lws_email_check()</a> - Request check for new email</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">email</td><td>struct <a class="el" href="structlws__email.html">lws_email</a> context to check</td></tr>
</table>
</dd>
</dl>
<p>Schedules a check for new emails in 1s... call this when you have queued an email for send. </p>
</div>
</div>
<a class="anchor" id="ga25298a5afc1074e13b2d5711a86432b2"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN void lws_email_destroy </td>
<td>(</td>
<td class="paramtype">struct <a class="el" href="structlws__email.html">lws_email</a> *&#160;</td>
<td class="paramname"><em>email</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__smtp.html#ga25298a5afc1074e13b2d5711a86432b2">lws_email_destroy()</a> - stop using the struct <a class="el" href="structlws__email.html">lws_email</a></p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">email</td><td>the struct <a class="el" href="structlws__email.html">lws_email</a> context</td></tr>
</table>
</dd>
</dl>
<p>Stop sending email using email and free allocations </p>
</div>
</div>
<a class="anchor" id="ga77fc9b56a1bb39484844981ec375fc29"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_email_init </td>
<td>(</td>
<td class="paramtype">struct <a class="el" href="structlws__email.html">lws_email</a> *&#160;</td>
<td class="paramname"><em>email</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uv_loop_t *&#160;</td>
<td class="paramname"><em>loop</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>max_content</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__smtp.html#ga77fc9b56a1bb39484844981ec375fc29">lws_email_init()</a> - Initialize a struct <a class="el" href="structlws__email.html">lws_email</a></p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">email</td><td>struct <a class="el" href="structlws__email.html">lws_email</a> to init </td></tr>
<tr><td class="paramname">loop</td><td>libuv loop to use </td></tr>
<tr><td class="paramname">max_content</td><td>max email content size</td></tr>
</table>
</dd>
</dl>
<p>Prepares a struct <a class="el" href="structlws__email.html">lws_email</a> for use ending SMTP </p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

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

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

View file

@ -0,0 +1,190 @@
<!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: Socket adoption helpers</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__sock-adopt.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Socket adoption helpers</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gabe71b7462afb21c767bdc67334f305af"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN struct lws *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sock-adopt.html#gabe71b7462afb21c767bdc67334f305af">lws_adopt_socket</a> (struct lws_context *context, lws_sockfd_type accept_fd)</td></tr>
<tr class="separator:gabe71b7462afb21c767bdc67334f305af"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab2d045df0f81afe00891aaed312d552b"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN struct lws *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sock-adopt.html#gab2d045df0f81afe00891aaed312d552b">lws_adopt_socket_readbuf</a> (struct lws_context *context, lws_sockfd_type accept_fd, const char *readbuf, size_t len)</td></tr>
<tr class="separator:gab2d045df0f81afe00891aaed312d552b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>Socket adoption helpers</h2>
<p>When integrating with an external app with its own event loop, these can be used to accept connections from someone else's listening socket.</p>
<p>When using lws own event loop, these are not needed. </p>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="gabe71b7462afb21c767bdc67334f305af"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN struct lws* lws_adopt_socket </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>context</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">lws_sockfd_type&#160;</td>
<td class="paramname"><em>accept_fd</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__sock-adopt.html#gabe71b7462afb21c767bdc67334f305af">lws_adopt_socket()</a> - adopt foreign socket as if listen socket accepted it </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>lws context </td></tr>
<tr><td class="paramname">accept_fd</td><td>fd of already-accepted socket to adopt</td></tr>
</table>
</dd>
</dl>
<p>Either returns new wsi bound to accept_fd, or closes accept_fd and returns NULL, having cleaned up any new wsi pieces.</p>
<p>LWS adopts the socket in http serving mode, it's ready to accept an upgrade to ws or just serve http. </p>
</div>
</div>
<a class="anchor" id="gab2d045df0f81afe00891aaed312d552b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN struct lws* lws_adopt_socket_readbuf </td>
<td>(</td>
<td class="paramtype">struct lws_context *&#160;</td>
<td class="paramname"><em>context</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">lws_sockfd_type&#160;</td>
<td class="paramname"><em>accept_fd</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>readbuf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__sock-adopt.html#gab2d045df0f81afe00891aaed312d552b">lws_adopt_socket_readbuf()</a> - adopt foreign socket and first rx as if listen socket accepted it </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>lws context </td></tr>
<tr><td class="paramname">accept_fd</td><td>fd of already-accepted socket to adopt </td></tr>
<tr><td class="paramname">readbuf</td><td>NULL or pointer to data that must be drained before reading from accept_fd </td></tr>
<tr><td class="paramname">len</td><td>The length of the data held at </td></tr>
<tr><td class="paramname">readbuf</td><td>Either returns new wsi bound to accept_fd, or closes accept_fd and returns NULL, having cleaned up any new wsi pieces.</td></tr>
</table>
</dd>
</dl>
<p>LWS adopts the socket in http serving mode, it's ready to accept an upgrade to ws or just serve http.</p>
<p>If your external code did not already read from the socket, you can use <a class="el" href="group__sock-adopt.html#gabe71b7462afb21c767bdc67334f305af">lws_adopt_socket()</a> instead.</p>
<p>This api is guaranteed to use the data at </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">readbuf</td><td>first, before reading from the socket.</td></tr>
</table>
</dd>
</dl>
<p>readbuf is limited to the size of the ah rx buf, currently 2048 bytes. </p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

View file

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

View file

@ -0,0 +1,161 @@
<!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: Connection timeouts</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__timeout.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Connection timeouts</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ga2c0aa4b9c3c55bae7b35cbfac3246c87"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2c0aa4b9c3c55bae7b35cbfac3246c87"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>pending_timeout</b> { <br />
&#160;&#160;<b>NO_PENDING_TIMEOUT</b> = 0,
<b>PENDING_TIMEOUT_AWAITING_PROXY_RESPONSE</b> = 1,
<b>PENDING_TIMEOUT_AWAITING_CONNECT_RESPONSE</b> = 2,
<b>PENDING_TIMEOUT_ESTABLISH_WITH_SERVER</b> = 3,
<br />
&#160;&#160;<b>PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE</b> = 4,
<b>PENDING_TIMEOUT_AWAITING_PING</b> = 5,
<b>PENDING_TIMEOUT_CLOSE_ACK</b> = 6,
<b>PENDING_TIMEOUT_AWAITING_EXTENSION_CONNECT_RESPONSE</b> = 7,
<br />
&#160;&#160;<b>PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE</b> = 8,
<b>PENDING_TIMEOUT_SSL_ACCEPT</b> = 9,
<b>PENDING_TIMEOUT_HTTP_CONTENT</b> = 10,
<b>PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND</b> = 11,
<br />
&#160;&#160;<b>PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE</b> = 12,
<b>PENDING_TIMEOUT_SHUTDOWN_FLUSH</b> = 13,
<b>PENDING_TIMEOUT_CGI</b> = 14,
<b>PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE</b> = 15
<br />
}</td></tr>
<tr class="separator:ga2c0aa4b9c3c55bae7b35cbfac3246c87"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gaced9f9237f6172fed9f730a2af51345a"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__timeout.html#gaced9f9237f6172fed9f730a2af51345a">lws_set_timeout</a> (struct lws *wsi, enum pending_timeout reason, int secs)</td></tr>
<tr class="separator:gaced9f9237f6172fed9f730a2af51345a"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>APIs related to setting connection timeouts </p>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="gaced9f9237f6172fed9f730a2af51345a"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN void lws_set_timeout </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">enum pending_timeout&#160;</td>
<td class="paramname"><em>reason</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>secs</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__timeout.html#gaced9f9237f6172fed9f730a2af51345a">lws_set_timeout()</a> - marks the wsi as subject to a timeout</p>
<p>You will not need this unless you are doing something special</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>Websocket connection instance </td></tr>
<tr><td class="paramname">reason</td><td>timeout reason </td></tr>
<tr><td class="paramname">secs</td><td>how many seconds </td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

View file

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

View file

@ -0,0 +1,182 @@
<!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: Urlencode and Urldecode</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__urlendec.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Urlencode and Urldecode<div class="ingroups"><a class="el" href="group__http.html">HTTP</a></div></div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gabc2888476e50e001c875c1a8abf455b7"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__urlendec.html#gabc2888476e50e001c875c1a8abf455b7">lws_urlencode</a> (char *escaped, const char *string, int len)</td></tr>
<tr class="separator:gabc2888476e50e001c875c1a8abf455b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa373a9c16acdd96c395af61ab915ece3"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__urlendec.html#gaa373a9c16acdd96c395af61ab915ece3">lws_urldecode</a> (char *string, const char *escaped, int len)</td></tr>
<tr class="separator:gaa373a9c16acdd96c395af61ab915ece3"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>HTML chunked Substitution</h2>
<p>APIs for receiving chunks of text, replacing a set of variable names via a callback, and then prepending and appending HTML chunked encoding headers. </p>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="gaa373a9c16acdd96c395af61ab915ece3"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_urldecode </td>
<td>(</td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>string</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>escaped</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__urlendec.html#gaa373a9c16acdd96c395af61ab915ece3">lws_urldecode()</a> - like strncpy but with urldecoding</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">string</td><td>output buffer </td></tr>
<tr><td class="paramname">escaped</td><td>input buffer ('\0' terminated) </td></tr>
<tr><td class="paramname">len</td><td>output buffer max length</td></tr>
</table>
</dd>
</dl>
<p>This is only useful for '\0' terminated strings</p>
<p>Since urldecoding only shrinks the output string, it is possible to do it in-place, ie, string == escaped </p>
</div>
</div>
<a class="anchor" id="gabc2888476e50e001c875c1a8abf455b7"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN const char* lws_urlencode </td>
<td>(</td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>escaped</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>string</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__urlendec.html#gabc2888476e50e001c875c1a8abf455b7">lws_urlencode()</a> - like strncpy but with urlencoding</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">escaped</td><td>output buffer </td></tr>
<tr><td class="paramname">string</td><td>input buffer ('/0' terminated) </td></tr>
<tr><td class="paramname">len</td><td>output buffer max length</td></tr>
</table>
</dd>
</dl>
<p>Because urlencoding expands the output string, it's not possible to do it in-place, ie, with escaped == string </p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,5 @@
var group__urlendec =
[
[ "lws_urldecode", "group__urlendec.html#gaa373a9c16acdd96c395af61ab915ece3", null ],
[ "lws_urlencode", "group__urlendec.html#gabc2888476e50e001c875c1a8abf455b7", null ]
];

392
doc/html/group__usercb.html Normal file

File diff suppressed because one or more lines are too long

46
doc/html/group__usercb.js Normal file
View file

@ -0,0 +1,46 @@
var group__usercb =
[
[ "lws_callback_function", "group__usercb.html#gad4fcb82e68d60ffacca61a3f783a0a2f", null ],
[ "lws_callback_reasons", "group__usercb.html#gad62860e19975ba4c4af401c3cdb6abf7", [
[ "LWS_CALLBACK_ESTABLISHED", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a24d39bf1cfc0bad9d92da9ac1717e439", null ],
[ "LWS_CALLBACK_CLIENT_CONNECTION_ERROR", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad8c6207b0c4e732f3d507f0fb79370e8", null ],
[ "LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa536e574a642ff3ab9e12bff7ba2c6a2", null ],
[ "LWS_CALLBACK_CLIENT_ESTABLISHED", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7e12418eec9bce85735e6460176ab604", null ],
[ "LWS_CALLBACK_CLOSED", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a48a9590e5e18c7920282e094a0bfd9d8", null ],
[ "LWS_CALLBACK_CLOSED_HTTP", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a838b18d255c1b94a533287ba302a2eba", null ],
[ "LWS_CALLBACK_RECEIVE", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a492c1b1c0ac0ed980042ee732fe2990c", null ],
[ "LWS_CALLBACK_RECEIVE_PONG", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2db02fc6e1c17ab62b52109d1aa9d738", null ],
[ "LWS_CALLBACK_CLIENT_RECEIVE", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7abbbe7a0a67c5866ca9109d46823fc5b1", null ],
[ "LWS_CALLBACK_CLIENT_RECEIVE_PONG", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a136a7cec11c3afd13245623bd84e76c9", null ],
[ "LWS_CALLBACK_CLIENT_WRITEABLE", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8e8b2e6dbeac76d8d126947d2166a514", null ],
[ "LWS_CALLBACK_SERVER_WRITEABLE", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a7ec8e2e9557ee02a4fc9f7dec7e2babc", null ],
[ "LWS_CALLBACK_HTTP", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae8d1de0bb56e03aa58cb4d44b18edd2e", null ],
[ "LWS_CALLBACK_HTTP_BODY", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac4c68e00efcf1ff7bda7ada462aff8ae", null ],
[ "LWS_CALLBACK_HTTP_BODY_COMPLETION", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a2fce9a8608220f32abbf1422a5498804", null ],
[ "LWS_CALLBACK_HTTP_FILE_COMPLETION", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa627548e1296e654fcfab463ec3c9587", null ],
[ "LWS_CALLBACK_HTTP_WRITEABLE", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afedadfb3cde37a8ea4c84ed535f26d09", null ],
[ "LWS_CALLBACK_FILTER_NETWORK_CONNECTION", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a026502768778b8d79d62dd0fe4375fc6", null ],
[ "LWS_CALLBACK_FILTER_HTTP_CONNECTION", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a75199176c82c1a56e4a6bbf1cc30c12c", null ],
[ "LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae9734e1d7af2abf291665ce9e4a728d3", null ],
[ "LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7accd8753672d319a30b4b4c2fb775e84d", null ],
[ "LWS_CALLBACK_OPENSSL_LOAD_EXTRA_CLIENT_VERIFY_CERTS", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae4986291b7a810fe290851d73bebeb1c", null ],
[ "LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a06006e98d27e1e884364d88317f83493", null ],
[ "LWS_CALLBACK_OPENSSL_PERFORM_CLIENT_CERT_VERIFICATION", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ae5ad65d779b7eab32ab67ceff91a3bac", null ],
[ "LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a909cc2a7018864b0b71abacc4058fd8f", null ],
[ "LWS_CALLBACK_CONFIRM_EXTENSION_OKAY", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a390da3639296660a78cc1a5dcb19037e", null ],
[ "LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a1ce5b22039ca37ee224d00047596ea46", null ],
[ "LWS_CALLBACK_PROTOCOL_INIT", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ad5d34583e3556e153eda91620b48cc49", null ],
[ "LWS_CALLBACK_PROTOCOL_DESTROY", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a54269ca88508e6efd3afdb9d360a9caa", null ],
[ "LWS_CALLBACK_WSI_CREATE", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7afd8fd77a1cc9405fcb4f26915d7f2d01", null ],
[ "LWS_CALLBACK_WSI_DESTROY", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aca834dc035b7f7486f9ce40fde54fe9e", null ],
[ "LWS_CALLBACK_GET_THREAD_ID", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7adfb41c92e2522712207ef7f2462b5e34", null ],
[ "LWS_CALLBACK_ADD_POLL_FD", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ab69783a9fbf2ca71ad70706bda77b412", null ],
[ "LWS_CALLBACK_DEL_POLL_FD", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a1df60f314710236f9b53efbf468da768", null ],
[ "LWS_CALLBACK_CHANGE_MODE_POLL_FD", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa87d2e82fffa42c3680c7403ef94216e", null ],
[ "LWS_CALLBACK_LOCK_POLL", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a8909732521d379179003d97ab7a05428", null ],
[ "LWS_CALLBACK_UNLOCK_POLL", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a0e9e3dd667c0c42cdbe1a3d921f4fd79", null ],
[ "LWS_CALLBACK_OPENSSL_CONTEXT_REQUIRES_PRIVATE_KEY", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7aa46f705dcf97502e95627ffde614f98b", null ],
[ "LWS_CALLBACK_WS_PEER_INITIATED_CLOSE", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7ac3fc5bbb55e69f90396526287ee84a51", null ],
[ "LWS_CALLBACK_USER", "group__usercb.html#ggad62860e19975ba4c4af401c3cdb6abf7a982579753e70e59a9ea13ce628ac891a", null ]
] ]
];

106
doc/html/group__uv.html Normal file
View file

@ -0,0 +1,106 @@
<!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: libuv helpers</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__uv.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">libuv helpers</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga99099e045993383f251a8026e1e40414"><td class="memItemLeft" align="right" valign="top"><a class="anchor" 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>
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>
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>
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>
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>
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>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2>libuv helpers</h2>
<p>APIs specific to libuv event loop itegration </p>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,153 @@
<!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: Vhost mounts and options</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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__vhost-mounts.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#enum-members">Enumerations</a> </div>
<div class="headertitle">
<div class="title">Vhost mounts and options<div class="ingroups"><a class="el" href="group__context-and-vhost.html">Context-and-vhost</a></div></div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__protocol__vhost__options.html">lws_protocol_vhost_options</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlws__http__mount.html">lws_http_mount</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ga31eca18e50cb4357480f2fcad36ff437"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__vhost-mounts.html#ga31eca18e50cb4357480f2fcad36ff437">lws_mount_protocols</a> { <br />
&#160;&#160;<a class="el" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0">LWSMPRO_HTTP</a> = 0,
<a class="el" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1">LWSMPRO_HTTPS</a> = 1,
<a class="el" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2">LWSMPRO_FILE</a> = 2,
<a class="el" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69">LWSMPRO_CGI</a> = 3,
<br />
&#160;&#160;<a class="el" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970">LWSMPRO_REDIR_HTTP</a> = 4,
<a class="el" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67">LWSMPRO_REDIR_HTTPS</a> = 5,
<a class="el" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da">LWSMPRO_CALLBACK</a> = 6
<br />
}</td></tr>
<tr class="separator:ga31eca18e50cb4357480f2fcad36ff437"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<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>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="group__vhost-mounts.html#ga31eca18e50cb4357480f2fcad36ff437">lws_mount_protocols</a></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p>enum lws_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>
</td></tr>
<tr><td class="fieldname"><a class="anchor" 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>
</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>
</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>
</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>
</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>
</td></tr>
</table>
<div class="fragment"><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160; {</div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0">LWSMPRO_HTTP</a> = 0, </div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1">LWSMPRO_HTTPS</a> = 1, </div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2">LWSMPRO_FILE</a> = 2, </div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69">LWSMPRO_CGI</a> = 3, </div><div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970">LWSMPRO_REDIR_HTTP</a> = 4, </div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67">LWSMPRO_REDIR_HTTPS</a> = 5, </div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160; <a class="code" href="group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da">LWSMPRO_CALLBACK</a> = 6, </div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</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:1749</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:1747</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:1748</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:1750</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:1751</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:1746</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:1752</div></div>
</div><!-- fragment -->
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,36 @@
var group__vhost_mounts =
[
[ "lws_protocol_vhost_options", "structlws__protocol__vhost__options.html", [
[ "name", "structlws__protocol__vhost__options.html#acf9db77f8eb64cd4e314be9b43d8a8b9", null ],
[ "next", "structlws__protocol__vhost__options.html#abc714ddb4171756fc8196e9823a1e21c", null ],
[ "options", "structlws__protocol__vhost__options.html#afd99fbc90be51ea2465b550c2ec47822", null ],
[ "value", "structlws__protocol__vhost__options.html#a0640a92513c70ee6b9b295a9ad1658e7", null ]
] ],
[ "lws_http_mount", "structlws__http__mount.html", [
[ "auth_mask", "structlws__http__mount.html#a614364c770b0bd4db464ad65cddab477", null ],
[ "cache_intermediaries", "structlws__http__mount.html#aabec1a326780aafe11b977000983be0c", null ],
[ "cache_max_age", "structlws__http__mount.html#a4283e30ea89d27ae7d061ad760d1d146", null ],
[ "cache_reusable", "structlws__http__mount.html#a8316dd183ffbef50419a5a4968d35d84", null ],
[ "cache_revalidate", "structlws__http__mount.html#ae137203040c6153694bd88a708da5395", null ],
[ "cgi_timeout", "structlws__http__mount.html#a4a7239d6d4c03986e6e1a72abb6c83aa", null ],
[ "cgienv", "structlws__http__mount.html#ae7b5c0f4c5408061e6ea3a8d281f45af", null ],
[ "def", "structlws__http__mount.html#ae90d1efe7178199fad39de2926902ee4", null ],
[ "extra_mimetypes", "structlws__http__mount.html#a4437423df85ee3dbcae0e15974c89ec7", null ],
[ "interpret", "structlws__http__mount.html#a11ea62b952710d59733dbcf9794a5773", null ],
[ "mount_next", "structlws__http__mount.html#ad878546ae1c399bbca7d7f8a0baf973d", null ],
[ "mountpoint", "structlws__http__mount.html#aa2391bfcada0b7a290b3c6651f64586c", null ],
[ "mountpoint_len", "structlws__http__mount.html#ac8489b60b8f969eb19c9abbdeac90743", null ],
[ "origin", "structlws__http__mount.html#a21d86fd6043ec00e121ababbc29af39a", null ],
[ "origin_protocol", "structlws__http__mount.html#a6a9b1492a0b9749e39bd19932717a0b7", null ],
[ "protocol", "structlws__http__mount.html#a05347d92c3d379809564bd4f3eab259b", null ]
] ],
[ "lws_mount_protocols", "group__vhost-mounts.html#ga31eca18e50cb4357480f2fcad36ff437", [
[ "LWSMPRO_HTTP", "group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a1e9f0842b0e85db50fe648ed4ba9a4b0", null ],
[ "LWSMPRO_HTTPS", "group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437afbd10eb4777517ed1f6bfdcf3b9ea1d1", null ],
[ "LWSMPRO_FILE", "group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a42f2361cfe76cd287fa8fcfc502357e2", null ],
[ "LWSMPRO_CGI", "group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a13ab58b01ac6e05f595977f1e0f0db69", null ],
[ "LWSMPRO_REDIR_HTTP", "group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437aec137a2434851bd856ceebfb697b9970", null ],
[ "LWSMPRO_REDIR_HTTPS", "group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a8894d16316863077dfe530963ca59f67", null ],
[ "LWSMPRO_CALLBACK", "group__vhost-mounts.html#gga31eca18e50cb4357480f2fcad36ff437a946a88cf9c852eed2c0317f4115d19da", null ]
] ]
];

View file

@ -0,0 +1,238 @@
<!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: Websocket Close</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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__wsclose.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Websocket Close</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:gae399c571df32ba532c0ca67da9284985"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wsclose.html#gae399c571df32ba532c0ca67da9284985">lws_close_status</a> { <br />
&#160;&#160;<b>LWS_CLOSE_STATUS_NOSTATUS</b> = 0,
<a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4">LWS_CLOSE_STATUS_NORMAL</a> = 1000,
<a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218">LWS_CLOSE_STATUS_GOINGAWAY</a> = 1001,
<a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98">LWS_CLOSE_STATUS_PROTOCOL_ERR</a> = 1002,
<br />
&#160;&#160;<a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a462c99b05459df700919cfd3f53c8276">LWS_CLOSE_STATUS_UNACCEPTABLE_OPCODE</a> = 1003,
<a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2">LWS_CLOSE_STATUS_RESERVED</a> = 1004,
<a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a4b8a3b7ce6f731e5248e4b0fb64a5044">LWS_CLOSE_STATUS_NO_STATUS</a> = 1005,
<a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a68b3d34bebd88547dcfa5cadba0acd6c">LWS_CLOSE_STATUS_ABNORMAL_CLOSE</a> = 1006,
<br />
&#160;&#160;<a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050">LWS_CLOSE_STATUS_INVALID_PAYLOAD</a> = 1007,
<a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5">LWS_CLOSE_STATUS_POLICY_VIOLATION</a> = 1008,
<a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8">LWS_CLOSE_STATUS_MESSAGE_TOO_LARGE</a> = 1009,
<a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e">LWS_CLOSE_STATUS_EXTENSION_REQUIRED</a> = 1010,
<br />
&#160;&#160;<a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350">LWS_CLOSE_STATUS_UNEXPECTED_CONDITION</a> = 1011,
<a class="el" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390">LWS_CLOSE_STATUS_TLS_FAILURE</a> = 1015,
<b>LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY</b> = 9999
<br />
}</td></tr>
<tr class="separator:gae399c571df32ba532c0ca67da9284985"><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: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>
<tr class="separator:gaa1c863415d1783cd8de7938aa6efa262"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<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>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="group__wsclose.html#gae399c571df32ba532c0ca67da9284985">lws_close_status</a></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p>enum lws_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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</td></tr>
</table>
<div class="fragment"><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; {</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; LWS_CLOSE_STATUS_NOSTATUS = 0,</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4">LWS_CLOSE_STATUS_NORMAL</a> = 1000,</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218">LWS_CLOSE_STATUS_GOINGAWAY</a> = 1001,</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98">LWS_CLOSE_STATUS_PROTOCOL_ERR</a> = 1002,</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a462c99b05459df700919cfd3f53c8276">LWS_CLOSE_STATUS_UNACCEPTABLE_OPCODE</a> = 1003,</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2">LWS_CLOSE_STATUS_RESERVED</a> = 1004,</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a4b8a3b7ce6f731e5248e4b0fb64a5044">LWS_CLOSE_STATUS_NO_STATUS</a> = 1005,</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a68b3d34bebd88547dcfa5cadba0acd6c">LWS_CLOSE_STATUS_ABNORMAL_CLOSE</a> = 1006,</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050">LWS_CLOSE_STATUS_INVALID_PAYLOAD</a> = 1007,</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5">LWS_CLOSE_STATUS_POLICY_VIOLATION</a> = 1008,</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8">LWS_CLOSE_STATUS_MESSAGE_TOO_LARGE</a> = 1009,</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e">LWS_CLOSE_STATUS_EXTENSION_REQUIRED</a> = 1010,</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350">LWS_CLOSE_STATUS_UNEXPECTED_CONDITION</a> = 1011,</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <a class="code" href="group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390">LWS_CLOSE_STATUS_TLS_FAILURE</a> = 1015,</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="comment">/****** add new things just above ---^ ******/</span></div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160;</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY = 9999,</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</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:490</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:501</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:517</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:469</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:495</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:479</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:484</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:466</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:505</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:463</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:472</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:477</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:513</div></div>
</div><!-- fragment -->
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="gaa1c863415d1783cd8de7938aa6efa262"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN void lws_close_reason </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">enum <a class="el" href="group__wsclose.html#gae399c571df32ba532c0ca67da9284985">lws_close_status</a>&#160;</td>
<td class="paramname"><em>status</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char *&#160;</td>
<td class="paramname"><em>buf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p>lws_close_reason - Set reason and aux data to send with Close packet If you are going to return nonzero from the callback requesting the connection to close, you can optionally call this to set the reason the peer will be told if possible.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<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">buf</td><td>to send </td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,19 @@
var group__wsclose =
[
[ "lws_close_status", "group__wsclose.html#gae399c571df32ba532c0ca67da9284985", [
[ "LWS_CLOSE_STATUS_NORMAL", "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a3ffa38d5081b85fb739e02a747ccf2c4", null ],
[ "LWS_CLOSE_STATUS_GOINGAWAY", "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a9737a68759e739856b150ff9dfa30218", null ],
[ "LWS_CLOSE_STATUS_PROTOCOL_ERR", "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a1bb501d212fa4d57053db681b1dfab98", null ],
[ "LWS_CLOSE_STATUS_UNACCEPTABLE_OPCODE", "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a462c99b05459df700919cfd3f53c8276", null ],
[ "LWS_CLOSE_STATUS_RESERVED", "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985af90cb98d983ad3d4c79df9b6f3d4a4d2", null ],
[ "LWS_CLOSE_STATUS_NO_STATUS", "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a4b8a3b7ce6f731e5248e4b0fb64a5044", null ],
[ "LWS_CLOSE_STATUS_ABNORMAL_CLOSE", "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a68b3d34bebd88547dcfa5cadba0acd6c", null ],
[ "LWS_CLOSE_STATUS_INVALID_PAYLOAD", "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a7aef2da0062da606eeb35aaca5cf9050", null ],
[ "LWS_CLOSE_STATUS_POLICY_VIOLATION", "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad09e68295eabdddcba4e332fbea70ae5", null ],
[ "LWS_CLOSE_STATUS_MESSAGE_TOO_LARGE", "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985a2e1f0113494a58e762eed3d22e7080d8", null ],
[ "LWS_CLOSE_STATUS_EXTENSION_REQUIRED", "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ac6a161822783ee873be1c66f48d14e0e", null ],
[ "LWS_CLOSE_STATUS_UNEXPECTED_CONDITION", "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad0869604d79e13700ae5d196a431b350", null ],
[ "LWS_CLOSE_STATUS_TLS_FAILURE", "group__wsclose.html#ggae399c571df32ba532c0ca67da9284985ad2b477a91c8445bf34ecd43977f9b390", null ]
] ],
[ "lws_close_reason", "group__wsclose.html#gaa1c863415d1783cd8de7938aa6efa262", null ]
];

View file

@ -0,0 +1,279 @@
<!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: Websocket status APIs</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(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><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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__wsstatus.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Websocket status APIs</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga2bb3655329b4651cd06f79ee3a764421"><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__wsstatus.html#ga2bb3655329b4651cd06f79ee3a764421">lws_send_pipe_choked</a> (struct lws *wsi)</td></tr>
<tr class="separator:ga2bb3655329b4651cd06f79ee3a764421"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga08e9ee165fca503fd9427d55cfecac37"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wsstatus.html#ga08e9ee165fca503fd9427d55cfecac37">lws_is_final_fragment</a> (struct lws *wsi)</td></tr>
<tr class="separator:ga08e9ee165fca503fd9427d55cfecac37"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga3df5045656dfb6b0e63a38de2dca79d2"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wsstatus.html#ga3df5045656dfb6b0e63a38de2dca79d2">lws_get_reserved_bits</a> (struct lws *wsi)</td></tr>
<tr class="separator:ga3df5045656dfb6b0e63a38de2dca79d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaeca4afc94b1f026034f99cbba37e2f85"><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__wsstatus.html#gaeca4afc94b1f026034f99cbba37e2f85">lws_partial_buffered</a> (struct lws *wsi)</td></tr>
<tr class="separator:gaeca4afc94b1f026034f99cbba37e2f85"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaccd9c59336efad8af0554f79cc5966fd"><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__wsstatus.html#gaccd9c59336efad8af0554f79cc5966fd">lws_frame_is_binary</a> (struct lws *wsi)</td></tr>
<tr class="separator:gaccd9c59336efad8af0554f79cc5966fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga26a140623d202dd2bf2004deb6994baa"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wsstatus.html#ga26a140623d202dd2bf2004deb6994baa">lws_is_ssl</a> (struct lws *wsi)</td></tr>
<tr class="separator:ga26a140623d202dd2bf2004deb6994baa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4ad226d5e01024b4046f4a5a37199aa1"><td class="memItemLeft" align="right" valign="top">LWS_VISIBLE LWS_EXTERN int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wsstatus.html#ga4ad226d5e01024b4046f4a5a37199aa1">lws_is_cgi</a> (struct lws *wsi)</td></tr>
<tr class="separator:ga4ad226d5e01024b4046f4a5a37199aa1"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<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>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_frame_is_binary </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__wsstatus.html#gaccd9c59336efad8af0554f79cc5966fd">lws_frame_is_binary()</a>: true if the current frame was sent in binary mode</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>the connection we are inquiring about</td></tr>
</table>
</dd>
</dl>
<p>This is intended to be called from the LWS_CALLBACK_RECEIVE callback if it's interested to see if the frame it's dealing with was sent in binary mode. </p>
</div>
</div>
<a class="anchor" id="ga3df5045656dfb6b0e63a38de2dca79d2"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN unsigned char lws_get_reserved_bits </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__wsstatus.html#ga3df5045656dfb6b0e63a38de2dca79d2">lws_get_reserved_bits()</a> - access reserved bits of ws frame </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>lws connection </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga4ad226d5e01024b4046f4a5a37199aa1"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_is_cgi </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__wsstatus.html#ga4ad226d5e01024b4046f4a5a37199aa1">lws_is_cgi()</a> - find out if this wsi is running a cgi process </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>lws connection </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga08e9ee165fca503fd9427d55cfecac37"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_is_final_fragment </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__wsstatus.html#ga08e9ee165fca503fd9427d55cfecac37">lws_is_final_fragment()</a> - tests if last part of ws message </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>lws connection </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga26a140623d202dd2bf2004deb6994baa"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int lws_is_ssl </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__wsstatus.html#ga26a140623d202dd2bf2004deb6994baa">lws_is_ssl()</a> - Find out if connection is using SSL </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>websocket connection to check <pre class="fragment"> Returns 0 if the connection is not using SSL, 1 if using SSL and
using verified cert, and 2 if using SSL but the cert was not
checked (appears for client wsi told to skip check on connection)</pre> </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gaeca4afc94b1f026034f99cbba37e2f85"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_partial_buffered </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__wsstatus.html#gaeca4afc94b1f026034f99cbba37e2f85">lws_partial_buffered()</a> - find out if lws buffered the last write </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>websocket connection to check</td></tr>
</table>
</dd>
</dl>
<p>Returns 1 if you cannot use lws_write because the last write on this connection is still buffered, and can't be cleared without returning to the service loop and waiting for the connection to be writeable again.</p>
<p>If you will try to do &gt;1 lws_write call inside a single WRITEABLE callback, you must check this after every write and bail if set, ask for a new writeable callback and continue writing from there.</p>
<p>This is never set at the start of a writeable callback, but any write may set it. </p>
</div>
</div>
<a class="anchor" id="ga2bb3655329b4651cd06f79ee3a764421"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_send_pipe_choked </td>
<td>(</td>
<td class="paramtype">struct lws *&#160;</td>
<td class="paramname"><em>wsi</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><code>#include &lt;<a class="el" href="libwebsockets_8h.html">lib/libwebsockets.h</a>&gt;</code></p>
<p><a class="el" href="group__wsstatus.html#ga2bb3655329b4651cd06f79ee3a764421">lws_send_pipe_choked()</a> - tests if socket is writable or not </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">wsi</td><td>lws connection</td></tr>
</table>
</dd>
</dl>
<p>Allows you to check if you can write more on the socket </p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
</ul>
</div>
</body>
</html>

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