Annotation of embedaddon/strongswan/src/libstrongswan/networking/streams/stream.h, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * Copyright (C) 2013 Martin Willi
                      3:  * Copyright (C) 2013 revosec AG
                      4:  *
                      5:  * This program is free software; you can redistribute it and/or modify it
                      6:  * under the terms of the GNU General Public License as published by the
                      7:  * Free Software Foundation; either version 2 of the License, or (at your
                      8:  * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
                      9:  *
                     10:  * This program is distributed in the hope that it will be useful, but
                     11:  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
                     12:  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
                     13:  * for more details.
                     14:  */
                     15: 
                     16: /**
                     17:  * @defgroup stream stream
                     18:  * @{ @ingroup streams
                     19:  */
                     20: 
                     21: #ifndef STREAM_H_
                     22: #define STREAM_H_
                     23: 
                     24: typedef struct stream_t stream_t;
                     25: 
                     26: #include <library.h>
                     27: 
                     28: /**
                     29:  * Constructor function prototype for stream_t.
                     30:  *
                     31:  * @param uri                  URI to create a stream for
                     32:  * @return                             stream instance, NULL on error
                     33:  */
                     34: typedef stream_t*(*stream_constructor_t)(char *uri);
                     35: 
                     36: /**
                     37:  * Callback function prototype, called when stream is ready.
                     38:  *
                     39:  * It is not allowed to destroy the stream nor to call on_read()/on_write/()
                     40:  * during the callback.
                     41:  *
                     42:  * As select() may return even if a read()/write() would actually block, it is
                     43:  * recommended to use the non-blocking calls and handle return values
                     44:  * appropriately.
                     45:  *
                     46:  * @param data                 data passed during callback registration
                     47:  * @param stream               associated stream
                     48:  * @return                             FALSE unregisters the invoked callback, TRUE keeps it
                     49:  */
                     50: typedef bool (*stream_cb_t)(void *data, stream_t *stream);
                     51: 
                     52: /**
                     53:  * Abstraction of a Berkeley socket using stream semantics.
                     54:  */
                     55: struct stream_t {
                     56: 
                     57:        /**
                     58:         * Read data from the stream.
                     59:         *
                     60:         * If "block" is FALSE and no data is available, the function returns -1
                     61:         * and sets errno to EWOULDBLOCK.
                     62:         *
                     63:         * @param buf           data buffer to read into
                     64:         * @param len           number of bytes to read
                     65:         * @param block         TRUE to use a blocking read
                     66:         * @return                      number of bytes read, -1 on error
                     67:         */
                     68:        ssize_t (*read)(stream_t *this, void *buf, size_t len, bool block);
                     69: 
                     70:        /**
                     71:         * Read data from the stream, avoiding short reads.
                     72:         *
                     73:         * This call is always blocking, and reads until len has been read
                     74:         * completely. If the connection is closed before enough bytes could be
                     75:         * returned, errno is set to ECONNRESET.
                     76:         *
                     77:         * @param buf           data buffer to read into
                     78:         * @param len           number of bytes to read
                     79:         * @return                      TRUE if len bytes read, FALSE on error
                     80:         */
                     81:        bool (*read_all)(stream_t *this, void *buf, size_t len);
                     82: 
                     83:        /**
                     84:         * Register a callback to invoke when stream has data to read.
                     85:         *
                     86:         * @param cb            callback function, NULL to unregister
                     87:         * @param data          data to pass to callback
                     88:         */
                     89:        void (*on_read)(stream_t *this, stream_cb_t cb, void *data);
                     90: 
                     91:        /**
                     92:         * Write data to the stream.
                     93:         *
                     94:         * If "block" is FALSE and the write would block, the function returns -1
                     95:         * and sets errno to EWOULDBLOCK.
                     96:         *
                     97:         * @param buf           data buffer to write
                     98:         * @param len           number of bytes to write
                     99:         * @param block         TRUE to use a blocking write
                    100:         * @return                      number of bytes written, -1 on error
                    101:         */
                    102:        ssize_t (*write)(stream_t *this, void *buf, size_t len, bool block);
                    103: 
                    104:        /**
                    105:         * Write data to the stream, avoiding short writes.
                    106:         *
                    107:         * This call is always blocking, and writes until len bytes has been
                    108:         * written.
                    109:         *
                    110:         * @param buf           data buffer to write
                    111:         * @param len           number of bytes to write
                    112:         * @return                      TRUE if len bytes written, FALSE on error
                    113:         */
                    114:        bool (*write_all)(stream_t *this, void *buf, size_t len);
                    115: 
                    116:        /**
                    117:         * Register a callback to invoke when a write would not block.
                    118:         *
                    119:         * @param cb            callback function, NULL to unregister
                    120:         * @param data          data to pass to callback
                    121:         */
                    122:        void (*on_write)(stream_t *this, stream_cb_t cb, void *data);
                    123: 
                    124:        /**
                    125:         * Get a FILE reference for this stream.
                    126:         *
                    127:         * @return                      FILE*, must be fclose()d, NULL on error
                    128:         */
                    129:        FILE* (*get_file)(stream_t *this);
                    130: 
                    131:        /**
                    132:         * Destroy a stream_t.
                    133:         */
                    134:        void (*destroy)(stream_t *this);
                    135: };
                    136: 
                    137: /**
                    138:  * Create a stream from a file descriptor.
                    139:  *
                    140:  * The file descriptor MUST be a socket for non-blocking operation.
                    141:  *
                    142:  * @param fd           file descriptor to wrap into a stream_t
                    143:  * @return                     stream instance
                    144:  */
                    145: stream_t *stream_create_from_fd(int fd);
                    146: 
                    147: #endif /** STREAM_H_ @}*/

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>