/* $Id$ */
+#define _WINSOCKAPI_
+#define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
+
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include "php_http.h"
#include "php_http_api.h"
#include "php_http_curl_api.h"
+#include "php_http_std_defs.h"
+
#include "ext/standard/php_smart_str.h"
#ifdef ZEND_ENGINE_2
PHP_METHOD(HTTPi_Response, setData)
{
zval *the_data;
- char *etag;
getObject(httpi_response_object, obj);
if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &the_data)) {
{
zval *the_stream;
php_stream *the_real_stream;
- char *etag;
getObject(httpi_response_object, obj);
if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &the_stream)) {
char *URL = NULL;
int URL_len;
long meth = -1;
- zval *info, *opts, *resp;
getObject(httpi_request_object, obj);
if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sl", &URL, &URL_len, &meth)) {
*/
PHP_METHOD(HTTPi_Request, setOptions)
{
+ char *key = NULL;
+ long idx = 0;
zval *opts, *old_opts, **opt;
getObject(httpi_request_object, obj);
old_opts = GET_PROP(obj, options);
- /* headers and cookies need extra attention -- thus cannot use zend_hash_merge() or php_array_merge() directly */
- for ( zend_hash_internal_pointer_reset(Z_ARRVAL_P(opts));
- zend_hash_get_current_data(Z_ARRVAL_P(opts), (void **) &opt) == SUCCESS;
- zend_hash_move_forward(Z_ARRVAL_P(opts))) {
- char *key;
- long idx;
- if (HASH_KEY_IS_STRING == zend_hash_get_current_key(Z_ARRVAL_P(opts), &key, &idx, 0)) {
+ /* headers and cookies need extra attention -- thus cannot use array_merge() directly */
+ FOREACH_KEYVAL(opts, key, idx, opt) {
+ if (key) {
if (!strcmp(key, "headers")) {
zval **headers;
if (SUCCESS == zend_hash_find(Z_ARRVAL_P(old_opts), "headers", sizeof("headers"), (void **) &headers)) {
}
zval_add_ref(opt);
add_assoc_zval(old_opts, key, *opt);
+
+ /* reset */
+ key = NULL;
}
}
+
RETURN_TRUE;
}
/* }}} */
PHP_METHOD(HTTPi_Request, setQueryData)
{
zval *qdata;
+ char *query_data = NULL;
getObject(httpi_request_object, obj);
if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &qdata)) {
}
if ((Z_TYPE_P(qdata) == IS_ARRAY) || (Z_TYPE_P(qdata) == IS_OBJECT)) {
- smart_str qstr = {0};
- HTTP_URL_ARGSEP_OVERRIDE;
- if (SUCCESS != php_url_encode_hash_ex(HASH_OF(qdata), &qstr, NULL, 0, NULL, 0, NULL, 0, NULL TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't encode query data");
- if (qstr.c) {
- efree(qstr.c);
- }
- HTTP_URL_ARGSEP_RESTORE;
+ if (SUCCESS != http_urlencode_hash(HASH_OF(qdata), &query_data)) {
RETURN_FALSE;
}
- HTTP_URL_ARGSEP_RESTORE;
- smart_str_0(&qstr);
- UPD_PROP(obj, string, queryData, qstr.c);
- efree(qstr.c);
+ UPD_PROP(obj, string, queryData, query_data);
+ efree(query_data);
RETURN_TRUE;
}
PHP_METHOD(HTTPi_Request, addQueryData)
{
zval *qdata, *old_qdata;
- smart_str qstr = {0};
- char *separator;
+ char *query_data = NULL;
getObject(httpi_request_object, obj);
if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &qdata)) {
}
old_qdata = GET_PROP(obj, queryData);
- if (Z_STRLEN_P(old_qdata)) {
- smart_str_appendl(&qstr, Z_STRVAL_P(old_qdata), Z_STRLEN_P(old_qdata));
- }
- HTTP_URL_ARGSEP_OVERRIDE;
- if (SUCCESS != php_url_encode_hash_ex(HASH_OF(qdata), &qstr, NULL, 0, NULL, 0, NULL, 0, NULL TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't encode query data");
- if (qstr.c) {
- efree(qstr.c);
- }
- HTTP_URL_ARGSEP_RESTORE;
+ if (SUCCESS != http_urlencode_hash_ex(HASH_OF(qdata), 1, Z_STRVAL_P(old_qdata), Z_STRLEN_P(old_qdata), &query_data, NULL)) {
RETURN_FALSE;
}
- HTTP_URL_ARGSEP_RESTORE;
- smart_str_0(&qstr);
+ UPD_PROP(obj, string, queryData, query_data);
+ efree(query_data);
- UPD_PROP(obj, string, queryData, qstr.c);
- efree(qstr.c);
RETURN_TRUE;
}
/* }}} */
case HTTP_POST:
{
- zval *post_files, *post_data, **data;
+ zval *post_files, *post_data;
post_files = GET_PROP(obj, postFiles);
post_data = GET_PROP(obj, postData);
status = http_post_array_ex(obj->ch, request_uri, Z_ARRVAL_P(post_data), Z_ARRVAL_P(opts), Z_ARRVAL_P(info), &response_data, &response_len);
} else {
-
+
/*
* multipart post
*/
+ char *key = NULL;
+ long idx;
+ zval **data;
struct curl_httppost *http_post_data[2] = {NULL, NULL};
/* normal data */
- for ( zend_hash_internal_pointer_reset(Z_ARRVAL_P(post_data));
- zend_hash_get_current_data(Z_ARRVAL_P(post_data), (void **) &data) == SUCCESS;
- zend_hash_move_forward(Z_ARRVAL_P(post_data))) {
-
- char *key;
- long idx;
-
- if (HASH_KEY_IS_STRING == zend_hash_get_current_key(Z_ARRVAL_P(post_data), &key, &idx, 0)) {
+ FOREACH_KEYVAL(post_data, key, idx, data) {
+ if (key) {
convert_to_string_ex(data);
curl_formadd(&http_post_data[0], &http_post_data[1],
CURLFORM_COPYNAME, key,
CURLFORM_CONTENTSLENGTH, Z_STRLEN_PP(data),
CURLFORM_END
);
+
+ /* reset */
+ key = NULL;
}
}
/* file data */
- for ( zend_hash_internal_pointer_reset(Z_ARRVAL_P(post_files));
- zend_hash_get_current_data(Z_ARRVAL_P(post_files), (void **) &data) == SUCCESS;
- zend_hash_move_forward(Z_ARRVAL_P(post_files))) {
-
+ FOREACH_VAL(post_files, data) {
zval **file, **type, **name;
- if (
- SUCCESS == zend_hash_find(Z_ARRVAL_PP(data), "name", sizeof("name"), (void **) &name) &&
- SUCCESS == zend_hash_find(Z_ARRVAL_PP(data), "type", sizeof("type"), (void **) &type) &&
- SUCCESS == zend_hash_find(Z_ARRVAL_PP(data), "file", sizeof("file"), (void **) &file)
- ) {
+ if ( SUCCESS == zend_hash_find(Z_ARRVAL_PP(data), "name", sizeof("name"), (void **) &name) &&
+ SUCCESS == zend_hash_find(Z_ARRVAL_PP(data), "type", sizeof("type"), (void **) &type) &&
+ SUCCESS == zend_hash_find(Z_ARRVAL_PP(data), "file", sizeof("file"), (void **) &file)) {
curl_formadd(&http_post_data[0], &http_post_data[1],
CURLFORM_COPYNAME, Z_STRVAL_PP(name),
- CURLFORM_FILENAME, Z_STRVAL_PP(name),
CURLFORM_FILE, Z_STRVAL_PP(file),
CURLFORM_CONTENTTYPE, Z_STRVAL_PP(type),
CURLFORM_END
* End:
* vim600: noet sw=4 ts=4 fdm=marker
* vim<600: noet sw=4 ts=4
- */
+ */
\ No newline at end of file