lpmoo-1.2/etc/
lpmoo-1.2/mudlib/
lpmoo-1.2/mudlib/etc/
lpmoo-1.2/mudlib/include/
lpmoo-1.2/mudlib/include/moo/
lpmoo-1.2/mudlib/lpc/
lpmoo-1.2/mudlib/std/auto/
lpmoo-1.2/mudlib/std/bfuns/
/*
 * NAME:	http.c
 * DESCRIPTION:	experimental web server
 */

# include <objects.h>
# include "http.h"

mapping status_codes;		/* HTTP status codes */

/*
 * NAME:	create()
 * DESCRIPTION:	initialize data
 */
static
void create(void)
{
  status_codes = ([
		   R_OK			: "OK",
		   R_CREATED		: "Created",
		   R_ACCEPTED		: "Accepted",
		   R_PARTIAL		: "Partial Information",
		   R_NORESPONSE		: "No Response",

		   R_MOVED		: "Moved",
		   R_FOUND		: "Found",
		   R_METHOD		: "Method",
		   R_NOTMODIFIED	: "Not Modified",

		   R_BADREQUEST		: "Bad Request",
		   R_UNAUTHORIZED	: "Unauthorized",
		   R_PAYMENTREQ		: "Payment Required",
		   R_FORBIDDEN		: "Forbidden",
		   R_NOTFOUND		: "Not Found",

		   R_INTERNALERR	: "Internal Error",
		   R_NOTIMPLEM		: "Not Implemented",
		   R_TEMPOVERL		: "Service Temporarily Overloaded",
		   R_GATEWTIMEOUT	: "Gateway Timeout",
		 ]);
}

/*
 * NAME:	process_request()
 * DESCRIPTION:	an HTTP request has been made
 */
varargs
void process_request(string verb, string args...)
{
  if (sizeof(args) < 1 || sizeof(args) > 2)
    error("Invalid HTTP request");

  clone_object(HTTP_REQUEST)->init(verb, args[0],
				   sizeof(args) > 1 ? args[1] : HTTP_09);
}

/*
 * NAME:	status_descrip()
 * DESCRIPTION:	return the description string for a status code
 */
string status_descrip(int status)
{ return status_codes[status]; }

/*
 * NAME:	error_doc()
 * DESCRIPTION:	return an error document
 */
object error_doc(int code, string descrip)
{
  object doc;

  doc = clone_object(ERR_OBJ);
  doc->init(code, descrip);

  return doc;
}