From 4662e84995cf9570c18361f6686bf5964fd86cba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Janouch?= Date: Thu, 18 Sep 2014 23:41:07 +0200 Subject: First set of fixes There are still some problems but at least it does something now. --- plugins/ssh.c | 56 +++++++++++++++++++++++++++++++------------------------- 1 file changed, 31 insertions(+), 25 deletions(-) (limited to 'plugins/ssh.c') diff --git a/plugins/ssh.c b/plugins/ssh.c index 328a3aa..3a32223 100644 --- a/plugins/ssh.c +++ b/plugins/ssh.c @@ -30,44 +30,50 @@ static struct plugin_data } g_data; +struct scan_data +{ + struct str input; ///< Input buffer +}; + static void * scan_init (struct unit *u) { - // TODO - return NULL; + (void) u; + + struct scan_data *scan = xcalloc (1, sizeof *scan); + str_init (&scan->input); + return scan; } static void scan_free (void *handle) { - // TODO + struct scan_data *scan = handle; + str_free (&scan->input); + free (scan); } static void on_data (void *handle, struct unit *u, struct str *data) { - // TODO -} - -static void -on_eof (void *handle, struct unit *u) -{ - // TODO -} + // TODO: don't let the input buffer grow too much + struct scan_data *scan = handle; + str_append_str (&scan->input, data); -static void -on_error (void *handle, struct unit *u) -{ - // TODO -} + char *input = scan->input.str; + char *nl = strstr (input, "\r\n"); + if (!nl) + return; -static void -on_aborted (void *handle, struct unit *u) -{ - // TODO + // TODO: parse the reply, make sure that it's actually SSH, + // don't put just any garbage in the output info + *nl = '\0'; + g_data.api->unit_add_info (u, input); + g_data.api->unit_set_success (u, true); + g_data.api->unit_abort (u); } -static struct service g_http_service = +static struct service g_ssh_service = { .name = "SSH", .flags = 0, @@ -75,16 +81,16 @@ static struct service g_http_service = .scan_init = scan_init, .scan_free = scan_free, .on_data = on_data, - .on_eof = on_eof, - .on_error = on_error, - .on_aborted = on_aborted + .on_eof = NULL, + .on_error = NULL, + .on_aborted = NULL }; 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); + api->register_service (ctx, &g_ssh_service); return true; } -- cgit v1.2.3