PageRenderTime 59ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/php-pecl-http-2.0.0/pecl_http-2.0.0alpha1/php_http_client.h

#
C++ Header | 225 lines | 177 code | 29 blank | 19 comment | 7 complexity | d5160cf639516186ddbd4fb000c701c2 MD5 | raw file
Possible License(s): BSD-2-Clause
  1. /*
  2. +--------------------------------------------------------------------+
  3. | PECL :: http |
  4. +--------------------------------------------------------------------+
  5. | Redistribution and use in source and binary forms, with or without |
  6. | modification, are permitted provided that the conditions mentioned |
  7. | in the accompanying LICENSE file are met. |
  8. +--------------------------------------------------------------------+
  9. | Copyright (c) 2004-2011, Michael Wallner <mike@php.net> |
  10. +--------------------------------------------------------------------+
  11. */
  12. #ifndef PHP_HTTP_CLIENT_H
  13. #define PHP_HTTP_CLIENT_H
  14. #include "php_http_message_body.h"
  15. #include "php_http_message_parser.h"
  16. typedef struct php_http_client_progress_state {
  17. struct {
  18. double now;
  19. double total;
  20. } ul;
  21. struct {
  22. double now;
  23. double total;
  24. } dl;
  25. const char *info;
  26. unsigned started:1;
  27. unsigned finished:1;
  28. } php_http_client_progress_state_t;
  29. #define PHP_HTTP_CLIENT_PROGRESS_CALLBACK_USER 0
  30. #define PHP_HTTP_CLIENT_PROGRESS_CALLBACK_INTERN 1
  31. typedef struct php_http_client_progress_callback {
  32. union {
  33. zval *user;
  34. void (*intern)(php_http_client_progress_state_t* TSRMLS_DC);
  35. } func;
  36. unsigned type:1;
  37. unsigned pass_state:1;
  38. } php_http_client_progress_callback_t;
  39. typedef struct php_http_client_progress {
  40. php_http_client_progress_state_t state;
  41. php_http_client_progress_callback_t *callback;
  42. unsigned in_cb:1;
  43. } php_http_client_progress_t;
  44. static inline void php_http_client_progress_dtor(php_http_client_progress_t *progress TSRMLS_DC)
  45. {
  46. if (progress->callback) {
  47. if (progress->callback->type == PHP_HTTP_CLIENT_PROGRESS_CALLBACK_USER) {
  48. zval_ptr_dtor(&progress->callback->func.user);
  49. }
  50. efree(progress->callback);
  51. }
  52. memset(progress, 0, sizeof(*progress));
  53. }
  54. static inline void php_http_client_progress_notify(php_http_client_progress_t *progress TSRMLS_DC)
  55. {
  56. if (progress->callback) {
  57. zval retval;
  58. INIT_PZVAL(&retval);
  59. ZVAL_NULL(&retval);
  60. with_error_handling(EH_NORMAL, NULL) {
  61. switch (progress->callback->type) {
  62. case PHP_HTTP_CLIENT_PROGRESS_CALLBACK_USER:
  63. if (progress->callback->pass_state) {
  64. zval *param;
  65. MAKE_STD_ZVAL(param);
  66. array_init(param);
  67. add_assoc_bool(param, "started", progress->state.started);
  68. add_assoc_bool(param, "finished", progress->state.finished);
  69. add_assoc_string(param, "info", estrdup(progress->state.info), 0);
  70. add_assoc_double(param, "dltotal", progress->state.dl.total);
  71. add_assoc_double(param, "dlnow", progress->state.dl.now);
  72. add_assoc_double(param, "ultotal", progress->state.ul.total);
  73. add_assoc_double(param, "ulnow", progress->state.ul.now);
  74. progress->in_cb = 1;
  75. call_user_function(EG(function_table), NULL, progress->callback->func.user, &retval, 1, &param TSRMLS_CC);
  76. progress->in_cb = 0;
  77. zval_ptr_dtor(&param);
  78. } else {
  79. progress->in_cb = 1;
  80. call_user_function(EG(function_table), NULL, progress->callback->func.user, &retval, 0, NULL TSRMLS_CC);
  81. progress->in_cb = 0;
  82. }
  83. break;
  84. case PHP_HTTP_CLIENT_PROGRESS_CALLBACK_INTERN:
  85. progress->callback->func.intern(progress->callback->pass_state ? &progress->state : NULL TSRMLS_CC);
  86. break;
  87. default:
  88. break;
  89. }
  90. } end_error_handling();
  91. zval_dtor(&retval);
  92. }
  93. }
  94. typedef enum php_http_client_setopt_opt {
  95. PHP_HTTP_CLIENT_OPT_SETTINGS, /* HashTable* */
  96. PHP_HTTP_CLIENT_OPT_PROGRESS_CALLBACK, /* php_http_client_progress_callback_t* */
  97. PHP_HTTP_CLIENT_OPT_COOKIES_ENABLE, /* - */
  98. PHP_HTTP_CLIENT_OPT_COOKIES_RESET, /* - */
  99. PHP_HTTP_CLIENT_OPT_COOKIES_RESET_SESSION, /* - */
  100. PHP_HTTP_CLIENT_OPT_COOKIES_FLUSH, /* - */
  101. } php_http_client_setopt_opt_t;
  102. typedef enum php_http_client_getopt_opt {
  103. PHP_HTTP_CLIENT_OPT_PROGRESS_INFO, /* php_http_client_progress_t** */
  104. PHP_HTTP_CLIENT_OPT_TRANSFER_INFO, /* HashTable* */
  105. } php_http_client_getopt_opt_t;
  106. typedef struct php_http_client *(*php_http_client_init_func_t)(struct php_http_client *h, void *arg);
  107. typedef struct php_http_client *(*php_http_client_copy_func_t)(struct php_http_client *from, struct php_http_client *to);
  108. typedef void (*php_http_client_dtor_func_t)(struct php_http_client *h);
  109. typedef STATUS (*php_http_client_exec_func_t)(struct php_http_client *h, php_http_message_t *msg);
  110. typedef STATUS (*php_http_client_reset_func_t)(struct php_http_client *h);
  111. typedef STATUS (*php_http_client_setopt_func_t)(struct php_http_client *h, php_http_client_setopt_opt_t opt, void *arg);
  112. typedef STATUS (*php_http_client_getopt_func_t)(struct php_http_client *h, php_http_client_getopt_opt_t opt, void *arg);
  113. typedef struct php_http_client_ops {
  114. php_http_resource_factory_ops_t *rsrc;
  115. php_http_client_init_func_t init;
  116. php_http_client_copy_func_t copy;
  117. php_http_client_dtor_func_t dtor;
  118. php_http_client_reset_func_t reset;
  119. php_http_client_exec_func_t exec;
  120. php_http_client_setopt_func_t setopt;
  121. php_http_client_getopt_func_t getopt;
  122. php_http_new_t create_object;
  123. zend_class_entry *(*class_entry)(void);
  124. } php_http_client_ops_t;
  125. typedef struct php_http_client {
  126. void *ctx;
  127. php_http_resource_factory_t *rf;
  128. php_http_client_ops_t *ops;
  129. php_http_message_parser_t *parser;
  130. php_http_message_t *message;
  131. php_http_buffer_t *buffer;
  132. #ifdef ZTS
  133. void ***ts;
  134. #endif
  135. } php_http_client_t;
  136. PHP_HTTP_API php_http_client_t *php_http_client_init(php_http_client_t *h, php_http_client_ops_t *ops, php_http_resource_factory_t *rf, void *init_arg TSRMLS_DC);
  137. PHP_HTTP_API php_http_client_t *php_http_client_copy(php_http_client_t *from, php_http_client_t *to);
  138. PHP_HTTP_API STATUS php_http_client_exec(php_http_client_t *h, php_http_message_t *msg);
  139. PHP_HTTP_API STATUS php_http_client_reset(php_http_client_t *h);
  140. PHP_HTTP_API STATUS php_http_client_setopt(php_http_client_t *h, php_http_client_setopt_opt_t opt, void *arg);
  141. PHP_HTTP_API STATUS php_http_client_getopt(php_http_client_t *h, php_http_client_getopt_opt_t opt, void *arg);
  142. PHP_HTTP_API void php_http_client_dtor(php_http_client_t *h);
  143. PHP_HTTP_API void php_http_client_free(php_http_client_t **h);
  144. typedef struct php_http_client_object {
  145. zend_object zo;
  146. php_http_client_t *client;
  147. } php_http_client_object_t;
  148. zend_object_value php_http_client_object_new(zend_class_entry *ce TSRMLS_DC);
  149. 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);
  150. zend_object_value php_http_client_object_clone(zval *zobject TSRMLS_DC);
  151. void php_http_client_object_free(void *object TSRMLS_DC);
  152. zend_class_entry *php_http_client_get_class_entry(void);
  153. zend_object_handlers *php_http_client_get_object_handlers(void);
  154. STATUS php_http_client_object_handle_request(zval *zclient, zval **zreq TSRMLS_DC);
  155. STATUS php_http_client_object_handle_response(zval *zclient TSRMLS_DC);
  156. void php_http_client_options_set(zval *this_ptr, zval *opts TSRMLS_DC);
  157. void php_http_client_options_set_subr(zval *this_ptr, char *key, size_t len, zval *opts, int overwrite TSRMLS_DC);
  158. void php_http_client_options_get_subr(zval *this_ptr, char *key, size_t len, zval *return_value TSRMLS_DC);
  159. PHP_METHOD(HttpClient, __construct);
  160. PHP_METHOD(HttpClient, getObservers);
  161. PHP_METHOD(HttpClient, notify);
  162. PHP_METHOD(HttpClient, attach);
  163. PHP_METHOD(HttpClient, detach);
  164. PHP_METHOD(HttpClient, getProgress);
  165. PHP_METHOD(HttpClient, getTransferInfo);
  166. PHP_METHOD(HttpClient, setOptions);
  167. PHP_METHOD(HttpClient, getOptions);
  168. PHP_METHOD(HttpClient, addSslOptions);
  169. PHP_METHOD(HttpClient, setSslOptions);
  170. PHP_METHOD(HttpClient, getSslOptions);
  171. PHP_METHOD(HttpClient, addCookies);
  172. PHP_METHOD(HttpClient, getCookies);
  173. PHP_METHOD(HttpClient, setCookies);
  174. PHP_METHOD(HttpClient, enableCookies);
  175. PHP_METHOD(HttpClient, resetCookies);
  176. PHP_METHOD(HttpClient, flushCookies);
  177. PHP_METHOD(HttpClient, setRequest);
  178. PHP_METHOD(HttpClient, getRequest);
  179. PHP_METHOD(HttpClient, send);
  180. PHP_METHOD(HttpClient, request);
  181. PHP_METHOD(HttpClient, getResponseMessage);
  182. PHP_METHOD(HttpClient, getRequestMessage);
  183. PHP_METHOD(HttpClient, getHistory);
  184. PHP_METHOD(HttpClient, clearHistory);
  185. PHP_METHOD(HttpClient, getResponseMessageClass);
  186. PHP_METHOD(HttpClient, setResponseMessageClass);
  187. PHP_MINIT_FUNCTION(http_client);
  188. #endif
  189. /*
  190. * Local variables:
  191. * tab-width: 4
  192. * c-basic-offset: 4
  193. * End:
  194. * vim600: noet sw=4 ts=4 fdm=marker
  195. * vim<600: noet sw=4 ts=4
  196. */