VERSION.txt 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. V1.39 [2023-10-31]
  2. - fix: https://github.com/MirrorNetworking/Mirror/issues/3611 Windows UDP socket exceptions
  3. on server if one of the clients died
  4. V1.38 [2023-10-29]
  5. - fix: #54 mismatching cookie race condition. cookie is now included in all messages.
  6. - feature: Exposed local end point on KcpClient/Server
  7. - refactor: KcpPeer refactored as abstract class to remove KcpServer initialization workarounds
  8. V1.37 [2023-07-31]
  9. - fix: #47 KcpServer.Stop now clears connections so they aren't carried over to the next session
  10. - fix: KcpPeer doesn't log 'received unreliable message while not authenticated' anymore.
  11. V1.36 [2023-06-08]
  12. - fix: #49 KcpPeer.RawInput message size check now considers cookie as well
  13. - kcp.cs cleanups
  14. V1.35 [2023-04-05]
  15. - fix: KcpClients now need to validate with a secure cookie in order to protect against
  16. UDP spoofing. fixes:
  17. https://github.com/MirrorNetworking/Mirror/issues/3286
  18. [disclosed by IncludeSec]
  19. - KcpClient/Server: change callbacks to protected so inheriting classes can use them too
  20. - KcpClient/Server: change config visibility to protected
  21. V1.34 [2023-03-15]
  22. - Send/SendTo/Receive/ReceiveFrom NonBlocking extensions.
  23. to encapsulate WouldBlock allocations, exceptions, etc.
  24. allows for reuse when overwriting KcpServer/Client (i.e. for relays).
  25. V1.33 [2023-03-14]
  26. - perf: KcpServer/Client RawReceive now call socket.Poll to avoid non-blocking
  27. socket's allocating a new SocketException in case they WouldBlock.
  28. fixes https://github.com/MirrorNetworking/Mirror/issues/3413
  29. - perf: KcpServer/Client RawSend now call socket.Poll to avoid non-blocking
  30. socket's allocating a new SocketException in case they WouldBlock.
  31. fixes https://github.com/MirrorNetworking/Mirror/issues/3413
  32. V1.32 [2023-03-12]
  33. - fix: KcpPeer RawInput now doesn't disconnect in case of random internet noise
  34. V1.31 [2023-03-05]
  35. - KcpClient: Tick/Incoming/Outgoing can now be overwritten (virtual)
  36. - breaking: KcpClient now takes KcpConfig in constructor instead of in Connect.
  37. cleaner, and prepares for KcpConfig.MTU setting.
  38. - KcpConfig now includes MTU; KcpPeer now works with KcpConfig's MTU, KcpServer/Client
  39. buffers are now created with config's MTU.
  40. V1.30 [2023-02-20]
  41. - fix: set send/recv buffer sizes directly instead of iterating to find the limit.
  42. fixes: https://github.com/MirrorNetworking/Mirror/issues/3390
  43. - fix: server & client sockets are now always non-blocking to ensure main thread never
  44. blocks on socket.recv/send. Send() now also handles WouldBlock.
  45. - fix: socket.Receive/From directly with non-blocking sockets and handle WouldBlock,
  46. instead of socket.Poll. faster, more obvious, and fixes Poll() looping forever while
  47. socket is in error state. fixes: https://github.com/MirrorNetworking/Mirror/issues/2733
  48. V1.29 [2023-01-28]
  49. - fix: KcpServer.CreateServerSocket now handles NotSupportedException when setting DualMode
  50. https://github.com/MirrorNetworking/Mirror/issues/3358
  51. V1.28 [2023-01-28]
  52. - fix: KcpClient.Connect now resolves hostname before creating peer
  53. https://github.com/MirrorNetworking/Mirror/issues/3361
  54. V1.27 [2023-01-08]
  55. - KcpClient.Connect: invoke own events directly instead of going through peer,
  56. which calls our own events anyway
  57. - fix: KcpPeer/Client/Server callbacks are readonly and assigned in constructor
  58. to ensure they are safe to use at all times.
  59. fixes https://github.com/MirrorNetworking/Mirror/issues/3337
  60. V1.26 [2022-12-22]
  61. - KcpPeer.RawInput: fix compile error in old Unity Mono versions
  62. - fix: KcpServer sets up a new connection's OnError immediately.
  63. fixes KcpPeer throwing NullReferenceException when attempting to call OnError
  64. after authentication errors.
  65. - improved log messages
  66. V1.25 [2022-12-14]
  67. - breaking: removed where-allocation. use IL2CPP on servers instead.
  68. - breaking: KcpConfig to simplify configuration
  69. - high level cleanups
  70. V1.24 [2022-12-14]
  71. - KcpClient: fixed NullReferenceException when connection without a server.
  72. added test coverage to ensure this never happens again.
  73. V1.23 [2022-12-07]
  74. - KcpClient: rawReceiveBuffer exposed
  75. - fix: KcpServer RawSend uses connection.remoteEndPoint instead of the helper
  76. 'newClientEP'. fixes clients receiving the wrong messages meant for others.
  77. https://github.com/MirrorNetworking/Mirror/issues/3296
  78. V1.22 [2022-11-30]
  79. - high level refactor, part two.
  80. V1.21 [2022-11-24]
  81. - high level refactor, part one.
  82. - KcpPeer instead of KcpConnection, KcpClientConnection, KcpServerConnection
  83. - RawSend/Receive can now easily be overwritten in KcpClient/Server.
  84. for non-alloc, relays, etc.
  85. V1.20 [2022-11-22]
  86. - perf: KcpClient receive allocation was removed entirely.
  87. reduces Mirror benchmark client sided allocations from 4.9 KB / 1.7 KB (non-alloc) to 0B.
  88. - fix: KcpConnection.Disconnect does not check socket.Connected anymore.
  89. UDP sockets don't have a connection.
  90. fixes Disconnects not being sent to clients in netcore.
  91. - KcpConnection.SendReliable: added OnError instead of logs
  92. V1.19 [2022-05-12]
  93. - feature: OnError ErrorCodes
  94. V1.18 [2022-05-08]
  95. - feature: OnError to allow higher level to show popups etc.
  96. - feature: KcpServer.GetClientAddress is now GetClientEndPoint in order to
  97. expose more details
  98. - ResolveHostname: include exception in log for easier debugging
  99. - fix: KcpClientConnection.RawReceive now logs the SocketException even if
  100. it was expected. makes debugging easier.
  101. - fix: KcpServer.TickIncoming now logs the SocketException even if it was
  102. expected. makes debugging easier.
  103. - fix: KcpClientConnection.RawReceive now calls Disconnect() if the other end
  104. has closed the connection. better than just remaining in a state with unusable
  105. sockets.
  106. V1.17 [2022-01-09]
  107. - perf: server/client MaximizeSendReceiveBuffersToOSLimit option to set send/recv
  108. buffer sizes to OS limit. avoids drops due to small buffers under heavy load.
  109. V1.16 [2022-01-06]
  110. - fix: SendUnreliable respects ArraySegment.Offset
  111. - fix: potential bug with negative length (see PR #2)
  112. - breaking: removed pause handling because it's not necessary for Mirror anymore
  113. V1.15 [2021-12-11]
  114. - feature: feature: MaxRetransmits aka dead_link now configurable
  115. - dead_link disconnect message improved to show exact retransmit count
  116. V1.14 [2021-11-30]
  117. - fix: Send() now throws an exception for messages which require > 255 fragments
  118. - fix: ReliableMaxMessageSize is now limited to messages which require <= 255 fragments
  119. V1.13 [2021-11-28]
  120. - fix: perf: uncork max message size from 144 KB to as much as we want based on
  121. receive window size.
  122. fixes https://github.com/vis2k/kcp2k/issues/22
  123. fixes https://github.com/skywind3000/kcp/pull/291
  124. - feature: OnData now includes channel it was received on
  125. V1.12 [2021-07-16]
  126. - Tests: don't depend on Unity anymore
  127. - fix: #26 - Kcp now catches exception if host couldn't be resolved, and calls
  128. OnDisconnected to let the user now.
  129. - fix: KcpServer.DualMode is now configurable in the constructor instead of
  130. using #if UNITY_SWITCH. makes it run on all other non dual mode platforms too.
  131. - fix: where-allocation made optional via virtuals and inheriting
  132. KcpServer/Client/Connection NonAlloc classes. fixes a bug where some platforms
  133. might not support where-allocation.
  134. V1.11 rollback [2021-06-01]
  135. - perf: Segment MemoryStream initial capacity set to MTU to avoid early runtime
  136. resizing/allocations
  137. V1.10 [2021-05-28]
  138. - feature: configurable Timeout
  139. - allocations explained with comments (C# ReceiveFrom / IPEndPoint.GetHashCode)
  140. - fix: #17 KcpConnection.ReceiveNextReliable now assigns message default so it
  141. works in .net too
  142. - fix: Segment pool is not static anymore. Each kcp instance now has it's own
  143. Pool<Segment>. fixes #18 concurrency issues
  144. V1.9 [2021-03-02]
  145. - Tick() split into TickIncoming()/TickOutgoing() to use in Mirror's new update
  146. functions. allows to minimize latency.
  147. => original Tick() is still supported for convenience. simply processes both!
  148. V1.8 [2021-02-14]
  149. - fix: Unity IPv6 errors on Nintendo Switch
  150. - fix: KcpConnection now disconnects if data message was received without content.
  151. previously it would call OnData with an empty ArraySegment, causing all kinds of
  152. weird behaviour in Mirror/DOTSNET. Added tests too.
  153. - fix: KcpConnection.SendData: don't allow sending empty messages anymore. disconnect
  154. and log a warning to make it completely obvious.
  155. V1.7 [2021-01-13]
  156. - fix: unreliable messages reset timeout now too
  157. - perf: KcpConnection OnCheckEnabled callback changed to a simple 'paused' boolean.
  158. This is faster than invoking a Func<bool> every time and allows us to fix #8 more
  159. easily later by calling .Pause/.Unpause from OnEnable/OnDisable in MirrorTransport.
  160. - fix #8: Unpause now resets timeout to fix a bug where Mirror would pause kcp,
  161. change the scene which took >10s, then unpause and kcp would detect the lack of
  162. any messages for >10s as timeout. Added test to make sure it never happens again.
  163. - MirrorTransport: statistics logging for headless servers
  164. - Mirror Transport: Send/Receive window size increased once more from 2048 to 4096.
  165. V1.6 [2021-01-10]
  166. - Unreliable channel added!
  167. - perf: KcpHeader byte added to every kcp message to indicate
  168. Handshake/Data/Ping/Disconnect instead of scanning each message for Hello/Byte/Ping
  169. content via SegmentEquals. It's a lot cleaner, should be faster and should avoid
  170. edge cases where a message content would equal Hello/Ping/Bye sequence accidentally.
  171. - Kcp.Input: offset moved to parameters for cases where it's needed
  172. - Kcp.SetMtu from original Kcp.c
  173. V1.5 [2021-01-07]
  174. - KcpConnection.MaxSend/ReceiveRate calculation based on the article
  175. - MirrorTransport: large send/recv window size defaults to avoid high latencies caused
  176. by packets not being processed fast enough
  177. - MirrorTransport: show MaxSend/ReceiveRate in debug gui
  178. - MirrorTransport: don't Log.Info to console in headless mode if debug log is disabled
  179. V1.4 [2020-11-27]
  180. - fix: OnCheckEnabled added. KcpConnection message processing while loop can now
  181. be interrupted immediately. fixes Mirror Transport scene changes which need to stop
  182. processing any messages immediately after a scene message)
  183. - perf: Mirror KcpTransport: FastResend enabled by default. turbo mode according to:
  184. https://github.com/skywind3000/kcp/blob/master/README.en.md#protocol-configuration
  185. - perf: Mirror KcpTransport: CongestionControl disabled by default (turbo mode)
  186. V1.3 [2020-11-17]
  187. - Log.Info/Warning/Error so logging doesn't depend on UnityEngine anymore
  188. - fix: Server.Tick catches SocketException which happens if Android client is killed
  189. - MirrorTransport: debugLog option added that can be checked in Unity Inspector
  190. - Utils.Clamp so Kcp.cs doesn't depend on UnityEngine
  191. - Utils.SegmentsEqual: use Linq SequenceEqual so it doesn't depend on UnityEngine
  192. => kcp2k can now be used in any C# project even without Unity
  193. V1.2 [2020-11-10]
  194. - more tests added
  195. - fix: raw receive buffers are now all of MTU size
  196. - fix: raw receive detects error where buffer was too small for msgLength and
  197. result in excess data being dropped silently
  198. - KcpConnection.MaxMessageSize added for use in high level
  199. - KcpConnection.MaxMessageSize increased from 1200 bytes to to maximum allowed
  200. message size of 145KB for kcp (based on mtu, overhead, wnd_rcv)
  201. V1.1 [2020-10-30]
  202. - high level cleanup, fixes, improvements
  203. V1.0 [2020-10-22]
  204. - Kcp.cs now mirrors original Kcp.c behaviour
  205. (this fixes dozens of bugs)
  206. V0.1
  207. - initial kcp-csharp based version