Backport v4 updates
[m6w6/ext-http] / src / php_http_env.c
index df22d5a7134a29eceb4f43ca107a9d943a9203da..fdbdd92ee97ae08e9d7df7966737d43dc92a2f97 100644 (file)
 
 
 PHP_RSHUTDOWN_FUNCTION(http_env)
+{
+       php_http_env_reset();
+       return SUCCESS;
+}
+
+void php_http_env_reset()
 {
        if (PHP_HTTP_G->env.request.headers) {
                zend_hash_destroy(PHP_HTTP_G->env.request.headers);
@@ -24,13 +30,10 @@ PHP_RSHUTDOWN_FUNCTION(http_env)
        if (PHP_HTTP_G->env.request.body) {
                php_http_message_body_free(&PHP_HTTP_G->env.request.body);
        }
-
        if (PHP_HTTP_G->env.server_var) {
                zval_ptr_dtor(PHP_HTTP_G->env.server_var);
                PHP_HTTP_G->env.server_var = NULL;
        }
-
-       return SUCCESS;
 }
 
 void php_http_env_get_request_headers(HashTable *headers)
@@ -501,7 +504,7 @@ ZEND_RESULT_CODE php_http_env_set_response_header_value(long http_code, const ch
                                return FAILURE;
                        }
                        h.response_code = http_code;
-                       h.line_len = spprintf(&h.line, 0, "%.*s: %.*s", (int) name_len, name_str, data->len, data->val);
+                       h.line_len = spprintf(&h.line, 0, "%s: %s", name_str, data->val);
 
                        ret = sapi_header_op(replace ? SAPI_HEADER_REPLACE : SAPI_HEADER_ADD, (void *) &h);
 
@@ -555,12 +558,12 @@ static PHP_METHOD(HttpEnv, getRequestBody)
 {
        php_http_message_body_t *body;
        php_http_message_body_object_t *body_obj;
-       zend_class_entry *class_entry = php_http_message_body_class_entry;
+       zend_class_entry *class_entry = php_http_get_message_body_class_entry();
 
        php_http_expect(SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS(), "|C", &class_entry), invalid_arg, return);
 
        body = php_http_env_get_request_body();
-       if (SUCCESS == php_http_new((void *) &body_obj, class_entry, (php_http_new_t) php_http_message_body_object_new_ex, php_http_message_body_class_entry, body)) {
+       if (SUCCESS == php_http_new((void *) &body_obj, class_entry, (php_http_new_t) php_http_message_body_object_new_ex, php_http_get_message_body_class_entry(), body)) {
                php_http_message_body_addref(body);
                RETVAL_OBJ(&body_obj->zo);
        }
@@ -774,6 +777,15 @@ static PHP_METHOD(HttpEnv, negotiate)
        }
 }
 
+ZEND_BEGIN_ARG_INFO(ai_HttpEnv_reset, 0)
+ZEND_END_ARG_INFO();
+static PHP_METHOD(HttpEnv, reset)
+{
+       zend_parse_parameters_none();
+       php_http_env_reset();
+}
+
+
 static zend_function_entry php_http_env_methods[] = {
        PHP_ME(HttpEnv, getRequestHeader,              ai_HttpEnv_getRequestHeader,              ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
        PHP_ME(HttpEnv, getRequestBody,                ai_HttpEnv_getRequestBody,                ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
@@ -792,10 +804,16 @@ static zend_function_entry php_http_env_methods[] = {
        PHP_ME(HttpEnv, negotiateCharset,              ai_HttpEnv_negotiateCharset,              ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
        PHP_ME(HttpEnv, negotiate,                     ai_HttpEnv_negotiate,                     ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
 
+       PHP_ME(HttpEnv, reset,                         ai_HttpEnv_reset,                         ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
+
        EMPTY_FUNCTION_ENTRY
 };
 
-zend_class_entry *php_http_env_class_entry;
+static zend_class_entry *php_http_env_class_entry;
+zend_class_entry *php_http_env_get_class_entry(void)
+{
+       return php_http_env_class_entry;
+}
 
 PHP_MINIT_FUNCTION(http_env)
 {