|  | @@ -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.
 | 
	
		
			
				|  |  |  
 |