/// <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();
 }