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. 3.0 (11/15/07) Too many changes to list, see 2.x to 3.x upgrade.txt 3.001 (11/16/07) Fixed router plugin problems when using ID_TIMESTAMP, not determining throughput when using unreliable messages, and increasing throughput detection speed. 3.002 (12/11/07) Fixes bad flow control with Reliability Layer. 3.004 (12/14/07) Last version was bad due to source control problems. Rereleasing, again with reliability layer fixed. 3.006 (12/19/07) Refixed the bug with Router.cpp. Made a new Linux makefile and added a Netbeans project directory. Also added a CMake file. 3.007 (12/21/07) Fixed a flow control problem where it normalized on high pings, thus increasing throughput when it should not and causing packetloss. Changed transmitted ping time to use nanoseconds to fix an overflow bug when converting to milliseconds on Linux. 3.008 (01/06/08) Changed Linux calls to GetTime to be offset by the first call. This alllows proper division by 1000 to convert to RakNetTime from RakNetTimeNS 3.009 (01/12/08) Change GetTime to only check the processor affinity once on Windows. This might fix leap-ahead and disconnect issues people are having. Added RankingServer project. Refactored parts of the autopatcher. Added FunctionThread/Functor system. 3.01 (1/30/08) Improved flow control. Faster send times during low bandwidth. Added first revision of the lobby server for the PC. 3.02 (2/17/08) Finished out missing feature prototypes on the lobby server. Improved compatibility. Improved NAT punchthrough. Lightweight database server can now update a single row by using the system address, rather than requiring a row ID. 3.03 (2/28/08) Added Replicamanager2. Fixed a minor bug with the autopatcher. 3.04 (3/02/08) Added interpolation demo "Ogre3DInterpDemo" for Ogre3D. Fixed Linux crash in SocketLayer.cpp for looking up host names. 3.05 (3/06/08) Updated documentation. Fix crash that could occur if receiving offline messages with data at the same time you are connected to the system sending it. 3.06 (3/10/08) Fix bug causing flow control to overcompensate by 8X. Resulted in taking 8X longer to find bandwidth, and 8X greater minimum latency. 3.07 (3/16/08) Added RakMemoryOverride class for memory tracking for consoles. Fixed Packetlogger crash. Verified that all samples run. 3.08 (3/23/08) Added AutoRPC plugin. Fixed some crashes and memory problems with TCPInterface 3.1 (3/31/08) Added SetSendPrefix and SetSendSuffix to TelnetTransport. Fixed memory allocation crashes in TelnetTransport and the logger plugin. Added depreciated tag to old RPC system. Readded BitStream_NoTemplate. Support for GCC assembly code in AutoRPC. Added RakString class, and changed lobby system to use this instead of std::string. Added DemoBinaries.zip to DependentExtensions\Ogre3DInterpDemo so users can run without having Ogre installed. AutoRPC is now in the namespace RakNet. Code::Blocks fails to build AutoRPC due to what appears to be a compiler bug. 3.11 (4/10/08) AutoRPC may now work on 64 bit systems and the Power PC. AutoRPC will automatically dereference pointers. Rename UserIdOrHandle to RowIdOrHandle. Add clan support to lobby database (in progress). Fix RakString (was broken for lobby). Fix include paths for VC8 for speex. Many warnings removed for non-windows users. ReadyEvent system now supports going back to unready. Disabled sample PerformanceTest. 3.2 (4/15/08) NAT Punch through now uses duplex symmetric port prediction, resulting in a vastly higher success rate. Fixed a bug in SingleProducerConsumer resulting in a 12 byte memory leak per message sent or received in release. Thanks to cmusch in the forums for finding this. 3.21 (4/20/08) Reverted to speex-1.1.12 to fix broken voice activity detection. Turned on voice activity detection by default to fix a bug where the voice latency increases over time. Add "SuperFastHash" to speed up DirectoryDeltaTransfer and Autopatcher file scans by 30%. Add file RakThread for easier cross-platform thread creation. 3.22 (05/04/08) Fixed TTL send not working for NAT punch through. TCPInterface now has a nonblocking option for connections. Lobby system now takes the handle of a friend, not just ID, for friend operations, and returns the handle and ID used in the callbacks. BitStream class can now hold up to rangeof(unsigned int)/8 bytes. Fixed bug with connection sequence so FullyConnectedMesh should always complete connections. Fixed Packetlogger output. Added RakPeerInterface::SendLists(), used by FileListTransfer for better efficiency. Increase connection attempt failure time to 4 seconds so users with software firewalls have a chance to click accept. Fixed RakString::Replace. Fixed Table::GetAvailableRowId. Added PHPDirectoryServer project. 3.23 (05/11/08) Fix subtraction underflow caused by bad GetTime() values for ReliabilityLayer. This could cause reliable packets that were lost due to packetloss to never be resent. Added RakPeerInterface::IsLocalIP(). Fixed PostgreSQL implementation of autopatcher. Added MySQL implementation of autopatcher. Fixed SQL injection security holes with autopatcher server. Add TLS support to TCPInterface, allowing the EmailSender class to send through Gmail. Fixed infinite recursive call under DevCPP and MinGW caused by #define with stricmp. 3.24 (06/16/08) Autopatcher: optimized MySQL queries, fixed file list transfer callback, improved Linux compatibility. ReplicaManager2: Added SEND_SERIALIZATION_CONSTRUCTION_TO_SYSTEM, fixed bug with sending scope changes. AutoRPC: Fixed passing a boolean as the last parameter. Fixed encoding error when doing directed sends. Fixed race condition in ThreadPool.h. NAT punchthrough will now try the local IP sooner. Return ID_DISCONNECTION_NOTIFICATION when CloseConnection is called with sendDisconnectionNotification==false. Fixed parsing error when passing domain names to RakPeer::Connect(). PHPDirectoryServer will now update the correct row based on the system address key. 3.25 (07/27/08) Added RPC3 plugin and video. The second and later resends of reliable messages now occur one second apart (fixes flooding/disconnects at low pings). Added templated GET_OBJECT_FROM_ID to NetworkIDManager.h which will work with multiple inheritance when NetworkIDObject is not the firstmost derived class. Added char *firstDataChunk parameter to FileListTransferCBInterface::OnFileProgress callback. Fix FileListTransfer when doing endian swapping. Fixes for Linux FileOperations.cpp and FindFirst (fixes autopatcher). ReplicaManager2: Added GetTimeToNextAutoSerialize, fix timestamp endian swapping, multiple instances now supported on the same instance of RakPeerInterface (must use AutoAddConnections(false)). Added static SocketLayer::IsPortInUse(). Virtual function and multiple inheritance fixes for AutoRPC. Various fixes and updates for PHPDirectoryServer. Change GetExternalID(UNASSIGNED_SYSTEM_ADDRESS) so that it returns a consistent external address. Add boolean parameter includeDisconnecting to RakPeerInterface::IsConnected(). RakPeerInterface::CloseConnection() now cancels connection attempts in progress immediately and reliably. Ready event fixes. Add operator << and operator >> to Bitstream. BitStream now supports Read functions for other bitstreams. 3.26 (08/28/08) Add IsSendingVoiceData to RakVoice. Remove GetTickCount() call in GetTime.cpp. On Vista it was found to frequently return a past result off by rangeof(unsigned int), causing all connections to be dropped. Workaround Vista bug returning WSAEADDRINUSE when binding a socket after previously closing one on the same port. Add OnConstructionComplete to Replica2. Add ExecVaridic to PostgreSQLInterafce. Fix for sending offline messages using an unknown hostname. Add WSAStartupSingleton.h for SocketLayer.cpp and TCPInterface.cpp. Support incremental sends for FileListTransfer, reducing memory use for large file sends. Add Connection_RM2::SortInitialDownload so users can control the order objects are sent to new connections. Tweak reliable message resend timers. 3.261 (09/07/08) Rewrite of lobby system, Lobby2, is now in beta. Ranking and Clans not yet implemented. Changed printf to RAKNET_DEBUG_PRINTF and added #define to RakNetDefines.h. RPC3 should now compile on Linux. Fixed internet simulator treating extraPingVarious as microseconds rather than milliseconds. Endian support fixed for FileListTransfer when using SuperFastHash. Speed up AutopatcherMySQLRepository with indices. Thanks for varmint from the forums for the last two tips. 3.3 (10/24/08) ID_CONNECTION_REQUEST_ACCEPTED is now RELIABLE_ORDERED on channel 0. Added a threadsafe version of SystemAddress::ToString(). Secure connections code has been rewritten for better speed (Thanks Catid). RakVoice will now check for initialization before accepting remote chat requests. Added RakNetGUID to uniquely identify instances of RakPeer. Use RakPeer::GetGuidFromSystemAddress() and RakPeer::GetSystemAddressFromGuid. GUIDs are contained in the Packet structure and within offline messages. Fixed bug with BitStream::WriteVector(). NATPunchthrough now supports cross connections. Reciever will now properly open all attempted connection addresses, rather than only the first one. Added RAKNET_PROTOCOL_VERSION and ID_INCOMPATIBLE_PROTOCOL_VERSION, returned for incompatible RakNet versions on Connect() calls. Fixed EmailSender failing 1/3 of the time with base 64 encoding. Fixed crash with deleting TCPInterface before calling TCPInterface::Stop(). _USE_RAK_MEMORY_OVERRIDE will now work for all allocations, via placement new. Throughput will now backoff globally on unresponsive remote systems, rather than for specific messages. AutopatcherServer will no longer crash when sending to multiple connections (fixed bug introduced in 3.26). SimpleMutex and RakString can now be instantiated globally. 3.4 (02/17/09) Add RakPeer::CancelConnectionAttempt. Fix NatPunchthrough to use CancelConnectionAttempt. If available bandwidth drops, but later has no packetloss for 5 seconds, bandwidth utilization increases much faster. DeltaDirectoryTransfer plugin now supports IncrementalReadInterface, to reduce concurrent memory utilization for large files if desired. Fix missing RakNet::OP_New in DS_WeightedGraph. Add extern "C" to RakMemoryOverride. 3.5 (04/01/09) Fix delta directory transfer not able to read file contents on incremental reads because only the relative path was stored on the sender NAT punchthrough rewritten, tested with nearly every manufacturer. LightweightDatabaseServer will no longer incorrectly remove a row if you do not call RakPeer::Update() for a long time. Various ReplicaManager2 fixes for non-authoritative client created objects. Packet logger now shows acks and RakPeer::PushBackPacket commands. Also, now shows the correct messageID for regular sends. Add DS_Multilist for use in future data structures, to replace DS_List, DS_Queue, DS_OrderedList. Fixed Bitstream type mismatch in RakVoice, causing plugin to not work at all. The RakVoice sample with Portaudio now supports NAT Punchthrough. ReliabilityLayer now uses fast backoff on real or anticipated packetloss, reducing packetloss from about 16% to 2% for large data transfers. Fixed returning the wrong emailId with Lobby2 GetEmail function for PostgreSQL Switch plugins to use PluginInterface2, replacing PluginInterface, in order to support TCP. Add PacketizedTCP class, sending discrete messages through TCP. Support PacketizedTCP with the Autopatcher and FileListTransfer. Using TCP, the autopatcher can self-update even when RakNet's protocol changes. 3.51 (04/17/09) Added UDPProxy feature, to forward datagrams in case of NATPunchthrough failure. Added ReplicaManager3 plugin. ReplicaManager2 is now depreciated. Minor fixes in RoomsPlugin. Added RakNetGUID support to rooms and Lobby2. Allow updating automatic system address and GUID fields if onlyUpdateOwnRows is false for LightweightDatabaseServer. Improve flow control for poor quality connections. Fix denial of service exploit caused by sending many connection attempts to use up all connection slots. Now, only 10 connections can be made from an identical IP address per second. 3.52 (04/30/09) Various fixes and protocol change for NATPunchthroughServer. Punchthrough recipient now gets ID_NAT_TARGET_UNRESPONSIVE and ID_NAT_CONNECTION_TO_TARGET_LOST at the same time it is sent to the sender. Added ConnectionGraph2 and FullyConnectedMesh2 plugins. RakNetTransport2 plugin added, which works as a plugin instead of creating its own instance of RakPeer. RakNetTransport, which did that, is now depreciated. Deleted FCMHost plugin (replaced by FullyConnectedMesh2). ReplicaManager3 fix for not sending serialization to new connections when using identical serialization. Various fixes for Lobby2 system. Fix crash in LightweightDatabaseServer if not automatically storing system address. Added DependentExtensions\IrrlichtDemo Disallow reconnecting when the remote system thinks you are still connected, if using a different IP but the same RakNetGUID. Added RakPeerInterface::GetSystemList to return connected SystemAddress and RakNetGUID in a list. Various fixes for DirectoryServer.php. PHPDirectoryServer::ProcessHTTPRead now returns an enumeration, rather than a string, to indicate results. RakNetTime is now 64 bit by default. Comment __GET_TIME_64BIT in RakNetDefines.h to change to 32 bit. UDP proxy system now automatically chooses best server. If more than one server is available, and both source and target relay systems are running RakNet, then source and target will ping all available servers. The servers will be attempted in order of lowest ping sum to highest. Updated FAQ. Updated manual for NATPunchthrough. 3.6 (05/26/09) Fixed define bug with BIG_ENDIAN to __BIG_ENDIAN__ in BigInt. Fixed FullyConnectedMesh2. Bind whichever address a message came in on, so we always reply on the same address. This fixes an issue where you have multiple IP addresses and reply on a different address than what the sender used. This also means RakNet no longer necessarily uses a single socket for all communications. Added RakNetSocket structure, with GetSockets accessor in RakPeerInterface. This can be used to find out which ports and IP addresses you have locally bound. Added ConnectWithSocket to RakPeerInterface. Removed RebindSocket. Added UPNP implementation from Codeproject to Samples, with fixes. Added to NATPunchthrough sample. NATPunchthrough now supports 0 for the MAXIMUM_NUMBER_OF_INTERNAL_IDS_TO_CHECK parameter. Fixed ReplicaManager3 serialization bugs with RM3SR_SERIALIZED_IDENTICALLY, and with serializing to more than 3 systems. Also validate connections before using them, so we know the other system has created the connection first. ReplicaManager3 QueryConstruction is now only called when the object does not already exist. If it does already exist, QueryDestruction is called instead. Added RakPeerInterface::GetTimeoutTime() Added time row was written to PacketLogger. UDPForwarder, and thus the proxy server, now runs in its own thread. UDPForwarder does not set the source or destination port until the first message arrives, to handle symmetric NATs changing ports. UDPForwarder now returns a result enumeration indicating success, bad parameters, in progress, or failed Flow control will now subtract average times between thread updates from pings. This fixes a problem where uneven times between thread context switches caused reported pings to fluctuate constantly, resulting in flow control dropping to the minimum level. This should fix an issue encountered by Stardock, with messages buffered and taking a long time to send. Fix issue with UDPProxyCoordinator, where two systems would simultaneously start forwarding to each other, but one system report success before the other knew about it, resulting in two forwarding entries. Add modified UDT source to RakNet distribution, under DependentExtensions\udt4. Comment out _USE_RAKNET_FLOW_CONTROL in RakNetDefines.h to use (Still has bugs, do not use for now). Fix TCPInterface with DeltaDirectoryTransfer Fixed bug introducted by checking RakNetGUID on new connections from 3.52, where connection replies were only sent once, rather than on each request. Added parameter to CloseConnection to select priority on which to send ID_DISCONNECTION_NOTIFICATION. Added SQLLite3Plugin to DependentExtensions\SQLite3Plugin. This allows you to do database calls over the internet with SQLLite3, which is normally only supported with networked file handles. This replaces LightweightDatabase, which is now depreciated. 3.61 (07/21/2009) Fix memory leak in single producer single consumer. Fix RakNetGUID initilization where only the first 4 ints were initialized. Fix RakNet::OP_NEW mistmatch in DS_Table, causing a crash. Fix crash in Lobby code from destroying binary data with some functors. Add ability to query clan list. Lobby will now log you off if you log in while already logged in (preventing multiple logins from the same user). Added per-user per-title storage. Update Doxygen comment syntax to produce better Doxygen output. Fix misspelling of Variadic. Depreciate PHPDirectoryServer due to unreliable replies. Now supplanted with PHPDirectoryServer2 Rooms plugin can now send arbitrary bitstreams through the server. Near rewrite of ReplicaManager3. Optimized from O(n^3) to O(n). Now supports multiple serialization channels. Autopatcher source files moved from /DependentExtensions to DependentExtensions\Autopatcher . Also the samples use TCP by default now. Fix endian swapping with OFFLINE_MESSAGE_DATA_ID FullyConnectedMesh2 host determination rewritten for better consistency and reliability from unresponsive hosts. Updated samples with new IP address of free server. Disabled forced port bindings. This apparently causes the Vista to reject the reply messages, which is a more serious bug than getting a reply on a different port. FileListTransferCBInterface::OnFileStruct renamed members: finalDataLength to byteLengthOfThisFile, totalDownloadedLength to bytesDownloadedForThisFile, setCount to numberOfFilesInThisSet, setTotalFinalLength to byteLengthOfThisSet, setTotalDownloadedLength to bytesDownloadedForThisSet. Fix NatPunchthroughServer not working on linux due to time subtraction, and hence underflow. Also made static string buffers larger to support 6 integer RakNetGUID. Change gmail port for email sender sample. Added critical section locks to the referenced counted pointers in RakString, to support multithreaded use. BitStream will now use memcpy if possible when writing other bitstreams. Fix crash in AutopatcherServer due to mismatch of calls to malloc and OP_DELETE. 3.611 (07/23/2009) Fix bug with serialization not sent to reconnecting system with ReplicaManager3. Release Scaleform GFx autopatcher integration. 3.62 (08/05/2009) RakNet is now threadsafe by default in RakNetDefines.h, and more optimized for the threadsafe case. Reduce size of RakNetGuid to int64_t to save bandwidth. Update OgreInterpSample to use ReplicaManager3. Add parameter to ReplicaManager3::AllocReplica. Add OnDownloadStarted and OnDownloadComplete callbacks to Connection_RM3. Add NatTypeDetection sample and code. 3.7 RC1 (08/27/2009) Fixed memory leak in RSACrypt. Fix RoomQuery::Serialize when doing more than one query at a time. Reduce CPU by 20%. Switch congestion control to UDT based algorithm. Fix NatPunchthroughClient::OpenNAT, so you can connect to a system more than once. Fix Lobby2 GetAccountDetails. Add SQLImageBuffer test, and jpeg-7 to DependentExtensions. Forgot ResetWritePointer in Connection_RM3::SendConstruction. Fix Lobby2 bugs with PerTitleIntegerStorage. Fix RM3 not serializing preexisting objects that don't change to new connections. 3.7 RC2 (09/10/2009) Fixed 32 to 64 bit connection problem for all versions. Fix endian swapping connection problem from RC1. There is now one thread per receive socket to increase timestamp accuracy for congestion control. Fix crash on shutdown when using ban lists. Improve bandwidth estimation. Linux now pthread_cond_timedwait rather than sleep, for better performance. 3.7 (9/23/2009) Send() function player lookup is now O(1) in most cases, rather than O(log2(n)); Added SQLiteServerLogger, SQLiteClientLogger, SQLiteClientLogger_RakNetStatistics, and SQLiteClientLogger_PacketLogger. Fixed TCPInterface low transfer speed. Fixed PacketizedTCP not updating plugins correctly. Fixed SignaledEvent usage on Linux (bug from 3.7 RC2) 3.702 (10/15/2009) Speed up lookup on RakPeer::Send() from O(log2n) to O(1) by using systemIndex automatically when available. Reduce number of RakStrings allocated at once to 128 from 1024. Sped up TCPInterface. Return ID_CONNECTION_LOST if calling CloseConnection with sendDisconnectionNotification false. 3.704 (10/22/2009) Autopatcher: Workaround for design flaw in PostgreSQL and possibly MySQL, where calls on a connection are not threadsafe across different threads. Instead of calling SetAutopatcherRepositoryInterface, you must now call StartThreads(), with an array of AutopatcherRepositoryInterface, 1 per thread. StartThreads() must also be called now before AutopatcherServer will process any messages. This was previously causing crashes/corrupted data if a transfer was in progress through FileListTransfer at the same time that the old autopatcher thread was querying the database for a different connection. Additionally, the autopatcher now supports multiple simultaneous threads. Previously it only ran one thread at a time. Also sped up FileListTransfer for incremental reads in the case when there are many files and more than one connection. ReplicaManager3: Add lastSentBitstream pointer to SerializeParameters. Fix UDPForwarder not setting timeout parameter. 3.705 (10/29/2009) Added ResetHostCalculation to FullyConnectedMesh2. Increased default memory usage to avoid datagram index overflowing on a LAN. Made this value customizable in RakNetDefines.h, and added RakNetDefinesOverrides.h to make overriding easier. Update IsPortInUse to account for multiple IP addresses. Added default implementation of dlmalloc. Use by defining _RAKNET_SUPPORT_DL_MALLOC and _USE_RAK_MEMORY_OVERRIDE. Added Demo_BspCollision from Ogre3D to for SQLiteClientLogger sample. 3.7051 (11/07/2009) Reduce memory usage. Fix FileListTransfer bytesDownloadedForThisFile. 3.71 (11/16/2009) Note: This version is not network compatible with 3.7051 or earlier due to reordering of packet enumerations. Bug fixes: Fix MySQL autopatcher not working (bug from 3.704). Fix bug in RakPeer::Shutdown() where used sockets were never freed. Fixed a bug where the MTU size was always set at the lowest value, causing needless fragmentation. Congestion control: Change tolerance algorithm for ping variations. The old algorithm was designed for a LAN, and was causing excess packetloss over long-distance internet connections. Performance: Remove all but 1 memory allocation per send and per receive, in order to reduce memory fragmentation. With messages larger than the MTU, reference the original data block rather than allocating and copying fragments. Expose the thread priority in RakPeer::Startup() and TCPInterface::Startup(), for Linux based systems that do not define a default normal thread priority. New features: Add connection failure enumeration ID_IP_ALREADY_CONNECTED. ID_IP_ALREADY_CONNECTED is returned if RakPeer::SetLimitIPConnectionFrequency() was set. Packet priorities now schedule sends, where each lower priority level is sent half as frequently as the priority level above. Updated Irrlicht 3D demo to Irrlicht 1.6. 3.711 Fix messages of certain size combinations causing further sends to never go out. Add ability to pass GUID to UDPProxyClient::RequestForwarding, and use this by default in the samples. Reduce memory usage. Improve randomness of random number for FullyConnectedMesh2 3.712 Improve security for client-specified RakNetGUID. UDPForwarder: Fix uninitialized variables. 3.713 Use hash lookup instead of sorted list lookup for packets from remote systems, since speed is so important for that. Ping based congestion control. 3.714 (12/06/2009) Fix random crash in ReliabilityLayer. Possible fix for ID_ALREADY_CONNECTED, and increased randomization of GUID. 3.715 (12/11/2009) Fix bug returning ID_ALREADY_CONNECTED. You can now also pass a RakNetGuid to most places in RakPeer you previously passed a SystemAddress. Change disconnect timeout method. 3.716 (12/29/2009) Fix bug introduced in 3.714 causing players to get disconnected. FileListTransfer now supports incremental writes in addition to incremental reads. Reduce per-datagram overhead by 4 bytes once the bandwidth capacity has been determined. 3.717 (1/05/2010) Fix a hashing bug affecting players reconnecting. Add RakPeerInterface::IsConnectionAttemptPending 3.718 (02/04/2010) 64 bit to 32 bit network communication fixes. Lower second attempt MTU detection to 1200. Skip MTU sends that will fail anyway. Add TeamBalancer plugin. Add signals and slots support for RPC3. Fixed autopatcher. Add Router2 plugin, to route messages in a fully connected mesh, when two peers cannot directly connect. Add IMMEDIATE_PRIORITY, above HIGH_PRIORITY. With IMMEDIATE_PRIORITY, messages will be sent immediately, rather than joined with other messages for more efficient bandwidth usage. RakVoice now refers to other systems by RakNetGUID, rather than SystemAddress, in order to work properly with NAT punchthrough. Fixed various warnings for Linux. Fixed pure virtual function call in Lobby2Server when shutting down. Fixed Client_GetAccountDetails for lobby2. Changed implementation of BitStream::WriteNormVector to handle small numbers. Added UPNPPortForwarder as a replacement nonblocking interface to the old UPNP system. 3.72 (02/27/2010) PS3: Added dice sample FileListTransfer: Fixed divide by 0 crash when using incremental reads. Cmake: Fixed, all other projects and makefiles removed for Linux. UPNP: Fixed BitStream: Added WriteRef, and use with the shift left operator, so that RPC3 does not do a pass-by-value on object writes. This fixes a problem where the pass-by-value caused the destructor to be called on the copied object. ReplicaManager3: Replace AutoConstructByQuery with QueryConstructionMode, and added QueryReplicaList, for better performance for massively multiplayer games. TelnetTransport: You can now press the up arrow key to repeat the last command. RakPeer: Fix IMMEDIATE_PRIORITY to send right away when called by the user. Router2: Various bugs fixed. 3.73 (04/09/2010) Fix bug where packetloss during slow start could cause retransmissions to stop. Add Lobby2Client_Steam plugin and corresponding sample, to support Steam published games using the Steamworks SDK. Fix RPC3 with writing bitstream pointers. ReplicaManager3 now supports different send modes per bitstream channel. Also now stores store lastSerializationResult when using RM3SR_SERIALIZED_ALWAYS. Update ConnectionGraph2 to also store the remote system connection list in memory, and allow access by the user. PacketLogger will now log internal message receive errors. Consolodate NAT traversal plugins into NATCompleteServer and NATCompleteClient samples. Remove old NAT samples. 3.731 (05/01/2010) Document TeamBalancer and Steam lobby plugins. Fix crash with calling RakPeer::DetachPlugin(). Fix bug to return ID_SND_RECEIPT_ACKED only once for messages over the MTU. Rewrite RakNetStatistics to return more relevant and up to date information, including metrics per second. Add VariableDeltaSerializer, an optional helper class with ReplicaManager3 that can serialize changes per-variable, rather than relying on the default of serializing the entire object. 3.80 (05/27/2010) Disabled UNRELIABLE_SEQUENCED_WITH_ACK_RECEIPT, RELIABLE_SEQUENCED_WITH_ACK_RECEIPT. Fixed GetMyIP, Modify HTTPConnection to use SSL if defined, and to specify the port. Support WorldID with ReplicaManager3. Add NativeFeatureIncludes.h and NativeFeatureIncludesOverrides.h, so the user can exclude code they do not want more easily. Improve/fix Router2 and UDPForwarder. Add to BitStream functions SerializeCasted (Same as just casting the type you read/write, but uses a template), SerializeBitsFromIntegerRange, WriteBitsFromIntegerRange, and ReadBitsFromIntegerRange. Fix not threadsafe call to BPS tracker, caused crash when calling GetStatistics with version 3.731 or later. Increased tolerance for ping spikes with congestion control, speeds will increase more quickly on average now. Fixed RakPeer::SendOutOfBand, hould always return as the first byte ID_OUT_OF_BAND_INTERNAL. Allow Set() and constructor functions in RakString to take any size input. Fixed ConnectionGraph2 basically not working at all. Fixed http://www.jenkinssoftware.com/forum/index.php?topic=3216.0 where HTTPConnection would fail because TCP packets were still waiting while CloseConnection was called. Encode ping/pong in handshaking so a ping is always available when ID_CONNECTION_REQUEST_ACCEPTED or ID_NEW_INCOMING_CONNECTION arrives. This changes the protocol, so connections to prior versions are not possible. Fixed cross connections so both systems return ID_CONNECTION_REQUEST_ACCEPTED, and neither system returns ID_NEW_INCOMING_CONNECTION. 3.81 (07/01/2010) Fix congestion control bug that caused all data transmission to stop, although the connection was not dropped. Fix UDPForwarder crash. Improve congestion control for LAN settings. Add GET_TIME_SPIKE_LIMIT to RakNetDefines, as an option, disabled by default, to prevent http://support.microsoft.com/kb/274323. Fix SimpleMutex failure caused by initializing the same instance from multiple threads at the same time. Fix packetlogger logging error when using timestamps. Fix assert in RoomsPlugin. Update tutorial in manual. 3.82 (9/17/2010) UDPForwarder now uses a single port Fixes to Router2 Add Get to HTTPConnection class Fix ReplicaManager3 when using send type other than RELIABLE_ORDERED Update Ogre3DInterpDemo to Ogre 1.7.1 Make SendOutOfBand work also when RakNet wasn't started Test sendto call for MTU detection, if it blocks, drop to the lowest MTU Tweak CCRakNetUDT::IncreaseTimeBetweenSends to reduce backoff, to better handle random ping spikes 3.9 (10/15/2010) New sliding window congestion control algorithm. Define USE_SLIDING_WINDOW_CONGESTION_CONTROL to something other than 1 to use old algorithm. Additional Router2 fixes Call QueryPerformanceFrequency() in GetTime.cpp every call to GetTimeUS(), to fix bug caused By Ludashi changing the reported CPU frequency. Make SocketLayer static so it can be exported through a DLL. Nat punchthrough fix - when testing internal IPs, the remote system may report loopback. This prevents testing internal IP connectivity on the loopback. Fix logging errors with packet logger. Assert against virtual call in destructor of ReplicaManager3. Fix NatTypeDetection only returning port restricted. Expand boolean array in NatTypeDetectionCommon. Fix Linux warnings. Return last error with UPNP status update. ReplicaManager3::Connection_RM3 now supports QueryGroupDownloadMessages() feature, to give all construction and serialization messages in a single tick after initial download, rather than the download potentially spread over many ticks. Fix lockup with isActiveMutex in TCPInterface::CloseConnection(). Fix bug where packets with higher priorities sent later than ones with lower priorities caused them to still send in order. 3.901 (6/16/2011) Changes in prior checkin: RakNetStatistics.cpp: Multiply packetloss by 100 ReliabilityLayer.cpp: Fix bug with reported per-second statistics overreporting packetloss CCRakNetSlidingWindow: Improve congestion control algorithm to decrease average packetloss in the steady state TCPInterface: Fix RemoteClient::Send returning 0 instead of bytes written when using SSL. ReliabilityLayer.cpp: Fix broken RELIABLE_WITH_ACK_RECEIPT ReliabilityLayer.cpp: Bugfix: If a duplicate ack arrived and more than DATAGRAM_MESSAGE_ID_ARRAY_LENGTH (512 by default) reliable messages had been sent or resent between the first ack and the duplicate, the wrong reliable message would be flagged as delivered. This would result in no further reliable messages would be returned to the user, although the connection would not be lost due to lost connection detection pings being unreliable. SocketLayer.cpp: Comment out printf 3.902 (7/21/2011) Fix for random connection loss on slow systems. This is due to threading causing the last time an ack was received to be higher than the current time, thereby falsely returning true for the AckTimeout() function.

See Also

Index