Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.http4s.blaze.http.http_parser;
  
  
  
  public abstract class ParserBase {
  
      ParserBase(int initialBufferSize) {
          = new char[initialBufferSize];
         clearBuffer();
     }
 
     private int _bufferPosition = 0;
     private char[] _internalBuffer;
 
     // Signals if the last char was a '\r' and if the next one needs to be a '\n'
     private boolean _cr;
 
     // For signalling overflow of the String buffer
     private int _segmentByteLimit;
     private int _segmentBytePosition;

    
for shutting down the parser and its state
 
     public void shutdownParser() {
         clearBuffer();
     }
 
     void reset() {
        clearBuffer();
     }

    
Store the char in the internal buffer
 
     final protected void putChar(char c) {
         final int clen = .;
         if (clen == ) {
             final char[] next = new char[2 * clen + 1];
 
             System.arraycopy(, 0, next, 0, );
              = next;
         }
 
         [++] = c;
     }
 
     final protected int bufferPosition() {
         return ;
     }
 
     final protected void clearBuffer() {
          = 0;
     }
 
     final protected String getString() {
         return getString(0, );
     }
 
     final protected String getString(int end) {
         return getString(0, end);
     }
 
     final protected String getString(int startint end) {
         if (end > ) {
             throw new IndexOutOfBoundsException("Requested: " + end + ", max: " + );
         }
 
         String str = new String(startend);
         return str;
     }

    
Returns the string in the buffer minus an leading or trailing whitespace or quotes
 
     final protected String getTrimmedString() throws BaseExceptions.BadRequest {
         if ( == 0) return "";
 
         int start = 0;
         boolean quoted = false;
         // Look for start
         while (start < ) {
             final char ch = [start];
             if (ch == '"') {
                 quoted = true;
                 break;
             }
             else if (ch != . && ch != .) {
                 break;
             }
             start++;
         }
 
         int end = ;  // Position is of next write
 
         // Look for end
         while(end > start) {
             final char ch = [end - 1];
 
             if (quoted) {
                 if (ch == '"'break;
                 else if (ch != . && ch != .) {
                     throw new BaseExceptions.BadRequest("String might not quoted correctly: '" + getString() + "'");
                }
            }
            else if (ch != . && ch != .break;
            end--;
        }
        String str = new String(startend - start);
        return str;
    }
    final protected boolean arrayMatches(final char[] chars) {
        if (chars.length != return false;
        for (int i = 0; i < i++) {
            if (chars[i] != [i])
                return false;
        }
        return true;
    }
    /* ------------------------------------------------------------------- */
    final protected void resetLimit(int limit) {
         = limit;
         = 0;
    }
    // Removes CRs but returns LFs
    final protected char next(final ByteBuffer bufferboolean allow8859throws BaseExceptions.BadRequest {
        if (!buffer.hasRemaining()) return 0;
        if ( <= ) {
            shutdownParser();
            throw new BadRequest("Request length limit exceeded: " + );
        }
        final byte b = buffer.get();
        ++;
        // If we ended on a CR, make sure we are
        if () {
            if (b != .) {
                throw new BadRequest("Invalid sequence: LF didn't follow CR: " + b);
            }
             = false;
            return (char)b;  // must be LF
        }
        // Make sure its a valid character
        if (b < .) {
            if (b == .) {   // Set the flag to check for _cr and just run again
                 = true;
                return next(bufferallow8859);
            }
            else if (b == . || allow8859 && b < 0) {
                return (char)(b & 0xff);
            }
            else if (b == .) {
                    return (char)b// A backend should accept a bare linefeed. http://tools.ietf.org/html/rfc2616#section-19.3
            }
            else {
                shutdownParser();
                throw new BadRequest("Invalid char: '" + (char)(b & 0xff) + "', 0x" + Integer.toHexString(b));
            }
        }
        // valid ascii char
        return (char)b;
    }
New to GrepCode? Check out our FAQ X