Commit 6e3e5560 authored by Бобби's avatar Бобби Committed by Cesanta Bot

Move mongoose docs to https://cesanta.com/docs/

PUBLISHED_FROM=ebf5568abe82952ab2751298185a10189098013f
parent f0c6630a
---
title: CoAP
items:
- { name: server_example.md }
- { name: client_example.md }
- { name: ../c-api/coap.h/ }
---
---
title: DNS client example
---
See https://github.com/cesanta/mongoose/blob/master/mongoose.c and search
for the `mg_resolve_async_eh()` function - that is the core of
built-in Mongoose async DNS resolver.
--- # Examples
title: DNS server example
---
## DNS server example
To create a DNS server, follow this pattern: To create a DNS server, follow this pattern:
...@@ -71,3 +72,10 @@ int main(int argc, char *argv[]) { ...@@ -71,3 +72,10 @@ int main(int argc, char *argv[]) {
``` ```
See full [Captive DNS server example](https://github.com/cesanta/mongoose/tree/master/examples/captive_dns_server). See full [Captive DNS server example](https://github.com/cesanta/mongoose/tree/master/examples/captive_dns_server).
## DNS client example
See https://github.com/cesanta/mongoose/blob/master/mongoose.c and search
for the `mg_resolve_async_eh()` function - that is the core of
built-in Mongoose async DNS resolver.
---
title: DNS
items:
- { name: server_example.md }
- { name: client_example.md }
- { name: ../c-api/dns.h/ }
- { name: ../c-api/dns_server.h/ }
---
--- # CGI
title: CGI
---
[CGI](https://en.wikipedia.org/wiki/Common_Gateway_Interface) [CGI](https://en.wikipedia.org/wiki/Common_Gateway_Interface)
is a simple mechanism to generate dynamic content. is a simple mechanism to generate dynamic content.
...@@ -32,4 +30,4 @@ Example: ...@@ -32,4 +30,4 @@ Example:
NOTE: In the CGI handler we don't use explicitly a system call waitpid() for NOTE: In the CGI handler we don't use explicitly a system call waitpid() for
reaping zombie processes. Instead, we set the SIGCHLD handler to SIG_IGN. reaping zombie processes. Instead, we set the SIGCHLD handler to SIG_IGN.
It will cause zombie processes to be reaped automatically. It will cause zombie processes to be reaped automatically.
CAUTION: not all OSes (e.g. QNX) reap zombies if SIGCHLD is ignored. CAUTION: not all OSes (e.g. QNX) reap zombies if SIGCHLD is ignored.
\ No newline at end of file
--- # HTTP client example
title: HTTP client example
---
To create an HTTP client, follow this pattern: To create an HTTP client, follow this pattern:
......
--- # Digest Authentication
title: Digest Authentication
---
Mongoose has a built-in Digest (MD5) authentication support. In order to Mongoose has a built-in Digest (MD5) authentication support. In order to
enable Digest authentication, create a file `.htpasswd` in the directory enable Digest authentication, create a file `.htpasswd` in the directory
...@@ -8,7 +6,7 @@ you would like to protect. That file should be in the format that Apache's ...@@ -8,7 +6,7 @@ you would like to protect. That file should be in the format that Apache's
`htdigest` utility. `htdigest` utility.
You can use either Apache `htdigest` utility, or You can use either Apache `htdigest` utility, or
Mongoose pre-build binary (https://www.cesanta.com/products/binary) Mongoose pre-build binary at https://www.cesanta.com/binary.html
to add new users into that file: to add new users into that file:
``` ```
......
--- #: HTTP events
title: HTTP events
---
As discussed in the overview, `mg_set_protocol_http_websocket()` function As discussed in the overview, `mg_set_protocol_http_websocket()` function
parses incoming data, treats it as HTTP or WebSocket, and triggers high-level parses incoming data, treats it as HTTP or WebSocket, and triggers high-level
......
--- # Serving files
title: Serving files
---
API function `mg_serve_http()` makes it easy to serve files from a filesystem. API function `mg_serve_http()` makes it easy to serve files from a filesystem.
Generally speaking, that function is an implementation of the HTTP server Generally speaking, that function is an implementation of the HTTP server
......
---
title: HTTP
items:
- { name: server_example.md }
- { name: client_example.md }
- { name: events.md }
- { name: files.md }
- { name: cgi.md }
- { name: ssi.md }
- { name: upload.md }
- { name: ssl.md }
- { name: digest_auth.md }
- { name: ../c-api/http.h/ }
- { name: ../c-api/http_server.h/ }
- { name: ../c-api/http_client.h/ }
---
--- # HTTP server example
title: HTTP server example
---
To create an HTTP server, follow this pattern: To create an HTTP server, follow this pattern:
......
--- # SSI
title: SSI
---
Server Side Includes (SSI) is a simple interpreted server-side scripting Server Side Includes (SSI) is a simple interpreted server-side scripting
language which is most commonly used to include the contents of a file language which is most commonly used to include the contents of a file
......
--- # Enabling SSL (HTTPS)
title: Enabling HTTPS
---
To enable SSL on the server side, please follow these steps: To enable SSL on the server side, please follow these steps:
......
--- # Handling file uploads
title: Handling file uploads
---
In order to handle file uploads, use the following HTML snippet: In order to handle file uploads, use the following HTML snippet:
```HTML ```HTML
&lt;form method="POST" action="/upload" enctype="multipart/form-data"&gt; <form method="POST" action="/upload" enctype="multipart/form-data">
&lt;input type="file" name="file"&gt; <input type="file" name="file">
&lt;input type="submit" value="Upload"&gt; <input type="submit" value="Upload">
&lt;/form&gt; </form>
``` ```
Uploaded files will be sent to the `/upload` endpoint via the `POST` request. Uploaded files will be sent to the `/upload` endpoint via the `POST` request.
......
---
title: MQTT client example
---
See https://github.com/cesanta/mongoose/tree/master/examples/mqtt_client
# Examples
- [Client example](https://github.com/cesanta/mongoose/tree/master/examples/mqtt_client)
- [Server example](https://github.com/cesanta/mongoose/tree/master/examples/mqtt_broker)
---
title: MQTT
items:
- { name: server_example.md }
- { name: client_example.md }
- { name: ../c-api/mqtt.h/ }
- { name: ../c-api/mqtt_server.h/ }
---
---
title: MQTT server example
---
See https://github.com/cesanta/mongoose/tree/master/examples/mqtt_broker
--- # Build options
title: Enabling flags
--- Mongoose source code ships in a single .c file that contains functionality
for all supported protocols (modules). Modules can be disabled at compile
time which reduces the executable's size. That can be done by setting preprocessor
flags. Also, some preprocessor flags can be used to tune internal Mongoose
parameters.
To set a preprocessor flag during compile time, use the `-D <PREPROCESSOR_FLAG>`
compiler option. For example, to disable both MQTT and CoAP,
compile the application `my_app.c` like this (assumed UNIX system):
```
$ cc my_app.c mongoose.c -D MG_DISABLE_MQTT -D MG_DISABLE_COAP
```
## Enabling flags
- `MG_ENABLE_SSL` Enable [SSL/TLS support](https://docs.cesanta.com/mongoose/master/#/http/ssl.md/) (OpenSSL API) - `MG_ENABLE_SSL` Enable [SSL/TLS support](https://docs.cesanta.com/mongoose/master/#/http/ssl.md/) (OpenSSL API)
- `MG_ENABLE_IPV6` Enable IPv6 support - `MG_ENABLE_IPV6` Enable IPv6 support
...@@ -17,3 +30,30 @@ title: Enabling flags ...@@ -17,3 +30,30 @@ title: Enabling flags
- `MG_ENABLE_BROADCAST` enable `mg_broadcast()` API - `MG_ENABLE_BROADCAST` enable `mg_broadcast()` API
- `MG_ENABLE_GETADDRINFO` enable `getaddrinfo()` in `mg_resolve2()` - `MG_ENABLE_GETADDRINFO` enable `getaddrinfo()` in `mg_resolve2()`
- `MG_ENABLE_THREADS` enable `mg_start_thread()` API - `MG_ENABLE_THREADS` enable `mg_start_thread()` API
## Disabling flags
- `MG_DISABLE_HTTP_DIGEST_AUTH` disable HTTP Digest (MD5) authorisation support
- `CS_DISABLE_SHA1` disable SHA1 support (used by WebSocket)
- `CS_DISABLE_MD5` disable MD5 support (used by HTTP auth)
- `MG_DISABLE_HTTP_KEEP_ALIVE` useful for embedded systems to save resources
## Platform specific
Mongoose tries to detect the target platform whenever possible, but in some cases you have
to explicitly declare some peculiarities of your target, such as:
- `MG_CC3200`: enable workarounds for the TI CC3200 target.
- `MG_ESP8266`: enable workarounds for the ESP8266 target, add `RTOS_SDK` to specify the RTOS SDK flavour.
## Tunables
- `MG_MALLOC`, `MG_CALLOC`, `MG_REALLOC`, `MG_FREE` allow you to a use custom
memory allocator, e.g. `-DMG_MALLOC=my_malloc`
- `MG_USE_READ_WRITE` when set replaces calls to `recv` with `read` and `send` with `write`,
thus enabling to add any kind of file descriptor (files, serial devices) to an event manager.
- `MG_SSL_CRYPTO_MODERN`, `MG_SSL_CRYPTO_OLD` - choose either "Modern" or "Old" ciphers
instead of the default "Intermediate" setting.
See [this article](https://wiki.mozilla.org/Security/Server_Side_TLS#Recommended_configurations) for details.
- `MG_USER_FILE_FUNCTIONS` allow you to use custom file operation, by defining you own `mg_stat`, `mg_fopen`, `mg_open`, `mg_fread` and `mg_fwrite` functions
---
title: Disabling flags
---
- `MG_DISABLE_HTTP_DIGEST_AUTH` disable HTTP Digest (MD5) authorisation support
- `CS_DISABLE_SHA1` disable SHA1 support (used by WebSocket)
- `CS_DISABLE_MD5` disable MD5 support (used by HTTP auth)
- `MG_DISABLE_HTTP_KEEP_ALIVE` useful for embedded systems to save resources
---
title: Build Options
items:
- { type: file, name: enabling-flags.md }
- { type: file, name: disabling-flags.md }
- { type: file, name: platform-spec.md }
- { type: file, name: tunables.md }
---
Mongoose source code ships in a single .c file that contains functionality
for all supported protocols (modules). Modules can be disabled at compile
time which reduces the executable's size. That can be done by setting preprocessor
flags. Also, some preprocessor flags can be used to tune internal Mongoose
parameters.
To set a preprocessor flag during compile time, use the `-D <PREPROCESSOR_FLAG>`
compiler option. For example, to disable both MQTT and CoAP,
compile the application `my_app.c` like this (assumed UNIX system):
```
$ cc my_app.c mongoose.c -D MG_DISABLE_MQTT -D MG_DISABLE_COAP
```
---
title: Platform specific
---
Mongoose tries to detect the target platform whenever possible, but in some cases you have
to explicitly declare some peculiarities of your target, such as:
- `MG_CC3200`: enable workarounds for the TI CC3200 target.
- `MG_ESP8266`: enable workarounds for the ESP8266 target, add `RTOS_SDK` to specify the RTOS SDK flavour.
---
title: Tunables
---
- `MG_MALLOC`, `MG_CALLOC`, `MG_REALLOC`, `MG_FREE` allow you to a use custom
memory allocator, e.g. `-DMG_MALLOC=my_malloc`
- `MG_USE_READ_WRITE` when set replaces calls to `recv` with `read` and `send` with `write`,
thus enabling to add any kind of file descriptor (files, serial devices) to an event manager.
- `MG_SSL_CRYPTO_MODERN`, `MG_SSL_CRYPTO_OLD` - choose either "Modern" or "Old" ciphers
instead of the default "Intermediate" setting.
See [this article](https://wiki.mozilla.org/Security/Server_Side_TLS#Recommended_configurations) for details.
- `MG_USER_FILE_FUNCTIONS` allow you to use custom file operation, by defining you own `mg_stat`, `mg_fopen`, `mg_open`, `mg_fread` and `mg_fwrite` functions
\ No newline at end of file
--- # Design Concept
title: Design Concept
---
Mongoose has three basic data structures: Mongoose has three basic data structures:
......
--- # Connection flags
title: Connection flags
---
Each connection has a `flags` bit field. Some flags are set by Mongoose, for Each connection has a `flags` bit field. Some flags are set by Mongoose, for
example if a user creates an outbound UDP connection using a `udp://1.2.3.4:5678` example if a user creates an outbound UDP connection using a `udp://1.2.3.4:5678`
......
--- # Event handler function
title: Event handler function
---
Each connection has an event handler function associated with it. That function Each connection has an event handler function associated with it. That function
must be implemented by the user. Event handler is the key element of the Mongoose must be implemented by the user. Event handler is the key element of the Mongoose
......
--- # Events
title: Events
---
Mongoose accepts incoming connections, reads and writes data and calls Mongoose accepts incoming connections, reads and writes data and calls
specified event handlers for each connection when appropriate. A typical event specified event handlers for each connection when appropriate. A typical event
......
--- # Introduction
title: Overview
items:
# - { name: usage-example.md }
- { name: concept.md }
- { name: mbufs.md }
- { name: event-handler.md }
- { name: events.md }
- { name: conn-flags.md }
- { name: build-options }
- { name: usage-example.md }
---
Mongoose is a networking library written in C. Mongoose is a networking library written in C.
It is a swiss army knife for embedded network programming. It is a swiss army knife for embedded network programming.
......
--- # Memory buffers
title: Memory buffers
---
Each connection has a send and receive buffer, `struct mg_connection::send_mbuf` Each connection has a send and receive buffer, `struct mg_connection::send_mbuf`
and `struct mg_connection::recv_mbuf` respectively. When data arrives, and `struct mg_connection::recv_mbuf` respectively. When data arrives,
...@@ -11,4 +9,4 @@ When Mongoose successfully writes data to the socket, it discards data from ...@@ -11,4 +9,4 @@ When Mongoose successfully writes data to the socket, it discards data from
`struct mg_connection::send_mbuf` and sends an `MG_EV_SEND` event. When the connection `struct mg_connection::send_mbuf` and sends an `MG_EV_SEND` event. When the connection
is closed, an `MG_EV_CLOSE` event is sent. is closed, an `MG_EV_CLOSE` event is sent.
![](media/mbuf.png) ![](/docs/media/mbuf.png)
--- # Example - TCP echo server
title: Example - TCP echo server
---
- Copy `mongoose.c` and `mongoose.h` to your build tree - Copy `mongoose.c` and `mongoose.h` to your build tree
- Write code that uses the Mongoose API, e.g. in `my_app.c` - Write code that uses the Mongoose API, e.g. in `my_app.c`
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment