Change log for HawkNL

Version 1.4 Release
Fixed non-Microsoft compiler errors in wsock.h and mutex.h
Fixed a potential access violation in nlGroupGetSockets
De-linted all source files, various minor fixes
More minor compile fixes
Updated nlStringToAddr, nlGetRemoteAddr, nlGetLocalAddr, and nlGetAddrFromName so that
  address.valid will tell you if the function was successful
Fixed nlGetAddrFromName* so they will always handle a port number, example: www.name.com:80
Fixed nlGetNameFromAddr* so they always add the port number if port!=0
Updated async.c to show the nlGetAddrFromName* and nlGetNameFromAddr* fixes
Updated nlGetLocalAddr so that it also returns the local port of the socket


Version 1.4 beta 4
Merged in Ryan Haksi's Mac modifications
Cleaned up code in err.c and thread.c
Updated sock_ReadPacket for better error detection, and simplified the code
Added NL_PACKET_SYNC error code for NL_RELIABLE_PACKETS
Added compile option to remove mutexes and per-thread error codes for single threaded apps
Added socklen_t define to sock.c for better POSIX compliance
Updated clientserver.c to show more NL features
Fixed bug in nlAccept for NL_RELIABLE_PACKETS
Changed err.c to use TLS (thread local storage) for error codes
Added NL_TLS_ERROR code
Added makefile.osx


Version 1.4 beta 3
Fixed Linux and Solaris makefiles
Fixed several bugs in err.c for POSIX systems
Moved system include files before NL include files
Added the NL_REUSE_ADDRESS hint to IPX


Version 1.4 beta 2
Moved NL_TCP_NO_DELAY from nlEnable/nlDisable/nlGetBoolean to nlHint
Added Windows compile option to remove IPX support
Added NL_CONNECTION_TYPES to nlGetString
Fixed NL_NETWORK_TYPES to return the network types and not the connection types
Added NL_PARALLEL network type for future support of parallel ports
Added NL_RAW connection type for NL_SERIAL and NL_PARALLEL network types
Fixed bad error message when calling nlGetAddrFromName
Fixed an error when sending to a group where a socket in that group had been closed
Fixed getfile.c which was broken by non-blocking connects
Added NL_LOOP_BACK network code
Fixed bug in IPX code that caused it not to init properly
Updated broadcast.c to add the network choice on the command line
Renamed test2.c to clientserver.c and added it to the MSVC workspace
Updated clientserver.c to add the network choice on the command line
Fixed bug in multicast code
Added mutexes to each socket for better thread safety


Version 1.4 beta 1
Added changes to support Mingw32 compiler for Windows
Added nlSetLocalAddr to choose the local address, or network interface
nlOpen has been modified to create NL_BROADCAST and NL_MULTICAST sockets
nlBroadcast has been been eliminated, use nlWrite
nlConnectMulticast has been been eliminated, use nlConnect
broadcast.c and multicast.c have been updated
Added a millisecond timeout value to nlPollGroup
Modified nlConnect so that it does not block on a non-blocking TCP socket
Added NL_WRONG_TYPE and NL_CON_PENDING to errorstr.c
Added nlHint for advanced control of sockets
Added wrappers for mutex and thread APIs for future portability
nlSetMulticastTTL has been eliminated, use nlHint BEFORE nlConnect
Added per thread NL error messages
Added threads for the non-blocking UDP connect
Added Windows option to use native Windows threads instead of pthreads


Version 1.3
Added new makefiles for Linux and Solaris
Added a Windows static library for those that do not want to use a DLL
Changed address_t to NLaddress
Now compiles with LCC for Windows


Version 1.3 beta 2
Fixed several things for better UNIX compatibility; Solaris is now supported
Added NL_PACKET_SIZE to errorstr.c


Version 1.3 beta 1
Added nlSetRemoteAddr, which I overlooked months ago
Updated getfile.c to strip off the HTTP header, and to be more HTTP 1.0 compliant
Added nlPollGroup for added scalability. Uses select() to check the read or write status of all
  sockets in a group, and returns a list of those sockets
Updated test2.c to use nlPollGroup
Updated the IPX code to test for packets larger than the 1466 byte limit


Version 1.2
Fixed Win9x nlConnect error with NL_UNRELIABLE connection
Updated nlAccept so that it connects NL_UNRELIABLE connections


Version 1.2 beta 3
Fixed multicast support broken in beta 2
Updated nlOpen to automatically reuse TCP server addresses (SO_REUSEADDR)
Updated nlConnect to speed up connecting NL_UNRELIABLE sockets


Version 1.2 beta 2
Added mutexes around global variables to make them thread safe. The following are now thread safe:
    All read/write functions when updating stats
    All functions that create or destroy NLsockets
    All group functions
    nlClear
Added NL_SOCKET_STATS enumerant to nlEnable and nlDisable socket read/write statistics
Added NL_HIGH_BYTES_SENT, NL_PACKETS_RECEIVED, NL_AVE_BYTES_RECEIVED and NL_HIGH_BYTES_RECEIVED
Updated nlGetInteger and nlGetSocketStat to return NLlong
Added nlClearSocketStat to clear the stats for an individual socket
Added a packet size limit of 16384 bytes to NL_UNRELIABLE and NL_RELIABLE_PACKETS
Updated getfile.c to use the new socket read/write statistics
Added the first 64 bit CPU compatibility code


Version 1.2 beta 1
Added the nlGroup API to create groups of sockets
Added NL_RELIABLE_PACKETS to packetize the TCP stream
Added more error codes and error checking
Removed NLPeek because of potential misuse, and the high performance penalty on Windows
Moved most error checking from the drivers to nl.c to reduce code size


Version 1.0 beta 1
Added some missing error strings to errorstr.c
Fixed a minor bug in sock_Broadcast
Added double macros: nlSwapd, readDouble, and writeDouble
Added buffer.c to show how the swap and read/write buffer macros work
Updated nlOpen to use NLushort for port number
Added error checking to sock_StringToAddr
Fixed sock_GetAddrFromName so that the address will always return something valid
Added NL_BAD_ADDR error code
Added asynchronous calls nlGetAddrFromNameAsync and nlGetNameFromAddrAsync
  using the PTHREADS-WIN32 library
Added async.c to show how to use the new asynchronous calls
Updated nlGetAddrFromName and nlGetAddrFromNameAsync so they will accept a numeric address string
Added max.c to test how many ports can be opened at once on a system
Added NL_MESSAGE_END error message for TCP with non-blocking to notify the app the message is done
Updated nlRead to support the NL_MESSAGE_END error message
Added getfile.c to show how to download a file from a web server
Updated nlGetLocalAddr so that you now need to pass an NLsocket to it, just like nlGetRemoteAddr
Updated nlGetLocalAddr so that it is accurate with a connected socket on a multihomed system
Updated NLChat to use TCP instead of UDP
Changed NLChat default port to 1258 (HawkNLU port), and added 209.204.172.76 (www.hawksoft.com)
  to the address list
Fixed nlSetMulticastTTL so that it works on all Unix's and Windows Winsock versions
Renamed nlGetSocketPort to nlGetPortFromAddr
Renamed nlSetSocketPort to nlSetAddrPort
Added nlGetSocketStat to get the statistics for an individual socket (nlGetInteger returns the
  statistics for all sockets combined)


Change log for HawkNL and NLU

Version 0.6 alpha
Added a new sample, NLChat, a Windows chat program, courtesy of Tim Lyakhovetskiy <teenytim@hotmail.com>
Reoganized MSVC workspace, object files are now separate from the .exes, .dlls, and .libs
Bumped the Warning Level up to Level 4 (the max) for NLU
Moved the endian and read*/write* macros to nl.h where they can be easily used by apps
Added crc functions to NLU
Updated sock_Peek to return NLulong
Added multicast support with nlConnectMulticast and nlSetMulticastTTL
Moved CRC functions from NLU to NL so other apps can use them
Fixed the elusive 'Win95 cannot connect a UDP socket' failure that caused test.c to only work with TCP
Added a multicast sample
Added NL_SOCK_DISCONNECT error code to let you know if the socket has been disconnected, or other
  network error has occurred, each time you read or write, so you can shut down the socket
Changed nlGetSocketPort to return NLushort port number
Changed nlSetSocketPort to use NLushort port number
NL code is now compiling cleanly with Warning Level 4
Started 'de-linting' the source code with LCLint
Renamed sockets.c and sockets.h to sock.c and sock.h to avoid name collisions on some platforms


Version 0.5 alpha
Added official port numbers to protocol.h
For Windows, changed from _cdecl to _stdcall calling convention
Added Delphi headers and project files courtesy of 'Johnny' <VILLAJ@RELIASCHEV.COM>
Renamed convert* functions to nluSwap*
Converted nluSwaps and nluSwapl to macros
Inlined nluSwapf
Added nlGetErrorStr and nlGetSystemErrorStr to convert error codes to strings,
  based on code supplied by Ryan Haksi <cryogen@infoserve.net>
Added a reference count to nlInit and nlShutdown
Added NL_TCP_NO_DELAY enumerant to nlEnable and nlDisable
Added nlGetBoolean (how did I miss that one?)
Added NL_CON_REFUSED error code
Reorganized NLU API to make it event driven
Deleted nluServerAcceptPlayer and nluVoiceServerPump because NLU is now event driven
Added nluBanAddress
Refined NLU protocol some more
Added nluGetConnectionStats
Consolidated nluPlayerSend and nluServerSend to nluSend
Consolidated nluPlayerReceive and nluServerReceive to nluReceive
Changed all nluVoicePlayer* functions to nluVoice*
Changed the library name to HawkNL


Version 0.4 alpha
Added NLlong and NLulong
Fixed nlAddrToString and nlGetString to make them thread safe
Altered nlGetNameFromAddr to make it easier to use
Deleted nluVoicePlayerPump
Added nluVoicePlayerSend and nluVoicePlayerReceive
Removed NLU_CRC and NLU_SEQUENCE options, they really should be transparent
Fixed sock_ConnectUDP and sock_AcceptUDP so they should now work through firewalls
Deleted nluSelectNetwork, just use nlSelectNetwork
Added nluGroupGetPlayers
Changed server_t and player_t to nlu_server_t and nlu_player_t
Changed callback functions in nlu.h to return NLboolean values
Rewrote getNewSocket to be more efficient
Added NL_MAX_SOCKETS and NL_OPEN_SOCKETS enumerants to nlGetInteger


Version 0.3 alpha
Added IPX/SPX code for Windows
Added nlEnable/Disable to API
Added option to choose blocking IO for threaded apps
Added many functions to the NLU API, including the first of the voice API


Version 0.2 alpha
Initial release
