From 3bb563b432b739583baa9689470abcdfe5cb26f0 Mon Sep 17 00:00:00 2001 From: Jan Vidar Krey Date: Thu, 19 Mar 2009 00:55:11 +0100 Subject: [PATCH] Cleaned up command system somewhat. Added admin commands for reload and shutdown. --- src/commands.c | 139 +++++++++++++++++++------------------------------ 1 file changed, 53 insertions(+), 86 deletions(-) diff --git a/src/commands.c b/src/commands.c index d607326..740744f 100644 --- a/src/commands.c +++ b/src/commands.c @@ -19,28 +19,29 @@ #include "uhub.h" +static void send_message(struct user* user, const char* message) +{ + char* buffer = adc_msg_escape(message); + struct adc_message* command = adc_msg_construct(ADC_CMD_IMSG, strlen(buffer) + 6); + adc_msg_add_argument(command, buffer); + route_to_user(user, command); + adc_msg_free(command); + hub_free(buffer); +} + static int command_access_denied(struct user* user) { - struct adc_message* command; - char* buffer = adc_msg_escape("Access denied."); - command = adc_msg_construct(ADC_CMD_IMSG, strlen(buffer) + 6); - adc_msg_add_argument(command, buffer); - route_to_user(user, command); - adc_msg_free(command); - hub_free(buffer); + send_message(user, "*** Access denied."); return 0; } static int command_stats(struct user* user, const char* message) { - struct adc_message* command; - if (user->credentials < cred_super) return command_access_denied(user); char temp[128]; - snprintf(temp, 128, "*** Stats: %zu users, peak: %zu. Network (up/down): %d/%d KB/s, peak: %d/%d KB/s", user->hub->users->count, user->hub->users->count_peak, @@ -49,91 +50,68 @@ static int command_stats(struct user* user, const char* message) (int) user->hub->stats.net_tx_peak / 1024, (int) user->hub->stats.net_rx_peak / 1024); - char* buffer = adc_msg_escape(temp); - command = adc_msg_construct(ADC_CMD_IMSG, strlen(buffer) + 6); - adc_msg_add_argument(command, buffer); - route_to_user(user, command); - adc_msg_free(command); - hub_free(buffer); + send_message(user, temp); return 0; } static int command_help(struct user* user, const char* message) { - struct adc_message* command; - char* buffer = adc_msg_escape("\n" - "*** Available commands:\n" - "!help - Show this help message\n" - "!stats - Show hub stats (super)\n" - "!version - Show this help message\n" - "!uptime - Display hub uptime\n" - "!kick - Kick user (operator)\n" + send_message(user, "\n" + "*** Available commands:\n" + "!help - Show this help message\n" + "!stats - Show hub stats (super)\n" + "!version - Show this help message\n" + "!uptime - Display hub uptime\n" + "!kick - Kick user (operator)\n" + "!reload - Reload configuration (admin)\n" + "!shutdown - Shutdown hub (admin)\n" ); - - command = adc_msg_construct(ADC_CMD_IMSG, strlen(buffer) + 6); - adc_msg_add_argument(command, buffer); - route_to_user(user, command); - adc_msg_free(command); - hub_free(buffer); return 0; } static int command_uptime(struct user* user, const char* message) { - struct adc_message* command; - char tmp[128]; - size_t d; - size_t h; - size_t m; - size_t D = (size_t) difftime(time(0), user->hub->tm_started); + char tmp[128]; + size_t d; + size_t h; + size_t m; + size_t D = (size_t) difftime(time(0), user->hub->tm_started); - d = D / (24 * 3600); - D = D % (24 * 3600); - h = D / 3600; - D = D % 3600; - m = D / 60; + d = D / (24 * 3600); + D = D % (24 * 3600); + h = D / 3600; + D = D % 3600; + m = D / 60; - tmp[0] = 0; - strcat(tmp, "*** Uptime: "); - - if (d) - { + tmp[0] = 0; + strcat(tmp, "*** Uptime: "); + + if (d) + { strcat(tmp, uhub_itoa((int) d)); strcat(tmp, " day"); if (d != 1) strcat(tmp, "s"); strcat(tmp, ", "); - } + } - if (h < 10) strcat(tmp, "0"); - strcat(tmp, uhub_itoa((int) h)); - strcat(tmp, ":"); - if (m < 10) strcat(tmp, "0"); - strcat(tmp, uhub_itoa((int) m)); + if (h < 10) strcat(tmp, "0"); + strcat(tmp, uhub_itoa((int) h)); + strcat(tmp, ":"); + if (m < 10) strcat(tmp, "0"); + strcat(tmp, uhub_itoa((int) m)); - char* buffer = adc_msg_escape(tmp); - command = adc_msg_construct(ADC_CMD_IMSG, strlen(buffer) + 6); - adc_msg_add_argument(command, buffer); - route_to_user(user, command); - adc_msg_free(command); - hub_free(buffer); - return 0; + send_message(user, tmp); + return 0; } static int command_kick(struct user* user, const char* message) { - struct adc_message* command; - - if (user->credentials < cred_operator) - return command_access_denied(user); - - char* buffer = adc_msg_escape("*** Kick not implemented!"); - command = adc_msg_construct(ADC_CMD_IMSG, strlen(buffer) + 6); - adc_msg_add_argument(command, buffer); - route_to_user(user, command); - adc_msg_free(command); - hub_free(buffer); - return 0; + if (user->credentials < cred_operator) + return command_access_denied(user); + + send_message(user, "*** Kick not implemented!"); + return 0; } static int command_reload(struct user* user, const char* message) @@ -141,6 +119,7 @@ static int command_reload(struct user* user, const char* message) if (user->credentials < cred_admin) return command_access_denied(user); + send_message(user, "*** Reloading configuration"); user->hub->status = hub_status_restart; return 0; } @@ -150,6 +129,7 @@ static int command_shutdown(struct user* user, const char* message) if (user->credentials < cred_admin) return command_access_denied(user); + send_message(user, "*** Hub shuting down..."); user->hub->status = hub_status_shutdown; return 0; } @@ -157,32 +137,19 @@ static int command_shutdown(struct user* user, const char* message) static int command_version(struct user* user, const char* message) { - struct adc_message* command; - char* buffer = adc_msg_escape("*** Powered by " PRODUCT "/" VERSION); - command = adc_msg_construct(ADC_CMD_IMSG, strlen(buffer) + 6); - adc_msg_add_argument(command, buffer); - route_to_user(user, command); - adc_msg_free(command); - hub_free(buffer); + send_message(user, "*** Powered by " PRODUCT "/" VERSION); return 0; } static int command_myip(struct user* user, const char* message) { - struct adc_message* command; char tmp[128]; - char* buffer; tmp[0] = 0; strcat(tmp, "*** Your IP: "); strcat(tmp, ip_convert_to_string(&user->ipaddr)); - buffer = adc_msg_escape(tmp); - command = adc_msg_construct(ADC_CMD_IMSG, strlen(buffer) + 6); - adc_msg_add_argument(command, buffer); - route_to_user(user, command); - adc_msg_free(command); - hub_free(buffer); + send_message(user, tmp); return 0; }