/// <summary>Read SASL message and negotiated cipher option from server.</summary> /// <param name="in">stream to read</param> /// <returns> /// SaslResponseWithNegotiatedCipherOption SASL message and /// negotiated cipher option /// </returns> /// <exception cref="System.IO.IOException">for any error</exception> public static SaslResponseWithNegotiatedCipherOption ReadSaslMessageAndNegotiatedCipherOption (InputStream @in) { DataTransferProtos.DataTransferEncryptorMessageProto proto = DataTransferProtos.DataTransferEncryptorMessageProto .ParseFrom(PBHelper.VintPrefixed(@in)); if (proto.GetStatus() == DataTransferProtos.DataTransferEncryptorMessageProto.DataTransferEncryptorStatus .ErrorUnknownKey) { throw new InvalidEncryptionKeyException(proto.GetMessage()); } else { if (proto.GetStatus() == DataTransferProtos.DataTransferEncryptorMessageProto.DataTransferEncryptorStatus .Error) { throw new IOException(proto.GetMessage()); } else { byte[] response = proto.GetPayload().ToByteArray(); IList <CipherOption> options = PBHelper.ConvertCipherOptionProtos(proto.GetCipherOptionList ()); CipherOption option = null; if (options != null && !options.IsEmpty()) { option = options[0]; } return(new SaslResponseWithNegotiatedCipherOption(response, option)); } } }
/// <summary>Reads a SASL negotiation message and negotiation cipher options.</summary> /// <param name="in">stream to read</param> /// <param name="cipherOptions">list to store negotiation cipher options</param> /// <returns>byte[] SASL negotiation message</returns> /// <exception cref="System.IO.IOException">for any error</exception> public static byte[] ReadSaslMessageAndNegotiationCipherOptions(InputStream @in, IList <CipherOption> cipherOptions) { DataTransferProtos.DataTransferEncryptorMessageProto proto = DataTransferProtos.DataTransferEncryptorMessageProto .ParseFrom(PBHelper.VintPrefixed(@in)); if (proto.GetStatus() == DataTransferProtos.DataTransferEncryptorMessageProto.DataTransferEncryptorStatus .ErrorUnknownKey) { throw new InvalidEncryptionKeyException(proto.GetMessage()); } else { if (proto.GetStatus() == DataTransferProtos.DataTransferEncryptorMessageProto.DataTransferEncryptorStatus .Error) { throw new IOException(proto.GetMessage()); } else { IList <HdfsProtos.CipherOptionProto> optionProtos = proto.GetCipherOptionList(); if (optionProtos != null) { foreach (HdfsProtos.CipherOptionProto optionProto in optionProtos) { cipherOptions.AddItem(PBHelper.Convert(optionProto)); } } return(proto.GetPayload().ToByteArray()); } } }
/// <summary>Sends a SASL negotiation message.</summary> /// <param name="out">stream to receive message</param> /// <param name="status">negotiation status</param> /// <param name="payload">to send</param> /// <param name="message">to send</param> /// <exception cref="System.IO.IOException">for any error</exception> public static void SendSaslMessage(OutputStream @out, DataTransferProtos.DataTransferEncryptorMessageProto.DataTransferEncryptorStatus status, byte[] payload, string message) { DataTransferProtos.DataTransferEncryptorMessageProto.Builder builder = DataTransferProtos.DataTransferEncryptorMessageProto .NewBuilder(); builder.SetStatus(status); if (payload != null) { builder.SetPayload(ByteString.CopyFrom(payload)); } if (message != null) { builder.SetMessage(message); } DataTransferProtos.DataTransferEncryptorMessageProto proto = ((DataTransferProtos.DataTransferEncryptorMessageProto )builder.Build()); proto.WriteDelimitedTo(@out); @out.Flush(); }
/// <summary>Send a SASL negotiation message and negotiation cipher options to server. /// </summary> /// <param name="out">stream to receive message</param> /// <param name="payload">to send</param> /// <param name="options">cipher options to negotiate</param> /// <exception cref="System.IO.IOException">for any error</exception> public static void SendSaslMessageAndNegotiationCipherOptions(OutputStream @out, byte[] payload, IList <CipherOption> options) { DataTransferProtos.DataTransferEncryptorMessageProto.Builder builder = DataTransferProtos.DataTransferEncryptorMessageProto .NewBuilder(); builder.SetStatus(DataTransferProtos.DataTransferEncryptorMessageProto.DataTransferEncryptorStatus .Success); if (payload != null) { builder.SetPayload(ByteString.CopyFrom(payload)); } if (options != null) { builder.AddAllCipherOption(PBHelper.ConvertCipherOptions(options)); } DataTransferProtos.DataTransferEncryptorMessageProto proto = ((DataTransferProtos.DataTransferEncryptorMessageProto )builder.Build()); proto.WriteDelimitedTo(@out); @out.Flush(); }
/// <summary>Reads a SASL negotiation message.</summary> /// <param name="in">stream to read</param> /// <returns>bytes of SASL negotiation messsage</returns> /// <exception cref="System.IO.IOException">for any error</exception> public static byte[] ReadSaslMessage(InputStream @in) { DataTransferProtos.DataTransferEncryptorMessageProto proto = DataTransferProtos.DataTransferEncryptorMessageProto .ParseFrom(PBHelper.VintPrefixed(@in)); if (proto.GetStatus() == DataTransferProtos.DataTransferEncryptorMessageProto.DataTransferEncryptorStatus .ErrorUnknownKey) { throw new InvalidEncryptionKeyException(proto.GetMessage()); } else { if (proto.GetStatus() == DataTransferProtos.DataTransferEncryptorMessageProto.DataTransferEncryptorStatus .Error) { throw new IOException(proto.GetMessage()); } else { return(proto.GetPayload().ToByteArray()); } } }