-extern zend_class_entry *php_http_client_class_entry;
-extern zend_function_entry php_http_client_method_entry[];
-
-extern zend_object_value php_http_client_object_new(zend_class_entry *ce TSRMLS_DC);
-extern zend_object_value php_http_client_object_new_ex(zend_class_entry *ce, php_http_client_t *r, php_http_client_object_t **ptr TSRMLS_DC);
-extern zend_object_value php_http_client_object_clone(zval *zobject TSRMLS_DC);
-extern void php_http_client_object_free(void *object TSRMLS_DC);
-
-extern zend_object_handlers *php_http_client_get_object_handlers(void);
-
-extern STATUS php_http_client_object_requesthandler(php_http_client_object_t *obj, zval *this_ptr, char **meth, char **url, php_http_message_body_t **body TSRMLS_DC);
-extern STATUS php_http_client_object_responsehandler(php_http_client_object_t *obj, zval *this_ptr TSRMLS_DC);
-
-PHP_METHOD(HttpClient, __construct);
-PHP_METHOD(HttpClient, getObservers);
-PHP_METHOD(HttpClient, notify);
-PHP_METHOD(HttpClient, attach);
-PHP_METHOD(HttpClient, detach);
-PHP_METHOD(HttpClient, getProgress);
-PHP_METHOD(HttpClient, getTransferInfo);
-PHP_METHOD(HttpClient, setOptions);
-PHP_METHOD(HttpClient, getOptions);
-PHP_METHOD(HttpClient, addSslOptions);
-PHP_METHOD(HttpClient, setSslOptions);
-PHP_METHOD(HttpClient, getSslOptions);
-PHP_METHOD(HttpClient, addCookies);
-PHP_METHOD(HttpClient, getCookies);
-PHP_METHOD(HttpClient, setCookies);
-PHP_METHOD(HttpClient, enableCookies);
-PHP_METHOD(HttpClient, resetCookies);
-PHP_METHOD(HttpClient, flushCookies);
-PHP_METHOD(HttpClient, send);
-PHP_METHOD(HttpClient, getResponseMessage);
-PHP_METHOD(HttpClient, getRawResponseMessage);
-PHP_METHOD(HttpClient, getRequestMessage);
-PHP_METHOD(HttpClient, getRawRequestMessage);
-PHP_METHOD(HttpClient, getHistory);
-PHP_METHOD(HttpClient, clearHistory);
-PHP_METHOD(HttpClient, getMessageClass);
-PHP_METHOD(HttpClient, setMessageClass);
-
-extern PHP_MINIT_FUNCTION(http_client);
+PHP_HTTP_API php_http_client_t *php_http_client_init(php_http_client_t *h, php_http_client_ops_t *ops, php_resource_factory_t *rf, void *init_arg);
+PHP_HTTP_API php_http_client_t *php_http_client_copy(php_http_client_t *from, php_http_client_t *to);
+PHP_HTTP_API void php_http_client_dtor(php_http_client_t *h);
+PHP_HTTP_API void php_http_client_free(php_http_client_t **h);
+
+PHP_HTTP_API ZEND_RESULT_CODE php_http_client_enqueue(php_http_client_t *h, php_http_client_enqueue_t *enqueue);
+PHP_HTTP_API ZEND_RESULT_CODE php_http_client_dequeue(php_http_client_t *h, php_http_message_t *request);
+
+PHP_HTTP_API ZEND_RESULT_CODE php_http_client_wait(php_http_client_t *h, struct timeval *custom_timeout);
+PHP_HTTP_API int php_http_client_once(php_http_client_t *h);
+
+PHP_HTTP_API ZEND_RESULT_CODE php_http_client_exec(php_http_client_t *h);
+PHP_HTTP_API void php_http_client_reset(php_http_client_t *h);
+
+PHP_HTTP_API ZEND_RESULT_CODE php_http_client_setopt(php_http_client_t *h, php_http_client_setopt_opt_t opt, void *arg);
+PHP_HTTP_API ZEND_RESULT_CODE php_http_client_getopt(php_http_client_t *h, php_http_client_getopt_opt_t opt, void *arg, void *res_ptr);
+
+typedef int (*php_http_client_enqueue_cmp_func_t)(php_http_client_enqueue_t *cmp, void *arg);
+/* compare with request message pointer if compare_func is NULL */
+PHP_HTTP_API php_http_client_enqueue_t *php_http_client_enqueued(php_http_client_t *h, void *compare_arg, php_http_client_enqueue_cmp_func_t compare_func);
+
+PHP_MINIT_FUNCTION(http_client);
+PHP_MSHUTDOWN_FUNCTION(http_client);