[ASPL Fact Announce] [ANN] Vortex Library stable release 0.8.9 is out!

Francis Brosnan Blazquez francis en aspl.es
Vie Feb 3 18:57:45 CET 2006

       ## Vortex Library 0.8.9 Stable Release  ##

Release note

  Advanced Software Production Line is proud to announce the Vortex
  Library 0.8.9 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:

    - http://vortex.aspl.es 
      [Vortex Library homepage]

    - http://fact.aspl.es
      [Af-Arch homepage where Vortex Library is being developed]
    - http://www.beepcore.org
      [BEEP Core community web site]
The release in short

  This release adds a properly implemented SEQ frame support that now
  enables Vortex Library to interop with beepcore-java. 

  Added better support for mime handling. Messages generated are
  automatically mime-tized according to the profile configuration
  associated to the given channel. Frames read inside the Vortex
  Library automatically separates the payload content from the mime

  Additionally, many bug fixings, memory handling, and project
  documentation updates.

  Many thanks goes to answers received at the beepcore.org community
  list: Peter Hall, David Blacka, David Kramer and Marshall Rose while
  requiring information about the SEQ frame support.

  An special mention goes to Paul Lacy which has provided the enough
  java support and working examples to make Vortex Library to talk to

Changes since 0.8.8

* [fix] fixing compilation errors found while using Vortex Library
  without TLS support exposed by win32 platforms.

* [fix] updating user documentation for SASL, more examples and
  examples of code.

* [new] working on adding XML-RPC support (through RFC3529 definition)
  At this moment it is implemented initial bootstrap mechanism to
  create XML-RPC channels and type definitions to be used to define
  method calls and its values (include method response). Added initial
  vortex-xml-rpc-listener.c test example. API added:

  Type definitions (XML-RPC spec abstract type definitions):
    - XmlRpcMethodCall
    - XmlRpcMethodResponse
    - XmlRpcMethodResponseFail
    - XmlRpcMethodValue
    - XmlRpcStruct
    - XmlRpcStructMember
    - XmlRpcArray
    - XmlRpcParamType
    - XmlRpcResponseStatus
    - VortexXmlRpcState
    - vortex_xml_rpc_new_method_call

  API functions:
    - vortex_xml_rpc_is_enabled 
    - vortex_xml_rpc_boot_channel
    - vortex_xml_rpc_channel_status
    - vortex_xml_rpc_accept_negociation
    - VortexXmlRpcBootNotify (handler)
    - VortexXmlRpcValidateResource (handler)
    - VortexXmlRpcServiceDispatch (handler)

* [fix] making error message validation to be public. It was defined
  as a private function inside the Vortex Channel module. Renamed

    - vortex_channel_validate_err

  Now the function returns not only if an error reply was found but
  also code number and its textual diagnostic message.

* [fix] fixing memory leak at close message handling function. It
  wasn't unrefering code and message values.

* [new] added new API to check if the a given profile is the one
  running for a given channel:

     - vortex_channel_is_running_profile

* [fix] updated project documentation, making a conceptual separation
  for the API found inside Vortex, fixing conclusion section for the
  profile example tutorial,

* [fix] added API to vortex frame module to check if a given frame
  contains an error message. Makes use of the new API defined at
  vortex channel. API added:

   - vortex_frame_is_error_message

* [fix] making vortex tls module to enforce providing a tls
  notification handler if the asynchronous API is the one being used.

* [fix] adding an internal parameter counting for method call object
  inside XML-RPC invocation. This will ensure user space doesn't
  perform wrong XML-RPC invocations with missing parameters.

* [new] adding more API to handle XML-RPC abstract data types:

  - vortex_xml_rpc_method_value_new: allows to create a new method
    parameter used for method call and method response.

  - vortex_xml_rpc_method_call_add_value: allows to associate a given
    method value to a given method call following a sequential order.

  - vortex_xml_rpc_method_call_set_value: allows to set at a given
    position a given value into a given method call.

  - vortex_xml_rpc_method_call_create_value: convenience function to
    create a method value and add it to a given method call into one

  - vortex_xml_rpc_method_call_free: destructor function for method
    call object.

  - vortex_xml_rpc_method_value_free: destructor function for method

  - added several #macros to support calling previous function without
    being required to write "vortex_xml_rpc" prefix

* [fix] making vortex sequencer to not allocate memory to perform
  frame fragmentation. This is an step required to implement full
  support for SEQ frames. Now vortex sequencer rely on
  vortex_frame_build_up_from_params to create frame fragments.

* [new] vortex_frame_seq_build_up_from_params to create SEQ frames.

* [fix] rewritten vortex_frame_build_up_from_params to support
  building frames paying attention to the payload size rather than
  rely on %s parameter format which seeks for then next 0x0 value to
  delimit the payload. This is an step to support SEQ frames.

* [new] adding new function to create raw frames from values to
  replace previous vortex_frame_build_up_from_params. This new
  function returns not only the frame built but also the size of
  it. API added:

  - vortex_frame_build_up_from_params_s

* [fix] rewritten vortex_frame_build_up_from_params to use services
  provided by vortex_frame_build_up_from_params_s. Updated function
  documentation to advise it is deprecated.

* [fix] rewritten vortex sequencer frame building code to use previous
  function and to perform some additional checks to ensure frame
  sequencing works properly.

* [fix] fixing __vortex_channel_common_msg and
  __vortex_channel_common_rpy to use memcpy sentences based on sizes
  provided by user application to copy payload to be sent.

* [???] found that some several critical sections placed on vortex
  reader process are not really needed. Maybe this is an ancient code
  that has lived within the vortex reader until now. For now, it is
  removed and some test will be performed to ensure that they are
  indeed not needed.

* [fix] adding support to vortex_frame_get_next function to parse and
  return SEQ frames. One step closer to SEQ frames support.

* [fix] definitely, critical sections found at vortex reader wasn't
  really necessary. Remove all code about this internal mutex, mutex
  allocation and mutex destruction. Updated vortex reader code to not
  perform any call to:

   - vortex_channel_lock_to_update
   - vortex_channel_unlock_to_update

  Updating documentation for previous function to flag them as

* [new] adding support to SEQ frames to vortex library. Now the
  library is able to produce and accept SEQ frames to perform flow
  control inside a BEEP session.

* [fix] making vortex-client to produce raw frames using \x0D\x0A CRLF
  representation rather than \r\n.

* [fix] making vortex greetings module to use \x0D\x0A CRLF
  representation rather than \r\n while creating greetings messages.

* [fix] making vortex greetings module to update status received
  channel to use vortex_frame_get_content_size rather than

* [new] adding new API to register mime type value to be used for
  channels created under some selected profile at vortex profiles
  module. Now vortex library automatically handle mime content type
  and mime content transfer encoding values generated for every
  message sent under a channel using a global configuration provided
  at vortex profiles module. API added:

   - vortex_profiles_set_mime_type: which allows to register for a
     given profile, already registered, the content-type and
     content-transfer-encoding value to be used.

   - vortex_profiles_get_mime_type: returns for the given profile the
     content type associated.

   - vortex_profiles_get_transfer_encoding: returns for the given
     profile the content transfer encoding value associated.

* [new] added new API to vortex queue to enable Vortex Library
  internals to queue new items not only at the tail but also at the
  header of the queue.  API added:

   - vortex_queue_head_push: queue a new item at the headers queue.
* [fix] written vortex sequencer module to conform SEQ frames
  implementation. Now vortex sequencer do not sent more frames than
  the maximum allowed by the remote peer until a new SEQ frame is
  received.  It has also the ability to keep track on messages that
  are pending to be sequenced while attending other message sequence
  operations to other channel under other connections.  Added lot of
  documentation to internal vortex sequencer structures to explain
  which is the purpose for every element used.

* [fix] now vortex sequencer uses vortex_frame_build_up_from_params_s
  rather previous version (without _s) which supports returning
  current frame size built. This is considered more secure and binary
  content proof because new function implement frame building using
  memcpy operations.

* [fix] adding new API to vortex sequencer to allow vortex reader to
  notify that the maximum allowed segment to be sent have been
  increased due to SEQ frame reception. API added:

    - vortex_sequencer_queue_and_signal_sem

* [fix] fixed memory leak while parsing greetings message and an error
  happen. It wasn't unrefering (wrong) greeting frame.

* [fix] several modification to vortex channel module to include
  support to track down maximum buffer size that is willing to accept
  the remote peer and maximum buffer size that the channel is willing
  to accept. Internal API added, not exposed to application level:

   Management function for the M¡maximum buffer size to accept:

    - vortex_channel_update_remote_incoming_buffer
    - vortex_channel_get_max_seq_no_remote_accepted
    - vortex_channel_update_incoming_buffer
    - vortex_channel_get_max_seq_no_accepted
    - vortex_channel_queue_pending_message

   Pending to be re-sequence messages on a given channel, due to
   stale state:

    - vortex_channel_queue_pending_message
    - vortex_channel_next_pending_message
    - vortex_channel_remove_pending_message

* [fix] fixing second level invocation for frame received, under some
  circumstances it wasn't deallocating the frame delivered.

* [new] added support to include mime information while sending
  messages and replies using current configuration associated to the
  profile. This is a transparent mechanism to the application
  programmer, making it life easier.  Internal API added:

   - __vortex_channel_get_mime_headers_size
   - __vortex_channel_get_mime_headers

* [fix] fixing memory leak while creating new channels, it wasn't
  deallocating frame reply to a start message. Ouught!

* [new] making channel 0 to be mime-tized to application/beep+xml for
  the content-type value and "binary" for the content transfer

* [new] added support to allow application level to get current
  content-type and content-transfer-encoding for a given channel. API

   - vortex_channel_get_mime_type
   - vortex_channel_get_transfer_encoding

* [fix] making vortex_init function to not initialize vortex listener
  module. This is not required to until a call to vortex_listener_new
  is done.

* [fix] making vortex_exit function to stop and cleanup vortex reader
  system and to cleanup vortex profiles module.

* [fix] making vortex_frame_get_next to not leak while allocating a
  frame but a poorly one was received.

* [new] now vortex frames are read in a way that application
  programmer could get only the payload size, without mime
  information, and later get current mime information defined. API
  have been added to manage this new situation:

   - vortex_frame_get_content_type: get current content-type value for
     the given frame.

   - vortex_frame_get_content_transfer_encoding: get current

   - vortex_frame_get_mime_headers_size: get current mime headers size
     that are kept for the mime information.

   - vortex_frame_get_content_size: which returns the frame payload
     size including mime headers information.

* [fix] rewritten beep channel management function (<start />, <ok />,
  <error />,...) to not include mime information inside the message,
  and to allow mime automatic mechanism to generate it.

* [fix] making vortex dtd module to deallocate xml rpc dtd on vortex

* [fix] making vortex reader to not use frames that are already
  deallocated to write log information, (using deallocated memory that
  could lead to memory corruption problems).

* [fix] making vortex_listener_new to allocate values received for
  host and port, to allow application level to use either static or
  dynamic values.  This values are later deallocated. Added more
  details on you to use this function and a example on building a
  vortex listener using this.

* [fix] making vortex_listener_init to be callable from several
  threads at the same time. Now this function is called from
  vortex_listener_new function.

* [fix] fixing autoconf files (AC_CONFIG_AUX_DIR(.) is included).

* [fix] a great effort have been done to make vortex library to not
  leak.  And now it is complete, and all source code written inside
  the context of the vortex library do NOT leak. Great! (valgrind

* [fix] vortex documentation have been upgraded, vortex manual have
  been splitted into sections to get them more clear. Common sections
  and related info is now grouped.

* [fix] starting the ansification process, at this moment only
  comments are translated into the /* ansi form */ from the // modern

* [fix] fixing a really incredible bug based on a race condition
  between building the next frame to be sent and queueing the rest of
  the message due to remote buffer size is complete but, under some
  circumstances the frame generated is fast enough to reach remote
  side, be delivered into the application space, generate a new SEQ
  frame, and make local vortex reader to start a re-sequencing process
  but the initial !!already didn't queue the rest of the message to be
  resequenced.!!!! Reorganized vortex sequencer code to avoid previous
  race condition: threads, lot of fun!

* [fix] fixing initial values used for the max seq no that the remote
  peer is willing to accept and the local buffer for each channel from
  4096 to 4095, which represent a total octet counting of 4096
  starting from 0 up to 4095. Making vortex reader, vortex channel and
  vortex sequencer to reorganize its operational calculus to this

* [fix] fixing vortex_channel_update_incoming_buffer to not report
  vortex reader to send a SEQ frame if it is detected that current
  configuration will not allow this. Making this function to directly
  report current ackno and window size values so the vortex reader
  completely depends on this function.

* [new] adding support to vortex frame module to generate an unique
  global identifier to uniquely identify every frame, mainly to allow
  memory debugging but also providing application space a way to
  identify frames. API added:

    - vortex_frame_get_id 

* [fix] making vortex_frame_create to use services provided by
  vortex_frame_create_full to build new frames. This new function not
  only uses memcpy instructions to build new frames but also adds
  support to specify frame content type and content transfer encoding
  values. API added:
    - vortex_frame_create_full 

* [fix] fixing horrible, difficult to find bug, which was causing to
  leak memory due to not deallocating memory for the frame received as
  a reply containing the profile to be used for a previously start

* [fix] making __vortex_frame_get_next_id to also report which is the
  frame module section that is allocating the next, concurrent, frame

* [fix] fixing vortex autoconf files. Including xml-rpc-invocation.png
  image path into doxygen configuration file (also included into
  af-arch doxygen file).

* [fix] making vortex greetings to update message numbers to be
  expected, rather than making an exception for the channel 0.

* [fix] making vortex_channel_empty_new to set as default reply sent
  and reply received for channel 0 values {1, 1}. This solves the
  problem found for the message 0 that is never sent for the channel

* [fix] fixing a bug while processing start messages. If the xml
  received contains garbage, that is spaces, tabulars, returns,
  between the <start> element and the <profile> element, the libxml
  library set as a child node to the <start> element the garbage!!
  Added some additional checks to test if the node read is a profile
  node or something else.

* [fix] making vortex reader to accept first messages that starts from
  with msgno=1.  API added to control this function:

  - vortex_reader_allow_msgno_starting_from_1.

  This will make vortex library to interop with beepcore-java library.

* [fix] performing more code ansification. Updated vortex CSS style
  sheet for the vortex documentation center.

* [fix] making vortex library internal queue for frames to be sent, to
  be splitted into two queues, one with normal frames, and the other
  with SEQ frames. This last one have higher priority over the
  messages inside the same channel. To perform this change only
  following function were modified so, the rest of the Vortex Library
  subsystems keeps on working the same:

   - vortex_channel_queue_frame
   - vortex_channel_queue_is_empty
   - vortex_channel_queue_next_msg
   - vortex_channel_queue_length

* [new] adding a new function to perform a synchronous channel boot
  for the XML-RPC profile. This will allow a blocking
  initialization. API added:

   - vortex_xml_rpc_boot_channel_sync

* [new] adding two new function to the XML-RPC API to provide
  asynchronous and synchronous invocation. API added:
   - vortex_xml_rpc_invoke
   - vortex_xml_rpc_invoke_sync

* [new] added a new asynchronous notification handler to report
  results received for XML-RCP invocation performed. API added:
   - XmlRpcInvokeNotify

* [fix] making internal __vortex_connection_set_non_connected to not
  perform a shutdown and a close operation over the underlying socket,
  delegating that job to the vortex_connection_free function, that is
  called by the entity that perform the ultimate unref operation. Now,
  allows to delay the close operation as long as possible.

* [fix] fixing some error at TLS and XML-RPC building when they are

* [fix] working on giving XML-RPC support to vortex-client tool to
  perform invocations.

* [fix] making vortex dtd module to report an error when a dtd file is
  not found.

* [fix] reverting change done at __vortex_connection_set_not_connected
  function which was delaying connection close to
  vortex_connection_free. However, this has some issues causing
  applications that do not properly implements some aspect of the BEEP
  protocol to hang until a new connection is received.

* [fix] plenty of fixing inside the vortex documentation (global spell
  checking done).

* [fix] making seq frame generation decision making code to not allow
  it if the channel to report is being closed. This also makes to work
  TLS implementation and any tuning profile, that requires to close
  the session (including the channel 0 to start talking other non-beep

* [new] adding a new function to enable restoring default IO handler
  used to send and received data for a given connection. API added:

   - vortex_connection_set_default_io_handler

* [fix] fixing TLS code to properly fall back into normal operations
  when the TLS negotiation have failed. Making also (for listener and
  initiators) to not flag the connection to be tls-ficated until it is
  really done.

* [fix] making vortex_channel_get_reply and vortex_channel_wait_reply
  to not get blocked until a specific reply is received for ever. A
  timeout mechanism has been introduced to perform a limited blocking

* [new] adding lot of documentation explaining how
  vortex_channel_get_reply and vortex_channel_queue_reply is used to
  implement synchronous, blocking frame reading.  Added documentation
  at the frame dispatch schema documentation.

About Us

  Advanced Software Production Line is leading the Af-Arch project: a
  complete framework to develop distributed application to manage
  enterprise process.

  Af-Arch project relies on Vortex Library to exchange data between
  its distributed 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
3th Feb 2006, Madrid (Spain)

Francis Brosnan Blazquez <francis en aspl.es>
Advanced Software Production Line, S.L.

Más información sobre la lista de distribución ASPL-Fact-announce