]> granicus.if.org Git - php/commitdiff
* use faster Ns_ConnWrite()
authorSascha Schumann <sas@php.net>
Sat, 25 Sep 1999 18:51:38 +0000 (18:51 +0000)
committerSascha Schumann <sas@php.net>
Sat, 25 Sep 1999 18:51:38 +0000 (18:51 +0000)
    * access cookies correctly
    * set HTTP_* variables for script

aolserver.c

index ecc9d5e8395f703735aea6da2e712116a9b49c8f..e629f6a1ab789bd465d34793dcab2dc3e3603690 100644 (file)
 int Ns_ModuleVersion = 1;
 
 typedef struct {
+       /* per server */
        sapi_module_struct *sapi_module;
-       Ns_DString content_type;
-       Ns_Conn *conn;
        char *ns_server;
        char *ns_module;
+       
+       /* per request */
+       Ns_Conn *conn;
+       Ns_DString content_type;
 } php_ns_context;
 
 static void php_ns_config(php_ns_context *ctx);
@@ -49,18 +52,15 @@ static void php_ns_config(php_ns_context *ctx);
 static int
 php_ns_sapi_ub_write(const char *str, uint str_length)
 {
-       Ns_DString dstr;
+       int sent_bytes;
        php_ns_context *ctx;
        SLS_FETCH();
 
        ctx = (php_ns_context *) SG(server_context);
 
-       Ns_DStringInit(&dstr);
-       Ns_DStringNAppend(&dstr, (char *) str, str_length);
-       Ns_ConnSendDString(ctx->conn, &dstr);
-       Ns_DStringFree(&dstr);
+       sent_bytes = Ns_ConnWrite(ctx->conn, (void *) str, str_length);
 
-       return str_length;
+       return sent_bytes;
 }
 
 static int
@@ -99,6 +99,9 @@ php_ns_sapi_send_headers(sapi_headers_struct *sapi_headers SLS_DC)
        php_ns_context *ctx;
        
        ctx = (php_ns_context *) SG(server_context);
+       if(SG(sapi_headers).send_default_content_type) {
+               Ns_ConnSetRequiredHeaders(ctx->conn, "text/html", 0);
+       }
        Ns_ConnFlushHeaders(ctx->conn, SG(sapi_headers).http_response_code);
        return SAPI_HEADER_SENT_SUCCESSFULLY;
 }
@@ -121,14 +124,13 @@ php_ns_sapi_read_post(char *buf, uint count_bytes SLS_DC)
 static char *
 php_ns_sapi_read_cookies(SLS_D)
 {
-       Ns_Set *headers;
-       char *http_cookie;
+       int i;
+       char *http_cookie = NULL;
        php_ns_context *ctx = (php_ns_context *) SG(server_context);
        
-       headers = Ns_ConnHeaders(conn);
-       
-       if(headers) {
-               http_cookie = Ns_SetGet(headers, "HTTP_COOKIE");
+       i = Ns_SetFind(ctx->conn->headers, "cookie");
+       if(i != -1) {
+               http_cookie = Ns_SetValue(ctx->conn->headers, i);
        }
 
        return http_cookie;
@@ -154,6 +156,36 @@ static sapi_module_struct sapi_module = {
        STANDARD_SAPI_MODULE_PROPERTIES
 };
 
+static void
+php_ns_hash_environment(php_ns_context *ctx CLS_DC ELS_DC PLS_DC SLS_DC)
+{
+       int i;
+
+       for(i = 0; i < Ns_SetSize(ctx->conn->headers); i++) {
+               char *key = Ns_SetKey(ctx->conn->headers, i);
+               char *value = Ns_SetValue(ctx->conn->headers, i);
+               char *p;
+               zval *pval;
+               char buf[512];
+               int buf_len;
+
+               buf_len = snprintf(buf, 511, "HTTP_%s", key);
+               for(p = buf; *p; p++) {
+                       *p = toupper(*p);
+                       if(*p < 'A' || *p > 'Z') {
+                               *p = '_';
+                       }
+               }
+               
+               MAKE_STD_ZVAL(pval);
+               pval->type = IS_STRING;
+               pval->value.str.len = strlen(value);
+               pval->value.str.val = estrndup(value, pval->value.str.len);
+
+               zend_hash_update(&EG(symbol_table), buf, buf_len + 1, &pval, sizeof(zval *), NULL);
+       }
+}
+
 static int
 php_ns_module_main(php_ns_context *ctx SLS_DC)
 {
@@ -166,6 +198,7 @@ php_ns_module_main(php_ns_context *ctx SLS_DC)
        file_handle.filename = SG(request_info).path_translated;
        
        php_request_startup(CLS_C ELS_CC PLS_CC SLS_CC);
+       php_ns_hash_environment(ctx CLS_CC ELS_CC PLS_CC SLS_CC);
        php_execute_script(&file_handle CLS_CC ELS_CC PLS_CC);
        php_request_shutdown(NULL);