@@ -299,7 +299,14 @@ private object Init(bool server)
299
299
NetworkSceneManager . sceneIndexToString . Clear ( ) ;
300
300
NetworkSceneManager . sceneNameToIndex . Clear ( ) ;
301
301
302
- if ( server ) NetworkConfig . ServerX509Certificate = new X509Certificate2 ( NetworkConfig . ServerCertificatePfx ) ;
302
+ try
303
+ {
304
+ if ( server && ! string . IsNullOrEmpty ( NetworkConfig . ServerCertificatePfx ) ) NetworkConfig . ServerX509Certificate = new X509Certificate2 ( Convert . FromBase64String ( NetworkConfig . ServerCertificatePfx ) ) ;
305
+ }
306
+ catch ( CryptographicException ex )
307
+ {
308
+ if ( LogHelper . CurrentLogLevel <= LogLevel . Error ) LogHelper . LogError ( "Importing of certificate failed: " + ex . ToString ( ) ) ;
309
+ }
303
310
304
311
if ( NetworkConfig . Transport == DefaultTransport . UNET )
305
312
NetworkConfig . NetworkTransport = new UnetTransport ( ) ;
@@ -718,13 +725,13 @@ private void Update()
718
725
{
719
726
connectionPendingClients . Add ( clientId ) ;
720
727
}
721
-
722
728
StartCoroutine ( ApprovalTimeout ( clientId ) ) ;
723
729
}
724
730
else
725
731
{
726
732
if ( LogHelper . CurrentLogLevel <= LogLevel . Developer ) LogHelper . LogInfo ( "Connected" ) ;
727
- SendConnectionRequest ( ) ;
733
+ if ( ! NetworkConfig . EnableEncryption ) SendConnectionRequest ( ) ;
734
+ StartCoroutine ( ApprovalTimeout ( clientId ) ) ;
728
735
}
729
736
NetworkProfiler . EndEvent ( ) ;
730
737
break ;
@@ -839,7 +846,8 @@ private void HandleIncomingData(uint clientId, byte[] data, int channelId, int t
839
846
headerReader . SkipPadBits ( ) ;
840
847
headerReader . ReadByteArray ( IVBuffer , 16 ) ;
841
848
rijndael = new RijndaelManaged ( ) ;
842
- rijndael . Key = isServer ? ConnectedClients [ clientId ] . AesKey : clientAesKey ;
849
+ rijndael . Padding = PaddingMode . PKCS7 ;
850
+ rijndael . Key = isServer ? ( ConnectedClients . ContainsKey ( clientId ) ? ConnectedClients [ clientId ] . AesKey : pendingClientAesKeys [ clientId ] ) : clientAesKey ;
843
851
rijndael . IV = IVBuffer ;
844
852
stream = new CryptoStream ( bitStream , rijndael . CreateDecryptor ( ) , CryptoStreamMode . Read ) ;
845
853
using ( PooledBitReader reader = PooledBitReader . Get ( stream ) )
@@ -940,6 +948,15 @@ private void HandleIncomingData(uint clientId, byte[] data, int channelId, int t
940
948
case MLAPIConstants . MLAPI_CUSTOM_MESSAGE :
941
949
InternalMessageHandler . HandleCustomMessage ( clientId , stream , channelId ) ;
942
950
break ;
951
+ case MLAPIConstants . MLAPI_CERTIFICATE_HAIL :
952
+ if ( isClient ) InternalMessageHandler . HandleHailRequest ( clientId , stream , channelId ) ;
953
+ break ;
954
+ case MLAPIConstants . MLAPI_CERTIFICATE_HAIL_RESPONSE :
955
+ if ( isServer ) InternalMessageHandler . HandleHailResponse ( clientId , stream , channelId ) ;
956
+ break ;
957
+ case MLAPIConstants . MLAPI_GREETINGS :
958
+ if ( isClient ) InternalMessageHandler . HandleGreetings ( clientId , stream , channelId ) ;
959
+ break ;
943
960
}
944
961
945
962
#endregion
@@ -1095,12 +1112,12 @@ internal void HandleApproval(uint clientId, int prefabId, bool approved, Vector3
1095
1112
1096
1113
foreach ( KeyValuePair < uint , NetworkedObject > pair in SpawnManager . SpawnedObjects )
1097
1114
{
1098
- writer . WriteBit ( pair . Value . isPlayerObject ) ;
1115
+ writer . WriteBool ( pair . Value . isPlayerObject ) ;
1099
1116
writer . WriteUInt32Packed ( pair . Value . NetworkId ) ;
1100
1117
writer . WriteUInt32Packed ( pair . Value . OwnerClientId ) ;
1101
1118
writer . WriteInt32Packed ( NetworkConfig . NetworkPrefabIds [ pair . Value . NetworkedPrefabName ] ) ;
1102
- writer . WriteBit ( pair . Value . gameObject . activeInHierarchy ) ;
1103
- writer . WriteBit ( pair . Value . sceneObject == null ? true : pair . Value . sceneObject . Value ) ;
1119
+ writer . WriteBool ( pair . Value . gameObject . activeInHierarchy ) ;
1120
+ writer . WriteBool ( pair . Value . sceneObject == null ? true : pair . Value . sceneObject . Value ) ;
1104
1121
1105
1122
writer . WriteSinglePacked ( pair . Value . transform . position . x ) ;
1106
1123
writer . WriteSinglePacked ( pair . Value . transform . position . y ) ;
@@ -1134,11 +1151,11 @@ internal void HandleApproval(uint clientId, int prefabId, bool approved, Vector3
1134
1151
{
1135
1152
if ( NetworkConfig . HandleObjectSpawning )
1136
1153
{
1137
- writer . WriteBit ( true ) ;
1154
+ writer . WriteBool ( true ) ;
1138
1155
writer . WriteUInt32Packed ( ConnectedClients [ clientId ] . PlayerObject . GetComponent < NetworkedObject > ( ) . NetworkId ) ;
1139
1156
writer . WriteUInt32Packed ( clientId ) ;
1140
1157
writer . WriteInt32Packed ( prefabId ) ;
1141
- writer . WriteBit ( false ) ;
1158
+ writer . WriteBool ( false ) ;
1142
1159
1143
1160
writer . WriteSinglePacked ( ConnectedClients [ clientId ] . PlayerObject . transform . position . x ) ;
1144
1161
writer . WriteSinglePacked ( ConnectedClients [ clientId ] . PlayerObject . transform . position . y ) ;
@@ -1148,7 +1165,7 @@ internal void HandleApproval(uint clientId, int prefabId, bool approved, Vector3
1148
1165
writer . WriteSinglePacked ( ConnectedClients [ clientId ] . PlayerObject . transform . rotation . eulerAngles . y ) ;
1149
1166
writer . WriteSinglePacked ( ConnectedClients [ clientId ] . PlayerObject . transform . rotation . eulerAngles . z ) ;
1150
1167
1151
- writer . WriteBit ( false ) ; //No payload data
1168
+ writer . WriteBool ( false ) ; //No payload data
1152
1169
1153
1170
ConnectedClients [ clientId ] . PlayerObject . GetComponent < NetworkedObject > ( ) . WriteNetworkedVarData ( stream , clientPair . Key ) ;
1154
1171
}
0 commit comments