32 zend_hash_update_ptr(&xport_hash, str,
factory);
42#define ERR_REPORT(out_err, fmt, arg) \
43 if (out_err) { *out_err = strpprintf(0, fmt, arg); } \
44 else { php_error_docref(NULL, E_WARNING, fmt, arg); }
46#define ERR_RETURN(out_err, local_err, fmt) \
47 if (out_err) { *out_err = local_err; } \
48 else { php_error_docref(NULL, E_WARNING, fmt, local_err ? ZSTR_VAL(local_err) : "Unspecified error"); \
49 if (local_err) { zend_string_release_ex(local_err, 0); local_err = NULL; } \
53 int flags,
const char *persistent_id,
54 struct timeval *timeout,
62 const char *
p, *protocol, *orig_path =
NULL;
67 struct timeval default_timeout = { 0, 0 };
69 default_timeout.tv_sec =
FG(default_socket_timeout);
71 if (timeout ==
NULL) {
72 timeout = &default_timeout;
98 for (
p =
name; isalnum((
int)*
p) || *
p ==
'+' || *
p ==
'-' || *
p ==
'.';
p++) {
102 if ((*
p ==
':') && (
n > 1) && !
strncmp(
"://",
p, 3)) {
112 if (
NULL == (
factory = zend_hash_str_find_ptr(&xport_hash, protocol,
n))) {
113 char wrapper_name[32];
115 if (
n >=
sizeof(wrapper_name))
116 n =
sizeof(wrapper_name) - 1;
117 PHP_STRLCPY(wrapper_name, protocol,
sizeof(wrapper_name),
n);
119 ERR_REPORT(error_string,
"Unable to find the socket transport \"%s\" - did you forget to enable it when you configured PHP?",
149 ERR_RETURN(error_string, error_text,
"connect() failed: %s");
159 ERR_RETURN(error_string, error_text,
"bind() failed: %s");
166 backlog = zval_get_long(zbacklog);
170 ERR_RETURN(error_string, error_text,
"listen() failed: %s");
209 memset(¶m, 0,
sizeof(param));
210 param.
op = STREAM_XPORT_OP_BIND;
232 struct timeval *timeout,
240 memset(¶m, 0,
sizeof(param));
241 param.
op = asynchronous ? STREAM_XPORT_OP_CONNECT_ASYNC: STREAM_XPORT_OP_CONNECT;
270 memset(¶m, 0,
sizeof(param));
271 param.
op = STREAM_XPORT_OP_LISTEN;
292 struct timeval *timeout,
299 memset(¶m, 0,
sizeof(param));
301 param.
op = STREAM_XPORT_OP_ACCEPT;
335 memset(¶m, 0,
sizeof(param));
337 param.
op = want_peer ? STREAM_XPORT_OP_GET_PEER_NAME : STREAM_XPORT_OP_GET_NAME;
362 memset(¶m, 0,
sizeof(param));
363 param.
op = STREAM_XPORT_CRYPTO_OP_SETUP;
383 memset(¶m, 0,
sizeof(param));
384 param.
op = STREAM_XPORT_CRYPTO_OP_ENABLE;
426 if (recvd_len > buflen) {
443 memset(¶m, 0,
sizeof(param));
445 param.
op = STREAM_XPORT_OP_RECV;
464 return recvd_len ? recvd_len : -1;
489 memset(¶m, 0,
sizeof(param));
491 param.
op = STREAM_XPORT_OP_SEND;
514 memset(¶m, 0,
sizeof(param));
516 param.
op = STREAM_XPORT_OP_SHUTDOWN;
memset(ptr, 0, type->size)
zend_ffi_ctype_name_buf buf
const php_stream_filter_factory * factory
PHPAPI ZEND_COLD void php_error_docref(const char *docref, int type, const char *format,...)
#define PHP_STRLCPY(dst, src, size, src_size)
PHP_JSON_API size_t int options
php_json_error_code error_code
PHPAPI php_stream_context * php_stream_context_set(php_stream *stream, php_stream_context *context)
PHPAPI zval * php_stream_context_get_option(php_stream_context *context, const char *wrappername, const char *optionname)
struct _php_stream_xport_crypto_param php_stream_xport_crypto_param
#define STREAM_XPORT_SERVER
#define STREAM_XPORT_BIND
#define STREAM_XPORT_CONNECT_ASYNC
php_stream_xport_crypt_method_t
struct _php_stream_xport_param php_stream_xport_param
#define STREAM_XPORT_CONNECT
php_stream_transport_factory_func * php_stream_transport_factory
#define STREAM_XPORT_LISTEN
struct _php_stream php_stream
struct _php_stream_context php_stream_context
#define php_stream_pclose(stream)
#define php_stream_read(stream, buf, count)
PHPAPI int php_stream_from_persistent_id(const char *persistent_id, php_stream **stream)
#define PHP_STREAM_OPTION_XPORT_API
#define PHP_STREAM_OPTION_CRYPTO_API
#define PHP_STREAM_FLAG_NO_IO
#define php_stream_close(stream)
#define PHP_STREAM_CONTEXT(stream)
#define PHP_STREAM_PERSISTENT_FAILURE
#define PHP_STREAM_PERSISTENT_SUCCESS
#define PHP_STREAM_OPTION_CHECK_LIVENESS
#define php_stream_set_option(stream, option, value, ptrvalue)
#define PHP_STREAM_OPTION_RETURN_OK
#define php_stream_write(stream, buf, count)
enum _php_stream_xport_crypto_param::@140346054352235315366005246212154160231254101314 op
struct _php_stream_xport_crypto_param::@234115165332033214161101206371265150065200217213 outputs
php_stream_xport_crypt_method_t method
struct _php_stream_xport_crypto_param::@042362176013144336133052271202115307340250073237 inputs
struct _php_stream_xport_param::@015355061030136034370173273234023140274215071026 inputs
struct _php_stream_xport_param::@000113327003134033162122300162113175151127354335 outputs
enum _php_stream_xport_param::@374135164235347147303334377011004260152245232316 op
unsigned int want_textaddr
unsigned int want_errortext
php_stream_filter_chain writefilters
php_stream_filter_chain readfilters
PHPAPI int php_stream_xport_connect(php_stream *stream, const char *name, size_t namelen, int asynchronous, struct timeval *timeout, zend_string **error_text, int *error_code)
PHPAPI int php_stream_xport_crypto_enable(php_stream *stream, int activate)
PHPAPI int php_stream_xport_listen(php_stream *stream, int backlog, zend_string **error_text)
PHPAPI int php_stream_xport_accept(php_stream *stream, php_stream **client, zend_string **textaddr, void **addr, socklen_t *addrlen, struct timeval *timeout, zend_string **error_text)
PHPAPI HashTable * php_stream_xport_get_hash(void)
PHPAPI int php_stream_xport_shutdown(php_stream *stream, stream_shutdown_t how)
#define ERR_RETURN(out_err, local_err, fmt)
PHPAPI int php_stream_xport_register(const char *protocol, php_stream_transport_factory factory)
PHPAPI int php_stream_xport_get_name(php_stream *stream, int want_peer, zend_string **textaddr, void **addr, socklen_t *addrlen)
PHPAPI php_stream * _php_stream_xport_create(const char *name, size_t namelen, int options, int flags, const char *persistent_id, struct timeval *timeout, php_stream_context *context, zend_string **error_string, int *error_code STREAMS_DC)
PHPAPI int php_stream_xport_unregister(const char *protocol)
PHPAPI int php_stream_xport_crypto_setup(php_stream *stream, php_stream_xport_crypt_method_t crypto_method, php_stream *session_stream)
PHPAPI int php_stream_xport_bind(php_stream *stream, const char *name, size_t namelen, zend_string **error_text)
#define ERR_REPORT(out_err, fmt, arg)
PHPAPI int php_stream_xport_recvfrom(php_stream *stream, char *buf, size_t buflen, int flags, void **addr, socklen_t *addrlen, zend_string **textaddr)
PHPAPI int php_stream_xport_sendto(php_stream *stream, const char *buf, size_t buflen, int flags, void *addr, socklen_t addrlen)
#define pestrdup(s, persistent)
strncmp(string $string1, string $string2, int $length)
zend_string_release_ex(func->internal_function.function_name, 0)
ZEND_API zend_result ZEND_FASTCALL zend_hash_str_del(HashTable *ht, const char *str, size_t len)
struct _zend_string zend_string
ZEND_API zend_string_init_interned_func_t zend_string_init_interned
struct _zend_array HashTable