if (SUCCESS == zend_hash_find(&SG(known_post_content_types), key_str, key_len, (void *) &post_entry)) {
zval *files = PG(http_globals)[TRACK_VARS_FILES];
- zend_is_auto_global(ZEND_STRL("_POST") TSRMLS_CC);
-
if (post_entry) {
SG(request_info).post_entry = post_entry;
}
}
-PHP_HTTP_API char *php_http_env_get_request_header(const char *name_str, size_t name_len, size_t *len TSRMLS_DC)
+PHP_HTTP_API char *php_http_env_get_request_header(const char *name_str, size_t name_len, size_t *len, php_http_message_t *request TSRMLS_DC)
{
- zval **zvalue;
+ HashTable *request_headers;
+ zval **zvalue = NULL;
char *val = NULL, *key = php_http_pretty_key(estrndup(name_str, name_len), name_len, 1, 1);
- php_http_env_get_request_headers(NULL TSRMLS_CC);
+ if (request) {
+ request_headers = &request->hdrs;
+ } else {
+ php_http_env_get_request_headers(NULL TSRMLS_CC);
+ request_headers = PHP_HTTP_G->env.request.headers;
+ }
- if (SUCCESS == zend_symtable_find(PHP_HTTP_G->env.request.headers, key, name_len + 1, (void *) &zvalue)) {
+ if (SUCCESS == zend_symtable_find(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));
return val;
}
-PHP_HTTP_API int php_http_env_got_request_header(const char *name_str, size_t name_len TSRMLS_DC)
+PHP_HTTP_API int php_http_env_got_request_header(const char *name_str, size_t name_len, php_http_message_t *request TSRMLS_DC)
{
+ HashTable *request_headers;
char *key = php_http_pretty_key(estrndup(name_str, name_len), name_len, 1, 1);
int got;
- php_http_env_get_request_headers(NULL TSRMLS_CC);
- got = zend_symtable_exists(PHP_HTTP_G->env.request.headers, key, name_len + 1);
+ if (request) {
+ request_headers = &request->hdrs;
+ } else {
+ php_http_env_get_request_headers(NULL TSRMLS_CC);
+ request_headers = PHP_HTTP_G->env.request.headers;
+ }
+ got = zend_symtable_exists(request_headers, key, name_len + 1);
efree(key);
return got;
return PHP_HTTP_G->env.request.body;
}
-PHP_HTTP_API php_http_range_status_t php_http_env_get_request_ranges(HashTable *ranges, size_t length TSRMLS_DC)
+PHP_HTTP_API const char *php_http_env_get_request_method(php_http_message_t *request TSRMLS_DC)
+{
+ const char *m;
+
+ if (PHP_HTTP_MESSAGE_TYPE(REQUEST, request)) {
+ m = request->http.info.request.method;
+ } else {
+ m = SG(request_info).request_method;
+ }
+
+ return m ? m : "GET";
+}
+
+PHP_HTTP_API php_http_range_status_t php_http_env_get_request_ranges(HashTable *ranges, size_t length, php_http_message_t *request TSRMLS_DC)
{
zval *zentry;
char *range, *rp, c;
long begin = -1, end = -1, *ptr;
- if (!(range = php_http_env_get_request_header(ZEND_STRL("Range"), NULL TSRMLS_CC))) {
+ if (!(range = php_http_env_get_request_header(ZEND_STRL("Range"), NULL, request TSRMLS_CC))) {
return PHP_HTTP_RANGE_NO;
}
if (strncmp(range, "bytes=", lenof("bytes="))) {
return ret;
}
-PHP_HTTP_API STATUS php_http_env_set_response_header_format(long http_code, zend_bool replace TSRMLS_DC, const char *fmt, ...)
+PHP_HTTP_API STATUS php_http_env_set_response_header_va(long http_code, zend_bool replace, const char *fmt, va_list argv TSRMLS_DC)
{
- va_list args;
STATUS ret = FAILURE;
sapi_header_line h = {NULL, 0, http_code};
- va_start(args, fmt);
- h.line_len = vspprintf(&h.line, 0, fmt, args);
- va_end(args);
+ h.line_len = vspprintf(&h.line, 0, fmt, argv);
if (h.line) {
if (h.line_len) {
return ret;
}
+PHP_HTTP_API STATUS php_http_env_set_response_header_format(long http_code, zend_bool replace TSRMLS_DC, const char *fmt, ...)
+{
+ STATUS ret;
+ va_list args;
+
+ va_start(args, fmt);
+ ret = php_http_env_set_response_header_va(http_code, replace, fmt, args TSRMLS_CC);
+ va_end(args);
+
+ return ret;
+}
+
PHP_HTTP_API STATUS php_http_env_set_response_header_value(long http_code, const char *name_str, size_t name_len, zval *value, zend_bool replace TSRMLS_DC)
{
if (!value) {
PHP_HTTP_ARG_VAL(result_array, 1)
PHP_HTTP_END_ARGS;
-PHP_HTTP_EMPTY_ARGS(statPersistentHandles);
-
-PHP_HTTP_BEGIN_ARGS(cleanPersistentHandles, 0)
- PHP_HTTP_ARG_VAL(name, 0)
- PHP_HTTP_ARG_VAL(ident, 0)
-PHP_HTTP_END_ARGS;
-
static zend_class_entry *php_http_env_class_entry;
zend_class_entry *php_http_env_get_class_entry(void)
PHP_HTTP_ENV_ME(negotiateCharset)
PHP_HTTP_ENV_ME(negotiate)
- PHP_HTTP_ENV_ME(statPersistentHandles)
- PHP_HTTP_ENV_ME(cleanPersistentHandles)
-
EMPTY_FUNCTION_ENTRY
};
if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s!", &header_name_str, &header_name_len)) {
if (header_name_str && header_name_len) {
size_t header_length;
- char *header_value = php_http_env_get_request_header(header_name_str, header_name_len, &header_length TSRMLS_CC);
+ char *header_value = php_http_env_get_request_header(header_name_str, header_name_len, &header_length, NULL TSRMLS_CC);
if (header_value) {
RETURN_STRINGL(header_value, header_length, 0);
zend_object_value ov;
php_http_message_body_t *body = php_http_env_get_request_body(TSRMLS_C);
- if (SUCCESS == php_http_new(&ov, class_entry, (php_http_new_t) php_http_message_body_object_new_ex, php_http_message_body_get_class_entry(), php_http_message_body_copy(body, NULL, 0), NULL TSRMLS_CC)) {
+ if (SUCCESS == php_http_new(&ov, class_entry, (php_http_new_t) php_http_message_body_object_new_ex, php_http_message_body_get_class_entry(), php_http_message_body_init(&body, NULL TSRMLS_CC), NULL TSRMLS_CC)) {
RETVAL_OBJVAL(ov, 0);
}
}
}
}
-PHP_METHOD(HttpEnv, statPersistentHandles)
-{
- if (SUCCESS == zend_parse_parameters_none()) {
- object_init(return_value);
- if (php_http_persistent_handle_statall(HASH_OF(return_value) TSRMLS_CC)) {
- return;
- }
- zval_dtor(return_value);
- }
- RETURN_FALSE;
-}
-
-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, "|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);
- }
-}
-
#ifdef PHP_HTTP_HAVE_JSON
#include "ext/json/php_json.h"
static SAPI_POST_HANDLER_FUNC(php_http_json_post_handler)
{
if (SG(request_info).raw_post_data) {
- php_json_decode(arg, SG(request_info).raw_post_data, SG(request_info).raw_post_data_length, 1, PG(max_input_nesting_level) TSRMLS_CC);
+ zval *zarg = arg;
+ zval_dtor(zarg);
+ ZVAL_NULL(zarg);
+ php_json_decode(zarg, SG(request_info).raw_post_data, SG(request_info).raw_post_data_length, 1, PG(max_input_nesting_level) TSRMLS_CC);
+ if (Z_TYPE_P(zarg) == IS_NULL) {
+ array_init(zarg);
+ }
}
}