package http_parser.lolevel; import java.nio.ByteBuffer; import http_parser.HTTPException; public class ParserSettings {

public HTTPCallback       on_message_begin;
public HTTPDataCallback       on_path;
public HTTPDataCallback       on_query_string;
public HTTPDataCallback       on_url;
public HTTPDataCallback       on_fragment;
public HTTPCallback       on_status_complete;
public HTTPDataCallback       on_header_field;
public HTTPDataCallback       on_header_value;
public HTTPCallback       on_headers_complete;
public HTTPDataCallback       on_body;
public HTTPCallback       on_message_complete;
public HTTPErrorCallback  on_error;

      void call_on_message_begin (HTTPParser p) {
              call_on(on_message_begin, p);
      }

      void call_on_message_complete (HTTPParser p) {
              call_on(on_message_complete, p);
      }

// this one is a little bit different:
// the current `position` of the buffer is the location of the
// error, `ini_pos` indicates where the position of
// the buffer when it was passed to the `execute` method of the parser, i.e.
// using this information and `limit` we'll know all the valid data
// in the buffer around the error we can use to print pretty error
// messages.
void call_on_error (HTTPParser p, String mes, ByteBuffer buf, int ini_pos) {
  if (null != on_error) {
    on_error.cb(p, mes, buf, ini_pos);
    return;
  }
  // if on_error gets called it MUST throw an exception, else the parser
  // will attempt to continue parsing, which it can't because it's
  // in an invalid state.
  throw new HTTPException(mes);
      }

      void call_on_header_field (HTTPParser p, ByteBuffer buf, int pos, int len) {
              call_on(on_header_field, p, buf, pos, len);
      }
      void call_on_query_string (HTTPParser p, ByteBuffer buf, int pos, int len) {
              call_on(on_query_string, p, buf, pos, len);
      }
      void call_on_fragment (HTTPParser p, ByteBuffer buf, int pos, int len) {
              call_on(on_fragment, p, buf, pos, len);
      }
void call_on_status_complete(HTTPParser p) {
  call_on(on_status_complete, p);
}
      void call_on_path (HTTPParser p, ByteBuffer buf, int pos, int len) {
              call_on(on_path, p, buf, pos, len);
      }
      void call_on_header_value (HTTPParser p, ByteBuffer buf, int pos, int len) {
              call_on(on_header_value, p, buf, pos, len);
      }
      void call_on_url (HTTPParser p, ByteBuffer buf, int pos, int len) {
              call_on(on_url, p, buf, pos, len);
      }
      void call_on_body(HTTPParser p, ByteBuffer buf, int pos, int len) {
              call_on(on_body, p, buf, pos, len);
      }
      void call_on_headers_complete(HTTPParser p) {
              call_on(on_headers_complete, p);
      }
      void call_on (HTTPCallback cb, HTTPParser p) {
              // cf. CALLBACK2 macro
              if (null != cb) {
                      cb.cb(p);
              }
      }
      void call_on (HTTPDataCallback cb, HTTPParser p, ByteBuffer buf, int pos, int len) {
              if (null != cb && -1 != pos) {
                      cb.cb(p,buf,pos,len);
              }
      }

}