mirror of
https://github.com/cesanta/mongoose.git
synced 2026-10-03 06:43:17 +07:00
57 lines
2.6 KiB
Markdown
57 lines
2.6 KiB
Markdown
# Mongoose Server Embedding Guide And API Reference
|
|
|
|
Embedding Mongoose is easy. Copy
|
|
[mongoose.c](https://github.com/cesanta/mongoose/blob/master/mongoose.c) and
|
|
[mongoose.h](https://github.com/cesanta/mongoose/blob/master/mongoose.h)
|
|
to your application's source tree and include them in the build. For
|
|
example, your application's code lives in C file `my_app.c`, then on UNIX
|
|
this command embeds Mongoose:
|
|
|
|
$ ls
|
|
my_app.c mongoose.c mongoose.h
|
|
$ gcc my_app.c mongoose.c -o my_app -ldl -pthread
|
|
|
|
Somewhere in the application code, call `mg_start()` to start the server.
|
|
Pass configuration options and event handlers to `mg_start()`.
|
|
Mongoose then calls handlers when certain events happen.
|
|
For example, when new request arrives, Mongoose calls `begin_request`
|
|
handler function to let user handle the request. In the handler, user code
|
|
can get all information about the request -- parsed headers, etcetera.
|
|
|
|
Mongoose API is logically divided in three categories: server setup/shutdown
|
|
functions, functions to be used by user-written event handlers, and
|
|
convenience utility functions.
|
|
|
|
### Starting and stopping embedded web server
|
|
To start the embedded web server, call `mg_start()`. To stop it, call
|
|
`mg_stop()`.
|
|
|
|
// This structure needs to be passed to mg_start(), to let mongoose know
|
|
// which callbacks to invoke.
|
|
struct mg_callbacks {
|
|
int (*begin_request)(struct mg_connection *);
|
|
void (*end_request)(const struct mg_connection *, int reply_status_code);
|
|
int (*log_message)(const struct mg_connection *, const char *message);
|
|
int (*init_ssl)(void *ssl_context);
|
|
int (*websocket_connect)(const struct mg_connection *);
|
|
void (*websocket_ready)(struct mg_connection *);
|
|
int (*websocket_data)(struct mg_connection *);
|
|
const char * (*open_file)(const struct mg_connection *,
|
|
const char *path, size_t *data_len);
|
|
void (*init_lua)(struct mg_connection *, void *lua_context);
|
|
void (*upload)(struct mg_connection *, const char *file_name);
|
|
int (*http_error)(struct mg_connection *, int status);
|
|
};
|
|
|
|
[hello.c](https://github.com/cesanta/mongoose/blob/master/examples/hello.c)
|
|
provides a minimalistic example.
|
|
|
|
Common pattern is to implement `begin_request` callback, and serve static files
|
|
from memory, and/or construct dynamic replies on the fly. Here is
|
|
my [embed.c](https://gist.github.com/valenok/4714740) gist
|
|
that shows how to easily any data can be embedded
|
|
directly into the executable. If such data needs to be encrypted, then
|
|
encrypted database or encryption dongles would be a better choice.
|
|
|
|
|