in sdk/core/azure-core-http/src/main/java/com/azure/android/core/http/util/UrlTokenizer.java [63:163]
boolean next() {
if (!hasCurrentCharacter()) {
currentToken = null;
} else {
switch (state) {
case SCHEME:
final String scheme = readUntilNotLetterOrDigit();
currentToken = UrlToken.scheme(scheme);
if (!hasCurrentCharacter()) {
state = UrlTokenizerState.DONE;
} else {
state = UrlTokenizerState.HOST;
}
break;
case SCHEME_OR_HOST:
final String schemeOrHost = readUntilCharacter(':', '/', '?');
if (!hasCurrentCharacter()) {
currentToken = UrlToken.host(schemeOrHost);
state = UrlTokenizerState.DONE;
} else if (currentCharacter() == ':') {
if (peekCharacters(3).equals("://")) {
currentToken = UrlToken.scheme(schemeOrHost);
state = UrlTokenizerState.HOST;
} else {
currentToken = UrlToken.host(schemeOrHost);
state = UrlTokenizerState.PORT;
}
} else if (currentCharacter() == '/') {
currentToken = UrlToken.host(schemeOrHost);
state = UrlTokenizerState.PATH;
} else if (currentCharacter() == '?') {
currentToken = UrlToken.host(schemeOrHost);
state = UrlTokenizerState.QUERY;
}
break;
case HOST:
if (peekCharacters(3).equals("://")) {
nextCharacter(3);
}
final String host = readUntilCharacter(':', '/', '?');
currentToken = UrlToken.host(host);
if (!hasCurrentCharacter()) {
state = UrlTokenizerState.DONE;
} else if (currentCharacter() == ':') {
state = UrlTokenizerState.PORT;
} else if (currentCharacter() == '/') {
state = UrlTokenizerState.PATH;
} else {
state = UrlTokenizerState.QUERY;
}
break;
case PORT:
if (currentCharacter() == ':') {
nextCharacter();
}
final String port = readUntilCharacter('/', '?');
currentToken = UrlToken.port(port);
if (!hasCurrentCharacter()) {
state = UrlTokenizerState.DONE;
} else if (currentCharacter() == '/') {
state = UrlTokenizerState.PATH;
} else {
state = UrlTokenizerState.QUERY;
}
break;
case PATH:
final String path = readUntilCharacter('?');
currentToken = UrlToken.path(path);
if (!hasCurrentCharacter()) {
state = UrlTokenizerState.DONE;
} else {
state = UrlTokenizerState.QUERY;
}
break;
case QUERY:
if (currentCharacter() == '?') {
nextCharacter();
}
final String query = readRemaining();
currentToken = UrlToken.query(query);
state = UrlTokenizerState.DONE;
break;
default:
break;
}
}
return currentToken != null;
}