X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_api.c;h=e71b0879955cc66d120517f00ece623310a16138;hp=ab59457437898e87da1e1f50650da06653d8d373;hb=976c6c8c58c93c4ab74e9c23e1cf5b31b2b1bd78;hpb=b3afcfc70bf06c062115f4994cc04fc8c6e4aa67 diff --git a/http_api.c b/http_api.c index ab59457..e71b087 100644 --- a/http_api.c +++ b/http_api.c @@ -6,7 +6,7 @@ | modification, are permitted provided that the conditions mentioned | | in the accompanying LICENSE file are met. | +--------------------------------------------------------------------+ - | Copyright (c) 2004-2006, Michael Wallner | + | Copyright (c) 2004-2007, Michael Wallner | +--------------------------------------------------------------------+ */ @@ -17,6 +17,7 @@ #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" @@ -32,6 +33,7 @@ PHP_MINIT_FUNCTION(http_support) 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); @@ -50,6 +52,9 @@ PHP_HTTP_API long _http_support(long feature) # 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; @@ -90,6 +95,13 @@ char *_http_pretty_key(char *key, size_t key_len, zend_bool uctitle, zend_bool x } /* }}} */ +/* {{{ 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, ...) { @@ -411,9 +423,13 @@ PHP_HTTP_API void _http_parse_params_default_callback(void *arg, const char *key if (vallen) { MAKE_STD_ZVAL(entry); array_init(entry); - kdup = estrndup(key, keylen); - add_assoc_stringl_ex(entry, kdup, keylen + 1, (char *) val, vallen, 1); - efree(kdup); + if (keylen) { + kdup = estrndup(key, keylen); + add_assoc_stringl_ex(entry, kdup, keylen + 1, (char *) val, vallen, 1); + efree(kdup); + } else { + add_next_index_stringl(entry, (char *) val, vallen, 1); + } add_next_index_zval(&tmp, entry); } else { add_next_index_stringl(&tmp, (char *) key, keylen, 1); @@ -435,7 +451,9 @@ PHP_HTTP_API STATUS _http_parse_params_ex(const char *param, int flags, http_par char *s, *c, *key = NULL, *val = NULL; for(c = s = estrdup(param);;) { + continued: #if 0 + { char *tk = NULL, *tv = NULL; if (key) { @@ -467,8 +485,8 @@ PHP_HTTP_API STATUS _http_parse_params_ex(const char *param, int flags, http_par ), *c?*c:'0', tk, tv ); STR_FREE(tk); STR_FREE(tv); + } #endif - continued: switch (st) { case ST_QUOTE: quote: @@ -610,7 +628,15 @@ failure: http_error_ex(HE_WARNING, HTTP_E_INVALID_PARAM, "Unexpected character (%c) at pos %tu of %zu", *c, c-s, strlen(s)); } if (flags & HTTP_PARAMS_ALLOW_FAILURE) { - --c; + if (st == ST_KEY) { + if (key) { + keylen = c - key; + } else { + key = c; + } + } else { + --c; + } st = ST_ADD; goto continued; }