Revision Log

1.00 Initial release 1.01 Updated documentation 1.02 Fixed a rare thread related crash with large numbers of players. Improved reliable packet performance by 30% 1.03 Increased demo player support to 31. Improved performance under high server loads. Added security parameter to server and improved packet encryption. Allowed specification of domain name for client connections. Fixed rare crash with sending multiple large packets at the same time. Decreased overhead for all packets. 1.031 Fixed a bug with sending more than 255 ordered packets 1.032 Added master server and master client support. Added GetConnectionTime method to both the server and the client. Added port to GetPlayerIPFromID 1.04 Modified source code to build under Unix / Linux. Requires a source code license to make builds. 1.041 IO completion port implemented for outgoing packets to avoid delays caused by sendto blocking under high loads. Fixed two minor bugs related to high load processing. 1.042 Fixed a bug where timestamps were not updated quickly enough after connecting 1.043 Updated documentation, source code release for all versions. Removed demo player limit. Added DemonBattle game to examples 1.044 Added a couple of simple access functions and made the templates compile on newer versions. 1.1 First beta leading to version 2.0. Partial support for bitstreams and support for automatic variable synchronization. 1.2 Second beta leading to version 2.0. Full support for bitstreams, rewritten reliability layer, and the compression layer added. 1.3 Third beta leading to version 2.0. Remote procedure calls implemented 1.4 Improved Linux compatibility. Fixed a problem on Windows where threads didn't terminate even with an explict call. Removed signaled events. Thanks to Michael Long for helping me test this. 1.401 Fixed declaring variables inside for loops by moving them to the top of the scope. 1.402 Fixed two bugs concerning "orderingList" in the reliability layer. Thanks to Jeremy Stieglitz for providing the excellent bug report. 1.403 Added _INTERNET_SIMULATOR define. Various bug and memory leak fixes. I now close the SocketLayer thread upon server and/or client disconnection. 1.404 Fixed a bug with reused data stream corruption (such as with the compression layer) and large packets never being sent in a frame under extreme high stress conditions. Added the automatic memory synchronization sample. Added sample projects files (sorry, visual studio.net only). 1.405 Players connecting from the same IP/Port when that IP/Port is already considered a connected player will reconnect rather than have the connection request ignored. 1.406 Rerelease of 1.405 with a bug fix 1.407 Ping time relaying fixed, compression and timestamps fixed with broadcasting, RPC has full parameter set, other small fixes. 1.408 Compressed / encrypted the header portion of RPC calls. SetStaticClientData, SetStaticServerData, GetStaticClientData, GetStaticServerData now deal with raw data (BitStreams) and no longer internally deal with the actual structure the end user users to hold the data. Enumeration data code sample and Hangman game sample added. 1.409 Fixed a bug where ordered packets would be long delayed during data overruns. Added the BitStream sample. 1.41 Added a parameter for the bitstream class to point to a copy of the data passed to its constructor rather than always making a copy. 1.411 Fixed a bug with the last partial byte being pre-shifted when sending bitstream data with RPC 1.42 SetPassword method added to both the client and the server. Updated documentation. Improved performance. 1.43 Implemented IO completion ports. Numerous bug fixes. 1.431 Fixed a bug with the server rejecting clients without a password when the server didn't use one itself. Reintegrated Unix compatibility. 1.432 Increased maximum split packet size from about 1.2 megs to about 32 megs. Improved flow control. Fixed several Unix problems. 1.44 Huge performance increase and further Unix fixes. Thanks to Ed Williams for pointing out the Unix problems and the bottleneck. Added the SetMTUSize method. 1.441 Better mutex use resulting in a slight performance increase. Several potential deadlocks fixed. 1.442 Huge recieve bottleneck fixed, resulting in an 80X increase in the rate of receipt of user packets! 1.443 Numerous optimizations, especially in regards to packet rate and reliable packet types. This is roughly a further 5X to 10X speed improvement. Also fixed an unreported bug in the compression layer. 1.444 Implemented a new windowing algorithm. Further speed improvements. Added the function GetTransmittedFrameCount to the client and server. 1.445 Minor bug fixes. Reduced memory allocations and deallocations via pools, improving speed consistency. Removed unnecessary memory allocations and copies in the user interface thread, decreasing processing time. Improved windowing algorithm. #ifdef'ed most of the asserts so Unix would not run them in release. Changed all examples to use regular priority threads. 1.446 Minor efficiency improvements. Fixed bug with sending packets over 3 megabytes and large files using SHA-1 security headers. 1.45 Fixed a problem with pings. Improved timestamp accuracy. 1.5 Put data structures inside namespace BasicDataStructures. Added VC6 projects. Updated DemonBattle to use the newest RakNet version. 1.501 Changed the Queue and List templates to work for VC6 users. 1.51 Added RakVoice and a sample that uses RakVoice. Added GetMTUSize method. Improved automatic memory synchronization. Improved timestamp accuracy (thanks to Chris Taylor). linuxBuild.tgz included in the base directory (thanks to NathanH). Fixed bug with reconnecting clients that the server thinks is still active. 1.52 The high priority thread boolean was replaced with an int. 0 for regular priority, 1 for high priority, 2 for ultra high priority. 2.0 Implemented RakPeer and changed RakServer and RakClient to use it. Numerous interface changes. See 2.0UpgradeInstructions.txt for conversion instructions. 2.001 Removed the const qualifier when you read bitstreams. 2.002 Fixed using domain names with clients 2.003 Removed feedback loop test code with RakVoice 2.01 Added ID_REMOTE_EXISTING_CONNECTION (client only). This is sent to clients that have just connected to a server, one message per existing client on the network. Also fixed a bug where static data was not sent to new clients from existing clients. 2.011 Specifying UNASSIGNED_PLAYER_ID for SendStaticData wasn't broadcasting when it should have been. 2.012 Fixed a case where ID_REMOTE_CONNECTION_LOST was reported incorrectly. THe connection was not actually lost, just the report was wrong. 2.013 Fixed ID_REMOTE_EXISTING_CONNECTION. 2.1 Added distributed objects. General update to and improved the structure of the documentation. Adjusted Sleep times in RakPeer. 2.11 Added the ability to ping systems we are not connected to from the client and peer. 2.12 Repackaged everything to be much more sensible and fixed DemonBattle so it would compile with the newest version of DirectX. 2.121 Fixed a bug with timestamps. Added timestamping sample. 2.122 Fixed a client bug with broadcasted remote pings. Fixed a client bug where it wouldn't send when using IO completion ports. 2.13 The RPC function can now handle timestamps. Fixed several bugs with static data relaying between the client and server. Dropped automatic memory synchronization. 2.131 Moved the global REGISTER_DISTRIBUTED_NETWORK_OBJECT code to main() 2.132 Added MasterServerAndClient sample project to clarify how the Master Server works. Also made a few changes to the interface for it. 2.133 Made more compatible with Dev-CPP. 2.2 Added autopatcher. Added tutorial. Fixed bug where ID_NO_FREE_INCOMING_CONNECTIONS wasn't coming up. Removed file size restriction for a single packet. 2.201 Changed the data structure classes to compile on Borland. Fixed a copy/paste bug with the DistributedNetworkObjectHeader when using 6 elements. 2.21 Fixed a bug with the autopatcher sending the full file even when compressed. Added the concept of client update ownership to the Distributed Network Object system. Changed chat example to use separate client and servers. Added the string compressor class, so you can write compressed strings to bitstreams. Rewrite of the master server. 2.22 Increased default list and queue allocation sizes to avoid reallocations. Corrected oversight where the master client was not pinging servers. Added ability to add runtime synchronized variables to the DNO. 2.221 Fixed memory leaks with the DNO system. Implemented automatic ban lists. 2.23 Security updated. Added ID_RSA_PUBLIC_KEY_MISMATCH. Added InitializeSecurity. Added DisableSecurity. Removed secured parameter from Send. 2.231 Improved Linux compatibility. 2.232 Added DNO functions ReadCreationData, WriteCreationData. Replaced the RSA code with faster stuff. 2.233 Improved VC6 compatibility with the RSA code. Updated the system overview documentation. Put the BitStream class in the RakNet namespace. 2.234 Improved VC6 compatibility with the RSA code again. 2.24 Eliminated one of two threads greatly improving performance. Fixed a bug with packetloss reporting and reduced by 10X the mandatory delay with reliable packet resends. 2.241 Improved flow control algorithm 2.25 Massive performance increase by rearranging threaded calls and eliminating related mutexes - Roughly 25X faster. Added DroppedConnectionTest. Renamed FlowControl to FlowControlTest. 2.26 Order of magnitude throughput and performance increase. Added loopback performance test project. Added RakNetStatistics. Added system priority level. Added wait timer to disconnect and close connections. 2.261 Renamed getTime RakNetGetTime. Changed the high priority bool for the client and server to a sleep timer. Added stats, samples, and secure connections section to help. Fixed linux builds. 2.262 Fixed a bug when sending partial bytes with the BitStream class when using RPC. Fixed a bug where the huffman tree pointer was not set to 0 in the string compressor constructor. 2.263 Fixed secure connections. Put in a playerIndex member to the Packet struct (backwards compatiblity). Fixed disconnection messages not showing up. Fixed rapidly changing who you connect to. Moved RPC calls into the user thread space where they belong(oops!). 2.27 Using DNO, clients now know the ClientOwnerID so you can tell who made an object. Split packets can be sent unreliably. Added server query function for LAN broadcast discovery. 2.271 Minor Linux fixes. 2.272 Fixed a stupid mistake with the LAN discovery. 2.273 Added the reliable ordered test project. 2.274 Fixed a cut and paste error with timestamps. Thanks to Jarno for catching it. 2.28 Added the ability to run RakNet single threaded. Use -1 for the sleep timer to do this. 2.29 Changed to an adaptive thread utilization model which works in conjunction with the user thread to ensure consistent responsiveness with fewer context switches and less overhead. 2.291 Call OnDistributedObjectCreation when an object is created locally by the server 2.292 Improved adapative thread takeover timers. Improved responsiveness of ID_DISCONNECTION_NOTIFICATION packets. 2.293 Temporary disabled adapative threading due to problems under high loads. 2.3 Improved client file verification sample. Renamed streams to channels. 2.301 Can pass 0 for the data for RPC. Minor Linux stuff. 2.302 New data structures from Giblet. Fixed a bug with the reliable ordered test. 2.303 Fixed BigTypes.h for the latest version of gcc. 2.304 Added AllowConnectionResponseIPMigration. Fixed switched naming of p,q,e,n for RSA keys. Fixed chat example client to show port unreachable message properly. 2.305 Implemented NAT punch-through support via the master server. Added functions SetOfflinePingResponse and AdvertiseSystem. Fixed incorrect naming of public key encryption variables. 2.306 Added an assert against passing a memory size of 0 to SynchronizeMemory. Fixed a crash when calling RPC with an empty data string. 2.31 Fixed bug in SynchronizeMemory for distributed network objects. 2.311 Servers will no longer send back to the sending client for distributed network object updates. Fixed a bug with ID_RECEIVED_STATIC_DATA on the server. Thanks whitlark! 2.32 Replaced Sleep with WaitForSingleObject on a timer (Windows only) if you define _WIN32_WINNT=0x0400 or higher. Also fixed a problem with passwords. 2.33 Now includes DOxygen commenting. Thanks for Dalfy for doing this. 2.331 Fix not detecting socket errors. Thanks to Dong-Yeon Hwang 2.332 Reverted the simple mutex class to actually use a mutex rather than a critical section, since the critical section gives much worse performance 2.333 AMD 64 fixes. Changed back to Critical Section. Although the responsiveness is worse, it threads better. 2.4 Make duplicate packet tracking memory dynamic, reducing average memory use by 25X. Fixed bug with secure connections not responding to out of order replies. Cirilo Bernardo made the BitStream class and most tests endian complaint. Fixed handling ordered packets that arrived more than 2 out of order. Fixed formatting broken by a contributor. Fixed resend queue counting "Holes" towards the overall size, blocking sends if a single packet was lost with subsequent packets not lost. 2.401 Fixed contributor bug causing the first PlayerIndex to use an invalid value on the client. 2.402 Fixed a rare case where if a player disconnected and another player connected right away you could still read leftover packets from the disconnected player. 2.41 Order of magnitude performance improvement. Reduced memory requirement by about 25%. Added plugin system, with a fully connected mesh plugin. Fixed bug with not detecting duplicate packets when the packet counter wrapped. 2.411 Fixed lost connection being reported if no data sent by the user for 10 seconds. 2.412 Fixed data not copied when switching from the stack to the heap in the bitstream. 2.413 Fixed minor memory leak. 2.414 Renamed Queue.h to RakNetQueue.h to fix DevCPP compile errors. Fixed memory corruption when generating frequency tables. Made RPC calls more efficient - now use less than 1 extra byte after the first call. Got AdvertiseSystem and offline pings working again. Got compression working. 2.415 Added parameter to RPC to indicate which system is calling it. Fixed various memory leaks and memory corruptions. Fixed getting invalid split packet data when doing user sends before the connection process was complete. Fixed buffer overrun vulnerability with split packets. Fixed rare crash when calling GetStatistics while shutting down at the same time. Added ComprehensiveTest project. Fixed bug with timedstamped RPCs not updating timestamps. 2.416 Fixed secure connections 2.417 Reorganized connection process to prevent sends from undetected dropped connections reaching new connections from the same player. Changed RPC header to take a structure (Sorry!). Added automatic memory synchronization message handler. Added class member RPC calls. Added ability to pass data with Advertise System. Re-fixed memory leak in Array class. No longer include DemonBattle sample to cut down on download size. 2.418 Made changes so it would compile under DevCPP and hopefully Linux. 2.419 Replaced AES128.h/.cpp with Rijndael.h/Rijndael.cpp to hopefully be different-endian portable. Updated NetworkIDGenerator so you can include it as a member object to generate IDs rather than inheritance. 2.42 Bunch of minor changes thanks to pinniped. Also a preliminary version of my data replication plugin. 2.43 Added PacketLogger plugin. Renamed MessageHandlerInterface PluginInterface. Renamed DataReplication DataReplicatorTest. Updated Doxygen documentation. Revamped DataReplicator plugin (work in progress). 2.431 Added HelloWorld video tutorial. Revised DataReplication system to where it's stable enough to release without a warning. Depreciated DistributedNetworkObject class and sample, which is now superceded by the DataReplication system. 2.432 Improved flow control, especially for file transfers. Upgraded zlib to 1.2.3. Added KBits/sec for statistics. Improved release performace for file transfers. Added Write and Read functions to bitstream for matrices, vectors, and quaternions. Added current time parameter to data replicator memory callback (because calling RakNet::GetTime is slow). 2.44 Added WriteDelta and WriteCompressedDelta to BitStream class. Changed BitStream class to use template and template specialization for native types. Bitstreams can now read and write PlayerIDs directly. Added replyFromTarget parameter to RPC so you can now use RPC as a blocking function that takes a reply from a remote system. Improved performance of SingleProducerConsumer class and fixed a small chance of overrun or underruns on multiprocessor systems. Improved documentation for DataReplicatorSystem. Clarified ObjectMemberRPC example. Replaced critical section lock on incoming packet queue with a single producer consumer, improving read throughput rate by about 200%. 2.444 Updated all header file documentation for Doxygen. Tweaks to the data replicator system. 2.45 Fix Linux compatibility. Simplified data replicator by removing property flags. Increased size of OrderingIndexType to unsigned short so you can reorder more than 256 out-of-order ordered packets on the same channel at a time. This fixes the rare bug report where ordered packets arrive out of order due to extreme send rates with high packetloss. 2.451 Fixed bug where dropped connections were not detected as long as you kept sending to the dropped system. WriteVector, etc. in the BitStream class can now take doubles as well as floats. Fixed an invalid assert when passing 0 to the fully connected mesh as the password. 2.452 Fixed not detecting dropped connections when only one packet was being resent. 2.453 Improve template compatibility. 2.454 Master server / Master client now uses Plugin interface. Fixed bug that appeared on Linux where out of older order packets were incorrectly treated as duplicate and dropped. Same fix reduces memory usage by about 400 bytes per player. Reorganized packet resend loop to hopefully fix a reported infinite loop. Added define _COMPATIBILITY_1 to exclude compilation of code that uses alloca, FormatMessage, the security layer, gethostbyname, #include , and inet_ntoa. This define also changes the default MTU to 1492. Updated documentation for memory synchronization of DataReplicator. Updated FAQ. Added OnDetatch to the PluginInterface. 2.455 Fixed many gcc warnings. Fixed error where alloca wouldn't compile under Code::Blocks 2.456 Add channel parameter to functions RakPeer::Disconnect and RakPeer::CloseConnection. Added RakPeer::SetTimeoutTime and removed constant TIMEOUT_TIME. Optimized network thread playerID lookup from O(n) to O(log2(n)), which will improve directed send speeds when a server or peer has many connected systems. Added SetNetworkSimulator procedure so the network simulator can be activated, deactivated, and be adjusted by users at runtime. Added checking for _FINAL define, to exclude code that would never be used in release builds. Currently only applies to the NetworkSimulator 2.457 Fixed harmless assert on startup in ReliabilityLayer::SetPing. Fixed uninitialized variable read when sending ID_ADVERTISE_SYSTEM with no user data. Fixed search indexing bug in OrderedList causing performance loss. Increased DataReplicator memory registration limit from 255 to 65535. 2.46 Added IsObjectListPushComplete to the DataReplicator system. The DataReplicator class factory now has access to the creation send and request data. Added CommandConsoleServer and CommandConsoleClient. Padded single byte packets to 2 bytes to fix some router issues. 2.461 Exported most of the user classes, so if you are using a DLL you don't have to include the source. Added more functions to RakNetworkFactory to new and delete those classes. Fixed an assert in DataReplicator. Added const to StringCompressor::EncodeString and AdvertiseSystem. Fixed projects so they all build. 2.47 Released first iteration of ReplicaManager, which replaces DataReplicator, which I will no longer include in distributions. Added ReplicaManagerCS and ReplicaManagerP2P samples. Added missing *identifierFound=true in GetServerListRuleAsInt. Added OnCloseConnection to PluginInterface. The NetworkID generator system now supports peer to peer. Added StringTable class. 2.48 Fixed critical bug where if an unreliable packet was lost all further data would be considered duplicate. In the ReplicaManager you can now use objects without calling construct first. The BitStream class for VC6 reverts to the old BitStream that didn't use templates. Renamed ObjectID NetworkID and renamed UNASSIGNED_OBJECT_ID UNASSIGNED_NETWORK_ID. 2.481 All changes to the ReplicaManager: Added ReferencePointer. Using a default scope of true will no longer trigger SendScopeChange and ReceiveScopeChange calls for that true default value. Functions now use the return type ReplicaReturnResult. All 3 callbacks now include a ReplicaManager * to the manager. Fixed bug setting bitwise enumerations for commands for the ReplicaManager. 2.482 Removed mutex locks for incoming and outgoing password. Bug fixes for ReplicaManager. Added 64 bit time support. 2.483 (04/19/06) Replaced %8 with &7 in BitStream.cpp. Thanks to Oliver Smith for pointing this out. Changed offline pings to be totally offline, rather than connecting and then disconnecting. This might fix the reported bug with pinging and not being able to reconnect. Reordered packet enumerations so that the most commonly used ones are first. Updated readme.txt. 2.484 (04/21/06) Fixed stack overflow problem when sending RPC packets with more data than the stack can hold (via define MAX_ALLOCA_STACK_ALLOCATION). Added PlayerID::ToString(). Converted Bitstream constructor char *'s to unsigned char *'s so you can pass Packet::data to it without casting. Fixed memory leak if you disconnected with unread packets waiting (Thanks to "riley" and "Greg" in the forums). Removed various warnings. Updated Linux ChatExample (thanks to Oliver Stone for sending me the files). 2.485 (04/27/06) Fixed bug with not being able to do cross-connections. Renamed all data structures with DS_ and changed namespace to DataStructure. 2.486 (05/03/06) Improved support for cross connections. Added ID_* strings to packet logger. Fixed devCPP compatibility. Made certain functions inline for improved performance. Added RakNetDefines.h as a global control panel. Bugs in tutorial html files fixed (Thanks to Laurens Simonis). 2.487 (05/05/06) You can now call DeallocatePacket in any order you want. Added PerformanceAnalysis and ThreadTest projects. Fixed memory leak if sending an RPC to a system that disconnected between the user call and the network thread doing the send. Removed maximum message size limit of (formerly) 91 megabytes, improved CPU efficiency of message reassembly, and decreased per-split bandwidth usage by 2 bytes. Fixed bug where you could get recursive RPC calls with blocking RPCs. Added _RAKNET_THREADSAFE to support multiple writer and reader threads using the same instance of RakPeer. BitStream.h should now compile on Visual Studio 2005. 2.49 (05/22/06) Added help text to all samples. Added ConnectionGraph and Router plugins. Rewrote RakVoice and made it a plugin. The bitstream write function that takes another bitstream now also takes the number of bits to write. 2.5 (06/23/06) Fixed order channel heap deletion. Added Rewritten Autopatcher. Added DirectoryDeltaTransfer. Added CrashReporter and CrashRelauncher. Moved samples up one directory. Fix bug with plugins only processing one message. 2.51 (06/24/06) Improved crash reporter. Finished EmailSender. Banned ID now sent to banned players. Replaced flow control method in reliability layer (experimental!). 2.511 (06/26/06) Increased time resolution to nanoseconds, greatly improving the granularity of the send speeds. 2.512 (06/26/06) Fixed bug with nanoseconds overflowing after a few hours. 2.513 (06/26/06) Fixed GetTime bug on a machines with a certain clock hertz that caused all new connections to be considered timed out immediately. Added NAT Punchthrough plugin. 2.514 (07/02/06) Fixed DevCPP compatibility. Slight throughput increase. Still working on BPlusTree to improve it further. 2.515 (07/06/06) Fixed bug with overflowing the buffer when resending reliable messages. Added BPlus tree data structure and used it for resends. Fixed bug where timestamped messages were not sent to plugins. 2.516 (07/12/06) Fixed Linux compatibility due to a bug in GetTime.cpp. Working on table data structure (incomplete). 2.517 (08/24/06) Commented out unused macros in Types.h. Added DS_Table class and LightweightDatabaseServer/LightweightDatabaseClient plugins. Improved flow control algorithm to detect connection speed more quickly and increased maximum throughput by about 4 times. Fixed Linux compatibility problems. Added _RAKNET_LIB and _RAKNET_DLL to Exports.h and changed projects accordingly. Fixed memory leak in the memory pool class. Fixed DLL compile problems. Commented RakVoice. 2.518 (09/01/06) Changed return value of OnReceive for plugins. Further fixes for Linux and Mac compatibility. Optimize Bitstream writes of other Bitstreams. Added ThreadPool class and made the autopatcher use it so that queries run in a thread rather than blocking the main thread. 2.519 (09/05/06) Fixed 1 byte memory leak on ID_DISCONNECTION_NOTIFICATION. Thanks knox! 2.52 (09/22/06) Fixed a bug where a system that disconnected couldn't always reconnect. Fixed a bug where a system couldn't connect rapidly with secure connections. Changed file path backslash to forward slash. Fixed Linux usage of findfirst. Fixed problem where packet format error detection code was incorrectly #ifdefed out in Release. 2.521 (10/14/06) Added ID_DOWNLOAD_PROGRESS and had all the plugins which transfer files use it. Added SetUnreliableTimeout to drop unreliable messages that took to long to send. Fixed bugs sending the wrong MS vs NS unit of time to SendImmediate.

See Also

Index