I have implemented Http keep alive support and Cookie session support for Axis2/C and commited to svn.
Following is a brief introduction into how I implemented it.
Cookie session support.
I use Apache mod_dbd module to store sessions at server side. The functions for storing and retrieving session can be accessed through Axis2/C environment. I have
implemented this for Apache module. Plan to implement this for Axis2/C standalone server soon(which is trivial)
A service could support session by creating a hash table filling it with key value pairs and setting it to the message context.
Then when this message context reach the server side sender it extract the values from the hash table and make a session string from that. It then generate a session id and
store the session string against the id generated(using the above mentioned function in environment).
Then it add the Set-Cookie header into the response message which has the cookie header value of session id and expiration time.
In the client side the sessions are stored in a session map against the server.
When the server get the Cookie header it will retrieve the session value by calling the environment function mentioned above and create a hash table and set it to the message context.
Http Keep Alive support for Axis2/C client side.
Here implementation is as following.
When http transport sender is initialized it will mark whether keep alive is supported when sending messages. This is the default behaviour. However user can change this(in HTTP1.0) by
keep alive transport sender parameter in axis2.xml.
Now when http sender send the message for the first time it will store the http_client in the keep alive map in the configuration context, against the server. From there
onwards it will reuse this http client for sending the messages. In http 1.0 case it will set the http keep alive header when sending the messages.
The implementation handle session close messages from the server in http 1.1 case and keep alive header from server side in http 1.0 case.
Attached is the patch for the changes to implement above.