<commit_before>RELEASENOTES MARLIN VERSION 4.x
===============================

For releasenotes of the previous main version (3.x), see the separate file "Releasenotes_v3.txt".
This document contains all release notes and remarks beginning with version 4.0. The document
would otherwise grow to large and complex.
Version 4.x contains functional breaks with the past and previous version and your programms
will need checking on the logic and functionality to make version 4.x correctly working.
----------------------------------------------------------------------------------------------

CHANGES IN VERSION 4.5.1
========================
1) The Reset() method of SOAPMessage has been extended. You can now choose between 3 modes of reset
   1) RESP_ACTION_NAME : The body is cleared and the parameter node gets the name of the soapaction
                         This is the default behaviour of the previous versions
   2) RESP_EMPTY_BODY  : The body is cleared and the parameter object is set to the body node
                         In this situation you have an absolute clean soap body.
   3) RESP_ACTION_RESP : The body is cleared and the parameter node is filled with then action name
                         and appended to that is the "Response" postfix.
                         This method is a much used practice 'on the web'.

CHANGES IN VERSION 4.5
======================
1) All logging is now done in 5 loglevels. These are the loglevels:
   0) No logging
   1) Errors
   2) Logging of actions
   3) Logging of actions and bodies
   4) Tracing of settings + level 3
   5) Tracing of hexdumps of messages + level 4
   Of course the higher settings (3,4,5) have serious impact on the production level performance,
   so they should be used sparingly. 
   The old members of all objects that have a SetLoggging or SetDetailLogging will translate those
   member calls to a loggin in level 2 (logging of actions).

   REVIEW YOUR PROGRAMMING LOGIC TO ADJUST THE LOGGING SETTINGS!

2) The WebSocket implementation on IIS seems to be broken. It is not used anywhere.
   The implementation on the stand-alone servers is not working at all. So this remains a feature
   that is 'in development'.
   The HTTPClient implmentation of the WebSockets is completly tested and working!

CHANGES IN VERSION 4.4
======================
1) All auhtentication checking is now done by the HTTPServer main object. This means that the
   checking is the same for the IIS, the sync server and the a-sync server.
2) The HTTPServerIIS now also checks the authentication. Just in case no IIS module has been
   configured to catch an unauthenticated call.
3) In case of a www-authenticate header in the HTTP call, the server will pass on the authentication
   to the handlers of the HTTPSite. It is the responsibility of these handlers to accept or reject
   the total HTTP call. 
   Tip: A good way to implement such a functionallity is the writing of a specialized HTTPFilter!
4) The WebServiceClient now has methods to set and get the default username/password.
   By using these, you can use basic-authentication and digest authentication on a reliable
   messaging channel. The WebServiceClient needs this info to be able to set the authentication
   for the opening 'CreateSequence' and the closing 'LastMessage' and 'TerminateSequence'
   messages.
5) Bug fix in the Analysis logfile object. The separate 'logfile.config' configuration is read
   (again) correctly.

CHANGES IN VERSION 4.3
======================
1) There are now 4 server setups. This is an overview:
   - MarlinServer      : HTTPServerMarlin a-synchronous mode webserver without IIS
   - MarlinServerSync  : HTTPServerSync old synchronous mode webserver without IIS
   - MarlinServerIIS   : HTTPServerIIS running under IIS (production mode)
   - MarlinServerIISWC : HTTPServerIIS running in Hosted WebCore as stand alone program
2) The async server is now implemented on top of overlapping asynchronous I/O with the
   IOCompletionPort mechanisms in the MS-Windows SDK. This is done for runtime scaling of
   the server.
3) The Threadpool object has been re-written to be used with the I/O completion port
   mechanisms. The HTTPThreadpool object was removed from the project.
4) The HTTPMessage and XML/SOAP Message objects now have a reference counting mechanism
   Main reason for adding these is the a-sync mode server that scales better on runtime
5) The a-sync server has a new object (HTTPRequest) that holds the status of each request
   as it progresses through all the stages (receive, reading, response, writing) of the
   HTTP call asynchroneously.
6) WebSockets still needs to be implemented on the Marlin A-Sync server!
7) Adding a non-file part to a MultiPartBuffer has been extended with two extra parameters.
   These were the parameters in previous versions:
   a) p_name         : The name of the form-data multipart buffer
   b) p_contentType  : The content type of this particular part
   c) p_data         : The string data to add to the part
   The next two parameters are new:
   d) p_charset      : Character set of data, or the charset you want the data converted to!
   e) p_conversion   : Perform the conversion (if data not already in p_charset)
   Please be advised that if p_charset is empty, "utf-8" is assumed as of IETF RFC 7578

CHANGES IN VERSION 4.2
======================
1) WebSocket's have been implemented for the client side and for the IIS server side.
   The stand-alone Marlin version is still lacking. The server will need rework to do async
   I/O throughout the server before WebSockets can work.
2) WebSocketClient can be used on a client application and exposes the OnOpen, OnClose,
   OnMessage, OnBinary and OnError message handlers. The class has been tested against
   the standard "ws[s]://echo.websocket.org" service.
3) WebSocketServerIIS can be used by any server and exposes all the standard message handlers.

CHANGES IN VERSION 4.1
======================
1) Reworked the XMLMessage object. As it is one of the core components of the Marlin framework
   the reworking on the XMLElement part of the object (making it a 'real' class) has impacat on
   all of the rest of the library. Expect a few getters and setters here and there in your code
   that will need adding / refactoring.
2) The XMLMessage can now be added to resource bound objects with a reference counter. You can
   use the two designated methods for this:
   - AddReference    -> Adding a reference to keep the object alive
   - DropReference   -> Dropping a reference means: destroy the object at the last 'drop'.<commit_msg>Closes #4. XMLMessage is now derivable<commit_after>RELEASENOTES MARLIN VERSION 4.x
===============================

For releasenotes of the previous main version (3.x), see the separate file "Releasenotes_v3.txt".
This document contains all release notes and remarks beginning with version 4.0. The document
would otherwise grow to large and complex.
Version 4.x contains functional breaks with the past and previous version and your programms
will need checking on the logic and functionality to make version 4.x correctly working.
----------------------------------------------------------------------------------------------

CHANGES IN VERSION 4.5.1
========================
1) The Reset() method of SOAPMessage has been extended. You can now choose between 3 modes of reset
   1) RESP_ACTION_NAME : The body is cleared and the parameter node gets the name of the soapaction
                         This is the default behaviour of the previous versions
   2) RESP_EMPTY_BODY  : The body is cleared and the parameter object is set to the body node
                         In this situation you have an absolute clean soap body.
   3) RESP_ACTION_RESP : The body is cleared and the parameter node is filled with then action name
                         and appended to that is the "Response" postfix.
                         This method is a much used practice 'on the web'.

CHANGES IN VERSION 4.5
======================
1) All logging is now done in 5 loglevels. These are the loglevels:
   0) No logging
   1) Errors
   2) Logging of actions
   3) Logging of actions and bodies
   4) Tracing of settings + level 3
   5) Tracing of hexdumps of messages + level 4
   Of course the higher settings (3,4,5) have serious impact on the production level performance,
   so they should be used sparingly. 
   The old members of all objects that have a SetLoggging or SetDetailLogging will translate those
   member calls to a loggin in level 2 (logging of actions).

   REVIEW YOUR PROGRAMMING LOGIC TO ADJUST THE LOGGING SETTINGS!

2) The WebSocket implementation on IIS seems to be broken. It is not used anywhere.
   The implementation on the stand-alone servers is not working at all. So this remains a feature
   that is 'in development'.
   The HTTPClient implmentation of the WebSockets is completly tested and working!

CHANGES IN VERSION 4.4
======================
1) All auhtentication checking is now done by the HTTPServer main object. This means that the
   checking is the same for the IIS, the sync server and the a-sync server.
2) The HTTPServerIIS now also checks the authentication. Just in case no IIS module has been
   configured to catch an unauthenticated call.
3) In case of a www-authenticate header in the HTTP call, the server will pass on the authentication
   to the handlers of the HTTPSite. It is the responsibility of these handlers to accept or reject
   the total HTTP call. 
   Tip: A good way to implement such a functionallity is the writing of a specialized HTTPFilter!
4) The WebServiceClient now has methods to set and get the default username/password.
   By using these, you can use basic-authentication and digest authentication on a reliable
   messaging channel. The WebServiceClient needs this info to be able to set the authentication
   for the opening 'CreateSequence' and the closing 'LastMessage' and 'TerminateSequence'
   messages.
5) Bug fix in the Analysis logfile object. The separate 'logfile.config' configuration is read
   (again) correctly.

CHANGES IN VERSION 4.3
======================
1) There are now 4 server setups. This is an overview:
   - MarlinServer      : HTTPServerMarlin a-synchronous mode webserver without IIS
   - MarlinServerSync  : HTTPServerSync old synchronous mode webserver without IIS
   - MarlinServerIIS   : HTTPServerIIS running under IIS (production mode)
   - MarlinServerIISWC : HTTPServerIIS running in Hosted WebCore as stand alone program
2) The async server is now implemented on top of overlapping asynchronous I/O with the
   IOCompletionPort mechanisms in the MS-Windows SDK. This is done for runtime scaling of
   the server.
3) The Threadpool object has been re-written to be used with the I/O completion port
   mechanisms. The HTTPThreadpool object was removed from the project.
4) The HTTPMessage and XML/SOAP Message objects now have a reference counting mechanism
   Main reason for adding these is the a-sync mode server that scales better on runtime
5) The a-sync server has a new object (HTTPRequest) that holds the status of each request
   as it progresses through all the stages (receive, reading, response, writing) of the
   HTTP call asynchroneously.
6) WebSockets still needs to be implemented on the Marlin A-Sync server!
7) Adding a non-file part to a MultiPartBuffer has been extended with two extra parameters.
   These were the parameters in previous versions:
   a) p_name         : The name of the form-data multipart buffer
   b) p_contentType  : The content type of this particular part
   c) p_data         : The string data to add to the part
   The next two parameters are new:
   d) p_charset      : Character set of data, or the charset you want the data converted to!
   e) p_conversion   : Perform the conversion (if data not already in p_charset)
   Please be advised that if p_charset is empty, "utf-8" is assumed as of IETF RFC 7578

CHANGES IN VERSION 4.2
======================
1) WebSocket's have been implemented for the client side and for the IIS server side.
   The stand-alone Marlin version is still lacking. The server will need rework to do async
   I/O throughout the server before WebSockets can work.
2) WebSocketClient can be used on a client application and exposes the OnOpen, OnClose,
   OnMessage, OnBinary and OnError message handlers. The class has been tested against
   the standard "ws[s]://echo.websocket.org" service.
3) WebSocketServerIIS can be used by any server and exposes all the standard message handlers.

CHANGES IN VERSION 4.1
======================
1) Reworked the XMLMessage object. As it is one of the core components of the Marlin framework
   the reworking on the XMLElement part of the object (making it a 'real' class) has impacat on
   all of the rest of the library. Expect a few getters and setters here and there in your code
   that will need adding / refactoring.
2) The XMLMessage can now be added to resource bound objects with a reference counter. You can
   use the two designated methods for this:
   - AddReference    -> Adding a reference to keep the object alive
   - DropReference   -> Dropping a reference means: destroy the object at the last 'drop'.
3) XML Derived messages now tested in live environment in conjunction with Xerces-C XML library.
{'fraction_non_alphanumeric': 0.07174921442465959, 'fraction_numerical': 0.009576537483166243, 'mean_word_length': 3.446773120425815, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6697885', 'n_tokens_mistral': 3435, 'n_tokens_neox': 3305, 'n_words': 1945}