// // Copyright (c) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. // using Microsoft.SqlTools.Utility; namespace Microsoft.SqlTools.ServiceLayer.Connection.Contracts { /// /// Message format for the initial connection request /// /// /// If this contract is ever changed, be sure to update ConnectionDetailsExtensions methods. /// public class ConnectionDetails : GeneralRequestDetails, IConnectionSummary { public ConnectionDetails() : base() { } /// /// Gets or sets the connection password /// public string Password { get { return GetOptionValue("password"); } set { SetOptionValue("password", value); } } /// /// Gets or sets the connection server name /// public string ServerName { get { return GetOptionValue("server"); } set { SetOptionValue("server", value); } } /// /// Gets or sets the connection database name /// public string DatabaseName { get { return GetOptionValue("database"); } set { SetOptionValue("database", value); } } /// /// Gets or sets the connection user name /// public string UserName { get { return GetOptionValue("user"); } set { SetOptionValue("user", value); } } /// /// Gets or sets the authentication to use. /// public string AuthenticationType { get { return GetOptionValue("authenticationType"); } set { SetOptionValue("authenticationType", value); } } /// /// Gets or sets a value that specifies that Always Encrypted functionality is enabled in a connection. /// public string ColumnEncryptionSetting { get { return GetOptionValue("columnEncryptionSetting"); } set { SetOptionValue("columnEncryptionSetting", value); } } /// /// Gets or sets a value for Attestation Protocol. /// public string EnclaveAttestationProtocol { get { return GetOptionValue("attestationProtocol"); } set { SetOptionValue("attestationProtocol", value); } } /// /// Gets or sets the enclave attestation Url to be used with enclave based Always Encrypted. /// public string EnclaveAttestationUrl { get { return GetOptionValue("enclaveAttestationUrl"); } set { SetOptionValue("enclaveAttestationUrl", value); } } /// /// Gets or sets a value that indicates encryption mode that SQL Server should use to perform SSL encryption for all the data sent between the client and server. Supported values are: Optional, Mandatory, Strict, True, False, Yes and No. /// Boolean 'true' and 'false' will also continue to be supported for backwards compatibility. /// public string Encrypt { get { string value = GetOptionValue("encrypt"); if(string.IsNullOrEmpty(value)) { // Accept boolean values for backwards compatibility. value = GetOptionValue("encrypt").ToString(); } return value; } set { SetOptionValue("encrypt", value); } } /// /// Gets or sets a value that indicates whether the channel will be encrypted while bypassing walking the certificate chain to validate trust. /// public bool? TrustServerCertificate { get { return GetOptionValue("trustServerCertificate"); } set { SetOptionValue("trustServerCertificate", value); } } /// /// Gets or sets a value that indicates the host name in the certificate to be used for certificate validation when encryption is enabled. /// public string HostNameInCertificate { get { return GetOptionValue("hostNameInCertificate"); } set { SetOptionValue("hostNameInCertificate", value); } } /// /// Gets or sets a Boolean value that indicates if security-sensitive information, such as the password, is not returned as part of the connection if the connection is open or has ever been in an open state. /// public bool? PersistSecurityInfo { get { return GetOptionValue("persistSecurityInfo"); } set { SetOptionValue("persistSecurityInfo", value); } } /// /// Gets or sets the length of time (in seconds) to wait for a connection to the server before terminating the attempt and generating an error. /// public int? ConnectTimeout { get { return GetOptionValue("connectTimeout"); } set { SetOptionValue("connectTimeout", value); } } /// /// The number of reconnections attempted after identifying that there was an idle connection failure. /// public int? ConnectRetryCount { get { return GetOptionValue("connectRetryCount"); } set { SetOptionValue("connectRetryCount", value); } } /// /// Amount of time (in seconds) between each reconnection attempt after identifying that there was an idle connection failure. /// public int? ConnectRetryInterval { get { return GetOptionValue("connectRetryInterval"); } set { SetOptionValue("connectRetryInterval", value); } } /// /// Gets or sets the name of the application associated with the connection string. /// public string ApplicationName { get { return GetOptionValue("applicationName"); } set { SetOptionValue("applicationName", value); } } /// /// Gets or sets the name of the workstation connecting to SQL Server. /// public string WorkstationId { get { return GetOptionValue("workstationId"); } set { SetOptionValue("workstationId", value); } } /// /// Declares the application workload type when connecting to a database in an SQL Server Availability Group. /// public string ApplicationIntent { get { return GetOptionValue("applicationIntent"); } set { SetOptionValue("applicationIntent", value); } } /// /// Gets or sets the SQL Server Language record name. /// public string CurrentLanguage { get { return GetOptionValue("currentLanguage"); } set { SetOptionValue("currentLanguage", value); } } /// /// Gets or sets a Boolean value that indicates whether the connection will be pooled or explicitly opened every time that the connection is requested. /// public bool? Pooling { get { return GetOptionValue("pooling"); } set { SetOptionValue("pooling", value); } } /// /// Gets or sets the maximum number of connections allowed in the connection pool for this specific connection string. /// public int? MaxPoolSize { get { return GetOptionValue("maxPoolSize"); } set { SetOptionValue("maxPoolSize", value); } } /// /// Gets or sets the minimum number of connections allowed in the connection pool for this specific connection string. /// public int? MinPoolSize { get { return GetOptionValue("minPoolSize"); } set { SetOptionValue("minPoolSize", value); } } /// /// Gets or sets the minimum time, in seconds, for the connection to live in the connection pool before being destroyed. /// public int? LoadBalanceTimeout { get { return GetOptionValue("loadBalanceTimeout"); } set { SetOptionValue("loadBalanceTimeout", value); } } /// /// Gets or sets a Boolean value that indicates whether replication is supported using the connection. /// public bool? Replication { get { return GetOptionValue("replication"); } set { SetOptionValue("replication", value); } } /// /// Gets or sets a string that contains the name of the primary data file. This includes the full path name of an attachable database. /// public string AttachDbFilename { get { return GetOptionValue("attachDbFilename"); } set { SetOptionValue("attachDbFilename", value); } } /// /// Gets or sets the name or address of the partner server to connect to if the primary server is down. /// public string FailoverPartner { get { return GetOptionValue("failoverPartner"); } set { SetOptionValue("failoverPartner", value); } } /// /// If your application is connecting to an AlwaysOn availability group (AG) on different subnets, setting MultiSubnetFailover=true provides faster detection of and connection to the (currently) active server. /// public bool? MultiSubnetFailover { get { return GetOptionValue("multiSubnetFailover"); } set { SetOptionValue("multiSubnetFailover", value); } } /// /// When true, an application can maintain multiple active result sets (MARS). /// public bool? MultipleActiveResultSets { get { return GetOptionValue("multipleActiveResultSets"); } set { SetOptionValue("multipleActiveResultSets", value); } } /// /// Gets or sets the size in bytes of the network packets used to communicate with an instance of SQL Server. /// public int? PacketSize { get { return GetOptionValue("packetSize"); } set { SetOptionValue("packetSize", value); } } /// /// Gets or sets the port to use for the TCP/IP connection /// public int? Port { get { return GetOptionValue("port"); } set { SetOptionValue("port", value); } } /// /// Gets or sets a string value that indicates the type system the application expects. /// public string TypeSystemVersion { get { return GetOptionValue("typeSystemVersion"); } set { SetOptionValue("typeSystemVersion", value); } } /// /// Gets or sets a string value to be used as the connection string. If given, all other options will be ignored. /// public string ConnectionString { get { return GetOptionValue("connectionString"); } set { SetOptionValue("connectionString", value); } } /// /// Gets or sets the group ID /// public string GroupId { get { return GetOptionValue("groupId"); } set { SetOptionValue("groupId", value); } } /// /// Gets or sets the database display name /// public string DatabaseDisplayName { get { return GetOptionValue("databaseDisplayName"); } set { SetOptionValue("databaseDisplayName", value); } } public string AzureAccountToken { get { return GetOptionValue("azureAccountToken"); } set { SetOptionValue("azureAccountToken", value); } } public int? ExpiresOn { get { return GetOptionValue("expiresOn"); } set { SetOptionValue("expiresOn", value); } } public bool IsComparableTo(ConnectionDetails other) { if (other == null) { return false; } if (ServerName != other.ServerName || AuthenticationType != other.AuthenticationType || UserName != other.UserName || AzureAccountToken != other.AzureAccountToken) { return false; } // For database name, only compare if neither is empty. This is important // Since it allows for handling of connections to the default database, but is // not a 100% accurate heuristic. if (!string.IsNullOrEmpty(DatabaseName) && !string.IsNullOrEmpty(other.DatabaseName) && DatabaseName != other.DatabaseName) { return false; } return true; } } }