uLink

1.5.8 Lina (2014-03-13)

Improvements:
  • Minor improvement of API documentation references in NetworkPlayerApproval. We’ve also gone through and improved almost all API references in general as well, but only in the upcoming 1.6 release branch - so please stay tuned.
Fixes:
  • Fixed bug in NetworkPlayerApproval.Approve() or .Deny(), which occurred if it had already been auto approved after the callback uLink_OnPlayerApproval had returned.
  • Fixed bug in NetworkPlayerApproval.Approve(), which occurred if playerID was manually assigned and Network.maxConnections was reached.
  • Made some BitStream-methods public again after having been changed to internal-access-only by accident.
Changes:
  • Reverted removal of type-safety in BitStream in 1.5.7.x. Brought it back again because it has to be compatibility with uLobby. In the future, uLobby databases will need to be upgraded for uLink 1.6.x and we are working on making that transition as smooth and automatic as possible.
  • Lowered log level of invalid incoming RPCs from Error to Debug level. This is to avoid spamming the log file by default if the server is facing potential DDoS volume attacks.

1.5.7.1 Lina (2014-03-05)

Fixes:
  • Fixed bug preventing clients from accepting unconnected internal message responses (like LAN discovery etc), if Network.config.allowInternalUnconnectedMessages is true.
  • Fixed incorrect prime number size check in custom internal HashSet implementation.

1.5.7 Lina (2014-03-03)

New manual pages:
  • Submitting Bugs - How to send about a bug report, so that we can fix it quicker.
  • Hardening The Suite - What you need to think about when reporting a potential security issue.
Improvements:
  • Published latest improved API references online.
  • Added ipAddress, port and endpoint to NetworkPlayerApproval, so that the server knows the source of a connecting client before approving or denying it.
  • Added allowInternalUnconnectedMessages to Network.config and NetworkP2P.config. Tells uLink whether internal unconnected messages like LAN discovery etc is allowed or not. Disabling this is useful if the server can be a target for DDoS volume attacks. For backward-compatibility reasons it is allowed by default.
  • Added additional source information to error logs that fail to parse incoming RPCs.
  • Significantly optimized each internal collection by switching to custom implementations for each respective data-structure.
  • Added public equality comparers (IEqualityComparer) to NetworkPlayer, NetworkViewID, NetworkGroup, NetworkPeer etc. The comparer can be passed to a collection (like a Dictionary) during construction to optimize comparisons for respective type.
  • Added codec for serialization of an embedded BitStream.
  • Radically optimized BitStream serialization of string, float, double and IPEndPoint etc. Both in terms of CPU performance and memory usage.
  • Added Equals methods to types like LocalHostData, LocalPeerData, HostDataFilter, PeerDataFilter and NetworkP2PHandoverInstance.
  • Minor optimization of time measurement functions.
  • Minor improvements to the uLink Editor GUI windows.
Fixes:
  • Added workaround for potential socket send & receive buffer size issue if uLink is used outside Unity’s Mono (like in uServer). The issue lies in some official Mono versions which corrupt the socket buffer size, in most cases shrinking it substantially. This can now be avoided by setting size to 0, which will keep the OS-default.
  • Fixed potential local time drift due to some loss of precision (especially on CPUs with low clock frequency) when using TimeMeasurementFunction.StopWatch.
  • Added fallbacks for TimeMeasurementFunction.StopWatch, if CPU clock frequency is suddenly changed during run-time. This can be triggered by for example CPU-manufacturer-specific-tweaking tools like Asus EPU-6 Engine utility.
  • Fixed frequency bug when using TimeMeasurementFunction.DateTime.
  • Fixed potential issue with cleanup of a disconnected player, if groups are made empty.
  • Added additional safety checks in internal communication channels.
  • Fixed issue when initializing server in callback message uLink_OnFailedToConnect.
  • Fixed potential bug with NetworkMessageInfo.flags for reliable and encrypted RPCs.
  • Added proper error handling when host is unreachable or internet connection is unstable (important for mobile devices).
Changes:
  • Renamed BitStream.ReadBitStream() to BitStream.GetRemainingBitStream() and renamed BitStream.WriteBitStream() to BitStream.AppendBitStream(). This is to emphasize that these functions are not intended for embedding. Added new ReadBitStream() and WriteBitStream() methods for that use case.
  • Removed BitStream type-safety because the current implementation is not ideal. Type-Safety is being re-designed for uLink 1.6.x, and will be much more optimized and reliable.
  • Changed license text to reflect the new policy on security and statistics.

1.5.6.1 Lina (2014-01-03)

Fixes:
  • Fixed non-critical error when closing a server while client is still connected.
  • Switched back the Snowbox project’s default platform to "Standalone".
  • Fixed missing icons for the tools.

1.5.6 Lina (2014-01-02)

Improvements:
  • Added new property NetworkPlayer.securityStatus which returns the new enum NetworkSecurityStatus to get more insight into the security states and their transition status.
  • Added default log writer implementations as static methods in NetworkLog, in case any custom overrides want to reuse them.
  • Added NetworkUtility.IsLoopbackAddress to determine if IP address is localhost/127.0.0.1/etc.
  • Improved code documentation in uLinkInstantiatePool, to understand the implications on callbacks and messages when pooling prefab instances.
  • Added more useful and debug logging for when a handover timeouts and if the BitStream pool is exhausted.
  • Added more debug logging for network socket creation and other low level events.
  • Added logging of the uLink version if debug log level is enabled.
  • Added additional sanity checks to arguments in method calls to NetworkP2P.
  • Optimized low level message parsing and handling.
  • Improvements to the Unity’s Network to uLink Converter:
    • Explicitly tells the Unity Editor and Garbage collector to release any unused objects after converting each asset to save memory consumption.
    • Save changes to each prefab, as they are being done. So the progress is not lost if the converter is aborted.
Fixes:
  • Fixed minor truncation bug when denying client approval with custom error code NetworkConnectionError.UserDefined1 or higher.
  • Fixed issue with internal extensions for UnityEngine.Object turning up in MonoDevelop's intellisense.
  • Improved safety of parsing your external IP reported by the MasterServer.
  • Fixed issue with handing over a client in the same LAN to another server on the same machine (i.e. loopback address).
  • Fixed issue with serializing arrays which are null references. They are serialized as empty arrays instead, this will change in 1.6 as null will be serialized as a separate state.
  • Fixed black GUI rendering bug in the editor window “Server Authentication Generator”.
  • Fixed corruption of unreliable messages during special circumstances, which resulted in a error message “Trying to read past buffer size”.
  • Fixed issue with deserializing a struct in the default generated BitStreamCodec.
  • Fixed possible DoS vulnerabilities which can be exploited by sending specially crafted bad packets.
  • Fixed so that if the other side thinks we’re connected (for example after we’ve been restarted) they will be disconnected immediately instead of having to wait for time out.
  • Fixed issue with properly flushing unsent messages when disconnect is called.
  • Fixed so we still handle incoming RPCs even if status is Disconnecting, because their might be some lingering or resends.
  • Fixed issue when both peers are trying to connect (or reconnect) at the same time.
  • Fixed so that connecting is much more strict and late requests or new requests can’t be misinterpreted.
  • Fixed possible vulnerability against IP-spoofed packets.
  • Fixed vulnerability against possible man-in-the-middle attack, which could turn off authentication.
  • Fixed possible race condition when server disables security even though the client might still send encrypted RPCs.
  • Fixed the issue with having the MasterServer and gameserver(s) in the same LAN, but an external client.
  • Fixed bug in Network.HasPublicAddress and NetworkUtility.IsPublicAddress regarding IP range 172.16.0.0 - 172.31.255.255.
  • Fixed so that If a RPC method (i.e. game logic) throws an exception, it will not affect uLink.
  • Added sanity check for calling Network.Destroy on an already destroyed object.
  • Fixed issue with client sometimes unnecessarily requested for more allocatable viewIDs.
Changes:
  • Changed to prioritize ping/pong messages, to avoid disconnect if timeout delay is low.
  • Changed GC major spike warning for incoming messages from log level info to warning.
  • Changed security connection timeout error from NetworkConnectionError.RSAPublicKeyMismatch to ServerAuthenticationTimeout.
  • uLink 1.5.6 is NOT network connection compatible with uLink 1.5.5 or older, because of fixes in the connection handshake protocol. This means a client running 1.5.6 can only connect to a server also running 1.5.6, and vice versa.

1.5.5 Lina (2013-08-12)

Improvements:
  • The advanced low-level uLink.Network.config API is now also accessible and configurable via uLink’s “Edit Settings...” editor window (in the "Advanced Configuration" section). These options can now as well as all other uLink settings be easily changed, saved and tweaked (even at runtime) without having to write any code.
Fixes:
  • Fixed the annoying non-critical "!IsPlayingOrAllowExecuteInEditMode()" error message in Unity 4.2.
  • Fixed the "Failed to bind to port" error, caused by the Unity Editor on Windows launching (during the first play mode) the Android adb.exe process and thus it inheriting Unity’s current resources which can in turn prevent uLink from completely closing it’s internal socket.
  • Fixed bug in Network.HasPublicAddress() and NetworkUtility.IsPublicAddress(), regarding IP range 172.17.0.0 - 172.31.255.255 (which wasn't correctly being determined as private). This should solve the issue that some have experienced on certain network setups with the P2P Handover & Redirect feature (which uses that functionality).
Changes:
  • Updated uLink’s official running MasterServer instance address/hostname to “unityparkdemo.muchdifferent.com:23466” (the previous default values also work).

1.5.4 Lina (2013-08-01)

Improvements:
  • uLink’s internal socket send buffer and receive buffer size can now be fully configured via Network.config and NetworkConfig.
  • Also added complete P2P configuration via NetworkP2P.config and the new NetworkP2PConfig class (equivalent to Network.config and NetworkConfig).
  • Added rich P2P statistics API via NetworkP2P.GetStatistics(), NetworkP2P.GetLastPing() and NetworkP2P.GetAveragePing().
  • Optimized internal handling of reliable RPCs and statesync.
  • Added even more debug logging inside the groups feature.
Fixes:
  • Fixed issue with non-hidden groups sometimes hiding objects from non-members.
  • Added log warning when socket buffer is full or empty during sending or receiving (instead of previously causing a “would block” error). uLink will still try to send/receive again next update. If you get too many of these it might be a good idea to increase the buffer size in Network.config or NetworkP2P.config.
  • Fixed a bug in MasterServer, which could cause the connection tester to only try a host’s internal IP and port, instead of it’s external address information.
  • Fixed a harmless bug where hidden GameObjects like uLinkInternalHelper and uLinkTargetFrameRateFix might under some circumstances be mistakenly saved in the scene, during playmode in the Editor.
  • Fixed issue with P2P Handover where redirect may fail due to the client player being in the same LAN as the game servers.
  • Fixed minor typos and added additional clarifications in some log messages and xml documentation (online API references will be updated soon).
  • Fixed issue with uLinkTargetFrameRateFix which if used on the client-side, can cause flickering on some Windows machines. (Thank you Reuben Bartolo!)
Changes:
  • uLinkTargetFrameRateFix has been disabled by default. The purpose of the script is to workaround a issue with Unity's Application.targetFrameRate on Windows, which running on some virtual machines (like on Amazon EC2) causes a noticeable overhead in CPU usage. Previously the script was designed to be transparent and used automatically without calling it, but because it’s a very overkill approach we’ve decided it’s better it only be used if called manually via uLinkTargetFrameRateFix.SetTargetFrameRate() instead of wrapping Application.targetFrameRate. Please note this script is only recommended for servers running on Windows inside a VM at a non-dedicated hosting service like Amazon. And only if you notice a increase in CPU usage from your server instances.

1.5.3 Lina (2013-06-16)

Improvements:
  • Optimized dispatching messages for hidden groups, significantly.
  • Optimized internal data structures to avoid temporary allocations.
  • Added more logging when a client and server connection handshake goes through the Proxy Server.
  • Implemented fallback connection (using external IP and port), if connecting to a local server (via internal IP and port) first fails.
  • Improved logging in the Master Server.
  • Optimized and improved editor windows “Assign Unique Manual ViewIDs” and “Select uLink prefabs to be registered”.
Fixes:
  • Fixed reported issues when NetworkView changes group.
  • Fixed reported issue "Trying to read past buffer size" during serialization, which previously was also made more evident by batchSendAtEndOfFrame.
  • Fixed bug when user-defined types are serialized as InitialData in Instantiate.
  • Fixed warning about "using obsolete active" in uLinkInstantiatePool, on Unity 4.1.x.
  • Fixed GUI indentation artifact in NetworkView and NetworkP2P inspector, on Unity 4.x.
  • Updated url links in various uLink editor windows and menus.
  • Fixed artifacts and improved portal camera texture in Snowbox.
Changes:
  • Changed log level of socket buffer size from warning to debug.

1.5.2 Lina (2013-03-20)

Please see http://developer.muchdifferent.com/unitypark/WhatsNew/uLink152.


1.5.1 Lina (2013-01-22)

Please see http://developer.muchdifferent.com/unitypark/WhatsNew/uLink151.


1.5.0 Lina (2013-01-10)

Please see http://developer.muchdifferent.com/unitypark/WhatsNew/uLink150.