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); }
private void EncodePayload(IEncodedMessage payload, ChannelOptions options) { foreach (var encoder in Encoders) { encoder.Encode(payload, options); } }
private void DecodePayload(IEncodedMessage payload, ChannelOptions options) { foreach (var encoder in (Encoders as IEnumerable <MessageEncoder>).Reverse()) { encoder.Decode(payload, options); } }
public override void Decode(IEncodedMessage payload, ChannelOptions options) { if (CurrentEncodingIs(payload, EncodingName) && payload.Data is string) { payload.Data = ((string)payload.Data).FromBase64(); RemoveCurrentEncodingPart(payload); } }
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); } }
public string GetCurrentEncoding(IEncodedMessage payload) { if (payload.Encoding.IsEmpty()) { return(""); } return(payload.Encoding.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries).Last()); }
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)); }
public void AddEncoding(IEncodedMessage payload, string encoding = null) { var encodingToAdd = encoding ?? EncodingName; if (payload.Encoding.IsEmpty()) { payload.Encoding = encodingToAdd; } else { payload.Encoding += "/" + encodingToAdd; } }
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); } }
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); }
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); } }
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())); }
public override void Encode(IEncodedMessage payload, ChannelOptions options) { }
public abstract void Decode(IEncodedMessage payload, ChannelOptions options);
private bool IsEncrypted(IEncodedMessage payload) { return(payload.Encoding.IsNotEmpty() && payload.Encoding.Contains(EncodingName)); }
public bool CurrentEncodingIs(IEncodedMessage payload, string encoding) { return(payload.Encoding.IsNotEmpty() && payload.Encoding.EndsWith(encoding, StringComparison.CurrentCultureIgnoreCase)); }
public bool NeedsJsonEncoding(IEncodedMessage payload) { return(payload.Data is string == false && payload.Data is byte[] == false); }