From 0daf07a7429c6c31b4fc3cca737f2ce30636cb24 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 27 Nov 2011 16:29:42 -0800 Subject: [PATCH] More logging --- guacd/Makefile.am | 4 +-- guacd/include/log.h | 49 ++++++++++++++++++++++++++ guacd/src/client.c | 44 ++++++++++++----------- guacd/src/daemon.c | 30 ++-------------- guacd/src/log.c | 85 +++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 162 insertions(+), 50 deletions(-) create mode 100644 guacd/include/log.h create mode 100644 guacd/src/log.c diff --git a/guacd/Makefile.am b/guacd/Makefile.am index 9e923db9..c7d3f1b6 100644 --- a/guacd/Makefile.am +++ b/guacd/Makefile.am @@ -42,8 +42,8 @@ AM_CFLAGS = -Werror -Wall -pedantic -Iinclude sbin_PROGRAMS = guacd init_SCRIPTS = init.d/guacd -noinst_HEADERS = include/client.h include/thread.h -guacd_SOURCES = src/daemon.c src/client.c src/thread.c +noinst_HEADERS = include/client.h include/thread.h include/log.h +guacd_SOURCES = src/daemon.c src/client.c src/thread.c src/log.c EXTRA_DIST = init.d/guacd.in CLEANFILES = $(init_SCRIPTS) diff --git a/guacd/include/log.h b/guacd/include/log.h new file mode 100644 index 00000000..03b55601 --- /dev/null +++ b/guacd/include/log.h @@ -0,0 +1,49 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is guacd. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef __GUACD_LOG_H +#define __GUACD_LOG_H + +#include + +void guacd_log_info(guac_client* client, const char* format, va_list args); +void guacd_log_error(guac_client* client, const char* format, va_list args); +void guacd_log_guac_error(const char* message); +void guacd_client_log_guac_error(guac_client* client, const char* message); + +#endif + diff --git a/guacd/src/client.c b/guacd/src/client.c index 21da9bb1..b2402783 100644 --- a/guacd/src/client.c +++ b/guacd/src/client.c @@ -44,6 +44,7 @@ #include "client.h" #include "thread.h" +#include "log.h" /** * Sleep for the given number of milliseconds. @@ -84,18 +85,16 @@ void* __guac_client_output_thread(void* data) { /* Send sync */ if (guac_protocol_send_sync(socket, client->last_sent_timestamp)) { - guac_client_log_error(client, - "Error sending \"sync\" instruction: %s", - guac_status_string(guac_error)); + guacd_client_log_guac_error(client, + "Error sending \"sync\" instruction"); guac_client_stop(client); return NULL; } /* Flush */ if (guac_socket_flush(socket)) { - guac_client_log_error(client, - "Error flushing output: %s", - guac_status_string(guac_error)); + guacd_client_log_guac_error(client, + "Error flushing output"); guac_client_stop(client); return NULL; } @@ -111,9 +110,8 @@ void* __guac_client_output_thread(void* data) { int retval = client->handle_messages(client); if (retval) { - guac_client_log_error(client, - "Error handling server messages: %s", - guac_status_string(guac_error)); + guacd_client_log_guac_error(client, + "Error handling server messages"); guac_client_stop(client); return NULL; } @@ -121,18 +119,16 @@ void* __guac_client_output_thread(void* data) { /* Send sync instruction */ client->last_sent_timestamp = guac_protocol_get_timestamp(); if (guac_protocol_send_sync(socket, client->last_sent_timestamp)) { - guac_client_log_error(client, - "Error sending \"sync\" instruction: %s", - guac_status_string(guac_error)); + guacd_client_log_guac_error(client, + "Error sending \"sync\" instruction"); guac_client_stop(client); return NULL; } /* Flush */ if (guac_socket_flush(socket)) { - guac_client_log_error(client, - "Error flushing output: %s", - guac_status_string(guac_error)); + guacd_client_log_guac_error(client, + "Error flushing output"); guac_client_stop(client); return NULL; } @@ -169,18 +165,24 @@ void* __guac_client_input_thread(void* data) { /* Stop on error */ if (instruction == NULL) { - guac_client_log_error(client, - "Error reading instruction: %s", - guac_status_string(guac_error)); + guacd_client_log_guac_error(client, + "Error reading instruction"); guac_client_stop(client); return NULL; } /* Call handler, stop on error */ if (guac_client_handle_instruction(client, instruction) < 0) { - guac_client_log_error(client, - "Error in client \"%s\" instruction handler: %s", - instruction->opcode, guac_status_string(guac_error)); + + /* Log error */ + guacd_client_log_guac_error(client, + "Client instruction handler error"); + + /* Log handler details */ + guac_client_log_info(client, + "Failing instruction handler in client was \"%s\"", + instruction->opcode); + guac_instruction_free(instruction); guac_client_stop(client); return NULL; diff --git a/guacd/src/daemon.c b/guacd/src/daemon.c index 2c586db1..63125909 100644 --- a/guacd/src/daemon.c +++ b/guacd/src/daemon.c @@ -52,6 +52,7 @@ #include #include "client.h" +#include "log.h" typedef struct client_thread_data { @@ -60,31 +61,6 @@ typedef struct client_thread_data { } client_thread_data; -void __guacd_log_info(guac_client* client, const char* format, va_list args) { - vsyslog(LOG_INFO, format, args); -} - -void __guacd_log_error(guac_client* client, const char* format, va_list args) { - vsyslog(LOG_ERR, format, args); -} - -void guacd_log_guac_error(const char* message) { - - /* If error message provided, include in log */ - if (guac_error_message != NULL) - syslog(LOG_ERR, "%s: %s: %s", - message, - guac_error_message, - guac_status_string(guac_error)); - - /* Otherwise just log with standard status string */ - else - syslog(LOG_ERR, "%s: %s", - message, - guac_status_string(guac_error)); - -} - void* start_client_thread(void* data) { guac_client* client; @@ -191,8 +167,8 @@ void* start_client_thread(void* data) { } /* Set up logging in client */ - client->log_info_handler = __guacd_log_info; - client->log_error_handler = __guacd_log_error; + client->log_info_handler = guacd_log_info; + client->log_error_handler = guacd_log_error; /* Start client threads */ syslog(LOG_INFO, "Starting client"); diff --git a/guacd/src/log.c b/guacd/src/log.c new file mode 100644 index 00000000..6409c2cb --- /dev/null +++ b/guacd/src/log.c @@ -0,0 +1,85 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is guacd. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include +#include + +#include +#include + +void guacd_log_info(guac_client* client, const char* format, va_list args) { + vsyslog(LOG_INFO, format, args); +} + +void guacd_log_error(guac_client* client, const char* format, va_list args) { + vsyslog(LOG_ERR, format, args); +} + +void guacd_log_guac_error(const char* message) { + + /* If error message provided, include in log */ + if (guac_error_message != NULL) + syslog(LOG_ERR, "%s: %s: %s", + message, + guac_error_message, + guac_status_string(guac_error)); + + /* Otherwise just log with standard status string */ + else + syslog(LOG_ERR, "%s: %s", + message, + guac_status_string(guac_error)); + +} + +void guacd_client_log_guac_error(guac_client* client, const char* message) { + + /* If error message provided, include in log */ + if (guac_error_message != NULL) + guac_client_log_error(client, "%s: %s: %s", + message, + guac_error_message, + guac_status_string(guac_error)); + + /* Otherwise just log with standard status string */ + else + guac_client_log_error(client, "%s: %s", + message, + guac_status_string(guac_error)); + +} +