#include "php_output.h"
#include "ext/standard/url.h"
+#include "ext/standard/php_lcg.h"
#include "php_http_api.h"
#include "php_http_send_api.h"
HTTP_LONG_CONSTANT("HTTP_SUPPORT_MAGICMIME", HTTP_SUPPORT_MAGICMIME);
HTTP_LONG_CONSTANT("HTTP_SUPPORT_ENCODINGS", HTTP_SUPPORT_ENCODINGS);
HTTP_LONG_CONSTANT("HTTP_SUPPORT_SSLREQUESTS", HTTP_SUPPORT_SSLREQUESTS);
+ HTTP_LONG_CONSTANT("HTTP_SUPPORT_EVENTS", HTTP_SUPPORT_EVENTS);
HTTP_LONG_CONSTANT("HTTP_PARAMS_ALLOW_COMMA", HTTP_PARAMS_ALLOW_COMMA);
HTTP_LONG_CONSTANT("HTTP_PARAMS_ALLOW_FAILURE", HTTP_PARAMS_ALLOW_FAILURE);
# ifdef HTTP_HAVE_SSL
support |= HTTP_SUPPORT_SSLREQUESTS;
# endif
+# ifdef HTTP_HAVE_EVENT
+ support |= HTTP_SUPPORT_EVENTS;
+# endif
#endif
#ifdef HTTP_HAVE_MAGIC
support |= HTTP_SUPPORT_MAGICMIME;
}
/* }}} */
+/* {{{ http_boundary(char *, size_t) */
+size_t _http_boundary(char *buf, size_t buf_len TSRMLS_DC)
+{
+ return snprintf(buf, buf_len, "%lu%0.9f", (ulong) HTTP_G->request.time, (float) php_combined_lcg(TSRMLS_C));
+}
+/* }}} */
+
/* {{{ void http_error(long, long, char*) */
void _http_error_ex(long type TSRMLS_DC, long code, const char *format, ...)
{
va_start(args, format);
#ifdef ZEND_ENGINE_2
- if ((type == E_THROW) || (PG(error_handling) == EH_THROW)) {
+ if ((type == E_THROW) || (GLOBAL_ERROR_HANDLING == EH_THROW)) {
char *message;
zend_class_entry *ce = http_exception_get_for_code(code);
vspprintf(&message, 0, format, args);
zend_throw_exception(ce, message, code TSRMLS_CC);
efree(message);
- } http_catch(PG(exception_class) ? PG(exception_class) : HTTP_EX_DEF_CE);
+ } http_catch(GLOBAL_EXCEPTION_CLASS ? GLOBAL_EXCEPTION_CLASS : HTTP_EX_DEF_CE);
} else
#endif
php_verror(NULL, "", type, format, args TSRMLS_CC);
zend_class_entry *ce = parent_ce;
if (cname_str && cname_len) {
- if (!(ce = zend_fetch_class((char *) cname_str, cname_len, ZEND_FETCH_CLASS_DEFAULT TSRMLS_CC))) {
+ if (!(ce = zend_fetch_class(HTTP_ZAPI_CONST_CAST(char *) cname_str, cname_len, ZEND_FETCH_CLASS_DEFAULT TSRMLS_CC))) {
return FAILURE;
}
if (!instanceof_function(ce, parent_ce TSRMLS_CC)) {
if ((SUCCESS != zend_hash_find(&EG(symbol_table), "_SERVER", sizeof("_SERVER"), (void *) &hsv)) || (Z_TYPE_PP(hsv) != IS_ARRAY)) {
return NULL;
}
- if ((SUCCESS != zend_hash_find(Z_ARRVAL_PP(hsv), (char *) key, key_len + 1, (void *) &var))) {
+ if ((SUCCESS != zend_hash_find(Z_ARRVAL_PP(hsv), HTTP_ZAPI_CONST_CAST(char *) key, key_len + 1, (void *) &var))) {
return NULL;
}
if (check && !((Z_TYPE_PP(var) == IS_STRING) && Z_STRVAL_PP(var) && Z_STRLEN_PP(var))) {
goto failure;
break;
- case '=':
- if (key) {
- keylen = c - key;
- st = ST_VALUE;
- } else {
- goto failure;
- }
- break;
-
case ' ':
if (key) {
keylen = c - key;
}
break;
+ case ':':
+ if (!(flags & HTTP_PARAMS_COLON_SEPARATOR)) {
+ goto not_separator;
+ }
+ if (key) {
+ keylen = c - key;
+ st = ST_VALUE;
+ } else {
+ goto failure;
+ }
+ break;
+
+ case '=':
+ if (flags & HTTP_PARAMS_COLON_SEPARATOR) {
+ goto not_separator;
+ }
+ if (key) {
+ keylen = c - key;
+ st = ST_VALUE;
+ } else {
+ goto failure;
+ }
+ break;
+
default:
+ not_separator:
if (!key) {
key = c;
}
/* }}} */
/* {{{ array_join */
-int apply_array_append_func(void *pDest, int num_args, va_list args, zend_hash_key *hash_key)
+int apply_array_append_func(void *pDest HTTP_ZAPI_HASH_TSRMLS_DC, int num_args, va_list args, zend_hash_key *hash_key)
{
int flags;
char *key = NULL;
ZVAL_ADDREF(*value);
if (data) {
- if (Z_TYPE_PP(data) != IS_ARRAY) {
- convert_to_array(*data);
- }
- add_next_index_zval(*data, *value);
+ add_next_index_zval(http_zset(IS_ARRAY, *data), *value);
} else if (key) {
zend_hash_add(dst, key, hash_key->nKeyLength, value, sizeof(zval *), NULL);
} else {
return ZEND_HASH_APPLY_KEEP;
}
-int apply_array_merge_func(void *pDest, int num_args, va_list args, zend_hash_key *hash_key)
+int apply_array_merge_func(void *pDest HTTP_ZAPI_HASH_TSRMLS_DC, int num_args, va_list args, zend_hash_key *hash_key)
{
int flags;
char *key = NULL;