in client/src/main/java/org/apache/qpid/url/URLHelper.java [37:136]
public static void parseOptions(Map<String, String> optionMap, String options) throws URLSyntaxException
{
if ((options == null) || (options.indexOf('=') == -1))
{
return;
}
int optionIndex = options.indexOf('=');
String option = options.substring(0, optionIndex);
int length = options.length();
int nestedQuotes = 0;
// to store index of final "'"
int valueIndex = optionIndex;
// Walk remainder of url.
while ((nestedQuotes > 0) || (valueIndex < length))
{
valueIndex++;
if (valueIndex >= length)
{
break;
}
if (options.charAt(valueIndex) == '\'')
{
if ((valueIndex + 1) < options.length())
{
if ((options.charAt(valueIndex + 1) == DEFAULT_OPTION_SEPERATOR)
|| (options.charAt(valueIndex + 1) == ALTERNATIVE_OPTION_SEPARATOR)
|| (options.charAt(valueIndex + 1) == BROKER_SEPARATOR)
|| (options.charAt(valueIndex + 1) == '\''))
{
nestedQuotes--;
if (nestedQuotes == 0)
{
// We've found the value of an option
break;
}
}
else
{
nestedQuotes++;
}
}
else
{
// We are at the end of the string
// Check to see if we are corectly closing quotes
if (options.charAt(valueIndex) == '\'')
{
nestedQuotes--;
}
break;
}
}
}
if ((nestedQuotes != 0) || (valueIndex < (optionIndex + 2)))
{
int sepIndex = 0;
// Try and identify illegal separator character
if (nestedQuotes > 1)
{
for (int i = 0; i < nestedQuotes; i++)
{
sepIndex = options.indexOf('\'', sepIndex);
sepIndex++;
}
}
if ((sepIndex >= options.length()) || (sepIndex == 0))
{
throw parseError(valueIndex, "Unterminated option", options);
}
else
{
throw parseError(sepIndex, "Unterminated option. Possible illegal option separator:'"
+ options.charAt(sepIndex) + "'", options);
}
}
// optionIndex +2 to skip "='"
String value = options.substring(optionIndex + 2, valueIndex);
optionMap.put(option, value);
if (valueIndex < (options.length() - 1))
{
// Recurse to get remaining options
parseOptions(optionMap, options.substring(valueIndex + 2));
}
}