Files @ c7d7e38b2269
Branch filter:

Location: hot67beta/libraries/domit/php_http_server_generic.php - annotation

root@protofusion.org
Initial import of the site.
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
<?php
//*******************************************************************
//php_http_server_generic represents a basic http server
//*******************************************************************
//by John Heinstein
//johnkarl@nbnet.nb.ca
//*******************************************************************
//Version 0.1
//copyright 2004 Engage Interactive
//http://www.engageinteractive.com/dom_xmlrpc/
//All rights reserved
//*******************************************************************
//Licensed under the GNU General Public License (GPL)
//http://www.gnu.org/copyleft/gpl.html
//*******************************************************************

if (!defined('PHP_HTTP_TOOLS_INCLUDE_PATH')) {
	define('PHP_HTTP_TOOLS_INCLUDE_PATH', (dirname(__FILE__) . "/"));
}

define ('CRLF', "\r\n"); //end-of-line char as defined in HTTP spec
define ('CR', "\r");
define ('LF', "\n");

class php_http_server_generic {
	var $httpStatusCodes;

	var $protocol = 'HTTP';
	var $protocolVersion = '1.0';
	var $statusCode = 200;

	var $events = array('onRequest' => null, 'onResponse' => null,
						'onGet' => null, 'onHead' => null,
						'onPost' => null, 'onPut' => null);

	function php_http_server_generic() {
		//require_once(PHP_HTTP_TOOLS_INCLUDE_PATH . 'php_http_status_codes.php');
		//$this->httpStatusCodes =&new php_http_status_codes();
	} //php_http_server_generic

	function &getHeaders() {
		$headers = headers_list();
		$response = '';

		if (count($headers) > 0) {
			foreach ($headers as $key => $value) {
				$response .= $value . CRLF;
			}
		}

		return $response;
	} //getHeaders

	function setProtocolVersion($version) {
		if (($version == '1.0') || ($version == '1.1')) {
			$$this->protocolVersion = $version;
			return true;
		}

		return false;
	} //setProtocolVersion

	function setHeader($name, $value) {
		header($name . ': ' . $value);
	} //setHeader

	function setHeaders() {
		//you will want to override this method
		$this->setHeader('Content-Type', 'text/html');
		$this->setHeader('Server', 'PHP HTTP Server (Generic)/0.1');
	} //setHeaders

	function fireEvent($target, $data) {
		if ($this->events[$target] != null) {
			call_user_func($this->events[$target], $data);
		}
	} //fireEvent

	function fireHTTPEvent($target, $data = null) {
		if ($this->events[$target] == null) {
			//if no handler is assigned,
			//delegate the event to the default handler
			$this->setHTTPEvent($target);
		}

		call_user_func($this->events[$target], $data);
	} //fireHTTPEvent

	function setHTTPEvent($option, $customHandler = null) {
		if ($customHandler != null) {
			$handler =& $customHandler;
		}
		else {
			$handler = array(&$this, 'defaultHTTPEventHandler');
		}

		switch($option) {
			case 'onGet':
			case 'onHead':
			case 'onPost':
			case 'onPut':
				$this->events[$option] =& $handler;
				break;
		}
	} //setHTTPServerEvent

	function defaultHTTPHandler() {
		//will add functionality for this later
		//work with subclasses for the time being
	} //defaultHTTPHandler

	function setDebug($option, $truthVal, $customHandler = null) {
		if ($customHandler != null) {
			$handler =& $customHandler;
		}
		else {
			$handler = array(&$this, 'defaultDebugHandler');
		}

		switch($option) {
			case 'onRequest':
			case 'onResponse':
				$truthVal ? ($this->events[$option] =& $handler) :
							($this->events[$option] = null);
				break;
		}
	} //setDebug

	function getDebug($option) {
		switch($option) {
			case 'onRequest':
			case 'onResponse':
				return ($this->events[$option] != null);
				break;
		}
	} //getDebug

	function defaultDebugHandler($data) {
		//just write to a log file, since can't display in a browser
		$this->writeDebug($data);
	} //defaultDebugHandler

	function writeDebug($data) {
		$filename = 'debug_' . time() . '.txt';
		$fileHandle = fopen($fileName, 'a');
		fwrite($fileHandle, $data);
		fclose($fileHandle);
	} //writeDebug

	function receive() {
		global $HTTP_SERVER_VARS;
		$requestMethod = strToUpper($HTTP_SERVER_VARS['REQUEST_METHOD']);

		switch ($requestMethod) {
			case 'GET':
				$this->fireHTTPEvent('onGet');
				break;

			case 'HEAD':
				$this->fireHTTPEvent('onHead');
				break;

			case 'POST':
				$this->fireHTTPEvent('onPost');
				break;

			case 'PUT':
				$this->fireHTTPEvent('onPut');
				break;
		}
	} //receive

	function respond($response) {
		//build header info
		//$response = $this->protocol . '/' . $this->protocolVersion . ' ' .
					//$this->statusCode . ' ' . $this->httpStatusCodes->getCodeString($this->statusCode) . CRLF;

		if (!headers_sent()) { //avoid generating an error when in debug mode
			$this->setHeader('Date', "date('r')");
			$this->setHeader('Content-Length', strlen($response));
			$this->setHeader('Connection', 'Close');
		}

		echo $response;
	} //respond
} //php_http_server_generic


//To invoke the server, do:
//$httpServer = new php_http_server_generic(); //or instance of a subclass
//$httpServer->receive();

?>