Exemplo n.º 1
0
        private void OnInternalOperationResponse(RtsMessageHeader header, byte[] data)
        {
            OperationResponse response;

            if (!(header.IsEncrypted ? protocol.TryParseOperationResponseEncrypted(data, this.CryptoProvider, out response) : protocol.TryParseOperationResponse(data, out response)))
            {
                if (log.IsDebugEnabled)
                {
                    log.DebugFormat("Failed to parse internal operation response for peer with connection id {0}.", new object[] { this.ConnectionId });
                }
            }
            else if (response.OperationCode != 0)
            {
                if (log.IsWarnEnabled)
                {
                    log.WarnFormat("Received unknown internal operation code {0}", new object[] { response.OperationCode });
                }
            }
            else
            {
                if (response.ReturnCode == 0)
                {
                    object obj2;
                    byte[] buffer2;
                    if (!response.Parameters.TryGetValue(1, out obj2))
                    {
                        log.Error("Parameter server key missing in initialize encryption response;");
                        return;
                    }
                    if (obj2 == null)
                    {
                        log.ErrorFormat("Parameter server key was not set in initialize encryption response;", new object[0]);
                        return;
                    }
                    byte[] otherPartyPublicKey = obj2 as byte[];
                    if (otherPartyPublicKey == null)
                    {
                        log.ErrorFormat("Parameter server key has wrong type {0} in initialize encryption response;", new object[] { obj2.GetType() });
                    }
                    this.keyExchange.DeriveSharedKey(otherPartyPublicKey);
                    using (SHA256 sha = SHA256.Create())
                    {
                        buffer2 = sha.ComputeHash(this.keyExchange.SharedKey);
                    }
                    this.CryptoProvider = new RijndaelCryptoProvider(buffer2, PaddingMode.PKCS7);
                }
                this.OnInitializeEcryptionCompleted(response.ReturnCode, response.DebugMessage);
            }
        }
        /// <summary>
        ///  Tries to parse the message header.
        /// </summary>
        /// <param name="data"> The data.</param>
        /// <param name="header"> The header.</param>
        /// <returns>True on success.</returns>
        public bool TryParseMessageHeader(byte[] data, out RtsMessageHeader header)
        {
            if ((data.Length < 2) | (data[0] != 0xf3))
            {
                header = new RtsMessageHeader();
                return(false);
            }
            RtsMessageHeader header2 = new RtsMessageHeader
            {
                MagicByte   = RtsMagicByte.GpBinaryV2,
                MessageType = (RtsMessageType)((byte)(data[1] & 0x7f)),
                IsEncrypted = (data[1] & 0x80) == 0x80
            };

            header = header2;
            return(true);
        }
Exemplo n.º 3
0
        private void OnOperationResponseInternal(RtsMessageHeader header, byte[] data)
        {
            OperationResponse response;

            if (!(header.IsEncrypted ? protocol.TryParseOperationResponseEncrypted(data, this.CryptoProvider, out response) : protocol.TryParseOperationResponse(data, out response)))
            {
                if (log.IsDebugEnabled)
                {
                    log.DebugFormat("Failed to parse operation response for peer with connection id {0}.", new object[] { this.ConnectionId });
                }
            }
            else
            {
                SendParameters sendParameters = new SendParameters
                {
                    Encrypted = header.IsEncrypted
                };
                this.OnOperationResponse(response, sendParameters);
            }
        }
Exemplo n.º 4
0
        private void OnEventInternal(RtsMessageHeader header, byte[] data)
        {
            EventData data2;

            if (!(header.IsEncrypted ? protocol.TryParseEventDataEncrypted(data, this.CryptoProvider, out data2) : protocol.TryParseEventData(data, out data2)))
            {
                if (log.IsDebugEnabled)
                {
                    log.DebugFormat("Failed to parse event for peer with connection id {0}.", new object[] { this.ConnectionId });
                }
            }
            else
            {
                SendParameters sendParameters = new SendParameters
                {
                    Encrypted = header.IsEncrypted
                };
                this.OnEvent(data2, sendParameters);
            }
        }
Exemplo n.º 5
0
 /// <summary>
 ///  Tries to parse the message header.
 /// </summary>
 /// <param name="data">The data.</param>
 /// <param name="header">The header.</param>
 /// <returns>True on success.</returns>
 public bool TryParseMessageHeader(byte[] data, out RtsMessageHeader header)
 {
     return(this.headerWriter.TryParseHeader(data, out header));
 }