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>