diff --git a/UserManual.md b/UserManual.md index 5fa6b3f4..aac3f3f9 100644 --- a/UserManual.md +++ b/UserManual.md @@ -294,11 +294,49 @@ must be for a file name only, not including directory name. Example: so updating the config file might be necessary after executable update. # Embedding -Embedding Mongoose is easy. Somewhere in the application code, `mg_start()` -function must be called. That starts the web server in a separate thread. -When it is not needed anymore, `mg_stop()` must be called. Application code -can pass configuration options to `mg_start()`, and also specify callback -functions that Mongoose should call at certain events. +Embedding Mongoose is easy. Copy +[mongoose.c](https://github.com/valenok/mongoose/blob/master/mongoose.c) and +[mongoose.h](https://github.com/valenok/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.cpp`, then on UNIX +this command embeds Mongoose: + + $ ls + my_app.cpp mongoose.c mongoose.h + $ g++ my_app.cc mongoose.c -o my_app + +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. For detailed description, see + // https://github.com/valenok/mongoose/blob/master/UserManual.md + 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); + }; + [hello.c](https://github.com/valenok/mongoose/blob/master/examples/hello.c) provides a minimalistic example.