- support POST and HEAD requests
authorSascha Schumann <sas@php.net>
Sat, 25 Sep 1999 01:06:33 +0000 (01:06 +0000)
committerSascha Schumann <sas@php.net>
Sat, 25 Sep 1999 01:06:33 +0000 (01:06 +0000)
    -   clean up module_main()
    -   allow arbitrary mappings

aolserver.c

index 976c1d9b1d90ff8850d062aa9e1ed500873db19e..380e2cd3ab8b33fba2f8149b73c2f9c750cb4b1e 100644 (file)
@@ -49,13 +49,6 @@ typedef struct {
        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)
 {
@@ -119,8 +112,9 @@ static int
 sapi_read_post(char *buf, uint count_bytes SLS_DC)
 {
        uint total_read = 0;
+       php_aol_context *ctx = (php_aol_context *) SG(server_context);
 
-       HERE;
+       total_read = Ns_ConnRead(ctx->conn, buf, total_read);
        return total_read;
 }
        
@@ -163,27 +157,15 @@ php_server_shutdown(void *context)
 }
 
 static int
-module_main(php_aol_context *ctx)
+module_main(php_aol_context *ctx SLS_DC)
 {
        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();
+       CLS_FETCH();
+       ELS_FETCH();
+       PLS_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;
        
@@ -205,7 +187,7 @@ request_ctor(php_aol_context *ctx SLS_DC)
        server = Ns_ConnServer(ctx->conn);
        
        SG(server_context) = ctx;
-       SG(request_info).query_string = "";
+       SG(request_info).query_string = ctx->conn->request->query;
 
        Ns_DStringInit(&ds);
        Ns_UrlToFile(&ds, server, ctx->conn->request->url);
@@ -213,7 +195,7 @@ request_ctor(php_aol_context *ctx SLS_DC)
        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).request_method = ctx->conn->request->method;
        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);
@@ -243,7 +225,7 @@ request_handler(void *context, Ns_Conn *conn)
        
        request_ctor(ctx SLS_CC);
        
-       status = module_main(ctx);
+       status = module_main(ctx SLS_CC);
        
        request_dtor(ctx SLS_CC);
        
@@ -252,6 +234,30 @@ request_handler(void *context, Ns_Conn *conn)
        return status;
 }
 
+static void config(char *server, char *module, php_aol_context *ctx)
+{
+       int i;
+       char *path;
+       Ns_Set *set;
+       char *map;
+
+       path = Ns_ConfigPath(server, NULL, "php", NULL);
+       map = NULL;
+       set = Ns_ConfigGetSection(path);
+
+       for(i = 0; set && i < Ns_SetSize(set); i++) {
+               char *key = Ns_SetValue(set, i);
+
+               if(!strcasecmp(key, "map")) {
+                       map = Ns_SetValue(set, i);
+                       Ns_RegisterRequest(server, "GET", map, request_handler, NULL, ctx, 0);
+                       Ns_RegisterRequest(server, "POST", map, request_handler, NULL, ctx, 0);
+                       Ns_RegisterRequest(server, "HEAD", map, request_handler, NULL, ctx, 0);
+               }
+       }
+}
+       
+
 int Ns_ModuleInit(char *server, char *module)
 {
        php_aol_context *ctx;
@@ -263,9 +269,10 @@ int Ns_ModuleInit(char *server, char *module)
        ctx = malloc(sizeof *ctx);
        ctx->sapi_module = &sapi_module;
 
+       config(server, module, ctx);
+
        Ns_RegisterServerShutdown(server, php_server_shutdown, ctx);
 
-       Ns_RegisterRequest(server, "GET", "/php", request_handler, NULL, ctx, 0);
        return NS_OK;
 }