in ldap/model/src/main/java/org/apache/directory/api/ldap/model/url/LdapUrl.java [717:805]
private int parseIPvFuture( char[] chars, int pos )
{
// We should have at least one hex digit
boolean hexFound = false;
if ( pos >= chars.length )
{
return INVALID;
}
while ( Chars.isHex( chars, pos ) && ( pos < chars.length ) )
{
hexFound = true;
pos++;
}
if ( !hexFound )
{
return INVALID;
}
// a dot is expected
if ( pos >= chars.length )
{
return INVALID;
}
if ( !Chars.isCharASCII( chars, pos, '.' ) )
{
return INVALID;
}
// Now, we should have at least one char in unreserved / sub-delims / ":"
boolean valueFound = false;
if ( pos >= chars.length )
{
return INVALID;
}
while ( !Chars.isCharASCII( chars, pos, ']' ) && ( pos < chars.length ) )
{
switch ( chars[pos] )
{
// Unserserved
// ALPHA
case 'a' : case 'b' : case 'c' : case 'd' : case 'e' :
case 'A' : case 'B' : case 'C' : case 'D' : case 'E' :
case 'f' : case 'g' : case 'h' : case 'i' : case 'j' :
case 'F' : case 'G' : case 'H' : case 'I' : case 'J' :
case 'k' : case 'l' : case 'm' : case 'n' : case 'o' :
case 'K' : case 'L' : case 'M' : case 'N' : case 'O' :
case 'p' : case 'q' : case 'r' : case 's' : case 't' :
case 'P' : case 'Q' : case 'R' : case 'S' : case 'T' :
case 'u' : case 'v' : case 'w' : case 'x' : case 'y' :
case 'U' : case 'V' : case 'W' : case 'X' : case 'Y' :
case 'z' : case 'Z' :
// DIGITs
case '0' : case '1' : case '2' : case '3' : case '4' :
case '5' : case '6' : case '7' : case '8' : case '9' :
// others
case '-' : case '.' : case '_' : case '~' :
// sub-delims
case '!' : case '$' : case '&' : case '\'' :
case '(' : case ')' : case '*' : case '+' : case ',' :
case ';' : case '=' :
// Special case for ':'
case ':':
pos++;
valueFound = true;
break;
default:
// Wrong char
return INVALID;
}
}
if ( !valueFound )
{
return INVALID;
}
return pos;
}