- 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)) {
- array_merge(*opt, *headers);
- continue;
- }
- } else if (!strcmp(key, "cookies")) {
- zval **cookies;
- if (SUCCESS == zend_hash_find(Z_ARRVAL_P(old_opts), "cookies", sizeof("cookies"), (void **) &cookies)) {
- array_merge(*opt, *cookies);
- continue;
- }
- } else if (!strcmp(key, "ssl")) {
- zval **ssl;
- if (SUCCESS == zend_hash_find(Z_ARRVAL_P(old_opts), "ssl", sizeof("ssl"), (void **) &ssl)) {
- array_merge(*opt, *ssl);
- continue;
- }
- }else if ((!strcasecmp(key, "url")) || (!strcasecmp(key, "uri"))) {
- if (Z_TYPE_PP(opt) != IS_STRING) {
- convert_to_string_ex(opt);
- }
- UPD_PROP(obj, string, url, Z_STRVAL_PP(opt));
- continue;
- } else if (!strcmp(key, "method")) {
- if (Z_TYPE_PP(opt) != IS_LONG) {
- convert_to_long_ex(opt);
+ FOREACH_KEYVAL(pos, opts, key, opt) {
+ if (key.type == HASH_KEY_IS_STRING) {
+#define KEYMATCH(k, s) ((sizeof(s)==k.len) && !strcasecmp(k.str, s))
+ if (KEYMATCH(key, "headers")) {
+ zend_call_method_with_1_params(&getThis(), Z_OBJCE_P(getThis()), NULL, "addheaders", NULL, *opt);
+ } else if (KEYMATCH(key, "cookies")) {
+ zend_call_method_with_1_params(&getThis(), Z_OBJCE_P(getThis()), NULL, "addcookies", NULL, *opt);
+ } else if (KEYMATCH(key, "ssl")) {
+ zend_call_method_with_1_params(&getThis(), Z_OBJCE_P(getThis()), NULL, "addssloptions", NULL, *opt);
+ } else if (KEYMATCH(key, "url") || KEYMATCH(key, "uri")) {
+ zend_call_method_with_1_params(&getThis(), Z_OBJCE_P(getThis()), NULL, "seturl", NULL, *opt);
+ } else if (KEYMATCH(key, "method")) {
+ zend_call_method_with_1_params(&getThis(), Z_OBJCE_P(getThis()), NULL, "setmethod", NULL, *opt);
+#if HTTP_CURL_VERSION(7,14,1)
+ } else if (KEYMATCH(key, "resetcookies")) {
+ getObject(http_request_object, obj);
+ http_request_reset_cookies(obj->request, 0);
+#endif
+ } else if (KEYMATCH(key, "enablecookies")) {
+ getObject(http_request_object, obj);
+ http_request_enable_cookies(obj->request);
+ } else if (KEYMATCH(key, "recordHistory")) {
+ zend_update_property_bool(THIS_CE, getThis(), ZEND_STRS("recordHistory")-1, 1 TSRMLS_CC);
+ } else if (Z_TYPE_PP(opt) == IS_NULL) {
+ old_opts = zend_read_property(THIS_CE, getThis(), ZEND_STRS("options")-1, 0 TSRMLS_CC);
+ if (Z_TYPE_P(old_opts) == IS_ARRAY) {
+ zend_hash_del(Z_ARRVAL_P(old_opts), key.str, key.len);