/* ==================================================================== * Copyright (c) 1995-1997 The Apache Group. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the Apache Group * for use in the Apache HTTP server project (http://www.apache.org/)." * * 4. The names "Apache Server" and "Apache Group" must not be used to * endorse or promote products derived from this software without * prior written permission. * * 5. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the Apache Group * for use in the Apache HTTP server project (http://www.apache.org/)." * * THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE APACHE GROUP OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Group and was originally based * on public domain software written at the National Center for * Supercomputing Applications, University of Illinois, Urbana-Champaign. * For more information on the Apache Group and the Apache HTTP server * project, please see <http://www.apache.org/>. * */ /** * The main header file for the web system. This header files is based on * one which comes with apache web server software. */ #ifndef __HTTP_H #define __HTTP_H #include <mime.h> /** * The path to the http daemon. */ #define HTTPD "/secure/handlers/http" /** * The version of the http protocol that is supported. */ #define HTTP_PROTOCOL "HTTP/1.1" /** * The version of the web server. */ #define HTTP_VERSION "Discworld/0.10.3.RW" #define REQ_REQUEST 0 #define REQ_HEADERS 1 #define REQ_BODY 2 #define BODY_START 0 #define BODY_READ 1 #define BODY_CHUNK_FOOTER 2 #define BODY_CHUNK_END 3 /** * The directory in which the web pages exist. */ #define DIR_WWW "/www" /** * The response number for a continue. */ #define CONTINUE 100 /** * The response number for an ok. */ #define HTTP_OK 200 /** The response number for a no content message. */ #define NO_CONTENT 204 /** The response number for a partial content message. */ #define PARTIAL_CONTENT 206 /** The response number for a moved permanently message. */ #define MOVED_PERMANENTLY 301 /** The response number for a moved temporarily message. */ #define MOVED_TEMP 302 /** The response number for a not modified message. */ #define NOT_MODIFIED 304 /** The response number for a bad command message. */ #define BAD_CMD 400 /** The response number for a authorisation required message. */ #define AUTH_REQUIRED 401 /** The response number for a acess denied message. */ #define ACCESS_DENIED 403 /** The response number for a not found message. */ #define NOT_FOUND 404 /** The response number for a not allowed message. */ #define NOT_ALLOWED 405 /** The response number for a time out message. */ #define TIME_OUT 408 /** The response number for a length required message. */ #define LENGTH_REQUIRED 411 /** The response number for a precondition failed message. */ #define PRECONDITION_FAILED 412 /** The response number for an internal error message. */ #define INTERNAL_ERROR 500 /** The response number for a not implemented message. */ #define NOT_IMPLEMENTED 501 #ifndef __HTTP_NO_VARIABLES__ nosave private mapping status_lines = ([ 100 : "100 Continue", 101 : "101 Switching Protocols", 200 : "200 OK", 201 : "201 Created", 202 : "202 Accepted", 203 : "203 Non-Authoritative Information", 204 : "204 No Content", 205 : "205 Reset Content", 206 : "206 Partial Content", 300 : "300 Multiple Choices", 301 : "301 Moved Permanently", 302 : "302 Moved Temporarily", 303 : "303 See Other", 304 : "304 Not Modified", 305 : "305 Use Proxy", 400 : "400 Bad Request", 401 : "401 Authorization Required", 402 : "402 Payment Required", 403 : "403 Forbidden", 404 : "404 File Not Found", 405 : "405 Method Not Allowed", 406 : "406 Not Acceptable", 407 : "407 Proxy Authentication Required", 408 : "408 Request Time-out", 409 : "409 Conflict", 410 : "410 Gone", 411 : "411 Length Required", 412 : "412 Precondition Failed", 413 : "413 Request Entity Too Large", 414 : "414 Request-URI Too Large", 415 : "415 Unsupported Media Type", 500 : "500 Internal Server Error", 501 : "501 Method Not Implemented", 502 : "502 Bad Gateway", 503 : "503 Service Temporarily Unavailable", 504 : "504 Gateway Time-out", 505 : "505 HTTP Version Not Supported", 506 : "506 Variant Also Varies" ]); #endif /** * Where to save the status information. */ #define SAVE_FILE "/secure/save/handlers/http/http" #define status_drops_connection(x) (((x) == BAD_CMD) || \ ((x) == TIME_OUT) || \ ((x) == INTERNAL_ERROR) || \ ((x) == LENGTH_REQUIRED)) #undef DEBUG #ifdef DEBUG #define TPCRE(STR) if (find_player("shaydz")) tell_object(find_player("shaydz"), STR) #else #define TPCRE(STR) #endif #define RES_DIR 0 #define RES_FILE 1 #define RES_NORMAL 2 #define DAYS ({"Sun", "Mon", "Tue", "Wed", "Thu", \ "Fri", "Sat"}) #define MONTHS ({"Jan", "Feb", "Mar", "Apr", "May", "Jun", \ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}) #ifndef __HTTP_NO_VARIABLES__ class http_session { int fd; /* file descriptor */ int time; /* request time */ string address; /* socket_address() of remote */ string name; /* resolved() hostname of remote */ } class http_body { int state; /* state of the body */ int remaining; /* remaining length of received body */ int read_chunked; /* reading a chunked body */ int read_length; /* length read so far */ string buff; /* the body itself */ mapping data; /* If a post for, the data */ } class http_request_header { int noheaders; /* stupid mode (HTTP/0.9) */ class mime_header headers_in; /* incoming header */ class mime_header headers_out; /* outgoing header */ class mime_header err_headers_out; /* outgoing error header */ int header_only; /* the "HEAD" operation was requested */ } class http_body_info { string content_type; /* MIME content type of body */ int chunked; /* chunked transfer mode */ int clength; /* content length of body */ int byterange; /* type of byterange */ string boundary; /* boundary of range */ string range; /* range string */ } class http_request { class http_session sess; /* connection info */ string hostname; /* expected hostname of server */ int time; /* request time */ string request; /* the request so far */ string status_line; /* custom status of response */ int status; /* status code */ int proto_num; /* protocol version (numerical) */ string method; /* requested operation */ string uri; /* the uri */ string args; /* arguments to the request */ string filename; /* the filename of the request */ string dir; /* the directory of the request */ string user; /* the user name for secure transactions */ class http_request_header rh; /* header junk */ string location; /* the new location of the document */ int id; /* call out id for timeout */ string the_request; /* first line of the request */ int state; /* state of the request */ int persistent; /* is this connection persistent? */ int proxyreq; /* this is a proxy request */ int numredirect; /* amount of internal redirects done */ int cgi_request; /* Is this a cgi bin request? */ class http_body body; /* incoming body */ class http_body_info bi; /* various junk about the body */ class http_request prev; /* previous request */ } #endif #endif /* __HTTP_H */