forked from php/php-src
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Initial AOLserver support. Note that the current way of creating
the shared library works only with GNU utilities. Some features have to be added yet (i.e. POST and cookie support).
- Loading branch information
Sascha Schumann
committed
Sep 25, 1999
1 parent
bfa7b6b
commit 4e8c8fd
Showing
4 changed files
with
301 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,6 +4,8 @@ | |
#undef PACKAGE | ||
#undef VERSION | ||
|
||
#undef HAVE_AOLSERVER | ||
|
||
#undef HAVE_STRUCT_FLOCK | ||
#undef HAVE_TM_GMTOFF | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,272 @@ | ||
/* | ||
+----------------------------------------------------------------------+ | ||
| PHP version 4.0 | | ||
+----------------------------------------------------------------------+ | ||
| Copyright (c) 1997, 1998, 1999 The PHP Group | | ||
+----------------------------------------------------------------------+ | ||
| This source file is subject to version 2.0 of the PHP license, | | ||
| that is bundled with this package in the file LICENSE, and is | | ||
| available at through the world-wide-web at | | ||
| http://www.php.net/license/2_0.txt. | | ||
| If you did not receive a copy of the PHP license and are unable to | | ||
| obtain it through the world-wide-web, please send a note to | | ||
| [email protected] so we can mail you a copy immediately. | | ||
+----------------------------------------------------------------------+ | ||
| Author: Sascha Schumann <[email protected]> | | ||
+----------------------------------------------------------------------+ | ||
*/ | ||
|
||
/* $Id$ */ | ||
|
||
#include "php.h" | ||
|
||
#ifdef HAVE_AOLSERVER | ||
|
||
#include "php_ini.h" | ||
#include "php_globals.h" | ||
#include "SAPI.h" | ||
#include "main.h" | ||
|
||
/* conflict between PHP and aolserver */ | ||
#define Debug DEBUG_UNUSED | ||
#include "ns.h" | ||
#undef Debug | ||
|
||
#include "php_version.h" | ||
|
||
#if 0 | ||
#define HERE \ | ||
Ns_Log(Notice, "in %s:%d", __FUNCTION__, __LINE__); | ||
#else | ||
#define HERE | ||
#endif | ||
|
||
int Ns_ModuleVersion = 1; | ||
|
||
typedef struct { | ||
sapi_module_struct *sapi_module; | ||
Ns_DString content_type; | ||
Ns_Conn *conn; | ||
} php_aol_context; | ||
|
||
static int | ||
sapi_aol_read_post(char *buf, uint count_bytes SLS_DC) | ||
{ | ||
HERE; | ||
return FAILURE; | ||
} | ||
|
||
static int | ||
sapi_ub_write(const char *str, uint str_length) | ||
{ | ||
Ns_DString dstr; | ||
php_aol_context *ctx; | ||
SLS_FETCH(); | ||
|
||
HERE; | ||
ctx = (php_aol_context *) SG(server_context); | ||
|
||
Ns_DStringInit(&dstr); | ||
Ns_Log(Notice, "writing %d bytes\n", str_length); | ||
Ns_DStringNAppend(&dstr, (char *) str, str_length); | ||
Ns_ConnSendDString(ctx->conn, &dstr); | ||
Ns_DStringFree(&dstr); | ||
|
||
return str_length; | ||
} | ||
|
||
static int | ||
sapi_header_handler(sapi_header_struct *sapi_header, sapi_headers_struct *sapi_headers SLS_DC) | ||
{ | ||
char *header_name, *header_content; | ||
char *p; | ||
php_aol_context *ctx = (php_aol_context *) SG(server_context); | ||
|
||
header_name = sapi_header->header; | ||
header_content = p = strchr(header_name, ':'); | ||
|
||
if(!p) return 0; | ||
|
||
*p = '\0'; | ||
do { | ||
header_content++; | ||
} while(*header_content == ' '); | ||
|
||
if(!strcasecmp(header_name, "Content-type")) { | ||
Ns_ConnSetTypeHeader(ctx->conn, header_content); | ||
} else { | ||
Ns_ConnSetHeaders(ctx->conn, header_name, header_content); | ||
} | ||
|
||
*p = ':'; | ||
|
||
efree(sapi_header->header); | ||
|
||
return 0; | ||
} | ||
|
||
static int | ||
sapi_send_headers(sapi_headers_struct *sapi_headers SLS_DC) | ||
{ | ||
php_aol_context *ctx; | ||
|
||
ctx = (php_aol_context *) SG(server_context); | ||
Ns_ConnFlushHeaders(ctx->conn, 200); | ||
return SAPI_HEADER_SENT_SUCCESSFULLY; | ||
} | ||
|
||
static int | ||
sapi_read_post(char *buf, uint count_bytes SLS_DC) | ||
{ | ||
uint total_read = 0; | ||
|
||
HERE; | ||
return total_read; | ||
} | ||
|
||
static char * | ||
sapi_read_cookies(SLS_D) | ||
{ | ||
HERE; | ||
return NULL; | ||
} | ||
|
||
static sapi_module_struct sapi_module = { | ||
"PHP Language", | ||
|
||
php_module_startup, /* startup */ | ||
php_module_shutdown_wrapper, /* shutdown */ | ||
|
||
sapi_ub_write, /* unbuffered write */ | ||
|
||
php_error, /* error handler */ | ||
|
||
sapi_header_handler, /* header handler */ | ||
sapi_send_headers, /* send headers handler */ | ||
NULL, /* send header handler */ | ||
|
||
sapi_read_post, /* read POST data */ | ||
sapi_read_cookies, /* read Cookies */ | ||
|
||
STANDARD_SAPI_MODULE_PROPERTIES | ||
}; | ||
|
||
static void | ||
php_server_shutdown(void *context) | ||
{ | ||
php_aol_context *ctx = (php_aol_context *) context; | ||
|
||
HERE; | ||
ctx->sapi_module->shutdown(ctx->sapi_module); | ||
|
||
free(ctx); | ||
} | ||
|
||
static int | ||
module_main(php_aol_context *ctx) | ||
{ | ||
zend_file_handle file_handle; | ||
zend_compiler_globals cg; | ||
zend_executor_globals eg; | ||
php_core_globals pcg; | ||
zend_compiler_globals *compiler_globals = &cg; | ||
zend_executor_globals *executor_globals = ⪚ | ||
php_core_globals *core_globals = &pcg; | ||
SLS_FETCH(); | ||
|
||
HERE; | ||
|
||
if(setjmp(EG(bailout)) != 0) { | ||
return !NS_OK; | ||
} | ||
|
||
compiler_globals = ts_resource(compiler_globals_id); | ||
executor_globals = ts_resource(executor_globals_id); | ||
core_globals = ts_resource(core_globals_id); | ||
|
||
file_handle.type = ZEND_HANDLE_FILENAME; | ||
file_handle.filename = SG(request_info).path_translated; | ||
|
||
php_request_startup(CLS_C ELS_CC PLS_CC SLS_CC); | ||
php_execute_script(&file_handle CLS_CC ELS_CC PLS_CC); | ||
php_request_shutdown(NULL); | ||
|
||
return NS_OK; | ||
} | ||
|
||
static void | ||
request_ctor(php_aol_context *ctx SLS_DC) | ||
{ | ||
char *server; | ||
Ns_DString ds; | ||
char *root; | ||
HERE; | ||
|
||
server = Ns_ConnServer(ctx->conn); | ||
|
||
SG(server_context) = ctx; | ||
SG(request_info).query_string = ""; | ||
|
||
Ns_DStringInit(&ds); | ||
Ns_UrlToFile(&ds, server, ctx->conn->request->url); | ||
SG(request_info).path_translated = strdup(Ns_DStringValue(&ds)); | ||
Ns_DStringFree(&ds); | ||
root = Ns_PageRoot(server); | ||
SG(request_info).request_uri = SG(request_info).path_translated + strlen(root); | ||
SG(request_info).request_method = "GET"; | ||
SG(request_info).content_length = Ns_ConnContentLength(ctx->conn); | ||
Ns_DStringInit(&ctx->content_type); | ||
Ns_ConnCopyToDString(ctx->conn, SG(request_info).content_length, &ctx->content_type); | ||
SG(request_info).content_type = Ns_DStringValue(&ctx->content_type); | ||
SG(request_info).auth_user = NULL; | ||
SG(request_info).auth_password = NULL; | ||
} | ||
|
||
static void | ||
request_dtor(php_aol_context *ctx SLS_DC) | ||
{ | ||
HERE; | ||
|
||
free(SG(request_info).path_translated); | ||
Ns_DStringFree(&ctx->content_type); | ||
} | ||
|
||
static int | ||
request_handler(void *context, Ns_Conn *conn) | ||
{ | ||
php_aol_context *ctx = (php_aol_context *) context; | ||
int status = NS_OK; | ||
SLS_FETCH(); | ||
|
||
HERE; | ||
ctx->conn = conn; | ||
|
||
request_ctor(ctx SLS_CC); | ||
|
||
status = module_main(ctx); | ||
|
||
request_dtor(ctx SLS_CC); | ||
|
||
ctx->conn = NULL; | ||
|
||
return status; | ||
} | ||
|
||
int Ns_ModuleInit(char *server, char *module) | ||
{ | ||
php_aol_context *ctx; | ||
|
||
tsrm_startup(10, 10, 0); | ||
sapi_startup(&sapi_module); | ||
sapi_module.startup(&sapi_module); | ||
|
||
ctx = malloc(sizeof *ctx); | ||
ctx->sapi_module = &sapi_module; | ||
|
||
Ns_RegisterServerShutdown(server, php_server_shutdown, ctx); | ||
|
||
Ns_RegisterRequest(server, "GET", "/php", request_handler, NULL, ctx, 0); | ||
return NS_OK; | ||
} | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters