Interface_Changes_1.10.md 2.0 KB

Interface changes

Proposed interface changes for 1.10

Status: To be discussed

Server interface

mg_start / mg_init_library

Calling mg_init_library is recommended before calling mg_start.

Compatibility: Initially, mg_init_library will be called implicitly if it has not been called before mg_start. If mg_init_library was not called, mg_stop may leave memory leaks.

mg_websocket_write functions

Calling mg_lock_connection is no longer called implicitly in mg_websocket_write functions. If you use websocket write functions them from two threads, you must call mg_lock_connection explicitly, just like for any other connection.

This is an API harmonization issue.

Compatibility: If a websocket connection was used in only one thread, there is no incompatibility. If a websocket connection was used in multiple threads, the user has to add the mg_lock_connection before and the mg_unlock_connection after the websocket write call.

open_file member of mg_callbacks

This member is going to be removed. It is superseeded by mg_add_request_handler.

Compatibility: Current code using open_file needs to be changed. Instructions how to do this will be provided.

Client interface

mg_init_library

Calling mg_init_library is required before calling any client function. In particular, the TLS initialization must be done before using mg_connect_client_secure.

Compatibility: Some parts of the client interface did not work, if mg_start was not called before. Now server and client become independent.

mg_connect_client (family)

mg_connect_client needs several new parameters (options).

Details are to be defined.

mg_connect_client and mg_download should return a different kind of mg_connection than used in server callbacks. At least, there should be a function mg_get_response_info, instead of using mg_get_request_info, and getting the HTTP response code from the server by looking into the uri member of struct mg_request_info.