Пример #1
0
        public override void Decode(IEncodedMessage payload, ChannelOptions options)
        {
            if (IsEmpty(payload.Data))
            {
                return;
            }

            var currentEncoding = GetCurrentEncoding(payload);

            if (currentEncoding.Contains(EncodingName) == false)
            {
                return;
            }

            if (options.Encrypted == false)
            {
                throw new AblyException("Message cannot be decrypted as the channel is not set up for encryption & decryption", 92001);
            }

            var cipherType = GetCipherType(currentEncoding);

            if (cipherType.ToLower() != options.CipherParams.CipherType.ToLower())
            {
                throw new AblyException(string.Format("Cipher algorithm {0} does not match message cipher algorithm of {1}", options.CipherParams.CipherType.ToLower(), currentEncoding), 92002);
            }

            var cipher = Crypto.GetCipher(options);

            payload.Data = cipher.Decrypt(payload.Data as byte[]);
            RemoveCurrentEncodingPart(payload);
        }
Пример #2
0
 private void EncodePayload(IEncodedMessage payload, ChannelOptions options)
 {
     foreach (var encoder in Encoders)
     {
         encoder.Encode(payload, options);
     }
 }
Пример #3
0
 private void DecodePayload(IEncodedMessage payload, ChannelOptions options)
 {
     foreach (var encoder in (Encoders as IEnumerable <MessageEncoder>).Reverse())
     {
         encoder.Decode(payload, options);
     }
 }
Пример #4
0
 public override void Decode(IEncodedMessage payload, ChannelOptions options)
 {
     if (CurrentEncodingIs(payload, EncodingName) && payload.Data is string)
     {
         payload.Data = ((string)payload.Data).FromBase64();
         RemoveCurrentEncodingPart(payload);
     }
 }
Пример #5
0
 public override void Decode(IEncodedMessage payload, ChannelOptions options)
 {
     //Assume all the other steps will always work with Utf8
     if (CurrentEncodingIs(payload, EncodingName))
     {
         payload.Data = (payload.Data as byte[]).GetText();
         RemoveCurrentEncodingPart(payload);
     }
 }
Пример #6
0
        public string GetCurrentEncoding(IEncodedMessage payload)
        {
            if (payload.Encoding.IsEmpty())
            {
                return("");
            }

            return(payload.Encoding.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries).Last());
        }
Пример #7
0
        protected void RemoveCurrentEncodingPart(IEncodedMessage payload)
        {
            if (payload.Encoding.IsEmpty())
            {
                return;
            }

            var encodings = payload.Encoding.Split(new[] { '/' });

            payload.Encoding = string.Join("/", encodings.Take(encodings.Length - 1));
        }
Пример #8
0
        public void AddEncoding(IEncodedMessage payload, string encoding = null)
        {
            var encodingToAdd = encoding ?? EncodingName;

            if (payload.Encoding.IsEmpty())
            {
                payload.Encoding = encodingToAdd;
            }
            else
            {
                payload.Encoding += "/" + encodingToAdd;
            }
        }
Пример #9
0
        public override void Encode(IEncodedMessage payload, ChannelOptions options)
        {
            if (IsEmpty(payload.Data))
            {
                return;
            }

            if (NeedsJsonEncoding(payload))
            {
                payload.Data = JsonConvert.SerializeObject(payload.Data);
                AddEncoding(payload, EncodingName);
            }
        }
Пример #10
0
        public override void Decode(IEncodedMessage payload, ChannelOptions options)
        {
            if (IsEmpty(payload.Data) || CurrentEncodingIs(payload, EncodingName) == false)
            {
                return;
            }

            try
            {
                payload.Data = JsonConvert.DeserializeObject(payload.Data as string);
            }
            catch (Exception ex)
            {
                throw new AblyException(new ErrorInfo(string.Format("Invalid Json data: '{0}'", payload.Data), 50000), ex);
            }
            RemoveCurrentEncodingPart(payload);
        }
Пример #11
0
        public override void Encode(IEncodedMessage payload, ChannelOptions options)
        {
            var data = payload.Data;

            if (IsEmpty(data))
            {
                return;
            }

            var bytes = data as byte[];

            if (bytes != null && Protocol == Protocol.Json)
            {
                payload.Data = bytes.ToBase64();
                AddEncoding(payload, EncodingName);
            }
        }
Пример #12
0
        public override void Encode(IEncodedMessage payload, ChannelOptions options)
        {
            if (IsEmpty(payload.Data) || IsEncrypted(payload))
            {
                return;
            }

            if (options.Encrypted == false)
            {
                return;
            }

            if (payload.Data is string)
            {
                payload.Data = ((string)payload.Data).GetBytes();
                AddEncoding(payload, "utf-8");
            }

            var cipher = Crypto.GetCipher(options);

            payload.Data = cipher.Encrypt(payload.Data as byte[]);
            AddEncoding(payload, string.Format("{0}+{1}", EncodingName, options.CipherParams.CipherType.ToLower()));
        }
Пример #13
0
 public override void Encode(IEncodedMessage payload, ChannelOptions options)
 {
 }
Пример #14
0
 public abstract void Decode(IEncodedMessage payload, ChannelOptions options);
Пример #15
0
 private bool IsEncrypted(IEncodedMessage payload)
 {
     return(payload.Encoding.IsNotEmpty() && payload.Encoding.Contains(EncodingName));
 }
Пример #16
0
 public bool CurrentEncodingIs(IEncodedMessage payload, string encoding)
 {
     return(payload.Encoding.IsNotEmpty() && payload.Encoding.EndsWith(encoding, StringComparison.CurrentCultureIgnoreCase));
 }
Пример #17
0
 public bool NeedsJsonEncoding(IEncodedMessage payload)
 {
     return(payload.Data is string == false && payload.Data is byte[] == false);
 }