diff -r bdf20e6eefd7 -r d07309450285 volta.h --- a/volta.h Wed Sep 28 09:04:16 2011 -0700 +++ b/volta.h Mon Oct 17 09:12:00 2011 -0700 @@ -44,6 +44,7 @@ #include #include #include +#include #include #include @@ -56,28 +57,60 @@ /* Default line size we accept from squid, longer lines (huge URLs?) malloc. */ #define LINE_BUFSIZE 2048 +/* Ceiling for how many bytes can be allocated at one for a single line. */ +#define LINE_MAX 256000 /* 250k */ + +/* Redirect types */ +#define REDIR_TEMPORARY 0 +#define REDIR_PERMANENT 1 +#define REDIR_TRANSPARENT 2 /* Aid debugging */ #define LOC __FILE__, __LINE__ -/* a global struct for easy access to common vars */ +/* + * a global struct for easy access to common vars + * + */ struct v_globals { unsigned short int debugmode; /* debug level */ char dbname[128]; /* path to database file */ struct sqlite3 *db; /* database handle */ + + struct { + time_t start; /* start time */ + unsigned long int lines; /* line count for determining speed */ + } timer; }; extern struct v_globals v; /* defined in main.c */ -/* The parsed attributes from the request line, as given to us by squid. - * URL client_ip "/" fqdn user method [ kvpairs] */ +/* + * The parsed attributes from the request line, as given to us by squid. + * + */ typedef struct request { - char *url; + char *scheme; char *host; - struct sockaddr_in ip; - char *ip_fqdn; + char *path; + char *port; + struct in_addr *client_ip; char *user; char *method; - char *kvpairs; + + struct { + char *scheme_start; + char *host_start; + char *port_start; + char *path_start; + char *meth_start; + char *c_ip_start; + unsigned short int scheme_length; + unsigned short int host_length; + unsigned short int port_length; + unsigned short int path_length; + unsigned short int meth_length; + unsigned short int c_ip_length; + } tokens; } request; /* @@ -87,13 +120,20 @@ */ int getopt( int, char * const [], const char *); -void usage( char *prg ); -void debug( int level, char *file, int line, const char *fmt, ... ); -char *slurp_file( char *file ); -char *extend_line( char *line, const char *buf ); +void usage( char * ); +void debug( int, char *, int, const char *, ... ); +void report_speed( void ); +char *slurp_file( char * ); +char *extend_line( char *, const char * ); +char *copy_string_token( char *, unsigned short int ); +struct in_addr *copy_ipv4_token( char *, unsigned short int ); int accept_loop( void ); struct request *parse( char *p ); +void process( char * ); +struct request *parse( char * ); +void populate_request( struct request * ); +void cleanup_request( struct request * ); #endif