Annotation of embedaddon/php/main/streams/php_stream_transport.h, revision 1.1
1.1 ! misho 1: /*
! 2: +----------------------------------------------------------------------+
! 3: | PHP Version 5 |
! 4: +----------------------------------------------------------------------+
! 5: | Copyright (c) 1997-2012 The PHP Group |
! 6: +----------------------------------------------------------------------+
! 7: | This source file is subject to version 3.01 of the PHP license, |
! 8: | that is bundled with this package in the file LICENSE, and is |
! 9: | available through the world-wide-web at the following url: |
! 10: | http://www.php.net/license/3_01.txt |
! 11: | If you did not receive a copy of the PHP license and are unable to |
! 12: | obtain it through the world-wide-web, please send a note to |
! 13: | license@php.net so we can mail you a copy immediately. |
! 14: +----------------------------------------------------------------------+
! 15: | Author: Wez Furlong <wez@thebrainroom.com> |
! 16: +----------------------------------------------------------------------+
! 17: */
! 18:
! 19: /* $Id: php_stream_transport.h 321634 2012-01-01 13:15:04Z felipe $ */
! 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, long protolen,
! 30: char *resourcename, long resourcenamelen,
! 31: const char *persistent_id, int options, int flags,
! 32: struct timeval *timeout,
! 33: php_stream_context *context STREAMS_DC TSRMLS_DC);
! 34: typedef php_stream_transport_factory_func *php_stream_transport_factory;
! 35:
! 36: BEGIN_EXTERN_C()
! 37: PHPAPI int php_stream_xport_register(char *protocol, php_stream_transport_factory factory TSRMLS_DC);
! 38: PHPAPI int php_stream_xport_unregister(char *protocol TSRMLS_DC);
! 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: /* Open a client or server socket connection */
! 49: PHPAPI php_stream *_php_stream_xport_create(const char *name, long namelen, int options,
! 50: int flags, const char *persistent_id,
! 51: struct timeval *timeout,
! 52: php_stream_context *context,
! 53: char **error_string,
! 54: int *error_code
! 55: STREAMS_DC TSRMLS_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 TSRMLS_CC)
! 59:
! 60: /* Bind the stream to a local address */
! 61: PHPAPI int php_stream_xport_bind(php_stream *stream,
! 62: const char *name, long namelen,
! 63: char **error_text
! 64: TSRMLS_DC);
! 65:
! 66: /* Connect to a remote address */
! 67: PHPAPI int php_stream_xport_connect(php_stream *stream,
! 68: const char *name, long namelen,
! 69: int asynchronous,
! 70: struct timeval *timeout,
! 71: char **error_text,
! 72: int *error_code
! 73: TSRMLS_DC);
! 74:
! 75: /* Prepare to listen */
! 76: PHPAPI int php_stream_xport_listen(php_stream *stream,
! 77: int backlog,
! 78: char **error_text
! 79: TSRMLS_DC);
! 80:
! 81: /* Get the next client and their address as a string, or the underlying address
! 82: * structure. You must efree either of these if you request them */
! 83: PHPAPI int php_stream_xport_accept(php_stream *stream, php_stream **client,
! 84: char **textaddr, int *textaddrlen,
! 85: void **addr, socklen_t *addrlen,
! 86: struct timeval *timeout,
! 87: char **error_text
! 88: TSRMLS_DC);
! 89:
! 90: /* Get the name of either the socket or it's peer */
! 91: PHPAPI int php_stream_xport_get_name(php_stream *stream, int want_peer,
! 92: char **textaddr, int *textaddrlen,
! 93: void **addr, socklen_t *addrlen
! 94: TSRMLS_DC);
! 95:
! 96: enum php_stream_xport_send_recv_flags {
! 97: STREAM_OOB = 1,
! 98: STREAM_PEEK = 2
! 99: };
! 100:
! 101: /* Similar to recv() system call; read data from the stream, optionally
! 102: * peeking, optionally retrieving OOB data */
! 103: PHPAPI int php_stream_xport_recvfrom(php_stream *stream, char *buf, size_t buflen,
! 104: long flags, void **addr, socklen_t *addrlen,
! 105: char **textaddr, int *textaddrlen TSRMLS_DC);
! 106:
! 107: /* Similar to send() system call; send data to the stream, optionally
! 108: * sending it as OOB data */
! 109: PHPAPI int php_stream_xport_sendto(php_stream *stream, const char *buf, size_t buflen,
! 110: long flags, void *addr, socklen_t addrlen TSRMLS_DC);
! 111:
! 112: typedef enum {
! 113: STREAM_SHUT_RD,
! 114: STREAM_SHUT_WR,
! 115: STREAM_SHUT_RDWR
! 116: } stream_shutdown_t;
! 117:
! 118: /* Similar to shutdown() system call; shut down part of a full-duplex
! 119: * connection */
! 120: PHPAPI int php_stream_xport_shutdown(php_stream *stream, stream_shutdown_t how TSRMLS_DC);
! 121: END_EXTERN_C()
! 122:
! 123:
! 124: /* Structure definition for the set_option interface that the above functions wrap */
! 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: long namelen;
! 145: int backlog;
! 146: struct timeval *timeout;
! 147: struct sockaddr *addr;
! 148: socklen_t addrlen;
! 149: char *buf;
! 150: size_t buflen;
! 151: long flags;
! 152: } inputs;
! 153: struct {
! 154: php_stream *client;
! 155: int returncode;
! 156: struct sockaddr *addr;
! 157: socklen_t addrlen;
! 158: char *textaddr;
! 159: long textaddrlen;
! 160:
! 161: char *error_text;
! 162: int error_code;
! 163: } outputs;
! 164: } php_stream_xport_param;
! 165:
! 166:
! 167: /* These functions provide crypto support on the underlying transport */
! 168: typedef enum {
! 169: STREAM_CRYPTO_METHOD_SSLv2_CLIENT,
! 170: STREAM_CRYPTO_METHOD_SSLv3_CLIENT,
! 171: STREAM_CRYPTO_METHOD_SSLv23_CLIENT,
! 172: STREAM_CRYPTO_METHOD_TLS_CLIENT,
! 173: STREAM_CRYPTO_METHOD_SSLv2_SERVER,
! 174: STREAM_CRYPTO_METHOD_SSLv3_SERVER,
! 175: STREAM_CRYPTO_METHOD_SSLv23_SERVER,
! 176: STREAM_CRYPTO_METHOD_TLS_SERVER
! 177: } php_stream_xport_crypt_method_t;
! 178:
! 179: BEGIN_EXTERN_C()
! 180: PHPAPI int php_stream_xport_crypto_setup(php_stream *stream, php_stream_xport_crypt_method_t crypto_method, php_stream *session_stream TSRMLS_DC);
! 181: PHPAPI int php_stream_xport_crypto_enable(php_stream *stream, int activate TSRMLS_DC);
! 182: END_EXTERN_C()
! 183:
! 184: typedef struct _php_stream_xport_crypto_param {
! 185: enum {
! 186: STREAM_XPORT_CRYPTO_OP_SETUP,
! 187: STREAM_XPORT_CRYPTO_OP_ENABLE
! 188: } op;
! 189: struct {
! 190: int activate;
! 191: php_stream_xport_crypt_method_t method;
! 192: php_stream *session;
! 193: } inputs;
! 194: struct {
! 195: int returncode;
! 196: } outputs;
! 197: } php_stream_xport_crypto_param;
! 198:
! 199: BEGIN_EXTERN_C()
! 200: PHPAPI HashTable *php_stream_xport_get_hash(void);
! 201: PHPAPI php_stream_transport_factory_func php_stream_generic_socket_factory;
! 202: END_EXTERN_C()
! 203:
! 204: /*
! 205: * Local variables:
! 206: * tab-width: 4
! 207: * c-basic-offset: 4
! 208: * End:
! 209: * vim600: noet sw=4 ts=4 fdm=marker
! 210: * vim<600: noet sw=4 ts=4
! 211: */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>