- finish work on encoding api
[m6w6/ext-http] / http_api.c
index 27986373b2f328895cd22ecb7c5c933e0506b2b3..1eed789afe1191cc5c536c6dfd85a9f33ba78325 100644 (file)
@@ -21,7 +21,6 @@
 #include "SAPI.h"
 #include "php_output.h"
 #include "ext/standard/url.h"
-#include "ext/standard/head.h"
 
 #include "php_http_api.h"
 #include "php_http_send_api.h"
@@ -30,8 +29,6 @@
 #      include "php_http_exception_object.h"
 #endif
 
-ZEND_EXTERN_MODULE_GLOBALS(http);
-
 PHP_MINIT_FUNCTION(http_support)
 {
        HTTP_LONG_CONSTANT("HTTP_SUPPORT", HTTP_SUPPORT);
@@ -56,7 +53,7 @@ PHP_HTTP_API long _http_support(long feature)
 #ifdef HTTP_HAVE_MAGIC
        support |= HTTP_SUPPORT_MAGICMIME;
 #endif
-#if defined(HTTP_HAVE_ZLIB) || defined(HAVE_ZLIB)
+#ifdef HTTP_HAVE_ZLIB
        support |= HTTP_SUPPORT_ENCODINGS;
 #endif
 
@@ -250,7 +247,7 @@ STATUS _http_exit_ex(int status, char *header, char *body, zend_bool send_header
        }
        
        php_end_ob_buffers(0 TSRMLS_CC);
-       if (php_header(TSRMLS_C) && body) {
+       if ((SUCCESS == sapi_send_headers(TSRMLS_C)) && body) {
                PHPWRITE(body, strlen(body));
        }
        
@@ -322,6 +319,33 @@ PHP_HTTP_API STATUS _http_get_request_body_ex(char **body, size_t *length, zend_
                *body = (char *) (dup ? estrndup(SG(request_info).raw_post_data, *length) : SG(request_info).raw_post_data);
                return SUCCESS;
        }
+       
+       /* PHP only reads POST */
+       if (sapi_module.read_post) {
+               char buf[4096];
+               int len;
+               
+               while (0 < (len = sapi_module.read_post(buf, sizeof(buf) TSRMLS_CC))) {
+                       *body = erealloc(*body, *length + len + 1);
+                       memcpy(*body + *length, buf, len);
+                       *length += len;
+                       (*body)[*length] = '\0';
+               }
+               
+               /* check for error */
+               if (len >= 0) {
+                       /* connect to sapi module so it'll be freed */
+                       if (!dup) {
+                               SG(request_info).raw_post_data = *body;
+                               SG(request_info).raw_post_data_length = *length;
+                       }
+                       return SUCCESS;
+               } else {
+                       STR_FREE(*body);
+                       *length = 0;
+               }
+       }
+       
        return FAILURE;
 }
 /* }}} */