+#define http_request_object_set_options_subr(key, ow) \
+ _http_request_object_set_options_subr(INTERNAL_FUNCTION_PARAM_PASSTHRU, (key), sizeof(key), (ow))
+static inline void _http_request_object_set_options_subr(INTERNAL_FUNCTION_PARAMETERS, char *key, size_t len, int overwrite)
+{
+ zval *opts, **options, *new_options = NULL;
+ getObject(http_request_object, obj);
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|a/!", &new_options)) {
+ RETURN_FALSE;
+ }
+
+ opts = GET_PROP(obj, options);
+
+ if (SUCCESS == zend_hash_find(Z_ARRVAL_P(opts), key, len, (void **) &options)) {
+ if (overwrite) {
+ zend_hash_clean(Z_ARRVAL_PP(options));
+ }
+ if (new_options && zend_hash_num_elements(Z_ARRVAL_P(new_options))) {
+ if (overwrite) {
+ array_copy(new_options, *options);
+ } else {
+ array_merge(new_options, *options);
+ }
+ }
+ } else if (new_options && zend_hash_num_elements(Z_ARRVAL_P(new_options))) {
+ zval_add_ref(&new_options);
+ add_assoc_zval(opts, key, new_options);
+ }
+
+ RETURN_TRUE;
+}
+
+#define http_request_object_get_options_subr(key) \
+ _http_request_get_options_subr(INTERNAL_FUNCTION_PARAM_PASSTHRU, (key), sizeof(key))
+static inline void _http_request_get_options_subr(INTERNAL_FUNCTION_PARAMETERS, char *key, size_t len)
+{
+ NO_ARGS;
+
+ IF_RETVAL_USED {
+ zval *opts, **options;
+ getObject(http_request_object, obj);
+
+ opts = GET_PROP(obj, options);
+
+ array_init(return_value);
+
+ if (SUCCESS == zend_hash_find(Z_ARRVAL_P(opts), key, len, (void **) &options)) {
+ array_copy(*options, return_value);
+ }
+ }
+}
+
+