void ParseConnectionString()

in src/Microsoft.Azure.Relay/RelayConnectionStringBuilder.cs [266:334]


        void ParseConnectionString(string connectionString)
        {
            // First split into strings based on ';'
            string[] keyValuePairs = connectionString.Split(new[] { KeyValuePairDelimiter }, StringSplitOptions.RemoveEmptyEntries);
            foreach (var keyValuePair in keyValuePairs)
            {
                // Now split based on the *first* '='
                string[] keyAndValue = keyValuePair.Split(new[] { KeyValueSeparator }, 2);
                string key = keyAndValue[0];
                if (keyAndValue.Length != 2)
                {
                    throw RelayEventSource.Log.Argument(
                        nameof(connectionString), SR.GetString(SR.ConnectionStringParameterValueMissing, key), TraceSource);
                }

                string value = keyAndValue[1];
                if (key.Equals(AuthenticationConfigName, StringComparison.OrdinalIgnoreCase))
                {
                    value = value.Replace(" ", string.Empty);
                    if (int.TryParse(value, out _) || !Enum.TryParse(value, true, out this.authType))
                    {
                        this.authType = AuthenticationType.Other;
                    }
                }
                else if (key.Equals(EndpointConfigName, StringComparison.OrdinalIgnoreCase))
                {
                    Uri endpoint;
                    if (!Uri.TryCreate(value, UriKind.Absolute, out endpoint))
                    {
                        throw RelayEventSource.Log.Argument(
                            nameof(connectionString), SR.GetString(SR.NotValidAbsoluteUri, EndpointConfigName), TraceSource);
                    }

                    this.Endpoint = endpoint;
                }
                else if (key.Equals(EntityPathConfigName, StringComparison.OrdinalIgnoreCase))
                {
                    this.EntityPath = value;
                }
                else if (key.Equals(SharedAccessKeyNameConfigName, StringComparison.OrdinalIgnoreCase))
                {
                    this.SharedAccessKeyName = value;
                }
                else if (key.Equals(SharedAccessKeyConfigName, StringComparison.OrdinalIgnoreCase))
                {
                    this.SharedAccessKey = value;
                }
                else if (key.Equals(SharedAccessSignatureConfigName, StringComparison.OrdinalIgnoreCase))
                {
                    this.SharedAccessSignature = value;
                }
                else if (key.Equals(OperationTimeoutConfigName, StringComparison.OrdinalIgnoreCase))
                {
                    TimeSpan timeValue;
                    if (!TimeSpan.TryParse(value, CultureInfo.InvariantCulture, out timeValue))
                    {
                        throw RelayEventSource.Log.Argument(
                            nameof(connectionString), SR.GetString(SR.NotValidTimeSpan, OperationTimeoutConfigName), TraceSource);
                    }

                    this.OperationTimeout = timeValue;
                }
                else
                {
                    throw RelayEventSource.Log.Argument(
                        nameof(connectionString), SR.GetString(SR.ConnectionStringUnknownParameter, key), TraceSource);
                }
            }
        }