Annotation of embedaddon/strongswan/src/libstrongswan/plugins/files/files_fetcher.c, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (C) 2015 Tobias Brunner
3: * HSR Hochschule fuer Technik Rapperswil
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: #include <errno.h>
17:
18: #include <library.h>
19: #include <utils/debug.h>
20:
21: #include "files_fetcher.h"
22:
23: typedef struct private_files_fetcher_t private_files_fetcher_t;
24:
25: /**
26: * private data of a files_fetcher_t object.
27: */
28: struct private_files_fetcher_t {
29:
30: /**
31: * Public data
32: */
33: files_fetcher_t public;
34:
35: /**
36: * Callback function
37: */
38: fetcher_callback_t cb;
39: };
40:
41: METHOD(fetcher_t, fetch, status_t,
42: private_files_fetcher_t *this, char *uri, void *userdata)
43: {
44: chunk_t *data;
45: status_t status = FAILED;
46:
47: if (this->cb == fetcher_default_callback)
48: {
49: *(chunk_t*)userdata = chunk_empty;
50: }
51: if (!strpfx(uri, "file://"))
52: {
53: return NOT_SUPPORTED;
54: }
55: uri = uri + strlen("file://");
56: data = chunk_map(uri, FALSE);
57: if (!data)
58: {
59: DBG1(DBG_LIB, " opening '%s' failed: %s", uri, strerror(errno));
60: return FAILED;
61: }
62: if (this->cb(userdata, *data))
63: {
64: status = SUCCESS;
65: }
66: chunk_unmap(data);
67: return status;
68: }
69:
70: METHOD(fetcher_t, set_option, bool,
71: private_files_fetcher_t *this, fetcher_option_t option, ...)
72: {
73: bool supported = TRUE;
74: va_list args;
75:
76: va_start(args, option);
77: switch (option)
78: {
79: case FETCH_CALLBACK:
80: {
81: this->cb = va_arg(args, fetcher_callback_t);
82: break;
83: }
84: default:
85: supported = FALSE;
86: break;
87: }
88: va_end(args);
89: return supported;
90: }
91:
92: METHOD(fetcher_t, destroy, void,
93: private_files_fetcher_t *this)
94: {
95: free(this);
96: }
97:
98: /*
99: * Described in header.
100: */
101: files_fetcher_t *files_fetcher_create()
102: {
103: private_files_fetcher_t *this;
104:
105: INIT(this,
106: .public = {
107: .interface = {
108: .fetch = _fetch,
109: .set_option = _set_option,
110: .destroy = _destroy,
111: },
112: },
113: .cb = fetcher_default_callback,
114: );
115:
116: return &this->public;
117: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>