From a1339466880b1dcaff2d2419f7d5aa5bd09fa1de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Janouch?= Date: Thu, 11 Sep 2014 08:10:33 +0200 Subject: [PATCH] Write stubs for the plugins Make them compile. --- .gitignore | 1 + Makefile | 6 ++- plugin-api.h | 2 +- plugin-http.c | 24 --------- plugins/http.c | 95 +++++++++++++++++++++++++++++++++++ plugin-irc.c => plugins/irc.c | 31 ++++++++++-- ponymap.c | 3 -- utils.c | 3 ++ 8 files changed, 130 insertions(+), 35 deletions(-) delete mode 100644 plugin-http.c create mode 100644 plugins/http.c rename plugin-irc.c => plugins/irc.c (87%) diff --git a/.gitignore b/.gitignore index 4eee501..972f800 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ # Build files /ponymap +/plugins/*.so # Qt Creator files /ponymap.config diff --git a/Makefile b/Makefile index 87a593e..8a75a99 100644 --- a/Makefile +++ b/Makefile @@ -9,13 +9,15 @@ LDFLAGS = `pkg-config --libs libssl` -lpthread -lrt -ldl .PHONY: all clean .SUFFIXES: -targets = ponymap +targets = ponymap plugins/http.so plugins/irc.so all: $(targets) clean: rm -f $(targets) -ponymap: ponymap.c utils.c siphash.c +ponymap: ponymap.c utils.c plugin-api.h siphash.c $(CC) ponymap.c siphash.c -o $@ $(CFLAGS) $(LDFLAGS) +plugins/%.so: plugins/%.c utils.c plugin-api.h + $(CC) $< -o $@ $(CFLAGS) $(LDFLAGS) -shared -fPIC diff --git a/plugin-api.h b/plugin-api.h index a8e6c58..96056ee 100644 --- a/plugin-api.h +++ b/plugin-api.h @@ -36,7 +36,7 @@ struct service const char *name; ///< Name of the service int flags; ///< Service flags - // XXX: what event happens when? + // scan_init -> on_data* -> [on_eof/on_error] -> on_aborted -> scan_free /// Initialize a scan, returning a handle to it void *(*scan_init) (struct unit *u); diff --git a/plugin-http.c b/plugin-http.c deleted file mode 100644 index 647814e..0000000 --- a/plugin-http.c +++ /dev/null @@ -1,24 +0,0 @@ -/* - * plugin-http.c: HTTP service detection plugin - * - * Copyright (c) 2014, Přemysl Janouch - * All rights reserved. - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - */ - -#include "utils.c" -#include "plugin-api.h" - -// TODO diff --git a/plugins/http.c b/plugins/http.c new file mode 100644 index 0000000..d037326 --- /dev/null +++ b/plugins/http.c @@ -0,0 +1,95 @@ +/* + * http.c: HTTP service detection plugin + * + * Copyright (c) 2014, Přemysl Janouch + * All rights reserved. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#include "../utils.c" +#include "../plugin-api.h" + +// --- Service detection ------------------------------------------------------- + +static struct plugin_data +{ + void *ctx; ///< Application context + struct plugin_api *api; ///< Plugin API vtable +} +g_data; + +static void * +scan_init (struct unit *u) +{ + // TODO + return NULL; +} + +static void +scan_free (void *handle) +{ + // TODO +} + +static void +on_data (void *handle, struct unit *u, struct str *data) +{ + // TODO +} + +static void +on_eof (void *handle, struct unit *u) +{ + // TODO +} + +static void +on_error (void *handle, struct unit *u) +{ + // TODO +} + +static void +on_aborted (void *handle, struct unit *u) +{ + // TODO +} + +static struct service g_http_service = +{ + .name = "HTTP", + .flags = SERVICE_SUPPORTS_TLS, + + .scan_init = scan_init, + .scan_free = scan_free, + .on_data = on_data, + .on_eof = on_eof, + .on_error = on_error, + .on_aborted = on_aborted +}; + +static bool +initialize (void *ctx, struct plugin_api *api) +{ + g_data = (struct plugin_data) { .ctx = ctx, .api = api }; + api->register_service (ctx, &g_http_service); + return true; +} + +struct plugin_info ponymap_plugin_info = +{ + .api_version = API_VERSION, + .initialize = initialize +}; diff --git a/plugin-irc.c b/plugins/irc.c similarity index 87% rename from plugin-irc.c rename to plugins/irc.c index 0daff0c..58f594a 100644 --- a/plugin-irc.c +++ b/plugins/irc.c @@ -1,5 +1,5 @@ /* - * plugin-http.c: IRC service detection plugin + * http.c: IRC service detection plugin * * Copyright (c) 2014, Přemysl Janouch * All rights reserved. @@ -18,10 +18,8 @@ * */ -#include "utils.c" -#include "plugin-api.h" - -// TODO +#include "../utils.c" +#include "../plugin-api.h" // --- IRC utilities ----------------------------------------------------------- @@ -192,3 +190,26 @@ irc_fnmatch (const char *pattern, const char *string) irc_strxfrm (x_string, string, string_size); return fnmatch (x_pattern, x_string, 0); } + +// --- Service detection ------------------------------------------------------- + +static struct plugin_data +{ + void *ctx; ///< Application context + struct plugin_api *api; ///< Plugin API vtable +} +g_data; + +static bool +initialize (void *ctx, struct plugin_api *api) +{ + g_data = (struct plugin_data) { .ctx = ctx, .api = api }; + // TODO: register a service + return true; +} + +struct plugin_info ponymap_plugin_info = +{ + .api_version = API_VERSION, + .initialize = initialize +}; diff --git a/ponymap.c b/ponymap.c index 5eb9cf0..185f657 100644 --- a/ponymap.c +++ b/ponymap.c @@ -18,9 +18,6 @@ * */ -#define PROGRAM_NAME "ponymap" -#define PROGRAM_VERSION "alpha" - #include "utils.c" #include "plugin-api.h" #include diff --git a/utils.c b/utils.c index f2aea74..18dd48e 100644 --- a/utils.c +++ b/utils.c @@ -18,6 +18,9 @@ * */ +#define PROGRAM_NAME "ponymap" +#define PROGRAM_VERSION "alpha" + #define _POSIX_C_SOURCE 199309L #define _XOPEN_SOURCE 600