<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN">
<HTML>
<HEAD>
  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=UTF-8">
  <META NAME="GENERATOR" CONTENT="GtkHTML/4.8.5">
</HEAD>
<BODY>
                   --== noPoll toolkit ==--<BR>
                       Black Hole Sun<BR>
                           0.4.4<BR>
<BR>
Advanced Software Production Line is proud to announce a new stable<BR>
release of the noPoll toolkit.<BR>
<BR>
noPoll is a OpenSource WebSocket implementation (RFC 6455), written in<BR>
ANSI C, that allows building pure WebSocket solutions or to provide<BR>
WebSocket support to existing TCP oriented applications.<BR>
<BR>
Commercially supported, noPoll was written to have a clean, easy to<BR>
use and integrate library. It is released under the terms of LGPL 2.1<BR>
(so you can build OpenSource or commercial applications) and currently<BR>
is being heavily used by Vortex Library, Turbulence and Core-Admin to<BR>
provide WebSocket support to those projects (some of them using BEEP<BR>
over WebSocket).<BR>
<BR>
Resources<BR>
~~~~~~~~~<BR>
<BR>
   noPoll homepage<BR>
   [ http://www.aspl.es/nopoll ]<BR>
<BR>
   Commercial support<BR>
   [ http://www.aspl.es/nopoll/commercial.html ]<BR>
<BR>
   Advanced Software Production Line, S.L.<BR>
   [ http://www.aspl.es ]<BR>
<BR>
   Featured project: Core-Admin<BR>
   [ http://www.core-admin.com ]<BR>
<BR>
This release in short<BR>
~~~~~~~~~~~~~~~~~~~~~<BR>
<BR>
  - Several bugs were fixed, including several updates to improve<BR>
    noPoll's stability while retrying, recovering partial transfers,<BR>
    improved building and windows support.<BR>
<BR>
<BR>
Thanks to<BR>
~~~~~~~~~<BR>
<BR>
  - Javier Celaya (updates for building scripts, header includes<BR>
    updates and linking for windows, several updates to pending write<BR>
    codes around SSL code, fixings to ping/pong, set WSASetLastError,<BR>
    removed retry code for writing, replaced by EWOULDBLOCK logic).<BR>
<BR>
  - Sergio Lopez (Support for sending/receiving messages bigger than<BR>
    64KB)<BR>
<BR>
  - Elmar Siek (reported on ready not working on client side).<BR>
<BR>
  - Emmanuel Puig (reported and fixed fragment detection for final<BR>
    messages after big transferes)<BR>
<BR>
  - Tony Mountifields (reported wrong break, replaced by return at<BR>
    ctx_unregister_conn, old gcc support )<BR>
<BR>
Changes from previous release<BR>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR>
<BR>
* Run configure conditionally from autogen.sh<BR>
<BR>
* Include $(top_builddir)/src when building tests. This is needed when<BR>
  doing an out-of-sources build, to find nopoll_config.h<BR>
<BR>
* Include ws2tcpip.h on Windows<BR>
<BR>
* It provides the definition of struct addrinfo and related functions.<BR>
  Also, define _WIN32_WINNT as 0x0501 so that these funtions are<BR>
  declared.<BR>
<BR>
* Link against ws2_32.dll on Windows<BR>
<BR>
* [fix] Web files updates..<BR>
<BR>
* [fix] Read messages bigger then 64KB<BR>
<BR>
* [fix] Send messages bigger than 64KB<BR>
<BR>
* [fix] Fix handling pending write data<BR>
<BR>
* [fix] When SSL_write returns EAGAIN, it keeps a pointer to the data<BR>
  buffer that was being written. This buffer must exist the next time<BR>
  that SSL_write is called. So, this commit recycles the send_buffer<BR>
  in nopoll_conn_send_frame as pending_write, instead of creating a<BR>
  new buffer and copying so many data around.<BR>
<BR>
  Besides, nopoll_conn_send_frame correctly returns all the bytes as<BR>
  written, since they are kept in the pending_write buffer. Otherwise,<BR>
  the caller will try to write the same data again.<BR>
<BR>
* [fix] Fix WS PING/PONG implementation<BR>
<BR>
  WebSocket specification, section 5.5.3, states that 'A Pong frame<BR>
  sent in response to a Ping frame must have identical "Application<BR>
  data" as found in the message body of the Ping frame being replied<BR>
  to'. This commit does that, instead of returning an empty Pong<BR>
  frame.<BR>
<BR>
* [fix] Check ENOTCONN on SSL_connect error<BR>
<BR>
  This happens on Windows (at least) when the TCP connection is not<BR>
  yet established.<BR>
<BR>
* [fix] Updated nopoll_conn_new documentation (fixed typo)<BR>
<BR>
* [fix] Updated nopoll-conn module to include common code to call<BR>
  defined on_ready function for client side code too (it was already<BR>
  supported by listener side). Reported by Elmar Sieke.<BR>
<BR>
* [fix] Updated nopoll-conn API to include a new function to help API<BR>
  consumer of nopoll_conn_read to know if there are more pending bytes<BR>
  to be read. It fixes interation reported by Turbulence, in case of<BR>
  SSL+WebSocket+BEEP and child process with different users (forcing<BR>
  to activate proxy connections between parent process holding<BR>
  receiving socket and child handling messages received other it).<BR>
<BR>
   - nopoll_conn_read_pending<BR>
<BR>
* [fix] Improved has_fin and is_fragment detection for final messages<BR>
  after big transfer. Reported and fix provided by Emmanuel Puig<BR>
  (emmanuel.puig@amarisoft.com)<BR>
<BR>
* [fix] Fixed nopoll_ctx_unregister_conn to do "return;" instead of<BR>
  "break;" when the connection is found. Avoids double mutex unlock<BR>
  call. Bug reported and fixed by Tony Mountifields<BR>
  https://github.com/ASPLes/nopoll/issues/21<BR>
<BR>
* [fix] Allow building with old GCC that does not support<BR>
  stack-protector<BR>
<BR>
* [fix] Silence warning on old GCC about potentially uninitialised variable.<BR>
<BR>
* [fix] Check stack protector options for gcc to be available to<BR>
  include them during configure (by @softins Tony Mountifield )<BR>
<BR>
* [fix] Set errno in Windows too<BR>
<BR>
  Use WSASetLastError in Windows whenever errno is set in Unix<BR>
  platforms<BR>
<BR>
* [fix] Set errno to EWOULDBLOCK when there is no full message<BR>
<BR>
* [fix] In nopoll_conn_read, if nopoll_conn_get_msg returns NULL, the<BR>
  connection is still ok and a non-blocking call has been requested,<BR>
  return EWOULDBLOCK<BR>
<BR>
* [fix] Remove retry loops and return EWOULDBLOCK<BR>
<BR>
* [fix] When SSL_get_error returns that more data is needed, or the<BR>
  system call has been interrupted, set errno to EWOULDBLOCK instead<BR>
  of retrying 50 times.<BR>
<BR>
* [fix] Return EWOULDBLOCK instead of retrying read & write (do not<BR>
  retry after -2/retry-operation-allowed is reported). Reported by<BR>
  Javier Celaya jcelaya.<BR>
<BR>
* [fix] Several updates to make nopoll_conn_send_frame to return the<BR>
  amount of bytes written to the wire but not just fixed length. Also<BR>
  updated the function to report -2 when no byte was written and<BR>
  NOPOLL_EWOULD_BLOCK is reported by errno.  Updated the function to<BR>
  also record added_header_size:<BR>
<BR>
       conn->pending_write_added_header = header_size;<BR>
<BR>
  ...to help nopoll_conn_complete_pending_write to report bytes<BR>
  written to the write without including bytes added by noPoll due to<BR>
  headers.<BR>
<BR>
* [fix] Updated documentation to better report values returned by:<BR>
<BR>
   - nopoll_conn_send_text<BR>
   - nopoll_conn_send_text_fragment<BR>
   - nopoll_conn_send_binary<BR>
<BR>
<BR>
About Advanced Software Production Line, S.L. (ASPL)<BR>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR>
<BR>
  Advanced Software Production Line (ASPL) provides GNU/Linux support<BR>
  and consulting services to enable organisation to introduce<BR>
  GNU/Linux into their processes, making other platforms to properly<BR>
  interact with it.<BR>
<BR>
  You can contact us, using English or Spanish, at:<BR>
<BR>
       http://www.aspl.es - info@aspl.es<BR>
<BR>
  We hope noPoll may be useful you. Enjoy noPoll toolkit!<BR>
<BR>
--<BR>
Francis Brosnan Blázquez           - <A HREF="mailto:francis@aspl.es">francis@aspl.es</A><BR>
Advanced Software Production Line  - <A HREF="http://www.aspl.es">http://www.aspl.es</A><BR>
9th Jun 2017, Madrid (Spain)<BR>
<BR>
<BR>
</BODY>
</HTML>