X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=php_http_env.c;h=8cdbb73e198072edc4b7f43e8854665fdbe2f48f;hp=1bd1a14e3de6bb03149d5500305961bde7574a36;hb=20a7c37b273e313e53a37f4406eb49898dd50b6d;hpb=a07b79b1871054ca17e48b69445b4dc201f24662 diff --git a/php_http_env.c b/php_http_env.c index 1bd1a14..8cdbb73 100644 --- a/php_http_env.c +++ b/php_http_env.c @@ -6,12 +6,10 @@ | modification, are permitted provided that the conditions mentioned | | in the accompanying LICENSE file are met. | +--------------------------------------------------------------------+ - | Copyright (c) 2004-2010, Michael Wallner | + | Copyright (c) 2004-2011, Michael Wallner | +--------------------------------------------------------------------+ */ -/* $Id $ */ - #include "php_http.h" #include
@@ -62,7 +60,7 @@ PHP_HTTP_API void php_http_env_get_request_headers(HashTable *headers TSRMLS_DC) zend_hash_get_current_data_ex(Z_ARRVAL_PP(hsv), (void *) &header, &pos); Z_ADDREF_P(*header); - zend_hash_add(PHP_HTTP_G->env.request.headers, key.str, key.len, (void *) header, sizeof(zval *), NULL); + zend_symtable_update(PHP_HTTP_G->env.request.headers, key.str, key.len, (void *) header, sizeof(zval *), NULL); efree(key.str); } @@ -82,7 +80,7 @@ PHP_HTTP_API char *php_http_env_get_request_header(const char *name_str, size_t php_http_env_get_request_headers(NULL TSRMLS_CC); - if (SUCCESS == zend_hash_find(PHP_HTTP_G->env.request.headers, key, name_len + 1, (void *) &zvalue)) { + if (SUCCESS == zend_symtable_find(PHP_HTTP_G->env.request.headers, key, name_len + 1, (void *) &zvalue)) { zval *zcopy = php_http_ztyp(IS_STRING, *zvalue); val = estrndup(Z_STRVAL_P(zcopy), Z_STRLEN_P(zcopy)); @@ -100,7 +98,7 @@ PHP_HTTP_API int php_http_env_got_request_header(const char *name_str, size_t na int got; php_http_env_get_request_headers(NULL TSRMLS_CC); - got = zend_hash_exists(PHP_HTTP_G->env.request.headers, key, name_len + 1); + got = zend_symtable_exists(PHP_HTTP_G->env.request.headers, key, name_len + 1); efree(key); return got; @@ -129,7 +127,7 @@ PHP_HTTP_API zval *php_http_env_get_server_var(const char *key, size_t key_len, if ((SUCCESS != zend_hash_find(&EG(symbol_table), ZEND_STRS("_SERVER"), (void *) &hsv)) || (Z_TYPE_PP(hsv) != IS_ARRAY)) { return NULL; } - if ((SUCCESS != zend_hash_find(Z_ARRVAL_PP(hsv), key, key_len + 1, (void *) &var))) { + if ((SUCCESS != zend_symtable_find(Z_ARRVAL_PP(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))) { @@ -355,7 +353,7 @@ PHP_HTTP_API char *php_http_env_get_response_header(const char *name_str, size_t zval **zvalue; char *key = php_http_pretty_key(estrndup(name_str, name_len), name_len, 1, 1); - if (SUCCESS == zend_hash_find(&headers, key, name_len + 1, (void *) &zvalue)) { + if (SUCCESS == zend_symtable_find(&headers, key, name_len + 1, (void *) &zvalue)) { zval *zcopy = php_http_ztyp(IS_STRING, *zvalue); val = estrndup(Z_STRVAL_P(zcopy), Z_STRLEN_P(zcopy)); @@ -589,8 +587,9 @@ PHP_HTTP_BEGIN_ARGS(persistentHandlesClean, 0) PHP_HTTP_ARG_VAL(ident, 0) PHP_HTTP_END_ARGS; -PHP_HTTP_BEGIN_ARGS(persistentHandlesIdent, 0) - PHP_HTTP_ARG_VAL(name, 0) +PHP_HTTP_BEGIN_ARGS(parseParams, 1) + PHP_HTTP_ARG_VAL(params, 0) + PHP_HTTP_ARG_VAL(flags, 0) PHP_HTTP_END_ARGS; zend_function_entry php_http_env_method_entry[] = { @@ -612,6 +611,8 @@ zend_function_entry php_http_env_method_entry[] = { PHP_HTTP_ENV_ME(persistentHandlesStat) PHP_HTTP_ENV_ME(persistentHandlesClean) + PHP_HTTP_ENV_ME(parseParams) + EMPTY_FUNCTION_ENTRY }; @@ -865,6 +866,23 @@ PHP_METHOD(HttpEnv, persistentHandlesClean) } } +PHP_METHOD(HttpEnv, parseParams) +{ + char *param_str; + int param_len; + long flags = PHP_HTTP_PARAMS_DEFAULT; + + if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", ¶m_str, ¶m_len, &flags)) { + RETURN_FALSE; + } + + array_init(return_value); + if (SUCCESS != php_http_params_parse(param_str, flags, php_http_params_parse_default_func, Z_ARRVAL_P(return_value) TSRMLS_CC)) { + zval_dtor(return_value); + RETURN_FALSE; + } +} + zend_class_entry *php_http_env_request_class_entry; #undef PHP_HTTP_BEGIN_ARGS @@ -897,7 +915,14 @@ PHP_METHOD(HttpEnvRequest, __construct) 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); + + zend_declare_class_constant_long(php_http_env_class_entry, ZEND_STRL("PARAMS_ALLOW_COMMA"), PHP_HTTP_PARAMS_ALLOW_COMMA TSRMLS_CC); + zend_declare_class_constant_long(php_http_env_class_entry, ZEND_STRL("PARAMS_ALLOW_FAILURE"), PHP_HTTP_PARAMS_ALLOW_FAILURE TSRMLS_CC); + zend_declare_class_constant_long(php_http_env_class_entry, ZEND_STRL("PARAMS_RAISE_ERROR"), PHP_HTTP_PARAMS_RAISE_ERROR TSRMLS_CC); + zend_declare_class_constant_long(php_http_env_class_entry, ZEND_STRL("PARAMS_DEFAULT"), PHP_HTTP_PARAMS_DEFAULT TSRMLS_CC); + zend_declare_class_constant_long(php_http_env_class_entry, ZEND_STRL("PARAMS_COLON_SEPARATOR"), PHP_HTTP_PARAMS_COLON_SEPARATOR TSRMLS_CC); + + PHP_HTTP_REGISTER_CLASS(http\\Env, Request, http_env_request, php_http_message_class_entry, 0); return SUCCESS; }