Fix #28 - Request: +/! characters for command handling (FleetCommand)
This commit is contained in:
		
							parent
							
								
									df1e832a3c
								
							
						
					
					
						commit
						15e2053699
					
				| @ -44,17 +44,32 @@ static void send_message(struct user* user, const char* message) | ||||
| 
 | ||||
| static int command_access_denied(struct user* user, const char* command) | ||||
| { | ||||
| 	char temp[64]; | ||||
| 	snprintf(temp, 64, "*** Access denied: \"%s\"", command); | ||||
| 	char temp[128]; | ||||
| 	snprintf(temp, 128, "*** Access denied: \"%s\"", command); | ||||
| 	send_message(user, temp); | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static int command_not_found(struct user* user, const char* command) | ||||
| { | ||||
| 	char temp[128]; | ||||
| 	snprintf(temp, 128, "*** Command not found: \"%s\"", command); | ||||
| 	send_message(user, temp); | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static int command_status(struct user* user, const char* command, const char* message) | ||||
| { | ||||
| 	char temp[1024]; | ||||
| 	snprintf(temp, 1024, "*** %s: %s", command, message); | ||||
| 	send_message(user, temp); | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static int command_stats(struct user* user, const char* message) | ||||
| { | ||||
| 	char temp[128]; | ||||
| 	snprintf(temp, 128, "*** Stats: %zu users, peak: %zu. Network (up/down): %d/%d KB/s, peak: %d/%d KB/s", | ||||
| 	snprintf(temp, 128, "%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, | ||||
| 	(int) user->hub->stats.net_tx / 1024, | ||||
| @ -62,31 +77,29 @@ 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); | ||||
| 	 | ||||
| 	send_message(user, temp); | ||||
| 	return 0; | ||||
| 	return command_status(user, "stats", message); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| static int command_help(struct user* user, const char* message) | ||||
| { | ||||
| #define MAX_HELP_MSG 1024 | ||||
| 	size_t n; | ||||
| 	char msg[MAX_HELP_MSG]; | ||||
| 	msg[0] = 0; | ||||
| 	strcat(msg, "\n*** Available commands:\n"); | ||||
| 	strcat(msg, "Available commands:\n"); | ||||
| 	 | ||||
| 	for (n = 0; command_handlers[n].prefix; n++) | ||||
| 	{ | ||||
| 		if (command_handlers[n].cred <= user->credentials) | ||||
| 		{ | ||||
| 			strcat(msg, "!"); | ||||
| 			strcat(msg, command_handlers[n].prefix); | ||||
| 			strcat(msg, " - "); | ||||
| 			strcat(msg, command_handlers[n].description); | ||||
| 			strcat(msg, "\n"); | ||||
| 		} | ||||
| 	} | ||||
| 	send_message(user, msg); | ||||
|     return 0; | ||||
| 	return command_status(user, "help", msg); | ||||
| } | ||||
| 
 | ||||
| static int command_uptime(struct user* user, const char* message) | ||||
| @ -104,8 +117,6 @@ static int command_uptime(struct user* user, const char* message) | ||||
| 	m = D / 60; | ||||
| 
 | ||||
| 	tmp[0] = 0; | ||||
| 	strcat(tmp, "*** Uptime: "); | ||||
| 
 | ||||
| 	if (d) | ||||
| 	{ | ||||
| 		strcat(tmp, uhub_itoa((int) d)); | ||||
| @ -120,16 +131,14 @@ static int command_uptime(struct user* user, const char* message) | ||||
| 	if (m < 10) strcat(tmp, "0"); | ||||
| 	strcat(tmp, uhub_itoa((int) m)); | ||||
| 
 | ||||
| 	send_message(user, tmp); | ||||
| 	return 0; | ||||
| 	return command_status(user, "uptime", tmp); | ||||
| } | ||||
| 
 | ||||
| static int command_kick(struct user* user, const char* message) | ||||
| { | ||||
| 	if (strlen(message) < 7) | ||||
| 	{ | ||||
| 		send_message(user, "*** No nickname given, try: !kick <nick>"); | ||||
| 		return 0; | ||||
| 		return command_status(user, "kick", "No nickname given"); | ||||
| 	} | ||||
| 	 | ||||
| 	const char* nick = &message[7]; | ||||
| @ -137,47 +146,41 @@ static int command_kick(struct user* user, const char* message) | ||||
| 	 | ||||
| 	if (!target) | ||||
| 	{ | ||||
| 		send_message(user, "*** No such user"); | ||||
| 		return 0; | ||||
| 		return command_status(user, "kick", "No such user"); | ||||
| 	} | ||||
| 	 | ||||
| 	if (target == user) | ||||
| 	{ | ||||
| 		send_message(user, "*** No can do."); | ||||
| 		return 0; | ||||
| 		return command_status(user, "kick", "Cannot kick yourself"); | ||||
| 	} | ||||
| 	 | ||||
| 	user_disconnect(target, quit_kicked); | ||||
| 	return 0; | ||||
| 	return command_status(user, "kick", nick); | ||||
| } | ||||
| 
 | ||||
| static int command_reload(struct user* user, const char* message) | ||||
| { | ||||
| 	send_message(user, "*** Reloading configuration"); | ||||
| 	user->hub->status = hub_status_restart; | ||||
| 	return 0; | ||||
| 	return command_status(user, "reload", "Reloading configuration..."); | ||||
| } | ||||
| 
 | ||||
| static int command_shutdown(struct user* user, const char* message) | ||||
| { | ||||
| 	send_message(user, "*** Hub shuting down..."); | ||||
| 	user->hub->status = hub_status_shutdown; | ||||
| 	return 0; | ||||
| 	return command_status(user, "shutdown", "Hub shutting down..."); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| static int command_version(struct user* user, const char* message) | ||||
| { | ||||
|     send_message(user, "*** Powered by " PRODUCT "/" VERSION); | ||||
|     return 0; | ||||
|     return command_status(user, "version", "Powered by " PRODUCT "/" VERSION); | ||||
| } | ||||
| 
 | ||||
| static int command_myip(struct user* user, const char* message) | ||||
| { | ||||
|     char tmp[128]; | ||||
|     snprintf(tmp, 128, "*** Your IP: %s", ip_convert_to_string(&user->ipaddr)); | ||||
|     send_message(user, tmp); | ||||
|     return 0; | ||||
|     snprintf(tmp, 128, "Your IP is \"%s\"", ip_convert_to_string(&user->ipaddr)); | ||||
|     return command_status(user, "myip", tmp); | ||||
| } | ||||
| 
 | ||||
| int command_dipatcher(struct user* user, const char* message) | ||||
| @ -193,22 +196,24 @@ int command_dipatcher(struct user* user, const char* message) | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				return command_access_denied(user, &command_handlers[n].prefix[1]); | ||||
| 				return command_access_denied(user, command_handlers[n].prefix); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	command_not_found(user, message); | ||||
| 	return 1; | ||||
| } | ||||
| 
 | ||||
| static struct commands_handler command_handlers[] = { | ||||
| 	{ "!help",       5, cred_guest,     command_help,     "Show this help message." }, | ||||
| 	{ "!stats",      6, cred_super,     command_stats,    "Show hub statistics." }, | ||||
| 	{ "!version",    8, cred_guest,     command_version,  "Show hub version info."  }, | ||||
| 	{ "!uptime",     7, cred_guest,     command_uptime,   "Display hub uptime info." }, | ||||
| 	{ "!kick",       5, cred_operator,  command_kick,     "Kick a user" }, | ||||
| 	{ "!reload",     7, cred_admin,     command_reload,   "Reload configuration files." }, | ||||
| 	{ "!shutdown",   9, cred_admin,     command_shutdown, "Shutdown hub." }, | ||||
| 	{ "+myip",       5, cred_guest,     command_myip,     "Show your own IP." }, | ||||
| 	{ 0,             0, cred_none,      command_help,     "{ Last dummy option }" } | ||||
| 	{ "help",       4, cred_guest,     command_help,     "Show this help message."      }, | ||||
| 	{ "stats",      5, cred_super,     command_stats,    "Show hub statistics."         }, | ||||
| 	{ "version",    7, cred_guest,     command_version,  "Show hub version info."       }, | ||||
| 	{ "uptime",     6, cred_guest,     command_uptime,   "Display hub uptime info."     }, | ||||
| 	{ "kick",       4, cred_operator,  command_kick,     "Kick a user"                  }, | ||||
| 	{ "reload",     6, cred_admin,     command_reload,   "Reload configuration files."  }, | ||||
| 	{ "shutdown",   8, cred_admin,     command_shutdown, "Shutdown hub."                }, | ||||
| 	{ "myip",       4, cred_guest,     command_myip,     "Show your own IP."            }, | ||||
| 	{ 0,            0, cred_none,      command_help,     ""                             } | ||||
| }; | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user