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