Annotation of embedaddon/strongswan/src/libstrongswan/fetcher/fetcher.h, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * Copyright (C) 2008-2011 Martin Willi
                      3:  * HSR Hochschule fuer Technik Rapperswil
                      4:  * Copyright (C) 2011 revosec AG
                      5:  *
                      6:  * This program is free software; you can redistribute it and/or modify it
                      7:  * under the terms of the GNU General Public License as published by the
                      8:  * Free Software Foundation; either version 2 of the License, or (at your
                      9:  * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
                     10:  *
                     11:  * This program is distributed in the hope that it will be useful, but
                     12:  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
                     13:  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
                     14:  * for more details.
                     15:  */
                     16: 
                     17: /**
                     18:  * @defgroup fetcheri fetcher
                     19:  * @{ @ingroup fetcher
                     20:  */
                     21: 
                     22: #ifndef FETCHER_H_
                     23: #define FETCHER_H_
                     24: 
                     25: typedef struct fetcher_t fetcher_t;
                     26: typedef enum fetcher_option_t fetcher_option_t;
                     27: 
                     28: #include <stdarg.h>
                     29: #include <utils/chunk.h>
                     30: 
                     31: /**
                     32:  * Constructor function which creates fetcher instances.
                     33:  *
                     34:  * @return                     fetcher instance
                     35:  */
                     36: typedef fetcher_t* (*fetcher_constructor_t)();
                     37: 
                     38: /**
                     39:  * Callback function used with FETCH_CALLBACK.
                     40:  *
                     41:  * @param userdata     userdata passed to fetcher_t.fetch()
                     42:  * @param chunk                chunk with next chunk of data
                     43:  * @return                     TRUE to continue with transfer, FALSE to abort
                     44:  */
                     45: typedef bool (*fetcher_callback_t)(void *userdata, chunk_t chunk);
                     46: 
                     47: #include <library.h>
                     48: 
                     49: /**
                     50:  * Fetching options to use for fetcher_t.fetch() call.
                     51:  */
                     52: enum fetcher_option_t {
                     53: 
                     54:        /**
                     55:         * Data to include in fetch request, e.g. on a HTTP post.
                     56:         * Additional argument is a chunk_t
                     57:         */
                     58:        FETCH_REQUEST_DATA,
                     59: 
                     60:        /**
                     61:         * Mime-Type of data included in FETCH_REQUEST_DATA.
                     62:         * Additional argument is a char*.
                     63:         */
                     64:        FETCH_REQUEST_TYPE,
                     65: 
                     66:        /**
                     67:         * HTTP header to be sent with with the fetch request.
                     68:         * Additional argument is a char*.
                     69:         */
                     70:        FETCH_REQUEST_HEADER,
                     71: 
                     72:        /**
                     73:         * Use HTTP Version 1.0 instead of 1.1.
                     74:         * No additional argument is needed.
                     75:         */
                     76:        FETCH_HTTP_VERSION_1_0,
                     77: 
                     78:        /**
                     79:         * Timeout to use for fetch, in seconds.
                     80:         * Additional argument is u_int
                     81:         */
                     82:        FETCH_TIMEOUT,
                     83: 
                     84:        /**
                     85:         * Sets a pointer to a variable that receives the request's response code.
                     86:         * Additional argument is a u_int*.
                     87:         */
                     88:        FETCH_RESPONSE_CODE,
                     89: 
                     90:        /**
                     91:         * Callback to invoke with each chunk of data.
                     92:         * Additional argument fetch_callback_t.
                     93:         * If this option is not given, the fetcher_default_callback is used,
                     94:         * which accumulates the data into an allocated chunk.
                     95:         */
                     96:        FETCH_CALLBACK,
                     97: 
                     98:        /**
                     99:         * Source IP address to bind for a fetch.
                    100:         * Additional argument is a host_t*, which may be NULL.
                    101:         */
                    102:        FETCH_SOURCEIP,
                    103: 
                    104:        /**
                    105:         * end of fetching options
                    106:         */
                    107:        FETCH_END,
                    108: };
                    109: 
                    110: /**
                    111:  * Fetcher interface, an implementation fetches data from an URL.
                    112:  */
                    113: struct fetcher_t {
                    114: 
                    115:        /**
                    116:         * Fetch data from URI into chunk.
                    117:         *
                    118:         * The fetcher returns NOT_SUPPORTED to indicate that it is uncappable
                    119:         * to handle such URLs. Other return values indicate a failure, and
                    120:         * fetching of that URL gets cancelled.
                    121:         * If no FETCH_CALLBACK function is set as option, userdata must be
                    122:         * a chunk_t*. This chunk gets allocated, accumulated data using the
                    123:         * fetcher_default_callback() function.
                    124:         *
                    125:         * @param uri           URI to fetch from
                    126:         * @param userdata      userdata to pass to callback function.
                    127:         * @return
                    128:         *                                      - SUCCESS if fetch was successful
                    129:         *                                      - NOT_SUPPORTED if fetcher does not support such URLs
                    130:         *                                      - FAILED, NOT_FOUND, PARSE_ERROR on failure
                    131:         */
                    132:        status_t (*fetch)(fetcher_t *this, char *uri, void *userdata);
                    133: 
                    134:        /**
                    135:         * Set a fetcher option, as defined in fetcher_option_t.
                    136:         *
                    137:         * Arguments passed to options must stay in memory until fetch() returns.
                    138:         *
                    139:         * @param option        option to set
                    140:         * @param ...           variable argument(s) to option
                    141:         * @return                      TRUE if option supported, FALSE otherwise
                    142:         */
                    143:        bool (*set_option)(fetcher_t *this, fetcher_option_t option, ...);
                    144: 
                    145:        /**
                    146:         * Destroy the fetcher instance.
                    147:         */
                    148:        void (*destroy)(fetcher_t *this);
                    149: };
                    150: 
                    151: /**
                    152:  * Default fetcher callback function, accumulates data to a chunk.
                    153:  *
                    154:  * @param userdata             chunk for allocated data, empty on first invocation
                    155:  * @param chunk                        current chunk of data
                    156:  * @return                             FALSE if chunk too large to allocate
                    157:  */
                    158: bool fetcher_default_callback(void *userdata, chunk_t chunk);
                    159: 
                    160: #endif /** FETCHER_H_ @}*/

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