[ASPL Fact Announce] [ANN] Vortex Library 0.8.8 is ready!
Francis Brosnan Blazquez
francis en aspl.es
Mar Dic 20 16:29:44 CET 2005
## Vortex Library 0.8.8 Stable Release ##
Advanced Software Production Line is proud to announce the Vortex
Library 0.8.8 availability: an open source "BEEP Core" protocol
implementation written in C, mapped into TCP/IP.
Vortex Library is a powerful toolkit to write new application
protocols and application over the well-defined "BEEP Core" protocol
defined at RFC3080/RFC3081.
Vortex Library has been developed inside the Af-Arch project as its
data transport layer.
Vortex Library is a stable and robust application protocol
development toolkit. Currently it is running under Microsoft Windows
and GNU/Linux platforms.
Check out the following links to get ready with Vortex Library:
[Vortex Library homepage]
[Af-Arch homepage where Vortex Library is being developed]
[BEEP Core official web page]
The release in short
TLS and SASL profiles (ANONYMOUS, PLAIN, EXTERNAL, CRAM-MD5 and
PLAIN) have been implemented.
And many more minor features, keep on reading..
Changes since 0.8.7
* [new] added support to allow Vortex programmers to define the
handlers to be used while sending and receiving data. This will
allow to implement any required features which needs to modify how
data is send and received inside the Vortex including those profiles
which use other function than send and recv. API added was:
- Handler: VortexSendHandler.
- Handler: VortexReceiveHandler.
- vortex_connection_default_send (private function)
- vortex_connection_default_receive (private function)
- vortex_connection_invoke_send (private function)
- vortex_connection_invoke_send (private function)
* [improve] making vortex library to allow programers to configure if
it is going to be built with TLS support or not. API exported in
both cases will be the same, allowing the undefined error due to not
found API. API exported for TLS will report to app level if the
library being used have enabled TLS support. Modified autotools
files and source code to support this issue.
* [fix] adding a memset to 0 at vortex_frame_readline function.
* [new] adding support to vortex client tool to be able to support
enabling TLS profile support.
* [new] adding support to notify when a connection have being closed
through a VortexConnectionOnClose handler. This allows to perform
some especific operations over connection closed. Connection Close
is executed just before its resouces are deallocated. Added API to
allow setting the on close handler:
- vortex_connection_set_on_close [public]
* [fix] making vortex_connection_close_all_channels to be public so
profile implementators could use it.
* [new] adding support for implicit piggyback support. Now, piggyback
message sent at the start message or on its reply, is notified to
the user space as a received frame. This allows to support with the
same source code replies with piggyback or withtout it. Added API:
- vortex_channel_have_piggyback [public]
- vortex_channel_get_piggyback [public]
- vortex_channel_set_piggyback [private]
* [new] added a new top level mechanism to receive frames in a
synchroumos manner without using wait reply which is more especific
and expensive. This method is based on two functions:
- vortex_channel_queue_reply [public]: which just queue any frame
received into a user space queue.
- vortex_channel_get_reply [public]: which fetch the next frame
recevied on the selected queue, including support to fetch the
optional piggyback received.
* [new] added new function to create VortexFrame instances from user
- vortex_frame_create [public]
* [fix] add to vortex connection creation a socket sanity check to
avoid creation socket connections using OS reserved file descriptors
which could only cause problems. However, a function is provided to
avoid executing the sanity check:
* [new] added new vortex-tls-listener.c example TLS profile server.
* [fix] updating extended start handler definition to allow app level
to define a piggyback at the start reply
(profile_content_reply). Updating source code which where invoking
start extended definition.
* [fix] while closing the channel 0, as a last step for closing a
connection, on some system there were producting a race condition
between the code flagging the channel as being closed and the code
that use that flag on the channel close reply to know that the
connection has been closed properly. Reordered vortex_channel_close
flagging code to execute in the proper position.
* [fix] fixing vortex_channel_get_reply, it was calling to
vortex_channel_get_reply instead for vortex_channel_get_piggyback
* [new] starting to add support for TLS server side
configuration. Currently this is done by using
vortex_tls_accept_negociation which signal vortex library that TLS
negociation is supported. This function also install all default
handlers to be called to enable, negociate and notify for the user
app all incoming TLS requests.
* [fix] fixing vortex_profile_invoke_start to use the new API, which
provides access to the profile_content_reply to be used as a
* [fix] adding a getpid portable definition vortex_getpid which maps
correctly to the right function on gnu/linux and windows platforms.
* [new] adding a new definition VORTEX_SOCKET which maps to the right
value on windows plantform and gnu/linux ones. Modifying
VortexConnection definition to use this value.
* [fix] making vortex library to be Visual Studio 2005 compatible.
Modified source code so it could be compiled on both platforms:
windows and gnu/linux.
* [fix] fixing a wrong new line implementation. Portable way to write
new lines to detect \r\n is to use \x0D\x0A.
* [fix] fixing an API bug at vortex_init function. It wasn't returning
any initialization error code so, if something gos wrong application
level couldn't check that status.
* [fix] updating vortex-client to use the vortex_init return value to
check library initialization status.
* [new] adding support to vortex connection module to configure if the
underlaying connection should be closed or not when a vortex
connection instance is closed (actually when the channel 0 is
closed). Added new API to allow configure this:
* [fix] fixing vortex channel implicit piggyback process and
* [fix] moved all BEEP channel definition messages (start, ok, error,
..) to be generated only from vortex frame factory
module. Implemented new functions to produce this messages:
* [fix] updating Vortex Library source due to previous change. Now,
every channel management message used is build and created by the
vortex frame module.
* [fix] adding client side TLS profile prototype mostly completed. It
starts TLS channel negociation, process reply (either implicit or
explicit) closes channels opened and call to TLS-ficate.
* [fix] adding some memory cleanups before using xmlValidCtx stack
* [new] updating vortex_connection_new_empty function to be public and
able to create a new connection starting from an already connected
socket and a role. Updating listener internal implementation to
conform the change introduced.
* [fix] updating vortex_connection_ref/unref documentation.
* [new] adding support to VortexConnection instance to store user
space data especifying a key/value destroy data functions per item
stored. API added:
* [new] adding new public function to support greetings reply
processing and connection activation. This will be useful to
implement profiles that require tunning reset. API added:
* [new] adding 3 new handlers to support TLS profile at listener peer
- VortexTlsAcceptQuery: allows applications level to allow or deny
incoming TLS negocation request.
- VortexTlsCertificateFileLocator: allows application level to
especify the certificate file to be used.
- VortexTlsPrivateKeyFileLocator: allows application level to
especify the private key to be used.
* [new] moved common location files function from vortex dtd module to
vortex support so it could be also used by other modules, and at
this moment, by the vortex tls module. API added:
* [new] vortex library client side implementation for the TLS profile
is now complete.
* [fix] fixing extended channel start definition: user space parameter
was missing in the definition.
* [fix] updating vortex_connection_reconnect documentation. Added an
* [fix] updating vortex library documentation, fixing broken
* [new] added new function to support in an abstract manner how files
are found inside the Vortex library:
Updated vortex_support_find_data_file to use file paths installed by
* [new] added cleanup function to vortex support module:
This function is automatically called by the vortex_exit function.
* [fix] udpating vortex_init function to install default path to
lookup for data files.
* [fix] added some additional checks while client TLS request is
enabled to avoid suposing a transport session is already
* [fix] fixing vortex_init call to add path to search data file
* [fix] fixing bug on vortex_connection_set_data_full, it was swapping
key and value.
* [fix] fixing wrong error checking inside the vortex-client tool for
* [fix] fixing wrong socket declarations not using VORTEX_SOCKET.
* [fix] making vortex_support_find_data_file to just return the file
name found if search path used is "."
* [new] adding initial full working Vortex Library with TLS
support. Current test have been done to vortex-client tool which now
support "enable tls" command. API added:
- vortex_tls_start_negociation [public]
- vortex_tls_accept_negociation [public]
- vortex_connection_set_tlsfication_status [private]
- vortex_connection_is_tlsficated [public]
* [fix] making vortex greetings module to now show TLS profile, even
if it is registered for those connections already TLS-ficated.
* [fix] on close connection event now works even if several threads
calls to close the same connection. This event have been used to
implement the piece of the TLS profile which starts the TLS
* [new] added support to perform pre-read operations inside the vortex
reader process. This allows to establish user space handlers which
could perform previous operations to read frames. API added:
- vortex_connection_set_preread_handler [public]
- vortex_connection_is_defined_preread_handler [public]
- vortex_connection_invoke_preread_handler [private]
- VortexConnectionOnPreRead [public]
* [fix] removing profile content prefix and suffix code actually done
* [fix] added profile content preffix and suffix to
* [new] updating user documentation about activating TLS profile.
* [new] updated main documentation to include references to the new
* [new] updated vortex status document to reflect the TLS profile
* [new] added support to implement auto TLS negociation for each
connection created. This allows to reuse source code already
implemented that needs to also negociate TLS profile. Conections
created with vortex_connection_new are returned with TLS profile
already negociated if auto TLS is activated. API added:
* [new] implemented initial timeout support for synchronous operations
Timeout support is now used to limit synchronous waiting while
activated TLS support at vortex_connection_new due to auto TLS
* [fix] updated function documentation for vortex_connection_new and
vortex_conection_set_data to explain how to use new mechanisms added
and how to use a connection to store user space data.
* [new] added support to implement synchronous TLS profile negociation
The function does the same as vortex_tls_start_negociation but doing
it in a synchronous way (blocking the caller).
* [fix] fixing wrong #ifdef-#endif align inside vortex tls module.
* [new] adding support to vortex-client tool to initialize SASL auth
negociations against BEEP peers.
* [new] added new handler to enable application level to get notified
about SASL process status. API added:
* [new] adding new channel start function: vortex_channel_new_fullv,
which allows to create new channels setting the profile content to
be piggybacked using a printf-like format. API added:
* [fix] fixing a bug on vortex_channel_get_reply which was returning a
frame that the second level handler invocator unref just few steps
after. Now the function makes a copy from the frame
returned. Updated user documentation to advise that the frame
returned should be unrefered. Implemented new frame copy function to
perform the fix. API added:
* [fix] reorganizied source code at vortex dtd module to load more
than the channel management DTD file. Now it is include the SASL DTD
file. Adding TLS and SASL DTD files.
* [fix] mostly finished the SASL client implementation for the Vortex
* [fix] reimplement SASL client implementation to use GNU SASL library
instead of Cyrus SASL. Vortex SASL support for client side mostly
* [fix] improving error detection for start channel error replies at
vortex channel module.
* [new] adding new handlers to support anonymous and plain profile
incoming request notification and validation. API added:
Now Vortex SASL implementation invoke previous handlers to notify
user space that a SASL auth was received to get confirmation to deny
or to allow it.
* [new] added new functions to allow setting previous SASL handler
* [new] commiting first fully working SASL implementation for client
and server side. Already tested with ANONYMOUS profile.
* [new] adding new sasl function to allow checking if a given
connection is already authenticated.
* [fix] making SASL vortex implementation to remove SASL crendentials
on SALS negociation failures inside __vortex_sasl_notify. Fix having
previous credentials values mixed with new ones set from previous
SASL failed negociations.
* [new] adding support to vortex-client tool to show current SASL auth
status and current SASL auth id for the "connection status" command.
* [new] comming complete SASL PLAIN profile support for both sides.
* [fix] adding sasl start auth sanity checks to avoid starting SASL
handshake for a given profile without providing all necesary
* [fix] adding support for SASL PLAIN profile validation to
* [fix] making vortex-client tool to use synchronous API for TLS and
SASL activation. Now, vortex-client tool support perform SASL
operations for PLAIN, ANONYMOUS, EXTERNAL, CRAM-MD5 and DIGEST-MD5
* [fix] making vortex_connection_new to use synchronous version for
TLS activation when auto tls is enabled rather than using the
* [fix] vortex_connection_free was not deallocating memory for
features and localiza items.
* [new] uploading fully working Vortex version with SASL support for
client and server side for the following profiles: PLAIN, ANONYMOUS,
EXTERNAL, CRAM-MD5, DIGEST-MD5. API Added:
* [fix] making VortexStatus definition to bind VortexError to 1 and
VortexOk to 2 to differenciate this values from NULL (or cero).
* [new] updated Vortex manual to explain in detail how to use SASL
support and piggybacking.
* [fix] adding timeout support for synchronous TLS and SASL negociation.
* [fix] fixing a bug on vortex listener waiting code which was
unrefereing a queue that on Vortex Listener start up error is null.
Advanced Software Production Line is leading the Af-Arch project: a
complete framework to develop distribuited application to manage
Af-Arch project relies on Vortex Library to exchange data between
its distribuited nodes.
Advanced Software Production Line also provides GNU/Linux support
and consulting services on how organization can introduce GNU/Linux
inside its process, making other platforms to interact with
You can reach us:
http://www.aspl.es - info en aspl.es
We hope Vortex Library help you. Enjoy Vortex Library!
Francis Brosnan Blázquez - francis en aspl.es
Advanced Software Production Line - http://www.aspl.es
20th Dec 2005, Madrid (Spain)
Más información sobre la lista de distribución ASPL-Fact-announce