Example usage for org.apache.commons.lang3 ArrayUtils indexOf

List of usage examples for org.apache.commons.lang3 ArrayUtils indexOf

Introduction

In this page you can find the example usage for org.apache.commons.lang3 ArrayUtils indexOf.

Prototype

public static int indexOf(final boolean[] array, final boolean valueToFind, int startIndex) 

Source Link

Document

Finds the index of the given value in the array starting at the given index.

This method returns #INDEX_NOT_FOUND ( -1 ) for a null input array.

A negative startIndex is treated as zero.

Usage

From source file:edu.fullerton.jspWebUtils.PageItem.java

public void addEvent(String evt, String call) throws WebUtilException {
    int idx = ArrayUtils.indexOf(events, evt, 0);
    if (idx == ArrayUtils.INDEX_NOT_FOUND) {
        throw new WebUtilException("Unknown event.(" + evt + ")");
    } else {//  w  ww. j a va 2  s.c  om
        if (event == null) {
            event = new TreeMap<String, String>();
        }
        if (event.containsKey(evt)) {
            throw new WebUtilException("Event: " + evt + " already assigned");
        }

        event.put(evt, call);
    }
}

From source file:net.fenyo.mail4hotspot.dns.DnsListener.java

private byte[] handle(final byte query[], final Inet4Address address) throws GeneralException {
    boolean txt = false;
    boolean txtwithb64 = false;
    byte retvalues[] = null;
    if (query.length <= DNSFORMAT_DATAOFFSET)
        throw new GeneralException("datagram too short");
    if ((query[DNSFORMAT_QDCOUNT_MSB] << 8) + query[DNSFORMAT_QDCOUNT_LSB] != 1)
        throw new GeneralException("invalid query count");
    if ((query[DNSFORMAT_FLAGS_MSB] & 2) != 0)
        throw new GeneralException("truncated");

    final VersionAndDomain vad = getVersionAndDomain(query);
    final String query_string = vad.domain;
    final String version_string = vad.version;
    //      log.debug("version string: " + version_string);
    //      log.debug("query string: " + query_string);
    //      log.debug("label[0]: " + getLabel(query_string, 0));

    final String label0 = getLabel(query_string, 0);

    if (label0.toLowerCase().equals("id-00000000")) {
        final String label1 = getLabel(query_string, 1);
        if (label1 != null && label1.toLowerCase().matches("^cn-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$")) {
            int cnt = new Integer(label1.substring(3));
            if (cnt > 192)
                throw new GeneralException("ping request too long");
            retvalues = new byte[cnt];
            for (int i = 0; i < cnt; i++)
                retvalues[i] = (byte) i;

        } else//from  w w  w .ja va  2  s.  c o m
            retvalues = new byte[] { 'E', 1 }; // 'E'rror 1

    } else if (label0.toLowerCase().equals("id-00000001")) {
        final String label1 = getLabel(query_string, 1);
        if (label1 != null && label1.toLowerCase().matches("^rn-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$")) {
            final String label2 = getLabel(query_string, 2);
            if (label2 != null
                    && label2.toLowerCase().matches("^sz-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$")) {

                int size = new Integer(label2.substring(3));
                final int msg_id = MsgFactory.createMsg(size);
                retvalues = new byte[] { (byte) ((msg_id & 0x00ff0000) >> 16),
                        (byte) ((msg_id & 0x0000ff00) >> 8), (byte) (msg_id & 0x000000ff) };

            } else
                retvalues = new byte[] { 'E', 2 }; // 'E'rror 2

        } else
            retvalues = new byte[] { 'E', 3 }; // 'E'rror 3

    } else if (label0.toLowerCase().matches("^id-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$")) {
        final int msg_id = new Integer(label0.substring(3));
        final String label1 = getLabel(query_string, 1);

        //         requte max : 131 car : retry-001.rn-75706993.bf-00696e697469616c69c2a7436f6e6e656374536f636b6574c2a733313330.wr-00000000.id-00731058.v2.tun.vpnoverdns.com
        //         longueur max d'un nom de domaine : 250 (certains softs vont plus loin mais pas tous - cf gethostname)
        //         2 car par octet de donnes
        //         chaque bf cot 64 car (en incluant .bf-)
        //         donc on met plusieurs bf
        //         (250-131)/64 = 1,86
        //         on peut en mettre 1,8 de plus
        //         a veut dire 3 bf au total mais pas 3 pleins :
        //         3 bf  concurrence de 250 car
        //         0 bf : 67 car
        //         250 = 131-64 + 2*64 + 55
        //         55 impair => remplac par 54
        //         Donc deux de 64 (2x30 octets) et 1 de 54 (25 octets)
        //         donc 85 octets au lieu de 30
        //         donc 2,8 fois plus rapide
        if (label1 != null && label1.toLowerCase().matches("^wr-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$")) {

            final int pos = new Integer(label1.substring(3));

            final String label2 = getLabel(query_string, 2);
            if (label2 != null && label2.toLowerCase().matches("^bf-([0-9a-f][0-9a-f])+$")) {
                final String content = label2.substring(3);
                if (MsgFactory.msgExists(msg_id) == false) {
                    retvalues = new byte[] { 'E', 8 }; // 'E'rror 8;
                    // log.info("Error 8-1: msg_id=" + msg_id);
                } else
                    retvalues = MsgFactory.getMsg(msg_id).write(pos, content, advancedServices, address);
            } else
                retvalues = new byte[] { 'E', 4 }; // 'E'rror 4

            if (retvalues != null) {
                final String label3 = getLabel(query_string, 3);
                if (label3 != null && label3.toLowerCase().matches("^bf-([0-9a-f][0-9a-f])+$")) {
                    final String content = label3.substring(3);
                    if (MsgFactory.msgExists(msg_id) == false) {
                        retvalues = new byte[] { 'E', 8 }; // 'E'rror 8;
                        // log.info("Error 8-2: msg_id=" + msg_id);
                    } else
                        retvalues = MsgFactory.getMsg(msg_id).write(pos + 30, content, advancedServices,
                                address);
                }
            }

            if (retvalues != null) {
                final String label4 = getLabel(query_string, 4);
                if (label4 != null && label4.toLowerCase().matches("^bf-([0-9a-f][0-9a-f])+$")) {
                    final String content = label4.substring(3);
                    if (MsgFactory.msgExists(msg_id) == false) {
                        retvalues = new byte[] { 'E', 8 }; // 'E'rror 8;
                        // log.info("Error 8-3: msg_id=" + msg_id);
                    } else
                        retvalues = MsgFactory.getMsg(msg_id).write(pos + 60, content, advancedServices,
                                address);
                }
            }

        } else if (label1 != null
                && label1.toLowerCase().matches("^ck-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$")) {
            if (MsgFactory.msgExists(msg_id) == false)
                retvalues = new byte[] { 'E', 9 }; // 'E'rror 9;
            else {
                final Msg msg = MsgFactory.getMsg(msg_id);
                if (msg.isProcessed() == false) {
                    // message pas encore trait, on demande au client de refaire un ck (check)
                    //                  log.debug(msg.debugContent() + " - " + version_string + "." + query_string);
                    retvalues = new byte[] { 'E', 10 }; // 'E'rror 10
                } else {
                    final byte len0 = (byte) (msg.outputLength() >> 16);
                    final byte len1 = (byte) ((msg.outputLength() >> 8) & 255);
                    final byte len2 = (byte) (msg.outputLength() & 255);
                    retvalues = new byte[] { 'L', len0, len1, len2 }; // 'L'ength fournie en rponse
                }
            }

        } else if (label1 != null
                && label1.toLowerCase().matches("^r[dxy]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$")) {
            if (label1.toLowerCase().startsWith("rx") || label1.toLowerCase().startsWith("ry"))
                txt = true;
            if (label1.toLowerCase().startsWith("ry"))
                txtwithb64 = true;

            final String label2 = getLabel(query_string, 2);
            final int pos = new Integer(label1.substring(3));

            if (label2 != null && label2.toLowerCase().matches("^ln-[0-9][0-9][0-9]$")) {
                final int size = new Integer(label2.substring(3));
                if (MsgFactory.msgExists(msg_id) == false)
                    retvalues = new byte[] { 'E', 11 }; // 'E'rror 11
                else {
                    final Msg msg = MsgFactory.getMsg(msg_id);
                    if (msg.isProcessed() == false)
                        retvalues = new byte[] { 'E', 12 }; // 'E'rror 12
                    // bug dans le protocole v0 corrig dans les versions suivantes : si on lit 2 octets de la partie compresse (typiquement les 2 derniers du buffer compress) et que le premier des deux est E, on signale une erreur involontairement
                    else {
                        if (version_string.toLowerCase().equals("v0")
                                || version_string.toLowerCase().equals("v1"))
                            retvalues = msg.read(pos, size);
                        else {
                            byte[] content = msg.read(pos, size);
                            if (txtwithb64) {
                                // avec Java8
                                // content = Base64.getEncoder().encode(content);
                                // avec apache commons-codec
                                content = org.apache.commons.codec.binary.Base64.encodeBase64(content);

                                retvalues = new byte[content.length + 1];
                                // put a '0' (48) instead of 0 if base64 encoding, since base64 encoding means non-char bytes (like 0) are not handled
                                retvalues[0] = '0';
                                for (int i = 0; i < content.length; i++)
                                    retvalues[i + 1] = content[i];
                            } else {
                                retvalues = new byte[size + 1];
                                // add a 0 to the beginning of the returned byte array to be sure it can not start with 'E', so it can be distinguished from any error message on the client side
                                retvalues[0] = 0;
                                for (int i = 0; i < size; i++)
                                    retvalues[i + 1] = content[i];
                            }
                        }
                    }
                    // pour tester l'erreur involontaire, dcommenter :
                    // retvalues = new byte [] { 'E', 12 };
                    // Ca cre une erreur dans perl  la ligne 'die "  remote error for $names[$i]: try $tries[$i]: ".chr($msgbytes[0]).$msgbytes[1]."\n"'
                }
            } else
                retvalues = new byte[] { 'E', 13 }; // 'E'rror 13

        } else if (label1 != null && label1.toLowerCase().matches("^ac$")) {

            if (MsgFactory.msgExists(msg_id) == false)
                retvalues = new byte[] { 'E', 14 }; // 'E'rror 14
            else {
                MsgFactory.removeMsg(msg_id);
                retvalues = new byte[] { 'E', 0 }; // 'E'rror 0 == OK
            }

        } else
            retvalues = new byte[] { 'E', 5 }; // 'E'rror 5

    } else
        retvalues = new byte[] { 'E', 6 }; // 'E'rror 6

    if (retvalues == null)
        retvalues = new byte[] { 'E', 7 }; // 'E'rror 7

    if (txt) {
        final int ntxtstrings = 1 + (retvalues.length - 1) / 255;

        final int rr_length = 2
                /* pointeur sur le nom de domaine de la query */ + 10 /* TYPE + CLASS + TTL + RDLENGTH */
                + ntxtstrings + retvalues.length;
        final int answer_length = ArrayUtils.indexOf(query, (byte) 0, DNSFORMAT_DATAOFFSET)
                /* nom de domaine de la query */ + 1 /* '\0' */ + 2 /* QTYPE */ + 2 /* QCLASS */ + rr_length;

        byte answer[] = new byte[answer_length];
        answer[DNSFORMAT_ID_MSB] = query[DNSFORMAT_ID_MSB];
        answer[DNSFORMAT_ID_LSB] = query[DNSFORMAT_ID_LSB];
        answer[DNSFORMAT_FLAGS_LSB] = 0;
        answer[DNSFORMAT_FLAGS_MSB] = (byte) (((byte) (query[DNSFORMAT_FLAGS_MSB] | 128 /* QR: response */
                | 4 /* AA */)) & (byte) ~2 /* TC */);
        answer[DNSFORMAT_QDCOUNT_MSB] = 0;
        answer[DNSFORMAT_QDCOUNT_LSB] = 1;
        answer[DNSFORMAT_ANCOUNT_MSB] = 0;
        answer[DNSFORMAT_ANCOUNT_LSB] = 1;
        answer[DNSFORMAT_NSCOUNT_MSB] = 0;
        answer[DNSFORMAT_NSCOUNT_LSB] = 0;
        answer[DNSFORMAT_ARCOUNT_MSB] = 0;
        answer[DNSFORMAT_ARCOUNT_LSB] = 0;

        for (int i = DNSFORMAT_DATAOFFSET; i < DNSFORMAT_DATAOFFSET + 1 /* octet de longueur du premier label */
                + version_string.length() + 1 /* '.' */ + query_string.length() + 1 /* '.' */
                + DNSDOMAIN.length() + 1 /* '\0' */ + 4 /* TYPE + CLASS */; i++)
            answer[i] = query[i];

        int current_offset = DNSFORMAT_DATAOFFSET + 1 /* octet de longueur du premier label */
                + version_string.length() + 1 /* '.' */ + query_string.length() + 1 /* '.' */
                + DNSDOMAIN.length() + 1 /* '\0' */ + 4 /* QTYPE + QCLASS */;

        answer[current_offset++] = (DNSFORMAT_DATAOFFSET >> 8) + (byte) 0xc0;
        answer[current_offset++] = DNSFORMAT_DATAOFFSET & 0xff;

        answer[current_offset++] = 0x00;
        answer[current_offset++] = 0x10 /* TYPE */;

        answer[current_offset++] = 0x00;
        answer[current_offset++] = 0x01 /* CLASS */;

        answer[current_offset++] = 0x00;
        answer[current_offset++] = 0x00;
        answer[current_offset++] = 0x00;
        answer[current_offset++] = 0x00 /* TTL */;

        answer[current_offset++] = (byte) ((ntxtstrings + retvalues.length) >> 8);
        answer[current_offset++] = (byte) ((ntxtstrings + retvalues.length) & 0xff);

        for (int i = 0; i < retvalues.length; i++) {
            if ((i % 255) == 0)
                answer[current_offset++] = (byte) (Math.min(255, retvalues.length - i));
            answer[current_offset++] = retvalues[i];
        }

        return answer;

    } else {

        // calculer la taille de la section requtes
        // retvalues length: 1 2 3 4 5 6 7 8 9 10 ...
        // nombre de in a:   1 1 1 2 2 2 3 3 3  4 ...
        // retvalues.length vaut au max optmaxread (ou optmaxread + 1  partir de la v2) dans perl - il faut trouver l'optimal de optmaxread et le positionner dans perl
        // Par dfaut, c'est 48 donc ((48 + 1 /* v2 */) + 2) / 3 == 17 RR par rponse max.
        final int nanswers = (retvalues.length + 2) / 3;

        // 192 (3 * 64) bytes max per answer
        if (nanswers > 64)
            throw new GeneralException("too many answers (" + nanswers + ")");

        final int rr_length = 2
                /* pointeur sur le nom de domaine de la query */ + 10 /* TYPE + CLASS + TTL + RDLENGTH */
                + 4 /* taille de l'adresse IP rsultante */;
        final int answer_length = ArrayUtils.indexOf(query, (byte) 0, DNSFORMAT_DATAOFFSET)
                /* nom de domaine de la query */ + 1 /* '\0' */ + 2 /* QTYPE */ + 2 /* QCLASS */
                + rr_length * nanswers;

        byte answer[] = new byte[answer_length];
        answer[DNSFORMAT_ID_MSB] = query[DNSFORMAT_ID_MSB];
        answer[DNSFORMAT_ID_LSB] = query[DNSFORMAT_ID_LSB];
        answer[DNSFORMAT_FLAGS_LSB] = 0;
        answer[DNSFORMAT_FLAGS_MSB] = (byte) (((byte) (query[DNSFORMAT_FLAGS_MSB] | 128 /* QR: response */
                | 4 /* AA */)) & (byte) ~2 /* TC */);
        answer[DNSFORMAT_QDCOUNT_MSB] = 0;
        answer[DNSFORMAT_QDCOUNT_LSB] = 1;
        answer[DNSFORMAT_ANCOUNT_MSB] = 0;
        answer[DNSFORMAT_ANCOUNT_LSB] = (byte) nanswers;
        answer[DNSFORMAT_NSCOUNT_MSB] = 0;
        answer[DNSFORMAT_NSCOUNT_LSB] = 0;
        answer[DNSFORMAT_ARCOUNT_MSB] = 0;
        answer[DNSFORMAT_ARCOUNT_LSB] = 0;

        for (int i = DNSFORMAT_DATAOFFSET; i < DNSFORMAT_DATAOFFSET + 1 /* octet de longueur du premier label */
                + version_string.length() + 1 /* '.' */ + query_string.length() + 1 /* '.' */
                + DNSDOMAIN.length() + 1 /* '\0' */ + 4 /* TYPE + CLASS */; i++)
            answer[i] = query[i];

        byte rr[] = { (DNSFORMAT_DATAOFFSET >> 8) + (byte) 0xc0, DNSFORMAT_DATAOFFSET & 0xff, 0x00,
                0x01 /* TYPE */, 0x00, 0x01 /* CLASS */, 0, 0, 0, 0 /* TTL */, 0, 4 /* RDLENGTH */, (byte) 0xff,
                (byte) 0xff, (byte) 0xff, (byte) 0xff /* IP address */ };

        int current_offset = DNSFORMAT_DATAOFFSET + 1 /* octet de longueur du premier label */
                + version_string.length() + 1 /* '.' */ + query_string.length() + 1 /* '.' */
                + DNSDOMAIN.length() + 1 /* '\0' */ + 4 /* QTYPE + QCLASS */;
        int retindex = 0;
        for (int ans_idx = 0; ans_idx < nanswers; ans_idx++) {
            int ncar = 0;

            if (retindex < retvalues.length) {
                rr[rr.length - 3] = retvalues[retindex];
                ncar++;
            }
            retindex++;
            if (retindex < retvalues.length) {
                rr[rr.length - 2] = retvalues[retindex];
                ncar++;
            }
            retindex++;
            if (retindex < retvalues.length) {
                rr[rr.length - 1] = retvalues[retindex];
                ncar++;
            }
            retindex++;

            rr[rr.length - 4] = (byte) (((byte) ans_idx) | (byte) (ncar << 6));

            for (int i = 0; i < rr.length; i++)
                answer[current_offset++] = rr[i];
        }

        return answer;
    }
}

From source file:com.gargoylesoftware.htmlunit.util.EncodingSniffer.java

/**
 * Extracts an encoding from the specified <tt>Content-Type</tt> value using
 * <a href="http://ietfreport.isoc.org/idref/draft-abarth-mime-sniff/">the IETF algorithm</a>; if
 * no encoding is found, this method returns {@code null}.
 *
 * @param s the <tt>Content-Type</tt> value to search for an encoding
 * @return the encoding found in the specified <tt>Content-Type</tt> value, or {@code null} if no
 *         encoding was found/*from   www  .  j a va2s. com*/
 */
static String extractEncodingFromContentType(final String s) {
    if (s == null) {
        return null;
    }
    final byte[] bytes = s.getBytes(Charsets.US_ASCII);
    int i;
    for (i = 0; i < bytes.length; i++) {
        if (matches(bytes, i, CHARSET_START)) {
            i += CHARSET_START.length;
            break;
        }
    }
    if (i == bytes.length) {
        return null;
    }
    while (bytes[i] == 0x09 || bytes[i] == 0x0A || bytes[i] == 0x0C || bytes[i] == 0x0D || bytes[i] == 0x20) {
        i++;
        if (i == bytes.length) {
            return null;
        }
    }
    if (bytes[i] != '=') {
        return null;
    }
    i++;
    if (i == bytes.length) {
        return null;
    }
    while (bytes[i] == 0x09 || bytes[i] == 0x0A || bytes[i] == 0x0C || bytes[i] == 0x0D || bytes[i] == 0x20) {
        i++;
        if (i == bytes.length) {
            return null;
        }
    }
    if (bytes[i] == '"') {
        if (bytes.length <= i + 1) {
            return null;
        }
        final int index = ArrayUtils.indexOf(bytes, (byte) '"', i + 1);
        if (index == -1) {
            return null;
        }
        final String charset = new String(ArrayUtils.subarray(bytes, i + 1, index), Charsets.US_ASCII);
        return isSupportedCharset(charset) ? charset : null;
    }
    if (bytes[i] == '\'') {
        if (bytes.length <= i + 1) {
            return null;
        }
        final int index = ArrayUtils.indexOf(bytes, (byte) '\'', i + 1);
        if (index == -1) {
            return null;
        }
        final String charset = new String(ArrayUtils.subarray(bytes, i + 1, index), Charsets.US_ASCII);
        return isSupportedCharset(charset) ? charset : null;
    }
    int end = skipToAnyOf(bytes, i, new byte[] { 0x09, 0x0A, 0x0C, 0x0D, 0x20, 0x3B });
    if (end == -1) {
        end = bytes.length;
    }
    final String charset = new String(ArrayUtils.subarray(bytes, i, end), Charsets.US_ASCII);
    return isSupportedCharset(charset) ? charset : null;
}

From source file:com.gargoylesoftware.htmlunit.util.EncodingSniffer.java

/**
 * Searches the specified XML content for an XML declaration and returns the encoding if found,
 * otherwise returns {@code null}.//from  ww  w .j  a v a  2  s.  c  o m
 *
 * @param bytes the XML content to sniff
 * @return the encoding of the specified XML content, or {@code null} if it could not be determined
 */
static String sniffEncodingFromXmlDeclaration(final byte[] bytes) {
    String encoding = null;
    if (bytes.length > 5 && XML_DECLARATION_PREFIX[0] == bytes[0] && XML_DECLARATION_PREFIX[1] == bytes[1]
            && XML_DECLARATION_PREFIX[2] == bytes[2] && XML_DECLARATION_PREFIX[3] == bytes[3]
            && XML_DECLARATION_PREFIX[4] == bytes[4] && XML_DECLARATION_PREFIX[5] == bytes[5]) {
        final int index = ArrayUtils.indexOf(bytes, (byte) '?', 2);
        if (index + 1 < bytes.length && bytes[index + 1] == '>') {
            final String declaration = new String(bytes, 0, index + 2, Charsets.US_ASCII);
            int start = declaration.indexOf("encoding");
            if (start != -1) {
                start += 8;
                char delimiter;
                outer: while (true) {
                    switch (declaration.charAt(start)) {
                    case '"':
                    case '\'':
                        delimiter = declaration.charAt(start);
                        start = start + 1;
                        break outer;

                    default:
                        start++;
                    }
                }
                final int end = declaration.indexOf(delimiter, start);
                encoding = declaration.substring(start, end);
            }
        }
    }
    if (encoding != null && !isSupportedCharset(encoding)) {
        encoding = null;
    }
    if (encoding != null && LOG.isDebugEnabled()) {
        LOG.debug("Encoding found in XML declaration: '" + encoding + "'.");
    }
    return encoding;
}