Browse Source

Doc: Update comments on planned interface changes

bel2125 7 years ago
parent
commit
3371ba5640
1 changed files with 66 additions and 19 deletions
  1. 66 19
      docs/Interface_Changes_1.10.md

+ 66 - 19
docs/Interface_Changes_1.10.md

@@ -2,21 +2,27 @@
 
 
 ## Proposed interface changes for future versions
 ## Proposed interface changes for future versions
 
 
-See [this GitHub issue](https://github.com/civetweb/civetweb/issues/544).
+Interface changes from 1.10 to 1.11 and/or later versions -
+see also [this GitHub issue](https://github.com/civetweb/civetweb/issues/544).
 
 
 
 
 ### Server interface
 ### Server interface
 
 
-#### mg\_start / mg\_init\_library
+#### S1: mg\_start / mg\_init\_library
 
 
 Calling mg\_init\_library is recommended before calling mg\_start.
 Calling mg\_init\_library is recommended before calling mg\_start.
 
 
-Compatibility:
+**Compatibility considerations:**
 Initially, mg\_init\_library will be called implicitly if it has 
 Initially, mg\_init\_library will be called implicitly if it has 
 not been called before mg\_start.
 not been called before mg\_start.
 If mg\_init\_library was not called, mg\_stop may leave memory leaks.
 If mg\_init\_library was not called, mg\_stop may leave memory leaks.
 
 
-#### mg\_websocket\_write functions
+**Required Actions:**
+Call mg\_init\_library manually to avoid a small memory leak when
+closing the server.
+
+
+#### S2: mg\_websocket\_write functions
 
 
 Calling mg\_lock\_connection is no longer called implicitly
 Calling mg\_lock\_connection is no longer called implicitly
 in mg\_websocket\_write functions. 
 in mg\_websocket\_write functions. 
@@ -26,49 +32,90 @@ other connection.
 
 
 This is an API harmonization issue.
 This is an API harmonization issue.
 
 
-Compatibility:
+**Compatibility considerations:**
 If a websocket connection was used in only one thread, there is
 If a websocket connection was used in only one thread, there is
 no incompatibility. If a websocket connection was used in multiple
 no incompatibility. If a websocket connection was used in multiple
 threads, the user has to add the mg\_lock\_connection before and
 threads, the user has to add the mg\_lock\_connection before and
 the mg\_unlock\_connection after the websocket write call.
 the mg\_unlock\_connection after the websocket write call.
 
 
-#### open\_file member of mg\_callbacks
+**Required Actions:**
+Call mg\_lock\_connection and mg\_unlock\_connection manually
+when using mg\_websocket\_write.
+
+
+#### S3: open\_file member of mg\_callbacks
 
 
 This member is going to be removed.
 This member is going to be removed.
 It is superseeded by mg\_add\_request\_handler.
 It is superseeded by mg\_add\_request\_handler.
 
 
-Compatibility:
+**Compatibility considerations:**
 Current code using open\_file needs to be changed.
 Current code using open\_file needs to be changed.
 Instructions how to do this will be provided.
 Instructions how to do this will be provided.
 
 
 
 
-### Client interface
+#### S4: Support multiple hostnames and SNI
+
+TLS [Server Name Identification (SNI)](https://en.wikipedia.org/wiki/Server_Name_Indication)
+allows to host different domains with different X.509 certificates
+on the same physical server (same IP+port). In order to support this,
+some configurations (like authentication\_domain, ssl\_certificate, 
+document\_root and may others) need to be specified multiple times - 
+once for each domain hosted 
+(see [535](https://github.com/civetweb/civetweb/issues/535)).
+
+The current configuration model does not account for SNI, so it needs
+to be extended to support configuration of multiple instances.
+
+**Compatibility considerations:**
+To be defined as soon as possible solutions are evaluated.
 
 
 
 
-#### mg\_init\_library
+#### S5: IPv6 support for access\_control\_list and throttle
+
+The current configuration for access\_control\_list and throttle only
+works for IPv4 addresses. If server and client support 
+[IPv6](https://en.wikipedia.org/wiki/IPv6_address) as well,
+there is no way to add a client to the throttle or access list.
+The current configuration syntax isn't really comfortable for IPv4
+either.
+Combined with hosting multiple domains (and SNI), different domains
+may have different block/throttle configurations as well - this has
+to be considered in a new configuration as well.
+
+**Compatibility considerations:**
+To be defined as soon as possible solutions are evaluated.
+
+
+### Client interface
+
+#### C1: mg\_init\_library
 
 
 Calling mg\_init\_library is required before calling any client
 Calling mg\_init\_library is required before calling any client
 function. In particular, the TLS initialization must be done
 function. In particular, the TLS initialization must be done
 before using mg\_connect\_client\_secure.
 before using mg\_connect\_client\_secure.
 
 
-Compatibility:
+**Compatibility considerations:**
 Some parts of the client interface did not work, if mg\_start
 Some parts of the client interface did not work, if mg\_start
-was not called before. Now server and client become independent.
+was not called before. Now it works after calling
+mg\_init\_library - this is not an incompatibility.
 
 
-#### mg\_connect\_client (family)
 
 
-mg_connect_client needs several new parameters (options).
+#### C2: mg\_connect\_client (family)
+
+mg\_connect\_client needs several new parameters (options).
 
 
 Details are to be defined.
 Details are to be defined.
 
 
-mg_connect_client and mg_download should return a different kind of
+mg\_connect\_client and mg\_download should return a different kind of
 mg_connection than used in server callbacks. At least, there should
 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.
+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.
+
 
 
+### General interfaces
 
 
-### `size_t` in all interface
+#### G1: `size_t` in all interface
 
 
 Having `size_t` in interfaces while building for 32 and 64 bit
 Having `size_t` in interfaces while building for 32 and 64 bit
 complicates maintenance in an unnecessary way 
 complicates maintenance in an unnecessary way 
@@ -77,7 +124,7 @@ complicates maintenance in an unnecessary way
 Replace all data sizes by 64 bit integers.
 Replace all data sizes by 64 bit integers.
 
 
 
 
-### Pattern definition
+#### G2: Pattern definition
 
 
 The current definition of pattern matching is problematic
 The current definition of pattern matching is problematic
 (see [499](https://github.com/civetweb/civetweb/issues/499)).
 (see [499](https://github.com/civetweb/civetweb/issues/499)).