private int parseIPvFuture()

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