// 
// Decompiled by Procyon v0.6.0
// 

package io.netty.handler.codec.http;

import io.netty.util.AsciiString;

public final class HttpHeaderValidationUtil
{
    private HttpHeaderValidationUtil() {
    }
    
    public static boolean isConnectionHeader(final CharSequence name, final boolean ignoreTeHeader) {
        final int len = name.length();
        switch (len) {
            case 2: {
                return !ignoreTeHeader && AsciiString.contentEqualsIgnoreCase(name, HttpHeaderNames.TE);
            }
            case 7: {
                return AsciiString.contentEqualsIgnoreCase(name, HttpHeaderNames.UPGRADE);
            }
            case 10: {
                return AsciiString.contentEqualsIgnoreCase(name, HttpHeaderNames.CONNECTION) || AsciiString.contentEqualsIgnoreCase(name, HttpHeaderNames.KEEP_ALIVE);
            }
            case 16: {
                return AsciiString.contentEqualsIgnoreCase(name, HttpHeaderNames.PROXY_CONNECTION);
            }
            case 17: {
                return AsciiString.contentEqualsIgnoreCase(name, HttpHeaderNames.TRANSFER_ENCODING);
            }
            default: {
                return false;
            }
        }
    }
    
    public static boolean isTeNotTrailers(final CharSequence name, final CharSequence value) {
        return name.length() == 2 && AsciiString.contentEqualsIgnoreCase(name, HttpHeaderNames.TE) && !AsciiString.contentEqualsIgnoreCase(value, HttpHeaderValues.TRAILERS);
    }
    
    public static int validateValidHeaderValue(final CharSequence value) {
        final int length = value.length();
        if (length == 0) {
            return -1;
        }
        if (value instanceof AsciiString) {
            return verifyValidHeaderValueAsciiString((AsciiString)value);
        }
        return verifyValidHeaderValueCharSequence(value);
    }
    
    private static int verifyValidHeaderValueAsciiString(final AsciiString value) {
        final byte[] array = value.array();
        final int start = value.arrayOffset();
        int b = array[start] & 0xFF;
        if (b < 33 || b == 127) {
            return 0;
        }
        for (int end = start + value.length(), i = start + 1; i < end; ++i) {
            b = (array[i] & 0xFF);
            if ((b < 32 && b != 9) || b == 127) {
                return i - start;
            }
        }
        return -1;
    }
    
    private static int verifyValidHeaderValueCharSequence(final CharSequence value) {
        int b = value.charAt(0);
        if (b < 33 || b == 127) {
            return 0;
        }
        for (int length = value.length(), i = 1; i < length; ++i) {
            b = value.charAt(i);
            if ((b < 32 && b != 9) || b == 127) {
                return i;
            }
        }
        return -1;
    }
    
    public static int validateToken(final CharSequence token) {
        return HttpUtil.validateToken(token);
    }
}
