using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Renci.SshNet.Security;
using Renci.SshNet.Messages.Connection;
using Renci.SshNet.Common;
using Renci.SshNet.Messages.Authentication;
using Renci.SshNet.Security.Cryptography;
using Renci.SshNet.Security.Cryptography.Ciphers.Modes;
using Renci.SshNet.Security.Cryptography.Ciphers;
namespace Renci.SshNet
{
    /// 
    /// Represents remote connection information class.
    /// 
    /// 
    /// This class is NOT thread-safe. Do not use the same  with multiple
    /// client instances.
    /// 
    public class ConnectionInfo : IConnectionInfo
    {
        internal static int DEFAULT_PORT = 22;
        /// 
        /// Gets supported key exchange algorithms for this connection.
        /// 
        public IDictionary KeyExchangeAlgorithms { get; private set; }
        /// 
        /// Gets supported encryptions for this connection.
        /// 
        public IDictionary Encryptions { get; private set; }
        /// 
        /// Gets supported hash algorithms for this connection.
        /// 
        public IDictionary HmacAlgorithms { get; private set; }
        /// 
        /// Gets supported host key algorithms for this connection.
        /// 
        public IDictionary> HostKeyAlgorithms { get; private set; }
        /// 
        /// Gets supported authentication methods for this connection.
        /// 
        public IEnumerable AuthenticationMethods { get; private set; }
        /// 
        /// Gets supported compression algorithms for this connection.
        /// 
        public IDictionary CompressionAlgorithms { get; private set; }
        /// 
        /// Gets the supported channel requests for this connection.
        /// 
        /// 
        /// The supported channel requests for this connection.
        /// 
        public IDictionary ChannelRequests { get; private set; }
        /// 
        /// Gets a value indicating whether connection is authenticated.
        /// 
        /// 
        /// true if connection is authenticated; otherwise, false.
        /// 
        public bool IsAuthenticated { get; private set; }
        /// 
        /// Gets connection host.
        /// 
        public string Host { get; private set; }
        /// 
        /// Gets connection port.
        /// 
        /// 
        /// The connection port. The default value is 22.
        /// 
        public int Port { get; private set; }
        /// 
        /// Gets connection username.
        /// 
        public string Username { get; private set; }
        /// 
        /// Gets proxy type.
        /// 
        /// 
        /// The type of the proxy.
        /// 
        public ProxyTypes ProxyType { get; private set; }
        /// 
        /// Gets proxy connection host.
        /// 
        public string ProxyHost { get; private set; }
        /// 
        /// Gets proxy connection port.
        /// 
        public int ProxyPort { get; private set; }
        /// 
        /// Gets proxy connection username.
        /// 
        public string ProxyUsername { get; private set; }
        /// 
        /// Gets proxy connection password.
        /// 
        public string ProxyPassword { get; private set; }
        /// 
        /// Gets or sets connection timeout.
        /// 
        /// 
        /// The connection timeout. The default value is 30 seconds.
        /// 
        /// 
        ///