コード例 #1
0
ファイル: webjames.c プロジェクト: chosen1/php-src
void webjames_php_request(struct connection *conn)
/*called by WebJames to start handler*/
{

	WG(conn) = conn;
	WG(bodyread) = 0;
	WG(oldclose) = conn->close;
	conn->close=webjames_php_close;

	webjames_module_main();

	WG(oldclose)(WG(conn), 0);
}
コード例 #2
0
ファイル: webjames.c プロジェクト: chosen1/php-src
static void sapi_webjames_register_variables(zval *track_vars_array)
{
	char buf[BUF_SIZE + 1];
	char *docroot;

	buf[BUF_SIZE] = '\0';

	ADD_STRING("SERVER_SOFTWARE", configuration.server);
	ADD_STRING("SERVER_NAME", configuration.serverip);
	ADD_FIELD("SERVER_PROTOCOL", protocol);
	ADD_NUM("SERVER_PORT", port);
	ADD_STRING("SERVER_ADMIN",configuration.webmaster);
	ADD_STRING("GATEWAY_INTERFACE", "CGI/1.1");

	docroot = __unixify(WG(conn)->homedir,0,NULL,1024,0);
	if (docroot) ADD_STRING("DOCUMENT_ROOT", docroot);

	ADD_FIELD("REQUEST_METHOD", methodstr);
	ADD_FIELD("REQUEST_URI", requesturi);
	ADD_STRING("PATH_TRANSLATED", SG(request_info).path_translated);
	ADD_FIELD("SCRIPT_NAME", uri);
	ADD_FIELD("PHP_SELF", uri);
	ADD_FIELD("QUERY_STRING", args);


	snprintf(buf, BUF_SIZE, "%d.%d.%d.%d", WG(conn)->ipaddr[0], WG(conn)->ipaddr[1], WG(conn)->ipaddr[2], WG(conn)->ipaddr[3]);
	ADD_STRING("REMOTE_ADDR", buf);
	if (WG(conn)->dnsstatus == DNS_OK) ADD_FIELD("REMOTE_HOST", host);

	if ((WG(conn)->method == METHOD_POST) || (WG(conn)->method == METHOD_PUT)) {
		ADD_NUM("CONTENT_LENGTH", bodysize);
		ADD_FIELD("CONTENT_TYPE", type);
	}

	if ((WG(conn)->method == METHOD_PUT) || (WG(conn)->method == METHOD_DELETE)) ADD_FIELD("ENTITY_PATH", requesturi);

	if (WG(conn)->pwd) {
		ADD_STRING("AUTH_TYPE", "basic");
		ADD_FIELD("REMOTE_USER", authorization);
	}

	ADD_FIELD("HTTP_COOKIE", cookie);
	ADD_FIELD("HTTP_USER_AGENT", useragent);
	ADD_FIELD("HTTP_REFERER", referer);
	ADD_FIELD("HTTP_ACCEPT", accept);
	ADD_FIELD("HTTP_ACCEPT_LANGUAGE", acceptlanguage);
	ADD_FIELD("HTTP_ACCEPT_CHARSET", acceptcharset);
	ADD_FIELD("HTTP_ACCEPT_ENCODING", acceptencoding);
}
コード例 #3
0
ファイル: webjames.c プロジェクト: chosen1/php-src
static void webjames_php_close(struct connection *conn, int force)
/*called by webjames if it wants to close the connection*/
{

	php_request_shutdown(NULL);
	WG(oldclose)(conn,force);
}
コード例 #4
0
ファイル: webjames.c プロジェクト: chosen1/php-src
static int sapi_webjames_read_post(char *buffer, uint count_bytes)
/*read some of the post data*/
{
	if (WG(conn)->body==NULL) return 0;
	if (count_bytes+WG(bodyread)>WG(conn)->bodysize) count_bytes=WG(conn)->bodysize-WG(bodyread);
	memcpy(buffer, WG(conn)->body+WG(bodyread), count_bytes);
	WG(bodyread)+=count_bytes;
	return count_bytes;
}
コード例 #5
0
ファイル: webjames.c プロジェクト: chosen1/php-src
static void sapi_webjames_send_header(sapi_header_struct *sapi_header, void *server_context)
/*send an HTTP header*/
{
	char *header = sapi_header->header;
	int len = sapi_header->header_len;
	if (WG(conn)->flags.outputheaders) {
		while (sapi_header && len > 0) {
			int bytes;
			bytes = webjames_writebuffer(WG(conn), header, len);
			if (bytes<0) {
				PG(connection_status) = PHP_CONNECTION_ABORTED;
				if (!PG(ignore_user_abort)) {
					zend_bailout();
				}
				return;
			}
			header += bytes;
			len -= bytes;
		}
		webjames_writestring(WG(conn), "\r\n");
	}
}
コード例 #6
0
ファイル: webjames.c プロジェクト: aholmes/php-src
static int sapi_webjames_ub_write(const char *str, uint str_length TSRMLS_DC)
/*unbuffered write - send data straight out to socket*/
{
	int totalbytes = 0;

	do {
		int bytes;
		bytes = webjames_writebuffer(WG(conn),str,str_length);
		if (bytes<0) {
			PG(connection_status) = PHP_CONNECTION_ABORTED;
			if (!PG(ignore_user_abort)) {
				zend_bailout();
			}
			return bytes;
		}
		str += bytes;
		str_length -= bytes;
		totalbytes += bytes;
	} while (str_length);
	return totalbytes;
}
コード例 #7
0
ファイル: webjames.c プロジェクト: chosen1/php-src
static char *sapi_webjames_read_cookies(void)
{
	return WG(conn)->cookie;
}
コード例 #8
0
ファイル: webjames.c プロジェクト: chosen1/php-src
static void webjames_module_main(void)
{
	zend_file_handle file_handle;
	FILE *fp=NULL;
	char *path;

	/* Convert filename to Unix format*/
	__riscosify_control|=__RISCOSIFY_STRICT_UNIX_SPECS;
	path = __unixify(WG(conn)->filename,0,NULL,1024,0);
	if (path) SG(request_info).path_translated = estrdup(path);

	SG(request_info).query_string = WG(conn)->args;
	SG(request_info).request_uri = WG(conn)->requesturi;
	SG(request_info).request_method = WG(conn)->methodstr;
	if (WG(conn)->method==METHOD_HEAD) {
		SG(request_info).headers_only = 1;
	} else {
		SG(request_info).headers_only = 0;
	}
	SG(sapi_headers).http_response_code = 200;
	SG(request_info).content_type = WG(conn)->type;
	SG(request_info).content_length = WG(conn)->bodysize;

	SG(request_info).auth_user = NULL;
	SG(request_info).auth_password = NULL;
	if (WG(conn)->authorization) {
		char *colon=strchr(WG(conn)->authorization,':');
		if (colon) {
			SG(request_info).auth_user = emalloc(colon-WG(conn)->authorization+1);
			if (SG(request_info).auth_user) {
				memcpy(SG(request_info).auth_user,WG(conn)->authorization,colon-WG(conn)->authorization);
				SG(request_info).auth_user[colon-WG(conn)->authorization]='\0';
				SG(request_info).auth_password = estrdup(colon+1);
			}
		}
	}

	/*ensure that syslog calls get logged separately from WebJames' main log */
	openlog("PHP",0,0);

	file_handle.type = ZEND_HANDLE_FILENAME;
	file_handle.filename = SG(request_info).path_translated;
	file_handle.free_filename = 0;
	file_handle.opened_path = NULL;

	if (php_request_startup() == FAILURE) {
		return;
	}

	php_execute_script(&file_handle);
	php_request_shutdown(NULL);
}