This source file includes following definitions.
- END_EXTERN_C
- BEGIN_EXTERN_C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 #ifdef PHP_WIN32
21 #include "config.w32.h"
22 #include <Ws2tcpip.h>
23 #endif
24
25 #if HAVE_SYS_SOCKET_H
26 # include <sys/socket.h>
27 #endif
28
29 typedef php_stream *(php_stream_transport_factory_func)(const char *proto, size_t protolen,
30 const char *resourcename, size_t resourcenamelen,
31 const char *persistent_id, int options, int flags,
32 struct timeval *timeout,
33 php_stream_context *context STREAMS_DC);
34 typedef php_stream_transport_factory_func *php_stream_transport_factory;
35
36 BEGIN_EXTERN_C()
37 PHPAPI int php_stream_xport_register(const char *protocol, php_stream_transport_factory factory);
38 PHPAPI int php_stream_xport_unregister(const char *protocol);
39
40 #define STREAM_XPORT_CLIENT 0
41 #define STREAM_XPORT_SERVER 1
42
43 #define STREAM_XPORT_CONNECT 2
44 #define STREAM_XPORT_BIND 4
45 #define STREAM_XPORT_LISTEN 8
46 #define STREAM_XPORT_CONNECT_ASYNC 16
47
48
49 PHPAPI php_stream *_php_stream_xport_create(const char *name, size_t namelen, int options,
50 int flags, const char *persistent_id,
51 struct timeval *timeout,
52 php_stream_context *context,
53 zend_string **error_string,
54 int *error_code
55 STREAMS_DC);
56
57 #define php_stream_xport_create(name, namelen, options, flags, persistent_id, timeout, context, estr, ecode) \
58 _php_stream_xport_create(name, namelen, options, flags, persistent_id, timeout, context, estr, ecode STREAMS_CC)
59
60
61 PHPAPI int php_stream_xport_bind(php_stream *stream,
62 const char *name, size_t namelen,
63 zend_string **error_text
64 );
65
66
67 PHPAPI int php_stream_xport_connect(php_stream *stream,
68 const char *name, size_t namelen,
69 int asynchronous,
70 struct timeval *timeout,
71 zend_string **error_text,
72 int *error_code
73 );
74
75
76 PHPAPI int php_stream_xport_listen(php_stream *stream,
77 int backlog,
78 zend_string **error_text
79 );
80
81
82
83 PHPAPI int php_stream_xport_accept(php_stream *stream, php_stream **client,
84 zend_string **textaddr,
85 void **addr, socklen_t *addrlen,
86 struct timeval *timeout,
87 zend_string **error_text
88 );
89
90
91 PHPAPI int php_stream_xport_get_name(php_stream *stream, int want_peer,
92 zend_string **textaddr,
93 void **addr, socklen_t *addrlen
94 );
95
96 enum php_stream_xport_send_recv_flags {
97 STREAM_OOB = 1,
98 STREAM_PEEK = 2
99 };
100
101
102
103 PHPAPI int php_stream_xport_recvfrom(php_stream *stream, char *buf, size_t buflen,
104 int flags, void **addr, socklen_t *addrlen,
105 zend_string **textaddr);
106
107
108
109 PHPAPI int php_stream_xport_sendto(php_stream *stream, const char *buf, size_t buflen,
110 int flags, void *addr, socklen_t addrlen);
111
112 typedef enum {
113 STREAM_SHUT_RD,
114 STREAM_SHUT_WR,
115 STREAM_SHUT_RDWR
116 } stream_shutdown_t;
117
118
119
120 PHPAPI int php_stream_xport_shutdown(php_stream *stream, stream_shutdown_t how);
121 END_EXTERN_C()
122
123
124
125
126 typedef struct _php_stream_xport_param {
127 enum {
128 STREAM_XPORT_OP_BIND, STREAM_XPORT_OP_CONNECT,
129 STREAM_XPORT_OP_LISTEN, STREAM_XPORT_OP_ACCEPT,
130 STREAM_XPORT_OP_CONNECT_ASYNC,
131 STREAM_XPORT_OP_GET_NAME,
132 STREAM_XPORT_OP_GET_PEER_NAME,
133 STREAM_XPORT_OP_RECV,
134 STREAM_XPORT_OP_SEND,
135 STREAM_XPORT_OP_SHUTDOWN
136 } op;
137 unsigned int want_addr:1;
138 unsigned int want_textaddr:1;
139 unsigned int want_errortext:1;
140 unsigned int how:2;
141
142 struct {
143 char *name;
144 size_t namelen;
145 struct timeval *timeout;
146 struct sockaddr *addr;
147 char *buf;
148 size_t buflen;
149 socklen_t addrlen;
150 int backlog;
151 int flags;
152 } inputs;
153 struct {
154 php_stream *client;
155 struct sockaddr *addr;
156 socklen_t addrlen;
157 zend_string *textaddr;
158 zend_string *error_text;
159 int returncode;
160 int error_code;
161 } outputs;
162 } php_stream_xport_param;
163
164
165
166
167 typedef enum {
168 STREAM_CRYPTO_METHOD_SSLv2_CLIENT = (1 << 1 | 1),
169 STREAM_CRYPTO_METHOD_SSLv3_CLIENT = (1 << 2 | 1),
170
171 STREAM_CRYPTO_METHOD_SSLv23_CLIENT = ((1 << 3) | (1 << 4) | (1 << 5) | 1),
172 STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT = (1 << 3 | 1),
173 STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT = (1 << 4 | 1),
174 STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT = (1 << 5 | 1),
175
176 STREAM_CRYPTO_METHOD_TLS_CLIENT = (1 << 3 | 1),
177 STREAM_CRYPTO_METHOD_TLS_ANY_CLIENT = ((1 << 3) | (1 << 4) | (1 << 5) | 1),
178 STREAM_CRYPTO_METHOD_ANY_CLIENT = ((1 << 1) | (1 << 2) | (1 << 3) | (1 << 4) | (1 << 5) | 1),
179 STREAM_CRYPTO_METHOD_SSLv2_SERVER = (1 << 1),
180 STREAM_CRYPTO_METHOD_SSLv3_SERVER = (1 << 2),
181
182 STREAM_CRYPTO_METHOD_SSLv23_SERVER = ((1 << 3) | (1 << 4) | (1 << 5)),
183 STREAM_CRYPTO_METHOD_TLSv1_0_SERVER = (1 << 3),
184 STREAM_CRYPTO_METHOD_TLSv1_1_SERVER = (1 << 4),
185 STREAM_CRYPTO_METHOD_TLSv1_2_SERVER = (1 << 5),
186
187 STREAM_CRYPTO_METHOD_TLS_SERVER = (1 << 3),
188 STREAM_CRYPTO_METHOD_TLS_ANY_SERVER = ((1 << 3) | (1 << 4) | (1 << 5)),
189 STREAM_CRYPTO_METHOD_ANY_SERVER = ((1 << 1) | (1 << 2) | (1 << 3) | (1 << 4) | (1 << 5))
190 } php_stream_xport_crypt_method_t;
191
192
193
194 BEGIN_EXTERN_C()
195 PHPAPI int php_stream_xport_crypto_setup(php_stream *stream, php_stream_xport_crypt_method_t crypto_method, php_stream *session_stream);
196 PHPAPI int php_stream_xport_crypto_enable(php_stream *stream, int activate);
197 END_EXTERN_C()
198
199 typedef struct _php_stream_xport_crypto_param {
200 struct {
201 php_stream *session;
202 int activate;
203 php_stream_xport_crypt_method_t method;
204 } inputs;
205 struct {
206 int returncode;
207 } outputs;
208 enum {
209 STREAM_XPORT_CRYPTO_OP_SETUP,
210 STREAM_XPORT_CRYPTO_OP_ENABLE
211 } op;
212 } php_stream_xport_crypto_param;
213
214 BEGIN_EXTERN_C()
215 PHPAPI HashTable *php_stream_xport_get_hash(void);
216 PHPAPI php_stream_transport_factory_func php_stream_generic_socket_factory;
217 END_EXTERN_C()
218
219
220
221
222
223
224
225
226