- add note about SSL connect errors on windows due to LIB/DLL mismatches
[m6w6/ext-http] / http_api.c
index eebfeb2ef80840c9f2f53bb46b3782413941dcea..9943cd8f49cf55a516ff9bb3f49edd16b017bcef 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "SAPI.h"
 #include "ext/standard/url.h"
+#include "ext/standard/head.h"
 
 #include "php_http.h"
 #include "php_http_std_defs.h"
@@ -175,6 +176,7 @@ void _http_error_ex(long type TSRMLS_DC, long code, const char *format, ...)
                
                vspprintf(&message, 0, format, args);
                zend_throw_exception(http_exception_get_for_code(code), message, code TSRMLS_CC);
+               efree(message);
        } else
 #endif
        php_verror(NULL, "", type, format, args TSRMLS_CC);
@@ -193,7 +195,7 @@ void _http_log_ex(char *file, const char *ident, const char *message TSRMLS_DC)
        strftime(datetime, sizeof(datetime), "%Y-%m-%d %H:%M:%S", php_localtime_r(&now, &nowtm));
 
 #define HTTP_LOG_WRITE(file, type, msg) \
-       if (file && strlen(file)) { \
+       if (file && *file) { \
                php_stream *log = php_stream_open_wrapper(file, "ab", REPORT_ERRORS|ENFORCE_SAFE_MODE, NULL); \
                 \
                if (log) { \
@@ -220,7 +222,7 @@ STATUS _http_exit_ex(int status, char *header, char *body, zend_bool send_header
                }
        }
        
-       if (body) {
+       if (php_header(TSRMLS_C) && body) {
                PHPWRITE(body, strlen(body));
        }
        
@@ -228,6 +230,8 @@ STATUS _http_exit_ex(int status, char *header, char *body, zend_bool send_header
        {
                case 301:       http_log(HTTP_G(log).redirect, "301-REDIRECT", header);                 break;
                case 302:       http_log(HTTP_G(log).redirect, "302-REDIRECT", header);                 break;
+               case 303:       http_log(HTTP_G(log).redirect, "303-REDIRECT", header);                 break;
+               case 307:       http_log(HTTP_G(log).redirect, "307-REDIRECT", header);                 break;
                case 304:       http_log(HTTP_G(log).cache, "304-CACHE", header);                               break;
                case 405:       http_log(HTTP_G(log).allowed_methods, "405-ALLOWED", header);   break;
                default:        http_log(NULL, header, body);                                                                   break;