@@ -876,127 +876,127 @@ private void HandleRawTransportPoll(NetEventType eventType, ulong clientId, stri
876876 }
877877 }
878878
879+ private readonly BitStream inputStreamWrapper = new BitStream ( new byte [ 0 ] ) ;
880+
879881 private void HandleIncomingData ( ulong clientId , string channelName , ArraySegment < byte > data , float receiveTime )
880882 {
881883 if ( LogHelper . CurrentLogLevel <= LogLevel . Developer ) LogHelper . LogInfo ( "Unwrapping Data Header" ) ;
882884
883- using ( BitStream inputStream = new BitStream ( data . Array ) )
884- {
885- inputStream . SetLength ( data . Count + data . Offset ) ;
886- inputStream . Position = data . Offset ;
885+ inputStreamWrapper . SetTarget ( data . Array ) ;
886+ inputStreamWrapper . SetLength ( data . Count + data . Offset ) ;
887+ inputStreamWrapper . Position = data . Offset ;
887888
888- using ( BitStream messageStream = MessagePacker . UnwrapMessage ( inputStream , clientId , out byte messageType , out SecuritySendFlags security ) )
889+ using ( BitStream messageStream = MessagePacker . UnwrapMessage ( inputStreamWrapper , clientId , out byte messageType , out SecuritySendFlags security ) )
890+ {
891+ if ( messageStream == null )
889892 {
890- if ( messageStream == null )
891- {
892- if ( LogHelper . CurrentLogLevel <= LogLevel . Error ) LogHelper . LogError ( "Message unwrap could not be completed. Was the header corrupt? Crypto error?" ) ;
893- return ;
894- }
895- else if ( messageType == MLAPIConstants . INVALID )
896- {
897- if ( LogHelper . CurrentLogLevel <= LogLevel . Error ) LogHelper . LogError ( "Message unwrap read an invalid messageType" ) ;
898- return ;
899- }
893+ if ( LogHelper . CurrentLogLevel <= LogLevel . Error ) LogHelper . LogError ( "Message unwrap could not be completed. Was the header corrupt? Crypto error?" ) ;
894+ return ;
895+ }
896+ else if ( messageType == MLAPIConstants . INVALID )
897+ {
898+ if ( LogHelper . CurrentLogLevel <= LogLevel . Error ) LogHelper . LogError ( "Message unwrap read an invalid messageType" ) ;
899+ return ;
900+ }
900901
901- uint headerByteSize = ( uint ) Arithmetic . VarIntSize ( messageType ) ;
902- NetworkProfiler . StartEvent ( TickType . Receive , ( uint ) ( data . Count - headerByteSize ) , channelName , messageType ) ;
902+ uint headerByteSize = ( uint ) Arithmetic . VarIntSize ( messageType ) ;
903+ NetworkProfiler . StartEvent ( TickType . Receive , ( uint ) ( data . Count - headerByteSize ) , channelName , messageType ) ;
903904
904- if ( LogHelper . CurrentLogLevel <= LogLevel . Developer ) LogHelper . LogInfo ( "Data Header: messageType=" + messageType ) ;
905+ if ( LogHelper . CurrentLogLevel <= LogLevel . Developer ) LogHelper . LogInfo ( "Data Header: messageType=" + messageType ) ;
905906
906- // Client tried to send a network message that was not the connection request before he was accepted.
907- if ( IsServer && ( NetworkConfig . EnableEncryption && PendingClients . ContainsKey ( clientId ) && PendingClients [ clientId ] . ConnectionState == PendingClient . State . PendingHail && messageType != MLAPIConstants . MLAPI_CERTIFICATE_HAIL_RESPONSE ) ||
908- ( PendingClients . ContainsKey ( clientId ) && PendingClients [ clientId ] . ConnectionState == PendingClient . State . PendingConnection && messageType != MLAPIConstants . MLAPI_CONNECTION_REQUEST ) )
909- {
910- if ( LogHelper . CurrentLogLevel <= LogLevel . Normal ) LogHelper . LogWarning ( "Message recieved from clientId " + clientId + " before it has been accepted" ) ;
911- return ;
912- }
907+ // Client tried to send a network message that was not the connection request before he was accepted.
908+ if ( IsServer && ( NetworkConfig . EnableEncryption && PendingClients . ContainsKey ( clientId ) && PendingClients [ clientId ] . ConnectionState == PendingClient . State . PendingHail && messageType != MLAPIConstants . MLAPI_CERTIFICATE_HAIL_RESPONSE ) ||
909+ ( PendingClients . ContainsKey ( clientId ) && PendingClients [ clientId ] . ConnectionState == PendingClient . State . PendingConnection && messageType != MLAPIConstants . MLAPI_CONNECTION_REQUEST ) )
910+ {
911+ if ( LogHelper . CurrentLogLevel <= LogLevel . Normal ) LogHelper . LogWarning ( "Message recieved from clientId " + clientId + " before it has been accepted" ) ;
912+ return ;
913+ }
913914
914- #region INTERNAL MESSAGE
915+ #region INTERNAL MESSAGE
915916
916- switch ( messageType )
917- {
918- case MLAPIConstants . MLAPI_CONNECTION_REQUEST :
919- if ( IsServer )
920- InternalMessageHandler . HandleConnectionRequest ( clientId , messageStream ) ;
921- break ;
922- case MLAPIConstants . MLAPI_CONNECTION_APPROVED :
923- if ( IsClient )
924- InternalMessageHandler . HandleConnectionApproved ( clientId , messageStream , receiveTime ) ;
925- break ;
926- case MLAPIConstants . MLAPI_ADD_OBJECT :
927- if ( IsClient ) InternalMessageHandler . HandleAddObject ( clientId , messageStream ) ;
928- break ;
929- case MLAPIConstants . MLAPI_DESTROY_OBJECT :
930- if ( IsClient ) InternalMessageHandler . HandleDestroyObject ( clientId , messageStream ) ;
931- break ;
932- case MLAPIConstants . MLAPI_SWITCH_SCENE :
933- if ( IsClient ) InternalMessageHandler . HandleSwitchScene ( clientId , messageStream ) ;
934- break ;
935- case MLAPIConstants . MLAPI_CHANGE_OWNER :
936- if ( IsClient ) InternalMessageHandler . HandleChangeOwner ( clientId , messageStream ) ;
937- break ;
938- case MLAPIConstants . MLAPI_ADD_OBJECTS :
939- if ( IsClient ) InternalMessageHandler . HandleAddObjects ( clientId , messageStream ) ;
940- break ;
941- case MLAPIConstants . MLAPI_DESTROY_OBJECTS :
942- if ( IsClient ) InternalMessageHandler . HandleDestroyObjects ( clientId , messageStream ) ;
943- break ;
944- case MLAPIConstants . MLAPI_TIME_SYNC :
945- if ( IsClient ) InternalMessageHandler . HandleTimeSync ( clientId , messageStream , receiveTime ) ;
946- break ;
947- case MLAPIConstants . MLAPI_NETWORKED_VAR_DELTA :
948- InternalMessageHandler . HandleNetworkedVarDelta ( clientId , messageStream ) ;
949- break ;
950- case MLAPIConstants . MLAPI_NETWORKED_VAR_UPDATE :
951- InternalMessageHandler . HandleNetworkedVarUpdate ( clientId , messageStream ) ;
952- break ;
953- case MLAPIConstants . MLAPI_SERVER_RPC :
954- if ( IsServer ) InternalMessageHandler . HandleServerRPC ( clientId , messageStream ) ;
955- break ;
956- case MLAPIConstants . MLAPI_SERVER_RPC_REQUEST :
957- if ( IsServer ) InternalMessageHandler . HandleServerRPCRequest ( clientId , messageStream , channelName , security ) ;
958- break ;
959- case MLAPIConstants . MLAPI_SERVER_RPC_RESPONSE :
960- if ( IsClient ) InternalMessageHandler . HandleServerRPCResponse ( clientId , messageStream ) ;
961- break ;
962- case MLAPIConstants . MLAPI_CLIENT_RPC :
963- if ( IsClient ) InternalMessageHandler . HandleClientRPC ( clientId , messageStream ) ;
964- break ;
965- case MLAPIConstants . MLAPI_CLIENT_RPC_REQUEST :
966- if ( IsClient ) InternalMessageHandler . HandleClientRPCRequest ( clientId , messageStream , channelName , security ) ;
967- break ;
968- case MLAPIConstants . MLAPI_CLIENT_RPC_RESPONSE :
969- if ( IsServer ) InternalMessageHandler . HandleClientRPCResponse ( clientId , messageStream ) ;
970- break ;
971- case MLAPIConstants . MLAPI_UNNAMED_MESSAGE :
972- InternalMessageHandler . HandleUnnamedMessage ( clientId , messageStream ) ;
973- break ;
974- case MLAPIConstants . MLAPI_NAMED_MESSAGE :
975- InternalMessageHandler . HandleNamedMessage ( clientId , messageStream ) ;
976- break ;
917+ switch ( messageType )
918+ {
919+ case MLAPIConstants . MLAPI_CONNECTION_REQUEST :
920+ if ( IsServer )
921+ InternalMessageHandler . HandleConnectionRequest ( clientId , messageStream ) ;
922+ break ;
923+ case MLAPIConstants . MLAPI_CONNECTION_APPROVED :
924+ if ( IsClient )
925+ InternalMessageHandler . HandleConnectionApproved ( clientId , messageStream , receiveTime ) ;
926+ break ;
927+ case MLAPIConstants . MLAPI_ADD_OBJECT :
928+ if ( IsClient ) InternalMessageHandler . HandleAddObject ( clientId , messageStream ) ;
929+ break ;
930+ case MLAPIConstants . MLAPI_DESTROY_OBJECT :
931+ if ( IsClient ) InternalMessageHandler . HandleDestroyObject ( clientId , messageStream ) ;
932+ break ;
933+ case MLAPIConstants . MLAPI_SWITCH_SCENE :
934+ if ( IsClient ) InternalMessageHandler . HandleSwitchScene ( clientId , messageStream ) ;
935+ break ;
936+ case MLAPIConstants . MLAPI_CHANGE_OWNER :
937+ if ( IsClient ) InternalMessageHandler . HandleChangeOwner ( clientId , messageStream ) ;
938+ break ;
939+ case MLAPIConstants . MLAPI_ADD_OBJECTS :
940+ if ( IsClient ) InternalMessageHandler . HandleAddObjects ( clientId , messageStream ) ;
941+ break ;
942+ case MLAPIConstants . MLAPI_DESTROY_OBJECTS :
943+ if ( IsClient ) InternalMessageHandler . HandleDestroyObjects ( clientId , messageStream ) ;
944+ break ;
945+ case MLAPIConstants . MLAPI_TIME_SYNC :
946+ if ( IsClient ) InternalMessageHandler . HandleTimeSync ( clientId , messageStream , receiveTime ) ;
947+ break ;
948+ case MLAPIConstants . MLAPI_NETWORKED_VAR_DELTA :
949+ InternalMessageHandler . HandleNetworkedVarDelta ( clientId , messageStream ) ;
950+ break ;
951+ case MLAPIConstants . MLAPI_NETWORKED_VAR_UPDATE :
952+ InternalMessageHandler . HandleNetworkedVarUpdate ( clientId , messageStream ) ;
953+ break ;
954+ case MLAPIConstants . MLAPI_SERVER_RPC :
955+ if ( IsServer ) InternalMessageHandler . HandleServerRPC ( clientId , messageStream ) ;
956+ break ;
957+ case MLAPIConstants . MLAPI_SERVER_RPC_REQUEST :
958+ if ( IsServer ) InternalMessageHandler . HandleServerRPCRequest ( clientId , messageStream , channelName , security ) ;
959+ break ;
960+ case MLAPIConstants . MLAPI_SERVER_RPC_RESPONSE :
961+ if ( IsClient ) InternalMessageHandler . HandleServerRPCResponse ( clientId , messageStream ) ;
962+ break ;
963+ case MLAPIConstants . MLAPI_CLIENT_RPC :
964+ if ( IsClient ) InternalMessageHandler . HandleClientRPC ( clientId , messageStream ) ;
965+ break ;
966+ case MLAPIConstants . MLAPI_CLIENT_RPC_REQUEST :
967+ if ( IsClient ) InternalMessageHandler . HandleClientRPCRequest ( clientId , messageStream , channelName , security ) ;
968+ break ;
969+ case MLAPIConstants . MLAPI_CLIENT_RPC_RESPONSE :
970+ if ( IsServer ) InternalMessageHandler . HandleClientRPCResponse ( clientId , messageStream ) ;
971+ break ;
972+ case MLAPIConstants . MLAPI_UNNAMED_MESSAGE :
973+ InternalMessageHandler . HandleUnnamedMessage ( clientId , messageStream ) ;
974+ break ;
975+ case MLAPIConstants . MLAPI_NAMED_MESSAGE :
976+ InternalMessageHandler . HandleNamedMessage ( clientId , messageStream ) ;
977+ break ;
977978#if ! DISABLE_CRYPTOGRAPHY
978- case MLAPIConstants . MLAPI_CERTIFICATE_HAIL:
979- if ( IsClient ) InternalMessageHandler . HandleHailRequest ( clientId , messageStream ) ;
980- break ;
981- case MLAPIConstants . MLAPI_CERTIFICATE_HAIL_RESPONSE:
982- if ( IsServer ) InternalMessageHandler . HandleHailResponse ( clientId , messageStream ) ;
983- break ;
984- case MLAPIConstants . MLAPI_GREETINGS:
985- if ( IsClient ) InternalMessageHandler . HandleGreetings ( clientId , messageStream ) ;
986- break ;
987- #endif
988- case MLAPIConstants . MLAPI_CLIENT_SWITCH_SCENE_COMPLETED :
989- if ( IsServer ) InternalMessageHandler . HandleClientSwitchSceneCompleted ( clientId , messageStream ) ;
990- break ;
991- default :
992- if ( LogHelper . CurrentLogLevel <= LogLevel . Error ) LogHelper . LogError ( "Read unrecognized messageType " + messageType ) ;
993- break ;
994- }
979+ case MLAPIConstants . MLAPI_CERTIFICATE_HAIL:
980+ if ( IsClient ) InternalMessageHandler . HandleHailRequest ( clientId , messageStream ) ;
981+ break ;
982+ case MLAPIConstants . MLAPI_CERTIFICATE_HAIL_RESPONSE:
983+ if ( IsServer ) InternalMessageHandler . HandleHailResponse ( clientId , messageStream ) ;
984+ break ;
985+ case MLAPIConstants . MLAPI_GREETINGS:
986+ if ( IsClient ) InternalMessageHandler . HandleGreetings ( clientId , messageStream ) ;
987+ break ;
988+ #endif
989+ case MLAPIConstants . MLAPI_CLIENT_SWITCH_SCENE_COMPLETED :
990+ if ( IsServer ) InternalMessageHandler . HandleClientSwitchSceneCompleted ( clientId , messageStream ) ;
991+ break ;
992+ default :
993+ if ( LogHelper . CurrentLogLevel <= LogLevel . Error ) LogHelper . LogError ( "Read unrecognized messageType " + messageType ) ;
994+ break ;
995+ }
995996
996- #endregion
997+ #endregion
997998
998- NetworkProfiler . EndEvent ( ) ;
999- }
999+ NetworkProfiler . EndEvent ( ) ;
10001000 }
10011001 }
10021002
0 commit comments