private static boolean isValidFrameHeader()

in src/main/java/com/twitter/http2/HttpFrameDecoder.java [526:584]


    private static boolean isValidFrameHeader(int length, short type, byte flags, int streamId) {
        if (length > HTTP_MAX_LENGTH) {
            return false;
        }
        int minLength;
        switch (type) {
        case HTTP_DATA_FRAME:
            if (hasFlag(flags, HTTP_FLAG_PADDED)) {
                minLength = 1;
            } else {
                minLength = 0;
            }
            return length >= minLength && streamId != 0;

        case HTTP_HEADERS_FRAME:
            if (hasFlag(flags, HTTP_FLAG_PADDED)) {
                minLength = 1;
            } else {
                minLength = 0;
            }
            if (hasFlag(flags, HTTP_FLAG_PRIORITY)) {
                minLength += 5;
            }
            return length >= minLength && streamId != 0;

        case HTTP_PRIORITY_FRAME:
            return length == 5 && streamId != 0;

        case HTTP_RST_STREAM_FRAME:
            return length == 4 && streamId != 0;

        case HTTP_SETTINGS_FRAME:
            boolean lengthValid = hasFlag(flags, HTTP_FLAG_ACK) ? length == 0 : (length % 6) == 0;
            return lengthValid && streamId == 0;

        case HTTP_PUSH_PROMISE_FRAME:
            if (hasFlag(flags, HTTP_FLAG_PADDED)) {
                minLength = 5;
            } else {
                minLength = 4;
            }
            return length >= minLength && streamId != 0;

        case HTTP_PING_FRAME:
            return length == 8 && streamId == 0;

        case HTTP_GOAWAY_FRAME:
            return length >= 8 && streamId == 0;

        case HTTP_WINDOW_UPDATE_FRAME:
            return length == 4;

        case HTTP_CONTINUATION_FRAME:
            return false;

        default:
            return true;
        }
    }