* [fix] Making vortex_http_connection_new to to use timeout support for the first connection on windows platform. * [fix] General update to fix compilation warnings exposed on windows platform. Updated regression test to better support running regression test with proxy and server component in different stations. * [fix] Adding missing libvortex-http-1.1.def file. * [fix] Fixing test/Makefile.am to solve make dist problem. * [fix] Fixed pkg-config file vortex-http-1.1.pc.in. It wasn't properly configured. * [new] Added new function to check if a connection was created through a HTTP proxy server or not. API added: - vortex_http_connection_is_proxied * [fix] Improved error reporting from vortex_http_connection_new to also notify HTTP connection error received. * [fix] Documentation update to include pull API and HTTP connect examples and an initial manual on how to use these extensions. General cleanup and several updates. * [new] Updated HTTP CONNECT module with a new function to increase ref counting on VortexHttpSetup. This is now used by vortex_http_connection_new to acquire a reference during the process. API added: - vortex_http_setup_ref * [fix] Finished initial tested implementation that allows to connect to BEEP servers through an HTTP proxy by using CONNECT method. Great! Added new API to configure HTTP proxy connection. - vortex_http_setup_new - vortex_http_setup_unref - vortex_http_setup_conf - VortexHttpConfItem (enum) Added regression test to check HTTP CONNECT connection support. * [fix] Making vortex_listener_new* to always return a reference to VortexConnection so the caller can check listener startup status. * [fix] Fixed memory leak (frame unref) when msgno value is reused without reply. Backported fix into 1.0. * [new] Added initial implementation to support HTTP/1.1 proxies to tunnel BEEP connections. Initial unfinished API: - vortex_http_connection_new - VortexHttpSetup (type) * [fix] Updated XmlRpcMethodCall and XmlRpcMethodValue to hold a reference to the context under which they were created. Several updates on the xml-rpc API to now require the VortexCtx reference. Added new function and macro to get method call context associated. API added: - METHOD_CALL_CTX - vortex_xml_rpc_method_call_get_ctx * [fix] Since XML-RPC standard do not support marshalling NULL values, making method value creation to detect these situations and to replace those NULL values with XML_RPC_EMPTY_STR. * [fix] General update on the xml-rpc-gen-1.1 tool to conform with changes introduced. * [fix] Reorganized vortex_connection_new_empty_from_connection to make this code reusable from other modules. General cleanup. * [new] Added new function to allow associating a socket to a connection after it was created. Added new function to connect to a generic TCP listener. API added: - vortex_connection_set_socket - vortex_connection_sock_connect * [new] Added new function that allows to perform greetings exchange on an uninitialized connection or on a connection after a BEEP session reset. API added: - vortex_connection_do_greetings_exchange * [new] Moved to the public API vortex_frame_readline. Added two new macros that allows to check conditions with an associated error message. API added: - v_return_if_fail_msg - v_return_val_if_fail_msg - vortex_frame_readline * [fix] Making xml-rpc-gen tool to translate xml definitions due to CDATA content. Fix imported into 1.0 serie. * [fix] Improving error message associated to listener bind error. * [new] Refactored vortex_listener_new internal implementation to place especific TCP listener startup in a separate function. API added: - vortex_listener_sock_listen * [fix] Fixed channel start notification at the PULL API caused by a race condition only showed on the windows platform. * [fix] Making unknown messages received on channel 0 to cause a connection close. * [new] Added vortex-pull-listener.c test example to show how to build a PULL API listener (which is the same like a client but removing all listener startup and profile registration). * [fix] Finished regression test to check VORTEX_EVENT_CHANNEL_START. (test 14-d). With this, it is finished the initial pull API for vortex. GREAT! * [fix] Making close notify to unlock before calling user space allowing to call to vortex_channel_notify_close on that function. * [fix] Making VORTEX_EVENT_CHANNEL_CLOSE to accept the close request if the event is found to be masked. * [fix] Fixing VORTEX_EVENT_CHANNEL_START event when it is masked. * [new] Added initial regression test to check channel start event. * [new] Added support for a global start channel handler. API added: - vortex_ctx_set_channel_start_handler * [new] Updated pull API to emit a new event: VORTEX_EVENT_CHANNEL_START which allows to receive and handle notifications about incoming channel start requests. Updated pull API to include new functions that provided access to especific event data: - vortex_event_get_server_name - vortex_event_get_profile_content - vortex_event_get_encoding Still required to check this new support. * [new] Added regression test to check VORTEX_EVENT_CONNECTION_CLOSED and VORTEX_EVENT_CONNECTION_ACCEPTED events. Added new function to perform a connection reference count update without checking its status: - vortex_connection_uncheck_ref * [new] Added two new events to handle incoming connection event and connection closed event. API added: - VORTEX_EVENT_CONNECTION_CLOSED - VORTEX_EVENT_CONNECTION_ACCEPTED Updated regression tests (test 14 series). * [new] Added new events to the pull API to get notifications for incoming channel close, channel removed and channel added. - VORTEX_EVENT_CLOSE_REQUEST - VORTEX_EVENT_CHANNEL_ADDED - VORTEX_EVENT_CHANNEL_REMOVED * [new] Added event mask support to the pull API to allow developer to focus on particular events. API added: - VortexEventMask - vortex_event_mask_new - vortex_event_mask_add - vortex_event_mask_remove - vortex_event_mask_is_set - vortex_event_mask_enable - vortex_pull_set_event_mask - vortex_event_mask_free Added regression test to check how event masks hides notification for selected events (test 14-b). * [new] Added new global handlers to vortex ctx module. API added: - vortex_ctx_set_channel_added_handler - vortex_ctx_set_channel_removed_handler - vortex_ctx_set_frame_received * [new] Added initial support for a pull API designed to fit in single threaded or event driven environments where async threaded callback notifications are dificult to handle. This API is an extension library that can be optionally used. Initial API added: - vortex_event_get_channel - vortex_event_get_conn - vortex_event_get_ctx - vortex_event_get_frame - vortex_event_get_type - vortex_event_ref - vortex_event_unref - vortex_pull_init - vortex_pull_next_event - vortex_pull_pending_events - vortex_pull_pending_events_num - VortexEvent (event representation) - VortexEventType (event kind enum) - VORTEX_EVENT_FRAME_RECEIVED Added initial regression test to check the concept and the frame received event (test 14). Nice! * [new] Added new function to vortex ctx module to allow extension libraries to install cleanup functions that are activated before VortexCtx is terminated. API added: - vortex_ctx_install_cleanup * [new] Added support to install a global frame received handler that can handle all information received for all channels in all connections but channel 0. API added: - vortex_reader_set_frame_received * [fix] Fixed vortex_ctx_free which wasn't finishing log_mutex reference. * [fix] Checked and fixed support to transfer more than 4GB over the same channel, reusing seqno values (ranging from 0 up to 4294967295). Added regression test to simulate a large transfer (test 02-o). Applied 1.0/1.1. * [fix] Making vortex_channel_get_next_msg_no to reset proposed value if limit is reached. (1.0/1.1). * [fix] Added more msg no sequences to check on test_02n. Applied to 1.0/1.1 * [fix] General engine update to allow remote BEEP peers to reuse MSG no in the range of 0..2147483647 while connecting to Vortex, allowing to reuse those MSG numbers as long as they are replied. Thanks to Sam Roberts who reported and provided useful comments to fix this issue. Created a regression test to check new support introduced. Even having updated MSG number checking support vortex will still use its current MSG number generation pattern (starting from 0 and going to 2147483647 by updating 1 unit). Applied updated to 1.0/1.1. * [fix] Adding documentation about transferring files. * [fix] Updating exarg files (1.0/1.1) for xml-rpc-gen tool. * [fix] Making vortex_support_unsetenv to be programmed internally with setenv. This avoids using unsetenv. Removed unsetenv declaration from vortex header. * [fix] Making vortex sequencer module to be stopped after vortex reader module (1.0/1.1). * [fix] Fixing test vortex-listener-connections.c with patch provided by Sam Roberts (additional modifications were required). Reworked patch to apply it on 1.1 branch. * [fix] Wrong use of INT_TO_PTR applied on a pointer referece which causes segmentation faults on 64bits platforms. Bug reported with initial fixings by Szilard Pfeiffer. Imported fix into 1.1 branch. * [fix] Applied patch to solve minor compilation warnings provided by Benoit Amiaux. Imported patch into 1.1 branch. * [fix] Documentation updates.. * [fix] Updated vortex_channel_new_full/v documentation to reflect that profile_content and profile_content_format already places the CDATA declaration. * [fix] Removing log inside vortex_channel_get_ctx. * [fix] Updating Makefile.win files to also strip gsasl, gcrypt and gpg error libraries used. * [fix] General update on Makefile.win files (1.0/1.1) to reduce the resulting library size. * [fix] Updating libvortex-tunnel-1.1.def file * [fix] Adding missing libvortex-tls-1.1.def * [fix] Adding missing libvortex-xml-rpc-1.1.def * [fix] Adding missing libvortex-sasl-1.1.def file. * [fix] Updated configure and Makefile.am definitions to avoid using deprecated boolean definitions (1.0/1.1). * [fix] More cleanups to remove old references to false and true, replacing them with axl_false and axl_true. * [fix] More boolean values cleanups... * [fix] Updated vortex handlers module to remove false and true definitions, replaced by axl_false and axl_true. * [fix] Updated regression tests and examples to remove false and true, replaced by axl_false and axl_true. * [fix] Fixing vortex-client tool (removing false and true declarations). Updated xml-rpc files on both branches (1.0/1.1). * [fix] Removing false and true from xml-rpc-gen tool replaced by axl_false and axl_true. (1.0/1.1). * [fix] Removing false and true from vortex tunnel implementation replaced by axl_true and axl_false. (1.0/1.1). * [fix] Removed false and true from vortex xml-rpc implementation, replaced by axl_false and axl_true (1.0/1.1). * [fix] Removing false and true from vortex tls module, replacing them with axl_false and axl_true. * [fix] Removing false and true declaration from vortex sasl module replaced by axl_false and axl_true (1.0/1.1). * [fix] Removed true and false declaration from vortex channel pool module (axl_false and axl_true). * [fix] Removed false and true from vortex thread module, replaced by axl_false and axl_true (1.0/1.1). * [fix] Removing false and true from vortex thread pool module, replaced by axl_false and axl_true (1.0/1.1). * [fix] Removing false and true from vortex sequencer module, replaced by axl_false and axl_true. * [fix] Replacing false and true with axl_false and axl_true on vortex queue module. * [fix] Removing false and true from vortex hash module, replacing them with axl_false and axl_true. * [fix] Removing false and true from vortex dtds module, replacing them with axl_false and axl_true. * [fix] Removing false and true from vortex reader module, replacing them by axl_false and axl_true (1.0/1.1). * [fix] Removed false and true from vortex io module replaced by axl_false and axl_true. * [fix] Removing false and true declarations, replaced by axl_false and axl_true. * [fix] Removed false and true from vortex greetings module, replaced by axl_true and axl_false. * [fix] Removing false and true from vortex frame factory module, replacing them with axl_false and axl_true. * [fix] Removing false and true from vortex listener module replacing them with axl_false and axl_true (1.0/1.1). * [fix] Removing false and true, replaced by axl_false and axl_true on vortex support module (1.0/1.1). * [fix] More updates removing false and true, replaced by axl_false and axl_true on vortex ctx module (1.0/1.1). * [fix] Pending change on vortex header module. * [fix] Removing true and false from vortex module replaced by axl_true and axl_false. * [fix] Removing false and true from vortex connection replaced by axl_false and axl_true. (1.0/1.1). * [fix] Removing false and true from vortex channel module (1.0/1.1). * [fix] Ensured all memory is deallocated for pending messages that were queued due to channel stale status, under situations where the connection is suddently lost. Applied fix and added regression test to check this (test_02m2). (1.0/1.1). * [fix] Making vortex_channel_get_reply to allow returning content even in the case the channel reference received is NULL or the connection is closed, under situations that pending elements are available. Updated code to avoid installing the close connection detection in the case the connection is already broken. (1.0/1.1). * [fix] Nullify connection reference from channel on connection close to avoid channel references to access to a closed and deallocated connection. Applied 1.0/1.1 * [fix] Fixed wrong vortex sequencer internal sending buffer resizing in the case the size requested is twice actual size allocated. Reported by Mikhail Dmitrievsky. Fixed on 1.0/1.1. Added regression test to check the fix introduced. * [fix] Cleaning vortex sequencer code. Applied 1.0/1.1 * [new] Updated vortex hash memory handling to provide reference counting support. Updated vortex_hash_create and vortex_hash_destroy to take into consideration reference counting. Added new functions to control reference counting (1.0/1.1): - vortex_hash_ref - vortex_hash_unref Added new function to lock the caller until some change is detected on a hash. API added (1.0/1.1): - vortex_hash_lock_until_changed * [new] Making vortex_channel_close to lock the caller in the case that the channels is already in close process (due to incoming accepted close msg), returning the caller after the channel is completely closed rather returning inmediately (1.0/1.1). * [fix] Fixed VortexConnectionOnChannelUpdate documentation. * [fix] Flagging vortex_channel_is_empty_pending_message as public (1.0/1.1). * [fix] xml-rpc-gen-1.1 more fixing to handle bool type. * [fix] xml-rpc-gen-1.1 fixed array copy implementation generated for direct types (int, string, bool and double). * [fix] General platform API update due to axl-bool-removal-01. * [fix] Committing more updates to both branches (1.0/1.1) due to vortex-bool-removal-01. * [fix] Added internal check inside mime processing for frame received to avoid processing SEQ frames (though it should never reach this point). Applied 1.0/1.1. * [fix] Making vortex listener on ready notification to use thread safe inet_ntoa to notify host allocated by the listener. * [fix] Applying vortex-bool-removal-01 changes to vortex support module (1.0/1.1). * [new] Updated connection API to include two new functions that allows to disable SEQ frame generation and to check current status. This is useful in the case a tunning profile is being developed to avoid introducing "noise" during the session reset. API added (1.0/1.1): - vortex_connection_seq_frame_updates - vortex_connection_seq_frame_updates_status * [fix] Making internal vortex_connection_do_sanity_check to also check if the socket looks ok. Applied (1.0/1.1). * [fix] Making replaced calls to inet_ntoa with thread safe version vortex_support_inet_ntoa. API added (1.0/1.1): - vortex_support_inet_ntoa * [fix] Added additional check during wait conditions, inside vortex connection module where TCP connect is signaled but the connection is broken (really rare case under 2.4 linux kernels with older glibc version. Fixed and reported by Martin Huter). * [fix] Applied change to XML-RPC implemenation vortex-bool-removal-01. (1.0/1.1). * [fix] Applied update to remove bool type replaced by int as defined by vortex-bool-removal-01. Fix applied to 1.0/1.1. * [fix] Updated error handling on TLS implementation to show full error stack provided by OpenSSL (the proper manner to debug TLS failures). Applied change to 1.0/1.1 * [fix] Disabled SEQ frame generation during TLS negotiation to avoid producing noise in the middle of the connection reset. Applied change to 1.0/1.1 * [fix] Making vortex tunnel implementation to disable SEQ frame generation during handshake to avoid introducing unexpected information during the connection reset. Applied to 1.0/1.1 * [fix] Improved checks performed during the channel and connection negotiation for TUNNEL profile. Applied to 1.0/1.1 * [fix] Fixed bug causing to not properly notify reply written in the case the listener side issue a MSG and the initiator reply with ANS series ended by NUL. Fix applied to 1.0/1.1 * [fix] Starting to apply vortex-bool-removal-01 change notification updating xml-rpc-gen implementation. Applied change on 1.0/1.1. * [fix] Flagging vortex_channel_cleanup as internal. (1.0/1.1). * [fix] Fixed wrong handling of serialized frames received under contexts where mixed replies (ANS..NUL/RPY) types are used to replies messages received, on a particular channel, causing some frames to be retained for delivery. Bug reported by Balazs Tirpak. Fixed and added a regression test to reproduce problem and check the fix (test_02k). Imported fix into 1.1 series. * [fix] Added initial support to create debian packages for the base library. * [new] Importing support for buggy BEEP peers reusing msgno 0 for channel 0 from 1.0. API added: - vortex_reader_allow_channel0_starting_from_0 * [new] Updated vortex xml-rpc API to include two new functions to update reference counting for XmlRpcArray and XmlRpcStruct instances. API added: - vortex_xml_rpc_struct_ref - vortex_xml_rpc_array_ref Updated internal implementation to make destroy functions to check reference counters. Fixed copy functions to use this support. Fixed applied 1.0/1.1. * [fix] Backported support to cancel vortex_channel_wait_reply and vortex_channel_get_reply operations under close connection condition from 1.1 releases. * [fix] Fixed compilation errors on windows due to casting void* with integers inside the same expression. Fixed applied to 1.0/1.1. * [fix] CHANGE-NOTIFY: Making vortex_connection_set_on_close and _full version to return void (since they were returning always NULL). Updated vortex_connection_remove_on_close_full to also require the user data pointer used to install the handler. Fix applied according to vortex-conn-on-close-01 CHANGE-NOTIFY. * [fix] Improved error recovering against connection failures while performing wait replies (vortex_channel_wait_reply) or get reply (vortex_channel_get_reply) causing functions to inmmediatly return after such errors. Added regression test test_02j to check and simulate patch introduced. * [new] General update into vortex connection module to allow reporting an expefic error code on failure found. Added new API function to get such error. - vortex_connection_get_status * [fix] Changing vortex_connection_set_on_close_full API to return void rather a pointer to the last handler configured since this is not used and was deprecated by the documentation at 1.0 series. * [fix] Fixed bug inside vortex_connection_on_close_full to check function and reference received to properly select the handler to remove. This fixes situation where the same handler but different pointer is used and removed. * [fix] Fixed memory leak at channel creation after channel reply error on connection closed scenarios. * [new] Making xml-rpc-gen tool to produce a _copy function inside the array interface produced. * [fix] Fixing pkg-config files vortex-1.1. and vortex-tls-1.1. * [fix] Improved MIME regression tests and fixed some bugs under situations were messages received aren't MIME ready. (1.0/1.1). * [fix] Fixed wrong documentation associated to VORTEX_AUTOMATIC_MIME_HANDLING. (1.0/1.1). * [fix] Making vortex_frame_get_content_type and vortex_frame_get_transfer_encoding to return NULL if it is found a frame without MIME content. (1.0/1.1). * [fix] Making vortex_frame_get_content to return the payload (raw message) in the case a non-MIME message was received. * [fix] Fixed TLS documentation, removed references to all functions. * [fix] Removed handler definition VortexConnectionNotifyNew. * [fix] Compilation warnings fixings exposed due to disable vortex log. * [fix] Updated autoconf files to compile and support tls module. * [fix] General update to the regression test directory to conform and check the new TLS component. * [new] Adding vortex TLS implementation in a separeted component (libvortex-tls-1.1). Removed the following symbol: - vortex_tls_is_enabled (no longer required) Added new API symbols: - vortex_tls_init - vortex_tls_set_auto_tls * [fix] Removed TLS files from base library. * [new] Replaced current connection creation notification by a more general and extensible notification function. Removed the following API symbols: - vortex_connection_notify_new_connections - vortex_connection_notify_created (internal) Added new API: - vortex_connection_set_connection_actions - vortex_connection_actions_notify (internal) - VortexConnectionStage (enum) CONNECTION_STAGE_POST_CREATED - VortexConnectionAction (handler) Used this new interface to implement auto-tls and connection creation notification in a way the tls module gets a clean interface to install its additional features. Now the connection creation code has a more clean and extensible implementation. * [fix] Removed all TLS reference for the base library. This is now available through the TLS component libvortex-tls-1.1. Removed auto-tls function from connection API, which is now available at the TLS module. API symbols removed: - vortex_connection_set_auto_tls * [fix] Making pkg-config files for optional components to be also optionally built and installed. * [fix] Adding pkg-config file for libvortex-sasl-1.1 component and updates to Makefile.am and configure.ac file. * [fix] General update to the base library to remove all references to SASL implementation, now moved to a independent component (libvortex-sasl-1.1). * [fix] Commiting first working independent SASL component. * [fix] General update to the regression test files to use the new SASL independent component to run tests. * [fix] Removing sasl DTD header file from base library. * [fix] Removed from base library SASL implementation. * [fix] Fixing pkg-config files libvortex-xml-rpc.pc.in and libvortex-tunnel.pc.in which were pointing to vortex 1.0. * [fix] Making the project to compile and run properly without xml-rpc support activated (skiping those tests associated to it). * [fix] Updated documentation to conform with the new xml-rpc situation. Fixed documentation to represent current state. * [fix] Removed all references from base library to xml-rpc component. Updated vortex dtds module to not support xml-rpc-boot.dtd file, now supported by the xml-rpc component. Added new pkg-config file to find xml-rpc component (libvortex-xml-rpc-1.1.pc.in). * [fix] Several updates to the regression test files to include references to the new library component (libvortex-xml-rpc.1.1) and initilizations required (test 07) to start xml-rpc component function. * [fix] Added xml-rpc-boot.dtd.h file into the xml-rpc implementation directory. * [fix] Removing reference to xml-rpc-boot.dtd.h file from base library. * [fix] Making xml-rpc-gen building process to produce a binary called xml-rpc-gen-1.1 to make it compatible with 1.0 installations. Updated code generated to conform with the new API. * [fix] Making xml-rpc implementation to not use conditional code to build the library since the xml-rpc code will be at an independent library that can be used or not. Conditional building is no longer required. * [fix] Removed vortex_xml_rpc_is_enabled since it is no longer required. This is because the function was providing the hability to check if the library was built with XML-RPC support. This is no longer the case. * [fix] Making vortex_xml_rpc_init to return a boolean value to signal initialization status. * [fix] Commiting first revision for the xml-rpc implementation separeted into a single library. * [fix] General update to the base library to remove all references to xml-rpc implementation now moved to an independent component. * [fix] Removing xml-rpc implementation from base code. Moving to a independent component, run-time configurable. * [fix] Commiting more documentation to explain how applies MIME support to sending functions (1.0/1.1). * [fix] More documentation about MIME (1.0/1.1). * [fix] Commiting changes to MIME documentation. * [fix] Fixed autoconf files to detect mingw platform and add ws2_lib reference to the linker. Applied patch into 1.0/1.1. * [fix] Finished initial implementation with full MIME structure support. Added regression test to check features introduced (test_01d). Still more documentation is required (1.0/1.1). * [new] Implemented channel level automatic MIME header addition. (1.0/1.1) API added: - vortex_channel_set_automatic_mime - vortex_channel_get_automatic_mime * [fix] Updated vortex channel module documentation (1.0/1.1) * [fix] Fixed race deallocation condition at second level frame received execution. Applied fix at (1.0/1.1). * [new] Implemented library level MIME header automatic addition configuration through a new item at vortex_conf_set/get. (1.0/1.1) API added: - VORTEX_AUTOMATIC_MIME_HANDLING (enum) Updated vortex_conf_set/get to properly support this new value. * [fix] Making internal frame MIME state to implement a reference counting mechanism to share the information between several frames. Especially used by vortex_frame_copy. Fix applied to 1.0/1.1. * [new] Updated vortex profiles API to include two new functions as part of the automatic MIME header addition configuration at profile level. (1.0/1.1) API added: - vortex_profiles_set_automatic_mime - vortex_profiles_get_automatic_mime * [fix] Updated regression test_04a to check different sizes and number of blocks to transfer. (1.0/1.1). * [fix] Making vortex_connection_is_blocked and vortex_connection_block internal handling to be done with a direct variable inside the VortexConnection structure to avoid using the general pupose hash to store its state, improving 4,12% vortex reader loop. Fix (1.0/1.1). * [fix] Fixing vortex_frame_get_next to avoid calling to axl_stream_cmp 5 times to check the BEEP header (missing else if was causing not required function activations). Fix (1.0/1.1). * [fix] Making vortex_frame_get_next to avoid allocating twice memory for each frame received. Now the function reuse the buffer used to receive the frame ans holder for the VortexFrame structure received. Fix (1.0/1.1). * [fix] Improved close in transit support by checking more scenarios, while supporting previous ones. Removed wait reply once an afirmative reply is found to avoid genereating a fake accept when it is not required. (1.0/1.1). Funny. * [fix] Updated regression test and vortex engine to support ordered delivery at the server side (activated by vortex_channel_set_serialize) which wasn't implemented. Test 02i reproduce and check the enforced ordered delivery. * [fix] Moved WaitReplyData structure to vortex channel module to avoid exposing its details to the API. * [fix] Updating vortex_channel_set_serialize documentation to better explain its function and how to use the function at the listener side. * [fix] Making vortex sequencer to reuse an internal buffer to perform send operations, reducing the allocation/deallocation pattern for each send (1.0/1.1). * [fix] Making vortex reader to use an internal buffer for SEQ frames produced to avoid alloc/dealloc operations for each SEQ frame notification (1.0/1.1). * [new] Updated vortex frame API to include new functions to produce frames on a provided buffer. API added: - vortex_frame_seq_build_up_from_params_buffer - vortex_frame_build_up_from_params_s_buffer * [fix] Commiting updates to the BTF document (1.0/1.1). * [fix] Making connection creation to disable Nagle's algorithm by default to avoid BTF (http://www.aspl.es/vortex/btf.html). * [fix] Refactored vortex sequencer internal code to make it more easy to maintain to allow moving it into new features. (1.0/1.1) * [fix] Making SEQ frame notification handling to always issue a SEQ frame if a NUL frame is received (to avoid BTF). (1.0/1.1). * [new] Added a new function that allows application level to get the most effective size for messages composing a long (bulk) transfer. (1.0/1.1) API added: - vortex_channel_get_effective_transfer_size * [fix] Making vortex reader check and issue SEQ frames as soon as possible. (1.0/1.1). * [new] Committing files to explain BTF syndrome and how it degrades BEEP performance. Still working on it. * [fix] Removing wrong condition at vortex_frame_get_next (1.0/1.1). * [fix] Fixed vortex_connection_close wrong memory access, caused by calling to the function at the listener side, with a connection in listener or master mode. Added internal checks to properly unref when required. (Fixed in 1.0/1.1). * [new] Updated vortex async queue API to include a function that allows to push data directly into the first position (next item to be popped). API added: - vortex_async_queue_priority_push - QUEUE_PRIORITY_PUSH (macro) * [fix] Making vortex sequencer SEQ frame received processing to be pushed at the head of the queue to increase priority (1.0/1.1). * [fix] Updated MIME internal implementation inside frame, to remove axlHash usage, replacing it with a custom structure to better fit MIME requirements. * [fix] Updated regression test. * [new] General commit to properly implement MIME support inside Vortex (commiting update into 1.0/1.1). Still some work is required though regression tests are passed. Now vortex fully support MIME structured format (still missing multipart) allowing to get all headers found in an incoming message. Also fixes bug produced by not introducing a CR+LF prefixing content without MIME headers. Added initial regression test (test_01d) to check MIME parser. API added: - vortex_frame_mime_process - vortex_frame_set_mime_header - vortex_frame_get_mime_header - vortex_frame_get_mime_header_name - vortex_frame_get_mime_header_content - vortex_frame_get_mime_header_next - vortex_frame_get_mime_header_count - vortex_frame_get_content - vortex_frame_get_content_size - VORTEX_FRAME_GET_MIME_HEADER * [fix] Adding missing libvortex-tunnel-1.1.def file. * [fix] Moving more types from base library to tunnel extension library (VortexTunnelItem). Added Makefile.win to compile on windows. * [fix] Removing types used by the extension library (libvortex-tunnel-1.1) from API: - VortexTunnelSettings - VortexTunnelLocationResolver * [fix] Flaged documentation and internal implementation to signal that vortex_conection_get_mss is not portable due to windows API limitations. * [fix] Moving symbols from base library to the TUNNEL library. - VortexTunnelSettings - VortexTunnelLocationResolver * [fix] Making vortex tunnel implementation to compile VortexTunnelSettings even not having defined ENABLE_TUNNEL_SUPPORT. * [fix] Making vortex_channel_get_data and vortex_channel_get_data to check internal reference to the hash used. Updated vortex_connection_new_empty_from_connection to create an empty hash rather than moving and nullify the reference. Fixed in 1.0/1.1. Bug reported by Jens Alfke. * [fix] Minimal info update... * [fix] making vortex connection establishment to support frame fragmentation on greetings frame, that is, a partial frame received, still not complete. Applied fix 1.0 and 1.1. This fixes a bug exposed while using vortex on high latency connections. * [fix] Fixed wrong frame more flag checking at vortex_greetings_process. Fix applied to 1.0 and 1.1. * [fix] Updated vortex frame module to support content fragmentation at the BEEP header. This fixes a bug exposed while using vortex on high latency connections with low bandwidth. Fixed applied to 1.0 and 1.1 Checked against regression test_02f, test_02g and test_02h. * [fix] Updated vortex_frame_get_more_flag to explain to how use the function to check for the flag in a proper manner. (1.0/1.1). * [fix] Applied change notification (vortex-profile-mask-func-01) to allow application level to configure error message to be returned when a profile is filtered at channel creation stage. * [fix] Making vortex_channel_ref to now check ->is_opened flag. Updating vortex_xml_rpc_invoke to get a reference to the channel during the invocation process (released later by __vortex_xml_rpc_invoke). Ported to 1.1. * [fix] Making vortex_channel_unref to check reference and internal reference counting before proceeding. * [fix] Updated regression test to check unref after close operation on a channel. No bug was found. Ported change into 1.1. * [fix] Making vortex_frame_send_raw to be more robust against write operation errors. This was exposed by new window size change support causing more data to be written. Making vortex_frame_get_next to also be more robust against frame fragmentation. Several updates introduced into regression test to reproduce and check fix introduced. * [fix] commiting changes ported from 1.0 series. * [fix] Updated vortex_channel_is_ready documentation to signify it only cares about pending replies for messages sent, not those received. * [fix] Separating part of test_02g into test_02h. Changed ported into 1.1 * [new] Added support to regression test to allow executing a single test selected. Changed ported to 1.1 series. * [fix] More updates to the regression test. * [fix] Commiting missing update to .def files. * [new] Added a new function and internal modifications to implement channel window change. Patch provided by Jens Alfke. Applied modified and updated regression test to check transfer rate and the new API introduced. Ported api updated and regression test to 1.1 series. API added: - vortex_channel_set_window_size * [fix] Commiting missing documentation changes. * [fix] Update into the listener side connection accept engine to support frame fragmentation on greetings. Updated regression test to simulate and check this new feature. Ported into 1.1 series. * [new] Updated vortex connection module to include new functions to provide and get a frame segmentation which will operate globally to all channels if no segmentator is found on the particular channel. Also added a global segmentator support which is used in the channel no segmentator for the connection and the channel is found. API added: - vortex_connection_get_next_frame_size - vortex_connection_set_next_frame_size_handler - vortex_connection_set_default_next_frame_size_handler Changes introduced in both series (1.0/1.1). * [fix] Updated vortex sequencer module to acquire a reference to the channel associated to a pending transfer and to release it once finished (fixed race condition on high load data sendings followed by a close). Ported changed into 1.1. * [new] Updated vortex sequencer to allow handling any size of frame splitting and to check if the channel allows more content to be sent rather putting into sleep waiting for the next SEQ frame. Updated vortex sequencer internals to call to a external function that defines how many data is to be sent on the next frame produced. Using new function: vortex_channel_get_next_frame_size. Ported change into 1.1 * [new] Updated vortex channel and handlers to include support to configure a handler that allows to control how many data must be used to produce next frame at the sequencer. This will allow to implement sender patterns that better fits low latency or high bandwitdh connections. Ported change into 1.1. API added: - vortex_channel_get_next_frame_size - vortex_channel_set_next_frame_size_handler (configure) - VortexChannelFrameSize (handler) * [fix] Updated vortex_channel_ref to check if the channel is opened and if the ref counting is ok. Ported fix into 1.1. * [fix] Making vortex channel to clear its reference to the sequencer data before posting fixing a possible race condition. Ported fix into 1.1. * [new] Updated vortex regression test to include initial implementation to check vortex bandwidth performance. Updated regression test options to allow disabling timing checks (useful when running regression test with valgrind and similar tools). Ported update into 1.1 * [fix] Commiting missing change that implements updates at the vortex sequencer module. * [fix] Updating internal vortex sequencer implementation to support any frame size to split into. It was only supported to splitting up to fill all the available receiver's buffer. Change applied to 1.0/1.1. * [fix] Fixed vortex initial greetings processing to support reading greatings fragmented (rather assuming a single shot). Change applied to 1.0/1.1. Bug reported by Jens Alfke. * [fix] Renaming internal type GsaslData into VortexGsaslData to avoid type confusion. Checked all calls to axl_free and replaced those that require gsasl_free to be used (to ensure the allocation engine used from gsasl is the same used to release resources). Reported by Benoit Amiaux. Change introduced into 1.0 and imported into 1.1. Check regression test. * [fix] Added new regression test to check wait reply function. Nothing to fix for now. Updated vortex_channel_wait_reply function to explain some details and to state that vortex_frame_unref must be used to deallocate frame returned. Ported changes into 1.1 series. * [new] Added new function to vortex frame module to check current reference counting status. Ported changes into 1.1 series. * [fix] Imported change notification (vortes-sasl-rename-01) from 1.0 series. * [fix] Imported documentation update to vortex_connection_shutdown. * [fix] Moving all files to utf-8. * [fix] Fixed wrong internal handling for reply sent on a channel which wasn't checking if the reply sent was complete causing to signal more replies sent than actual value. Updated regression test to reproduce and check this problem that was causing a peer to not be able to close a connection after sending huge replies. Fixed introduced in 1.0 and 1.1. Problem reported by Mihail Dmitrievsky. * [new] Moving from internal API to the public the following function that allows to wait if all replies were sent for a particular channel. API added: - vortex_channel_block_until_replies_are_sent * [fix] Fixed const declaration at vortex_sasl_accept_negociation and vortex_sasl_accept_negociation_full. Reported by Dexter. * [fix] Updated vortex_channel_new documentation to state that the channel reference can't be used until the process finish. * [fix] Applied a fix to check channel reference received at channel creation, under situation where it was denied by the remote side and the threaded mode is activated. Reported and fixed by Jens Alfke. Imported fix into 1.1. * [fix] Updated regression test to reproduce problem fixed by previous fax and check the fix introduced. Making regression test introduced to check error codes returned by channel creation failures (profile not supported: 554 and channel creation denied: 421). Update applied to 1.0 and 1.1. * [fix] Moving two log messages from critical/warning to warning/debug (closing connection wrongly configured at 1.0 and a log when the channel is stalled). Reporeted by Jens Alfke. * [fix] Making main header to make errno redefinition just after including errno.h header on windows platform. * [fix] Fixed bug inside channel creation process which didn't allow to start sending content from the listener side right after the channel being accepted. Updated regression test to reproduce the problem and check the fix introducted. Reported by Jens Alfke (1.0/1.1). * [fix] Fixed race condition at the SASL notification. Updated regression test to reproduce and check the fix. (1.0/1.1). * [fix] Updated regression test to check that a channel could be closed at the channel create notification. Found already supported. Updated channel creation to check channel status before the channel notification to avoid notifying a possible piggyback. (1.0/1.1). * [fix] Fixed bug inside vortex connection creation when timeout activated, causing to lock the caller until consume all the timeout for hosts refusing the connection rather than failing soon. Missing connection status check before receiving wrong greetings reply. Reported by Jens Alfke (1.0/1.1). * [fix] Fixed wrong handling at TLS profile implementation causing to not properly recover during TLS failures (TLS protocol handshake). Fixed memory leak (error reply frame for TLS implementation wasn't released). (1.0/1.1). * [fix] Making vortex client side implemetation for TLS profile to not unref the connection on protocol failure. Rather, return the reference to the user the let the application space to implement its error handling (1.0/1.1). * [fix] Updated vortex_connection_set_auto_tls documentation to include more references about its function (1.0/1.1). * [fix] Fixed vortex_tls_start_negociation_sync to return a reference to the connection received if a timeout is found (1.0/1.1). * [fix] Fixed bug inside xml-rpc-gen tool which was produced add to array method without checking if the type held by the array could support this. * [fix] Import bug fix from 1.0 series: "removing not properly configured checking at vortex_frame_send_raw causing to fail on nullified zero sendinds." * [new] Updating vortex-regression-client to allow configuring the regression listener location (and the associated BEEP proxy), taking as default localhost location if no value is provided. * [fix] Updating vortex regression test 12 to include support to start fake listener at the remote regression test, allowing to check timeout support on separate hosts. * [fix] Fixed memory leak on connection failures, associated to the error message. * [fix] Importing fix for tcp connect timeout. * [fix] Committing changes to use --ifnewer option from axl-knife to build DTD files. * [fix] Taking advantage from axl-knife tool, now the library loads its associated DTDs from an C inline representation generated, removing the inconvenience to load dtd from files. Great. Fix applied on both branches. * [fix] Fixed wrong detection of the ctx creation handler at the server side implementation of the TLS profile causing to fail (because the key and certificate functions were not configured). Reported and fixed by Jens Alfke. * [fix] More address modifications. * [fix] Updated vortex_channel_send_err documentation to include some clarifications about its function. * [fix] Fixed missing check for references received (status and status_message) at vortex_tls_start_negociation_sync, under a timeout condition. Change applied to 1.0 and 1.1 branch. Reported by Jens Alfke. * [fix] Fixed wrong openssl headers include causing building environments without tls to fail. Fixed on both branches. * [fix] Updated vortex client greetings implementation to also advice profiles supported. Initial patch provided by Antoine Mahé for 1.0 and now adapted to 1.1 branch. * [new] Updated regression test to reproduce and check the client greetings advice support. Updated both branches. * [fix] Making vortex reader to not set as not connected a connection broken that was found to be not possible to add to the watching list. Updated log message associated to not scare the developer. Fix applied on both branches. * [fix] Making vortex_profiles_unregister to uninstall the profile removed from an internal list used by vortex_profiles_* functions. Fix applied on both branches. * [fix] Fixed race codition at the sasl auth negotatiation, under case where the remote peer has denied the SASL auth id. Bug fix applied on both branches and checked against regression test. * [fix] Fixed sasl process error notification (there was some cases the notification was done twice). Fixed on both branches. * [fix] Committing missing updates to .def file. * [fix] Making vortex_connection_block to lock the caller until the connection is really blocked. Fix applied on both branches (1.0 and 1.1). * [fix] Making non-blocking connect with timeout activated to also check of I/O read ready before proceeding. Fix applied on both branches (1.0 and 1.1). * [new] Updated vortex hash module to include a new function to remove items stored without calling to destroy function. Used this to implement new function to remove items stored as data associated to channels. API update applied to both branches (1.0 and 1.1) API added: - vortex_hash_delete - vortex_channel_delete_data * [fix] Fixing minimal bug which was introducing doxygen comments without having them activated. * [fix] Fixing documentation warnings. * [fix] Integrated TUNNEL regression test into main test (GREAT!). Integration performed on both branches (1.0 and 1.1). * [fix] Integreated test_12 into general regression test. Insided on both branches. * [fix] Commiting missing change to export internal function from vortex sequencer (vortex_sequender_drop_connection_messages). Bug fixed in both branches. * [fix] Making vortex_frame_get_next to check for a connection not properly initialized, if an error is found, properly signaling the error rather a general connection broken. Updated both brances (1.0 and 1.1). * [fix] Making vortex reader module to check for blocked connections to avoid performing I/O reading over them and updated vortex_reader_foreach internal API to return a queue where a notification is provided. Bug fixes and updates integrated into both branches (1.0 and 1.1). * [fix] Improved connection timeout (connect operations with timeout activated) to really implement a global timeout for all the operation. Previous implementation wasn't properly implementing all cases. Integrated bug fix into 1.0 and 1.1 branches. * [new] Updated vortex connection API to include two new functions that allows to block and check I/O read operations for a particular connection. Integrated into both branches 1.0 and 1.1. API added: - vortex_connection_block - vortex_connection_is_blocked * [fix] Making vortex connection module to signal vortex sequencer module to flag all its pending associated message to be discarded due to connection close. Fix integreated into both branches (1.0 and 1.1). * [fix] Making vortex_listener_shutdown to lock the caller during the process of close the listener and all associated connections. * [fix] Making vortex listener to unref the connection after the initial and second step are finished, to avoid race conditions caused by a connection close in the middle of those states. Bug fix integrated into 1.0 and 1.1 branches. * [fix] Missing commit (vortex_thread.h). * [fix] Updated vortex sequencer internal function to drop all pending messages to be sequenced for connections that have been closed or flage dto be closed. Updated vortex main header to reorder main header inclusion. Change intregrated into both branches 1.0 and 1.1. * [new] Updated vortex async queue API to include a new function that allows to perform a foreach operation over all items stored, locking the queue during the operation. Integreated change into 1.0 and 1.1 branches. API added: - vortex_async_queue_foreach * [new] Updated vortex handler module to include a foreac handler used by vortex_async_queue_foreach. Integrated into 1.0 and 1.1 branches. API added: - VortexAsyncQueueForeach * [fix] Making VortexSequencerData to hold a reference to the connection and to have a new flag to signal that a message to be sequenced must be discarded. Integrated into both branches 1.0 and 1.1. * [fix] Making vortex_greetings_process to flag as a warning to not receiving a frame containing the greeting. Integrated change into 1.0 and 1.1 branch. * [fix] Import bug fix from 1.0 series: "Making vortex_listener_cleanup to check queue before unrefering." * [fix] Commiting some changes to vortex-client-connections.. * [fix] Fixing bug inside tunnel implementation (ctx reference) wasn't properly configured. * [fix] Importing bug fix from 1.0 series: "Ensuring vortex_channel_build_single_pending_frames to properly configure the channel reference associated to the frame built (Bug and its fixing reported by Jens Alfke). Updated regression test to reproduce the problem and to check the fix introduced." * [fix] Fixing missing queue deallocation at client regression test_11. * [fix] Importing mutex initialization fixing from 1.0 branch: "Fixed missing mutex initialization code at the vortex connection module, which was causing to not start channel_mutex and channel_update_mutex depending on the peer side (listener or initiator). Unified mutex initialization code through an unique function: __vortex_connection_init_mutex. Bug reported by Jens Alkfe." * [fix] Importing patch from 1.0 series to make vortex support mutex initialization to be done inside the module rather than at the main module. * [fix] More updates into the regression test (test_11) to avoid problems with the out of order reply implementation in the future. * [fix] Updating test to enforce out or order reply support. * [fix] Fixing bug inside out of order reply handling which wasn't rechecking the next seq-no value to use, making the vortex engine to produce reply frames using the same seq-no values, causing the remote peer to drop the connection due to a protocol violation. * [fix] Updated tunnel implementation to store its settings using the context data storage API rather a reference to the private ctx structure. * [new] Updated context API to include new function that allow external modules implemented on top of vortex to store its context associated data. The data is stored in a hash-like manner. API added: - vortex_ctx_set_data - vortex_ctx_set_data_full - vortex_ctx_get_data * [fix] Started library separation to allow having components implementing the core library and additional profiles allowing each application to use only what they need. Started with tunnel implementation which is now available at the "tunnel" dir, producing the library libvortex-tunnel-1.1.(dll|so). * [fix] General fix to make the library compilable without debug activated (removed warnings about ctx variable not used). * [fix] Applied patch to better detect msvc while disabling log produced (patch provided by Benoit Amiaux). * [fix] Fixing documentation and parameter name to make vortex_connection_connect_timeout to receive a parameter that is supposed to hold a microseconds timeout value rather and seconds. (Reported by Benoit Amiaux). * [fix] Fixed wrong connect timeout at vortex_connection_new which was mixing values returned by vortex_connection_get_connect_timeout (which returns microseconds) with values returned by time() (which does it in seconds). Problem reported and tracked down by Benoit Amiaux. * [fix] Applied msvc compact patches (Benoit Amiaux), updated Makefile.am to properly update libvortex-1.1.def. Fixed comments and parameters for vortex_connection_timeout. * [fix] Updating documentation to fix references and to include comments to use new context based api. * [fix] More changes to the regression test. * [fix] Patches to fix vortex thread pool inclusion (reported and fixed Benoit Amiaux to 1.0 branch). * [fix] Several fix to make the library to compile with all features disabled. * [fix] fixing coment... * [fix] Making vortex_channel_is_opened to also check current connection status to report if the channel is *really* opened (not only its internal status). * [fix] Making vortex close channel to acquire a reference to the connection during the close process, if the thread mode is activated, avoiding to lose the reference if the thread planner stop the close process and other running thread terminates the connection. Checked regression test. * [fix] Making vortex channel creation to store internally a reference to the context rather than getting the context through the connection. * [new] Updated the vortex API to provide a macro that allows to get the context configured and to produce a error log if something fails with file and line information. API added: - CONN_CTX * [fix] General fixings to make Vortex Library 1.1 to properly compile and run on windows. * [fix] Doing some type checking on vortex manual. * [fix] Making vortex_connection_foreach_channel to return if the foreach operation was performed. Making also the function to ref the connection during the process. * [fix] Updated configure.ac file to update and produce the vortex-1.1.pc file. Updated change notification preparing its release. Updated compilation files. * [fix] General update to make the documentation to be updated with the new API. * [fix] Porting patch to provide a log handler from the 1.0 branch. Updated vortex log API to allow the application level to provide a handler to manage all log produced by the application. Patch by Jens Alfke. API added: - VortexLogHandler - vortex_log_set_handler - vortex_log_get_handler Updated documentation. * [fix] First fully working version with the API changed and regression test passed. Nice! * [fix] Several updates to add a "const" declaration and changing some declarations from char * to void * (Reported and fixed by Jens Alfke). Integrated changes from 1.0 branch. * [new] Updated the vortex log API to allow configuring if all log messages are synchronized to avoid messages to be mixed from different modules. (Reported by Jens Alfke). API added: - vortex_log_acquire_mutex - vortex_log_is_enabled_acquire_mutex * [fix] Updated regression tests to follow the new API. * [fix] More updates to the 1.1 implementation. Now the base library compiles without problem. Now remains updating the rest of tools... * [fix] More updates to the API to make it full context based. * [fix] Working in progress changing the interface and providing a documentation for the change notification about what changed. Still not complete nor tested. * [fix] Introducing initial project changes to make the library be versioned as libvortex-1.1 (referenced as -lvortex-1.1) and installed as libvortex-1.1.dll or libvortex-1.1.so.