From: Martin Willi Date: Fri, 5 Jul 2013 14:04:16 +0000 (+0200) Subject: plugins: add stream and stream services plugin features X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d7288dc35e6bbc9a2512422fb1ee07abc70d3e75;p=thirdparty%2Fstrongswan.git plugins: add stream and stream services plugin features --- diff --git a/src/libstrongswan/plugins/plugin_feature.c b/src/libstrongswan/plugins/plugin_feature.c index 8a1958be5e..6a30f73462 100644 --- a/src/libstrongswan/plugins/plugin_feature.c +++ b/src/libstrongswan/plugins/plugin_feature.c @@ -51,6 +51,8 @@ ENUM(plugin_feature_names, FEATURE_NONE, FEATURE_CUSTOM, "DATABASE", "FETCHER", "RESOLVER", + "STREAM", + "STREAM_SERVICE", "CUSTOM", ); @@ -93,6 +95,10 @@ u_int32_t plugin_feature_hash(plugin_feature_t *feature) case FEATURE_EAP_PEER: data = chunk_from_thing(feature->arg); break; + case FEATURE_STREAM: + case FEATURE_STREAM_SERVICE: + data = chunk_create(feature->arg.prefix, + strlen(feature->arg.prefix)); case FEATURE_CUSTOM: data = chunk_create(feature->arg.custom, strlen(feature->arg.custom)); @@ -167,6 +173,9 @@ bool plugin_feature_matches(plugin_feature_t *a, plugin_feature_t *b) case FEATURE_XAUTH_SERVER: case FEATURE_XAUTH_PEER: return streq(a->arg.xauth, b->arg.xauth); + case FEATURE_STREAM: + case FEATURE_STREAM_SERVICE: + return streq(a->arg.prefix, b->arg.prefix); } } return FALSE; @@ -206,6 +215,8 @@ bool plugin_feature_equals(plugin_feature_t *a, plugin_feature_t *b) case FEATURE_CUSTOM: case FEATURE_XAUTH_SERVER: case FEATURE_XAUTH_PEER: + case FEATURE_STREAM: + case FEATURE_STREAM_SERVICE: return plugin_feature_matches(a, b); case FEATURE_RNG: return a->arg.rng_quality == b->arg.rng_quality; @@ -373,6 +384,14 @@ char* plugin_feature_get_string(plugin_feature_t *feature) return str; } break; + case FEATURE_STREAM: + case FEATURE_STREAM_SERVICE: + if (asprintf(&str, "%N:%s", plugin_feature_names, feature->type, + feature->arg.prefix) > 0) + { + return str; + } + break; } if (!str) { @@ -470,6 +489,14 @@ bool plugin_feature_load(plugin_t *plugin, plugin_feature_t *feature, case FEATURE_RESOLVER: lib->resolver->add_resolver(lib->resolver, reg->arg.reg.f); break; + case FEATURE_STREAM: + lib->streams->add_stream(lib->streams, feature->arg.prefix, + reg->arg.reg.f); + break; + case FEATURE_STREAM_SERVICE: + lib->streams->add_service(lib->streams, feature->arg.prefix, + reg->arg.reg.f); + break; default: break; } @@ -545,6 +572,12 @@ bool plugin_feature_unload(plugin_t *plugin, plugin_feature_t *feature, case FEATURE_RESOLVER: lib->resolver->remove_resolver(lib->resolver, reg->arg.reg.f); break; + case FEATURE_STREAM: + lib->streams->remove_stream(lib->streams, reg->arg.reg.f); + break; + case FEATURE_STREAM_SERVICE: + lib->streams->remove_service(lib->streams, reg->arg.reg.f); + break; default: break; } diff --git a/src/libstrongswan/plugins/plugin_feature.h b/src/libstrongswan/plugins/plugin_feature.h index ea23f766ca..9e81353cd5 100644 --- a/src/libstrongswan/plugins/plugin_feature.h +++ b/src/libstrongswan/plugins/plugin_feature.h @@ -152,6 +152,10 @@ struct plugin_feature_t { FEATURE_FETCHER, /** resolver_t */ FEATURE_RESOLVER, + /** stream_t */ + FEATURE_STREAM, + /** stream_service_t */ + FEATURE_STREAM_SERVICE, /** custom feature, described with a string */ FEATURE_CUSTOM, } type; @@ -205,6 +209,8 @@ struct plugin_feature_t { char *custom; /** FEATURE_XAUTH_SERVER/CLIENT */ char *xauth; + /** FEATURE_STREAM/STREAM_SERVICE */ + char *prefix; /** FEATURE_REGISTER */ struct { @@ -297,6 +303,8 @@ struct plugin_feature_t { #define _PLUGIN_FEATURE_DATABASE(kind, type) __PLUGIN_FEATURE(kind, DATABASE, .database = type) #define _PLUGIN_FEATURE_FETCHER(kind, type) __PLUGIN_FEATURE(kind, FETCHER, .fetcher = type) #define _PLUGIN_FEATURE_RESOLVER(kind, ...) __PLUGIN_FEATURE(kind, RESOLVER, .custom = NULL) +#define _PLUGIN_FEATURE_STREAM(kind, type) __PLUGIN_FEATURE(kind, STREAM, .prefix = type) +#define _PLUGIN_FEATURE_STREAM_SERVICE(kind, type) __PLUGIN_FEATURE(kind, STREAM_SERVICE, .prefix = type) #define _PLUGIN_FEATURE_CUSTOM(kind, name) __PLUGIN_FEATURE(kind, CUSTOM, .custom = name) #define _PLUGIN_FEATURE_XAUTH_SERVER(kind, name) __PLUGIN_FEATURE(kind, XAUTH_SERVER, .xauth = name) #define _PLUGIN_FEATURE_XAUTH_PEER(kind, name) __PLUGIN_FEATURE(kind, XAUTH_PEER, .xauth = name) @@ -321,6 +329,8 @@ struct plugin_feature_t { #define _PLUGIN_FEATURE_REGISTER_DATABASE(type, f) __PLUGIN_FEATURE_REGISTER(type, f) #define _PLUGIN_FEATURE_REGISTER_FETCHER(type, f) __PLUGIN_FEATURE_REGISTER(type, f) #define _PLUGIN_FEATURE_REGISTER_RESOLVER(type, f) __PLUGIN_FEATURE_REGISTER(type, f) +#define _PLUGIN_FEATURE_REGISTER_STREAM(type, f) __PLUGIN_FEATURE_REGISTER(type, f) +#define _PLUGIN_FEATURE_REGISTER_STREAM_SERVICE(type, f) __PLUGIN_FEATURE_REGISTER(type, f) #define _PLUGIN_FEATURE_CALLBACK(_cb, _data) (plugin_feature_t){ FEATURE_CALLBACK, FEATURE_NONE, .arg.cb = { .f = _cb, .data = _data } }