summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSascha Schumann <sas@php.net>1999-09-25 00:32:25 +0000
committerSascha Schumann <sas@php.net>1999-09-25 00:32:25 +0000
commit4e8c8fd99247f1e50fbda5b0301153dbb527f453 (patch)
treec271e97bbc53d998b77ef3bf0da15d49711df657
parentbfa7b6b1459fbd342958c5858a9ca8a573435890 (diff)
downloadphp-git-4e8c8fd99247f1e50fbda5b0301153dbb527f453.tar.gz
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).
-rw-r--r--Makefile.in7
-rw-r--r--acconfig.h.in2
-rw-r--r--aolserver.c272
-rw-r--r--configure.in.in21
4 files changed, 301 insertions, 1 deletions
diff --git a/Makefile.in b/Makefile.in
index 9fc5c8a6ac..a5b2c0a582 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -73,7 +73,9 @@ LIBOBJS=@LIBOBJS@
SOURCE = main.c internal_functions.c snprintf.c php3_sprintf.c \
configuration-parser.c configuration-scanner.c request_info.c \
safe_mode.c fopen-wrappers.c php3_realpath.c alloca.c output.c \
- php_ini.c SAPI.c cgi_main.c rfc1867.c dlist.c php_content_types.c
+ php_ini.c SAPI.c cgi_main.c rfc1867.c dlist.c php_content_types.c \
+ aolserver.c
+
OBJS = $(SOURCE:.c=.o) $(LIBOBJS)
PHPLIBS = -Llibzend -lzend -Lext -lphpext
LIBS = $(PHPLIBS) $(EXTRA_LIBS) @LIBS@
@@ -113,6 +115,9 @@ libphp4.so: $(srcdir)/mod_php4.c libmodphp4-so.a @REGEX_LIB@
-@test -f ./mod_php4.c || test -h ./mod_php4.c || $(LN_S) $(srcdir)/mod_php4.c ./mod_php4.c
$(APXS) $(INCLUDE) -c -o libphp4.so @VERSION_SCRIPT@ @RPATHS@ ./mod_php4.c libmodphp4-so.a $(APXS_LDFLAGS) $(APXS_EXP)
+php4_aol.so: libmodphp4-so.a
+ g++ $(LDFLAGS) aolserver.o -rdynamic -shared -o $@ libmodphp4-so.a $(LIBS) @TSRM_LIB@
+
regex/libregex.a:
(cd regex; $(MAKE) lib)
diff --git a/acconfig.h.in b/acconfig.h.in
index 9d5f579304..6c5744f358 100644
--- a/acconfig.h.in
+++ b/acconfig.h.in
@@ -4,6 +4,8 @@
#undef PACKAGE
#undef VERSION
+#undef HAVE_AOLSERVER
+
#undef HAVE_STRUCT_FLOCK
#undef HAVE_TM_GMTOFF
diff --git a/aolserver.c b/aolserver.c
new file mode 100644
index 0000000000..976c1d9b1d
--- /dev/null
+++ b/aolserver.c
@@ -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 |
+ | license@php.net so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Author: Sascha Schumann <sascha@schumann.cx> |
+ +----------------------------------------------------------------------+
+ */
+
+/* $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 = &eg;
+ 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
diff --git a/configure.in.in b/configure.in.in
index 89529e38e4..c8620c629e 100644
--- a/configure.in.in
+++ b/configure.in.in
@@ -622,6 +622,27 @@ AC_SUBST(PHP_LIBS)
fi
fi
+RESULT=no
+AC_MSG_CHECKING(for AOLserver support)
+AC_ARG_WITH(aolserver,
+[ --with-aolserver=DIR],
+[
+ if test ! -d $withval ; then
+ AC_MSG_ERROR(You did not specify a directory)
+ fi
+ if test "$enable_thread_safety" != "yes"; then
+ AC_MSG_ERROR(AOLserver must be compiled using --enable-thread-safety)
+ fi
+ NS_DIR=$withval
+ AC_ADD_INCLUDE($NS_DIR/include)
+ AC_DEFINE(HAVE_AOLSERVER)
+ BINNAME=php4_aol.so
+ INSTALL_IT="\$(SHELL) \$(srcdir)/install-sh -m 0755 $BINNAME $NS_DIR/root/bin/$BINNAME"
+ CFLAGS="$CFLAGS -rdynamic"
+ RESULT=yes
+])
+AC_MSG_RESULT($RESULT)
+
AC_MSG_CHECKING(whether to use bundled regex library)
AC_ARG_WITH(system-regex,
[ --with-system-regex Do not use the bundled regex library],