- zval *params_pass[4], params_local[4], retval;
- HTTP_REQUEST_CALLBACK_DATA(data, zval *, func);
-
- params_pass[0] = ¶ms_local[0];
- params_pass[1] = ¶ms_local[1];
- params_pass[2] = ¶ms_local[2];
- params_pass[3] = ¶ms_local[3];
-
- INIT_PZVAL(params_pass[0]);
- INIT_PZVAL(params_pass[1]);
- INIT_PZVAL(params_pass[2]);
- INIT_PZVAL(params_pass[3]);
- ZVAL_DOUBLE(params_pass[0], dltotal);
- ZVAL_DOUBLE(params_pass[1], dlnow);
- ZVAL_DOUBLE(params_pass[2], ultotal);
- ZVAL_DOUBLE(params_pass[3], ulnow);
-
- return call_user_function(EG(function_table), NULL, func, &retval, 4, params_pass TSRMLS_CC);
+ zval *param, retval;
+ http_request *request = (http_request *) ctx;
+ TSRMLS_FETCH_FROM_CTX(request->tsrm_ls);
+
+ INIT_PZVAL(&retval);
+ ZVAL_NULL(&retval);
+
+ MAKE_STD_ZVAL(param);
+ array_init(param);
+ add_assoc_double(param, "dltotal", dltotal);
+ add_assoc_double(param, "dlnow", dlnow);
+ add_assoc_double(param, "ultotal", ultotal);
+ add_assoc_double(param, "ulnow", ulnow);
+
+ call_user_function(EG(function_table), NULL, request->_progress_callback, &retval, 1, ¶m TSRMLS_CC);
+
+ zval_ptr_dtor(¶m);
+ zval_dtor(&retval);
+
+ return 0;