@@ -299,7 +299,14 @@ private object Init(bool server)
299299 NetworkSceneManager . sceneIndexToString . Clear ( ) ;
300300 NetworkSceneManager . sceneNameToIndex . Clear ( ) ;
301301
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+ }
303310
304311 if ( NetworkConfig . Transport == DefaultTransport . UNET )
305312 NetworkConfig . NetworkTransport = new UnetTransport ( ) ;
@@ -718,13 +725,13 @@ private void Update()
718725 {
719726 connectionPendingClients . Add ( clientId ) ;
720727 }
721-
722728 StartCoroutine ( ApprovalTimeout ( clientId ) ) ;
723729 }
724730 else
725731 {
726732 if ( LogHelper . CurrentLogLevel <= LogLevel . Developer ) LogHelper . LogInfo ( "Connected" ) ;
727- SendConnectionRequest ( ) ;
733+ if ( ! NetworkConfig . EnableEncryption ) SendConnectionRequest ( ) ;
734+ StartCoroutine ( ApprovalTimeout ( clientId ) ) ;
728735 }
729736 NetworkProfiler . EndEvent ( ) ;
730737 break ;
@@ -839,7 +846,8 @@ private void HandleIncomingData(uint clientId, byte[] data, int channelId, int t
839846 headerReader . SkipPadBits ( ) ;
840847 headerReader . ReadByteArray ( IVBuffer , 16 ) ;
841848 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 ;
843851 rijndael . IV = IVBuffer ;
844852 stream = new CryptoStream ( bitStream , rijndael . CreateDecryptor ( ) , CryptoStreamMode . Read ) ;
845853 using ( PooledBitReader reader = PooledBitReader . Get ( stream ) )
@@ -940,6 +948,15 @@ private void HandleIncomingData(uint clientId, byte[] data, int channelId, int t
940948 case MLAPIConstants . MLAPI_CUSTOM_MESSAGE :
941949 InternalMessageHandler . HandleCustomMessage ( clientId , stream , channelId ) ;
942950 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 ;
943960 }
944961
945962 #endregion
@@ -1095,12 +1112,12 @@ internal void HandleApproval(uint clientId, int prefabId, bool approved, Vector3
10951112
10961113 foreach ( KeyValuePair < uint , NetworkedObject > pair in SpawnManager . SpawnedObjects )
10971114 {
1098- writer . WriteBit ( pair . Value . isPlayerObject ) ;
1115+ writer . WriteBool ( pair . Value . isPlayerObject ) ;
10991116 writer . WriteUInt32Packed ( pair . Value . NetworkId ) ;
11001117 writer . WriteUInt32Packed ( pair . Value . OwnerClientId ) ;
11011118 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 ) ;
11041121
11051122 writer . WriteSinglePacked ( pair . Value . transform . position . x ) ;
11061123 writer . WriteSinglePacked ( pair . Value . transform . position . y ) ;
@@ -1134,11 +1151,11 @@ internal void HandleApproval(uint clientId, int prefabId, bool approved, Vector3
11341151 {
11351152 if ( NetworkConfig . HandleObjectSpawning )
11361153 {
1137- writer . WriteBit ( true ) ;
1154+ writer . WriteBool ( true ) ;
11381155 writer . WriteUInt32Packed ( ConnectedClients [ clientId ] . PlayerObject . GetComponent < NetworkedObject > ( ) . NetworkId ) ;
11391156 writer . WriteUInt32Packed ( clientId ) ;
11401157 writer . WriteInt32Packed ( prefabId ) ;
1141- writer . WriteBit ( false ) ;
1158+ writer . WriteBool ( false ) ;
11421159
11431160 writer . WriteSinglePacked ( ConnectedClients [ clientId ] . PlayerObject . transform . position . x ) ;
11441161 writer . WriteSinglePacked ( ConnectedClients [ clientId ] . PlayerObject . transform . position . y ) ;
@@ -1148,7 +1165,7 @@ internal void HandleApproval(uint clientId, int prefabId, bool approved, Vector3
11481165 writer . WriteSinglePacked ( ConnectedClients [ clientId ] . PlayerObject . transform . rotation . eulerAngles . y ) ;
11491166 writer . WriteSinglePacked ( ConnectedClients [ clientId ] . PlayerObject . transform . rotation . eulerAngles . z ) ;
11501167
1151- writer . WriteBit ( false ) ; //No payload data
1168+ writer . WriteBool ( false ) ; //No payload data
11521169
11531170 ConnectedClients [ clientId ] . PlayerObject . GetComponent < NetworkedObject > ( ) . WriteNetworkedVarData ( stream , clientPair . Key ) ;
11541171 }
0 commit comments