Annotation of embedaddon/strongswan/src/libstrongswan/fetcher/fetcher.h, revision 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>