separate http_env_request; add getQuer(), getPost(), getFiles()
[m6w6/ext-http] / php_http_env.c
index f7df9d04783d2454928483f6104e7b18dbb04132..926e2524fe30f73c6056475041e1f597b330d2b5 100644 (file)
@@ -105,9 +105,22 @@ PHP_HTTP_API int php_http_env_got_request_header(const char *name_str, size_t na
        return got;
 }
 
+PHP_HTTP_API zval *php_http_env_get_superglobal(const char *key, size_t key_len TSRMLS_DC)
+{
+       zval **hsv;
+
+       zend_is_auto_global(key, key_len TSRMLS_CC);
+
+       if ((SUCCESS != zend_hash_find(&EG(symbol_table), key, key_len + 1, (void *) &hsv)) || (Z_TYPE_PP(hsv) != IS_ARRAY)) {
+               return NULL;
+       }
+
+       return *hsv;
+}
+
 PHP_HTTP_API zval *php_http_env_get_server_var(const char *key, size_t key_len, zend_bool check TSRMLS_DC)
 {
-       zval **hsv, **var;
+       zval *hsv, **var;
        char *env;
 
        /* if available, this is a lot faster than accessing $_SERVER */
@@ -123,12 +136,10 @@ PHP_HTTP_API zval *php_http_env_get_server_var(const char *key, size_t key_len,
                return PHP_HTTP_G->env.server_var;
        }
 
-       zend_is_auto_global(ZEND_STRL("_SERVER") TSRMLS_CC);
-
-       if ((SUCCESS != zend_hash_find(&EG(symbol_table), ZEND_STRS("_SERVER"), (void *) &hsv)) || (Z_TYPE_PP(hsv) != IS_ARRAY)) {
+       if (!(hsv = php_http_env_get_superglobal(ZEND_STRL("_SERVER") TSRMLS_CC))) {
                return NULL;
        }
-       if ((SUCCESS != zend_symtable_find(Z_ARRVAL_PP(hsv), key, key_len + 1, (void *) &var))) {
+       if ((SUCCESS != zend_symtable_find(Z_ARRVAL_P(hsv), key, key_len + 1, (void *) &var))) {
                return NULL;
        }
        if (check && !((Z_TYPE_PP(var) == IS_STRING) && Z_STRVAL_PP(var) && Z_STRLEN_PP(var))) {
@@ -575,6 +586,11 @@ PHP_HTTP_BEGIN_ARGS(negotiateCharset, 1)
        PHP_HTTP_ARG_VAL(result_array, 1)
 PHP_HTTP_END_ARGS;
 
+PHP_HTTP_BEGIN_ARGS(negotiateEncoding, 1)
+       PHP_HTTP_ARG_VAL(supported, 0)
+       PHP_HTTP_ARG_VAL(result_array, 1)
+PHP_HTTP_END_ARGS;
+
 PHP_HTTP_BEGIN_ARGS(negotiate, 2)
        PHP_HTTP_ARG_VAL(value, 0)
        PHP_HTTP_ARG_VAL(supported, 0)
@@ -582,9 +598,9 @@ PHP_HTTP_BEGIN_ARGS(negotiate, 2)
        PHP_HTTP_ARG_VAL(result_array, 1)
 PHP_HTTP_END_ARGS;
 
-PHP_HTTP_EMPTY_ARGS(persistentHandlesStat);
+PHP_HTTP_EMPTY_ARGS(statPersistentHandles);
 
-PHP_HTTP_BEGIN_ARGS(persistentHandlesClean, 0)
+PHP_HTTP_BEGIN_ARGS(cleanPersistentHandles, 0)
        PHP_HTTP_ARG_VAL(name, 0)
        PHP_HTTP_ARG_VAL(ident, 0)
 PHP_HTTP_END_ARGS;
@@ -602,19 +618,20 @@ zend_function_entry php_http_env_method_entry[] = {
 
        PHP_HTTP_ENV_ME(negotiateLanguage)
        PHP_HTTP_ENV_ME(negotiateContentType)
+       PHP_HTTP_ENV_ME(negotiateEncoding)
        PHP_HTTP_ENV_ME(negotiateCharset)
        PHP_HTTP_ENV_ME(negotiate)
 
-       PHP_HTTP_ENV_ME(persistentHandlesStat)
-       PHP_HTTP_ENV_ME(persistentHandlesClean)
+       PHP_HTTP_ENV_ME(statPersistentHandles)
+       PHP_HTTP_ENV_ME(cleanPersistentHandles)
 
        EMPTY_FUNCTION_ENTRY
 };
 
 PHP_METHOD(HttpEnv, getRequestHeader)
 {
-       char *header_name_str;
-       int header_name_len;
+       char *header_name_str = NULL;
+       int header_name_len = 0;
 
        if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s!", &header_name_str, &header_name_len)) {
                if (header_name_str && header_name_len) {
@@ -747,6 +764,22 @@ PHP_METHOD(HttpEnv, negotiateCharset)
        }
 }
 
+PHP_METHOD(HttpEnv, negotiateEncoding)
+{
+       HashTable *supported;
+       zval *rs_array = NULL;
+
+       if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "H|z", &supported, &rs_array)) {
+               if (rs_array) {
+                       zval_dtor(rs_array);
+                       array_init(rs_array);
+               }
+               PHP_HTTP_DO_NEGOTIATE(encoding, supported, rs_array);
+       } else {
+               RETURN_FALSE;
+       }
+}
+
 PHP_METHOD(HttpEnv, negotiateContentType)
 {
        HashTable *supported;
@@ -788,7 +821,7 @@ PHP_METHOD(HttpEnv, negotiate)
        }
 }
 
-PHP_METHOD(HttpEnv, persistentHandlesStat)
+PHP_METHOD(HttpEnv, statPersistentHandles)
 {
        if (SUCCESS == zend_parse_parameters_none()) {
                object_init(return_value);
@@ -800,51 +833,20 @@ PHP_METHOD(HttpEnv, persistentHandlesStat)
        RETURN_FALSE;
 }
 
-PHP_METHOD(HttpEnv, persistentHandlesClean)
+PHP_METHOD(HttpEnv, cleanPersistentHandles)
 {
        char *name_str = NULL, *ident_str = NULL;
        int name_len = 0, ident_len = 0;
 
-       if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|ss", &name_str, &name_len, &ident_str, &ident_len)) {
+       if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s!s!", &name_str, &name_len, &ident_str, &ident_len)) {
                php_http_persistent_handle_cleanup(name_str, name_len, ident_str, ident_len TSRMLS_CC);
        }
 }
 
-zend_class_entry *php_http_env_request_class_entry;
-
-#undef PHP_HTTP_BEGIN_ARGS
-#undef PHP_HTTP_EMPTY_ARGS
-#define PHP_HTTP_BEGIN_ARGS(method, req_args)          PHP_HTTP_BEGIN_ARGS_EX(HttpEnvRequest, method, 0, req_args)
-#define PHP_HTTP_EMPTY_ARGS(method)                                    PHP_HTTP_EMPTY_ARGS_EX(HttpEnvRequest, method, 0)
-#define PHP_HTTP_ENV_REQUEST_ME(method, visibility)    PHP_ME(HttpEnvRequest, method, PHP_HTTP_ARGS(HttpEnvRequest, method), visibility)
-
-PHP_HTTP_EMPTY_ARGS(__construct);
-
-zend_function_entry php_http_env_request_method_entry[] = {
-       PHP_HTTP_ENV_REQUEST_ME(__construct, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
-
-       EMPTY_FUNCTION_ENTRY
-};
-
-PHP_METHOD(HttpEnvRequest, __construct)
-{
-       with_error_handling(EH_THROW, php_http_exception_class_entry) {
-               if (SUCCESS == zend_parse_parameters_none()) {
-                       php_http_message_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
-
-                       with_error_handling(EH_THROW, php_http_exception_class_entry) {
-                               obj->message = php_http_message_init_env(obj->message, PHP_HTTP_REQUEST TSRMLS_CC);
-                       } end_error_handling();
-               }
-       } end_error_handling();
-}
-
 PHP_MINIT_FUNCTION(http_env)
 {
        PHP_HTTP_REGISTER_CLASS(http, Env, http_env, NULL, 0);
 
-       PHP_HTTP_REGISTER_CLASS(http\\Env, Request, http_env_request, php_http_message_class_entry, 0);
-
        return SUCCESS;
 }