/* HTTP-related definitions. * * IRC Services is copyright (c) 1996-2007 Andrew Church. * E-mail: * Parts written by Andrew Kempe and others. * This program is free but copyrighted software; see the file COPYING for * details. */ #ifndef HTTP_H #define HTTP_H #ifndef TIMEOUT_H # include "timeout.h" #endif /*************************************************************************/ /* Client data structure. */ typedef struct { Socket *socket; Timeout *timeout; char address[22]; /* aaa.bbb.ccc.ddd:ppppp\0 */ uint32 ip; uint16 port; int request_count; /* Number of requests so far on this connection */ int in_request; /* Nonzero if request currently being processed */ char *request_buf; /* Pointers below point into this buffer */ int32 request_len; /* Amount of data read so far */ int version_major; int version_minor; int method; /* METHOD_* from http.h */ char *url; char *data; /* For POST */ int32 data_len; char **headers; /* name + \0 + value */ int32 headers_count; char **variables; /* name + \0 + value */ int32 variables_count; } Client; /*************************************************************************/ /* Maximum length of a single line in an HTTP request (bytes). */ #define HTTP_LINEMAX 4096 /*************************************************************************/ /* Return codes from authorization callbacks. */ #define HTTP_AUTH_UNDECIDED 0 #define HTTP_AUTH_ALLOW 1 #define HTTP_AUTH_DENY 2 /*************************************************************************/ /* HTTP methods. */ #define METHOD_GET 0 #define METHOD_HEAD 1 #define METHOD_POST 2 /*************************************************************************/ /* HTTP reply codes. Prefix letters are: * I - 1xx Informational * S - 2xx Successful * R - 3xx Redirection * E - 4xx Client Error * F - 5xx Server Error (think "Failure") */ #define HTTP_I_CONTINUE 100 #define HTTP_I_SWITCHING_PROTOCOLS 101 #define HTTP_S_OK 200 #define HTTP_S_CREATED 201 #define HTTP_S_ACCEPTED 202 #define HTTP_S_NON_AUTHORITATIVE 203 #define HTTP_S_NO_CONTENT 204 #define HTTP_S_RESET_CONTENT 205 #define HTTP_S_PARTIAL_CONTENT 206 #define HTTP_R_MULTIPLE_CHOICES 300 #define HTTP_R_MOVED_PERMANENTLY 301 #define HTTP_R_FOUND 302 #define HTTP_R_SEE_OTHER 303 #define HTTP_R_NOT_MODIFIED 304 #define HTTP_R_USE_PROXY 305 #define HTTP_R_TEMPORARY_REDIRECT 307 #define HTTP_E_BAD_REQUEST 400 #define HTTP_E_UNAUTHORIZED 401 #define HTTP_E_PAYMENT_REQUIRED 402 #define HTTP_E_FORBIDDEN 403 #define HTTP_E_NOT_FOUND 404 #define HTTP_E_METHOD_NOT_ALLOWED 405 #define HTTP_E_NOT_ACCEPTABLE 406 #define HTTP_E_PROXY_AUTH_REQUIRED 407 #define HTTP_E_REQUEST_TIMEOUT 408 #define HTTP_E_CONFLICT 409 #define HTTP_E_GONE 410 #define HTTP_E_LENGTH_REQUIRED 411 #define HTTP_E_PRECONDITION_FAILED 412 #define HTTP_E_REQUEST_ENTITY_TOO_LARGE 413 #define HTTP_E_REQUEST_URI_TOO_LONG 414 #define HTTP_E_UNSUPPORTED_MEDIA_TYPE 415 #define HTTP_E_RANGE_NOT_SATISFIABLE 416 #define HTTP_E_EXPECTATION_FAILED 417 #define HTTP_F_INTERNAL_SERVER_ERROR 500 #define HTTP_F_NOT_IMPLEMENTED 501 #define HTTP_F_BAD_GATEWAY 502 #define HTTP_F_SERVICE_UNAVAILABLE 503 #define HTTP_F_GATEWAY_TIMEOUT 504 #define HTTP_F_HTTP_VER_NOT_SUPPORTED 505 /*************************************************************************/ /*************************************************************************/ /* Utility routines (provided by core module (in util.c)): */ extern char *http_get_header(Client *c, const char *header); extern char *http_get_variable(Client *c, const char *variable); extern char *http_quote_html(const char *str, char *outbuf, int32 outsize); extern char *http_quote_url(const char *str, char *outbuf, int32 outsize, int slash_question); extern char *http_unquote_url(char *buf); extern void http_send_response(Client *c, int code); extern void http_error(Client *c, int code, const char *format, ...); extern void init_http_util(Module *module_); /*************************************************************************/ #endif /* HTTP_H */