in protocols/imap/src/main/java/org/apache/james/imap/decode/ImapRequestLineReader.java [783:830]
private long readDigits(int add, long total, boolean first, boolean stopOnParen
) throws DecodingException {
final char next;
if (first) {
next = nextWordChar();
} else {
consume();
next = nextChar();
}
final long currentTotal = (10 * total) + add;
switch (next) {
case '0':
return readDigits(0, currentTotal, false, stopOnParen);
case '1':
return readDigits(1, currentTotal, false, stopOnParen);
case '2':
return readDigits(2, currentTotal, false, stopOnParen);
case '3':
return readDigits(3, currentTotal, false, stopOnParen);
case '4':
return readDigits(4, currentTotal, false, stopOnParen);
case '5':
return readDigits(5, currentTotal, false, stopOnParen);
case '6':
return readDigits(6, currentTotal, false, stopOnParen);
case '7':
return readDigits(7, currentTotal, false, stopOnParen);
case '8':
return readDigits(8, currentTotal, false, stopOnParen);
case '9':
return readDigits(9, currentTotal, false, stopOnParen);
case '.':
case ' ':
case '>':
case '\r':
case '\n':
case '\t':
return currentTotal;
case ')':
if (stopOnParen) {
return currentTotal;
} else {
throw new DecodingException(HumanReadableText.ILLEGAL_ARGUMENTS, "Expected a digit but was " + next);
}
default:
throw new DecodingException(HumanReadableText.ILLEGAL_ARGUMENTS, "Expected a digit but was " + next);
}
}