Skip to content

Commit 94a2ffc

Browse files
miniwolfShadauxCat
andauthored
fix: Pass the transport type to the error (#2788)
In cases where the specific transport can be used to guide the user to better support, we pass this information to the error log. If the version is Unity Transport Protocol (UTP) we also pass the specific transport protocol to determine if relay is being used Co-authored-by: Kitty Draper <[email protected]>
1 parent 654e413 commit 94a2ffc

File tree

2 files changed

+36
-9
lines changed

2 files changed

+36
-9
lines changed

com.unity.netcode.gameobjects/Runtime/Messaging/NetworkManagerHooks.cs

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using Unity.Netcode.Transports.UTP;
23

34
namespace Unity.Netcode
45
{
@@ -56,7 +57,8 @@ public bool OnVerifyCanReceive(ulong senderId, Type messageType, FastBufferReade
5657
{
5758
if (NetworkLog.CurrentLogLevel <= LogLevel.Normal)
5859
{
59-
NetworkLog.LogError($"A {nameof(ConnectionApprovedMessage)} was received from a client on the server side. This should not happen. Please report this to the Netcode for GameObjects team at https://github.com/Unity-Technologies/com.unity.netcode.gameobjects/issues and include the following data: Message Size: {messageContent.Length}. Message Content: {NetworkMessageManager.ByteArrayToString(messageContent.ToArray(), 0, messageContent.Length)}");
60+
var transportErrorMsg = GetTransportErrorMessage(messageContent, m_NetworkManager);
61+
NetworkLog.LogError($"A {nameof(ConnectionApprovedMessage)} was received from a client on the server side. {transportErrorMsg}");
6062
}
6163

6264
return false;
@@ -66,7 +68,7 @@ public bool OnVerifyCanReceive(ulong senderId, Type messageType, FastBufferReade
6668
{
6769
if (NetworkLog.CurrentLogLevel <= LogLevel.Normal)
6870
{
69-
NetworkLog.LogWarning($"Message received from {nameof(senderId)}={senderId} before it has been accepted");
71+
NetworkLog.LogWarning($"Message received from {nameof(senderId)}={senderId} before it has been accepted.");
7072
}
7173

7274
return false;
@@ -76,7 +78,8 @@ public bool OnVerifyCanReceive(ulong senderId, Type messageType, FastBufferReade
7678
{
7779
if (NetworkLog.CurrentLogLevel <= LogLevel.Normal)
7880
{
79-
NetworkLog.LogError($"A {nameof(ConnectionRequestMessage)} was received from a client when the connection has already been established. This should not happen. Please report this to the Netcode for GameObjects team at https://github.com/Unity-Technologies/com.unity.netcode.gameobjects/issues and include the following data: Message Size: {messageContent.Length}. Message Content: {NetworkMessageManager.ByteArrayToString(messageContent.ToArray(), 0, messageContent.Length)}");
81+
var transportErrorMsg = GetTransportErrorMessage(messageContent, m_NetworkManager);
82+
NetworkLog.LogError($"A {nameof(ConnectionRequestMessage)} was received from a client when the connection has already been established. {transportErrorMsg}");
8083
}
8184

8285
return false;
@@ -88,7 +91,8 @@ public bool OnVerifyCanReceive(ulong senderId, Type messageType, FastBufferReade
8891
{
8992
if (NetworkLog.CurrentLogLevel <= LogLevel.Normal)
9093
{
91-
NetworkLog.LogError($"A {nameof(ConnectionRequestMessage)} was received from the server on the client side. This should not happen. Please report this to the Netcode for GameObjects team at https://github.com/Unity-Technologies/com.unity.netcode.gameobjects/issues and include the following data: Message Size: {messageContent.Length}. Message Content: {NetworkMessageManager.ByteArrayToString(messageContent.ToArray(), 0, messageContent.Length)}");
94+
var transportErrorMsg = GetTransportErrorMessage(messageContent, m_NetworkManager);
95+
NetworkLog.LogError($"A {nameof(ConnectionRequestMessage)} was received from the server on the client side. {transportErrorMsg}");
9296
}
9397

9498
return false;
@@ -98,7 +102,8 @@ public bool OnVerifyCanReceive(ulong senderId, Type messageType, FastBufferReade
98102
{
99103
if (NetworkLog.CurrentLogLevel <= LogLevel.Normal)
100104
{
101-
NetworkLog.LogError($"A {nameof(ConnectionApprovedMessage)} was received from the server when the connection has already been established. This should not happen. Please report this to the Netcode for GameObjects team at https://github.com/Unity-Technologies/com.unity.netcode.gameobjects/issues and include the following data: Message Size: {messageContent.Length}. Message Content: {NetworkMessageManager.ByteArrayToString(messageContent.ToArray(), 0, messageContent.Length)}");
105+
var transportErrorMsg = GetTransportErrorMessage(messageContent, m_NetworkManager);
106+
NetworkLog.LogError($"A {nameof(ConnectionApprovedMessage)} was received from the server when the connection has already been established. {transportErrorMsg}");
102107
}
103108

104109
return false;
@@ -108,6 +113,28 @@ public bool OnVerifyCanReceive(ulong senderId, Type messageType, FastBufferReade
108113
return !m_NetworkManager.MessageManager.StopProcessing;
109114
}
110115

116+
private static string GetTransportErrorMessage(FastBufferReader messageContent, NetworkManager networkManager)
117+
{
118+
if (networkManager.NetworkConfig.NetworkTransport is not UnityTransport)
119+
{
120+
return $"NetworkTransport: {networkManager.NetworkConfig.NetworkTransport.GetType()}. Please report this to the maintainer of transport layer.";
121+
}
122+
123+
var transportVersion = GetTransportVersion(networkManager);
124+
return $"{transportVersion}. This should not happen. Please report this to the Netcode for GameObjects team at https://github.com/Unity-Technologies/com.unity.netcode.gameobjects/issues and include the following data: Message Size: {messageContent.Length}. Message Content: {NetworkMessageManager.ByteArrayToString(messageContent.ToArray(), 0, messageContent.Length)}";
125+
}
126+
127+
private static string GetTransportVersion(NetworkManager networkManager)
128+
{
129+
var transportVersion = "NetworkTransport: " + networkManager.NetworkConfig.NetworkTransport.GetType();
130+
if (networkManager.NetworkConfig.NetworkTransport is UnityTransport unityTransport)
131+
{
132+
transportVersion += " UnityTransportProtocol: " + unityTransport.Protocol;
133+
}
134+
135+
return transportVersion;
136+
}
137+
111138
public void OnBeforeHandleMessage<T>(ref T message, ref NetworkContext context) where T : INetworkMessage
112139
{
113140
}

com.unity.netcode.gameobjects/Tests/Runtime/InvalidConnectionEventsTest.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ public IEnumerator WhenSendingConnectionApprovedToAlreadyConnectedClient_Connect
9696

9797
m_ClientNetworkManagers[0].ConnectionManager.MessageManager.Hook(new Hooks<ConnectionApprovedMessage>());
9898

99-
LogAssert.Expect(LogType.Error, new Regex($"A {nameof(ConnectionApprovedMessage)} was received from the server when the connection has already been established\\. This should not happen\\."));
99+
LogAssert.Expect(LogType.Error, new Regex($"A {nameof(ConnectionApprovedMessage)} was received from the server when the connection has already been established\\. NetworkTransport: Unity.Netcode.Transports.UTP.UnityTransport UnityTransportProtocol: UnityTransport. This should not happen\\."));
100100

101101
yield return WaitForMessageReceived<UnnamedMessage>(m_ClientNetworkManagers.ToList());
102102
}
@@ -118,7 +118,7 @@ public IEnumerator WhenSendingConnectionRequestToAnyClient_ConnectionRequestMess
118118

119119
m_ClientNetworkManagers[0].ConnectionManager.MessageManager.Hook(new Hooks<ConnectionRequestMessage>());
120120

121-
LogAssert.Expect(LogType.Error, new Regex($"A {nameof(ConnectionRequestMessage)} was received from the server on the client side\\. This should not happen\\."));
121+
LogAssert.Expect(LogType.Error, new Regex($"A {nameof(ConnectionRequestMessage)} was received from the server on the client side\\. NetworkTransport: Unity.Netcode.Transports.UTP.UnityTransport UnityTransportProtocol: UnityTransport. This should not happen\\."));
122122

123123
yield return WaitForMessageReceived<UnnamedMessage>(m_ClientNetworkManagers.ToList());
124124
}
@@ -140,7 +140,7 @@ public IEnumerator WhenSendingConnectionRequestFromAlreadyConnectedClient_Connec
140140

141141
m_ServerNetworkManager.ConnectionManager.MessageManager.Hook(new Hooks<ConnectionRequestMessage>());
142142

143-
LogAssert.Expect(LogType.Error, new Regex($"A {nameof(ConnectionRequestMessage)} was received from a client when the connection has already been established\\. This should not happen\\."));
143+
LogAssert.Expect(LogType.Error, new Regex($"A {nameof(ConnectionRequestMessage)} was received from a client when the connection has already been established\\. NetworkTransport: Unity.Netcode.Transports.UTP.UnityTransport UnityTransportProtocol: UnityTransport. This should not happen\\."));
144144

145145
yield return WaitForMessageReceived<UnnamedMessage>(new List<NetworkManager> { m_ServerNetworkManager });
146146
}
@@ -165,7 +165,7 @@ public IEnumerator WhenSendingConnectionApprovedFromAnyClient_ConnectionApproved
165165

166166
m_ServerNetworkManager.ConnectionManager.MessageManager.Hook(new Hooks<ConnectionApprovedMessage>());
167167

168-
LogAssert.Expect(LogType.Error, new Regex($"A {nameof(ConnectionApprovedMessage)} was received from a client on the server side\\. This should not happen\\."));
168+
LogAssert.Expect(LogType.Error, new Regex($"A {nameof(ConnectionApprovedMessage)} was received from a client on the server side\\. NetworkTransport: Unity.Netcode.Transports.UTP.UnityTransport UnityTransportProtocol: UnityTransport. This should not happen\\."));
169169

170170
yield return WaitForMessageReceived<UnnamedMessage>(new List<NetworkManager> { m_ServerNetworkManager });
171171
}

0 commit comments

Comments
 (0)