fix leak
[m6w6/ext-http] / php_http_message.h
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-2014, Michael Wallner <mike@php.net> |
10 +--------------------------------------------------------------------+
11 */
12
13 #ifndef PHP_HTTP_MESSAGE_H
14 #define PHP_HTTP_MESSAGE_H
15
16 #include "php_http_message_body.h"
17 #include "php_http_header.h"
18
19 /* required minimum length of an HTTP message "HTTP/1.1" */
20 #define PHP_HTTP_MESSAGE_MIN_SIZE 8
21 #define PHP_HTTP_MESSAGE_TYPE(TYPE, msg) ((msg) && ((msg)->type == PHP_HTTP_ ##TYPE))
22
23 typedef php_http_info_type_t php_http_message_type_t;
24 typedef struct php_http_message php_http_message_t;
25
26 struct php_http_message {
27 PHP_HTTP_INFO_IMPL(http, type)
28 HashTable hdrs;
29 php_http_message_body_t *body;
30 php_http_message_t *parent;
31 void *opaque;
32 };
33
34 PHP_HTTP_API zend_bool php_http_message_info_callback(php_http_message_t **message, HashTable **headers, php_http_info_t *info);
35
36 PHP_HTTP_API php_http_message_t *php_http_message_init(php_http_message_t *m, php_http_message_type_t t, php_http_message_body_t *body);
37 PHP_HTTP_API php_http_message_t *php_http_message_init_env(php_http_message_t *m, php_http_message_type_t t);
38 PHP_HTTP_API php_http_message_t *php_http_message_copy_ex(php_http_message_t *from, php_http_message_t *to, zend_bool parents);
39 static inline php_http_message_t *php_http_message_copy(php_http_message_t *from, php_http_message_t *to)
40 {
41 return php_http_message_copy_ex(from, to, 1);
42 }
43
44 PHP_HTTP_API void php_http_message_dtor(php_http_message_t *message);
45 PHP_HTTP_API void php_http_message_free(php_http_message_t **message);
46
47 PHP_HTTP_API void php_http_message_set_type(php_http_message_t *m, php_http_message_type_t t);
48 PHP_HTTP_API void php_http_message_set_info(php_http_message_t *message, php_http_info_t *info);
49
50 PHP_HTTP_API void php_http_message_update_headers(php_http_message_t *msg);
51
52 PHP_HTTP_API zval *php_http_message_header(php_http_message_t *msg, const char *key_str, size_t key_len);
53
54 static inline zend_string *php_http_message_header_string(php_http_message_t *msg, const char *key_str, size_t key_len)
55 {
56 zval *header;
57
58 if ((header = php_http_message_header(msg, key_str, key_len))) {
59 return php_http_header_value_to_string(header);
60 }
61 return NULL;
62 }
63
64 PHP_HTTP_API zend_bool php_http_message_is_multipart(php_http_message_t *msg, char **boundary);
65
66 PHP_HTTP_API void php_http_message_to_string(php_http_message_t *msg, char **string, size_t *length);
67 PHP_HTTP_API void php_http_message_to_struct(php_http_message_t *msg, zval *strct);
68 PHP_HTTP_API void php_http_message_to_callback(php_http_message_t *msg, php_http_pass_callback_t cb, void *cb_arg);
69
70 PHP_HTTP_API void php_http_message_serialize(php_http_message_t *message, char **string, size_t *length);
71 PHP_HTTP_API php_http_message_t *php_http_message_reverse(php_http_message_t *msg);
72 PHP_HTTP_API php_http_message_t *php_http_message_zip(php_http_message_t *one, php_http_message_t *two);
73
74 static inline size_t php_http_message_count(php_http_message_t *m)
75 {
76 size_t c = 1;
77
78 while ((m = m->parent)) {
79 ++c;
80 }
81
82 return c;
83 }
84
85 PHP_HTTP_API php_http_message_t *php_http_message_parse(php_http_message_t *msg, const char *str, size_t len, zend_bool greedy);
86
87 typedef struct php_http_message_object {
88 php_http_message_t *message;
89 struct php_http_message_object *parent;
90 php_http_message_body_object_t *body;
91 zval iterator;
92 zend_object zo;
93 } php_http_message_object_t;
94
95 PHP_HTTP_API zend_class_entry *php_http_message_class_entry;
96
97 PHP_MINIT_FUNCTION(http_message);
98 PHP_MSHUTDOWN_FUNCTION(http_message);
99
100 void php_http_message_object_prepend(zval *this_ptr, zval *prepend, zend_bool top /* = 1 */);
101 void php_http_message_object_reverse(zval *this_ptr, zval *return_value);
102 ZEND_RESULT_CODE php_http_message_object_set_body(php_http_message_object_t *obj, zval *zbody);
103 ZEND_RESULT_CODE php_http_message_object_init_body_object(php_http_message_object_t *obj);
104
105 zend_object *php_http_message_object_new(zend_class_entry *ce);
106 php_http_message_object_t *php_http_message_object_new_ex(zend_class_entry *ce, php_http_message_t *msg);
107 zend_object *php_http_message_object_clone(zval *object);
108 void php_http_message_object_free(zend_object *object);
109
110 #endif
111
112 /*
113 * Local variables:
114 * tab-width: 4
115 * c-basic-offset: 4
116 * End:
117 * vim600: noet sw=4 ts=4 fdm=marker
118 * vim<600: noet sw=4 ts=4
119 */
120