fixup! Added support for dynamic commands.
This commit is contained in:
		
							parent
							
								
									318163c066
								
							
						
					
					
						commit
						7825c413d4
					
				
							
								
								
									
										80
									
								
								src/plugin_api/command_api.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								src/plugin_api/command_api.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,80 @@ | ||||
| /*
 | ||||
|  * uhub - A tiny ADC p2p connection hub | ||||
|  * Copyright (C) 2007-2010, Jan Vidar Krey | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation; either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| #ifndef HAVE_UHUB_PLUGIN_API_H | ||||
| #define HAVE_UHUB_PLUGIN_API_H | ||||
| 
 | ||||
| /**
 | ||||
|  * This file describes the interface a plugin implementation may use from | ||||
|  * uhub. | ||||
|  */ | ||||
| 
 | ||||
| #include "system.h" | ||||
| #include "plugin_api/types.h" | ||||
| 
 | ||||
| struct plugin_command | ||||
| { | ||||
| 	const char* message; | ||||
| 	char* prefix; | ||||
| 	size_t prefix_len; | ||||
| 	struct linked_list* args; | ||||
| }; | ||||
| 
 | ||||
| typedef int (*plugin_command_handler)(struct plugin_handle*, struct plugin_user* to, struct plugin_command*); | ||||
| 
 | ||||
| struct plugin_command_handle | ||||
| { | ||||
| 	void* internal_handle;			/**<<< "Internal used by the hub only" */ | ||||
| 	struct plugin_handle* handle;	/**<<< "The plugin handle this is associated with" */ | ||||
| 	const char* prefix;				/**<<< "Command prefix, for instance 'help' would be the prefix for the !help command." */ | ||||
| 	size_t length;					/**<<< "Length of the prefix" */ | ||||
| 	const char* args;				/**<<< "Argument codes" */ | ||||
| 	enum auth_credentials cred;		/**<<< "Minimum access level for the command" */ | ||||
| 	plugin_command_handler handler;	/**<<< "Function pointer for the command" */ | ||||
| 	const char* description;		/**<<< "Description for the command" */ | ||||
| 	const char* origin;				/**<<< "Name of plugin where the command originated." */ | ||||
| }; | ||||
| 
 | ||||
| #define PLUGIN_COMMAND_INITIALIZE(PTR, HANDLE, PREFIX, ARGS, CRED, CALLBACK, DESC) \ | ||||
| 	do { \ | ||||
| 		PTR->internal_handle = 0; \ | ||||
| 		PTR->handle = HANDLE; \ | ||||
| 		PTR->prefix = PREFIX; \ | ||||
| 		PTR->length = strlen(PREFIX); \ | ||||
| 		PTR->args = ARGS; \ | ||||
| 		PTR->cred = CRED; \ | ||||
| 		PTR->handler = CALLBACK; \ | ||||
| 		PTR->description = DESC; \ | ||||
| 	} while (0) | ||||
| 
 | ||||
| extern int plugin_command_add(struct plugin_handle*, struct plugin_command_handle*); | ||||
| extern int plugin_command_del(struct plugin_handle*, struct plugin_command_handle*); | ||||
| 
 | ||||
| /**
 | ||||
|  * Send a message to a user. | ||||
|  * From the user's perspective the message will originate from the hub. | ||||
|  */ | ||||
| extern int plugin_command_send_message(struct plugin_handle*, struct plugin_user* to, const char* message); | ||||
| 
 | ||||
| /**
 | ||||
|  * Send a reply to a command. | ||||
|  */ | ||||
| extern int plugin_command_send_reply(struct plugin_handle*, struct plugin_user* user, struct plugin_command* command, const char* message); | ||||
| 
 | ||||
| #endif /* HAVE_UHUB_PLUGIN_API_H */ | ||||
							
								
								
									
										29
									
								
								src/plugin_api/message_api.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								src/plugin_api/message_api.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | ||||
| /*
 | ||||
|  * uhub - A tiny ADC p2p connection hub | ||||
|  * Copyright (C) 2007-2010, Jan Vidar Krey | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation; either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| #ifndef HAVE_UHUB_PLUGIN_MESSAGE_API_H | ||||
| #define HAVE_UHUB_PLUGIN_MESSAGE_API_H | ||||
| 
 | ||||
| /**
 | ||||
|  * Send an informal message to a user. | ||||
|  * The user will see the message as if the hub sent it. | ||||
|  */ | ||||
| extern int plugin_send_message(struct plugin_handle*, struct plugin_user* to, const char* message); | ||||
| 
 | ||||
| #endif /* HAVE_UHUB_PLUGIN_API_H */ | ||||
							
								
								
									
										96
									
								
								src/plugin_api/types.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								src/plugin_api/types.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,96 @@ | ||||
| /*
 | ||||
|  * uhub - A tiny ADC p2p connection hub | ||||
|  * Copyright (C) 2007-2010, Jan Vidar Krey | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation; either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| #ifndef HAVE_UHUB_PLUGIN_TYPES_H | ||||
| #define HAVE_UHUB_PLUGIN_TYPES_H | ||||
| 
 | ||||
| #define PLUGIN_API_VERSION 1 | ||||
| 
 | ||||
| #ifndef MAX_NICK_LEN | ||||
| #define MAX_NICK_LEN 64 | ||||
| #endif | ||||
| 
 | ||||
| #ifndef MAX_PASS_LEN | ||||
| #define MAX_PASS_LEN 64 | ||||
| #endif | ||||
| 
 | ||||
| #ifndef MAX_CID_LEN | ||||
| #define MAX_CID_LEN 39 | ||||
| #endif | ||||
| 
 | ||||
| #ifndef MAX_UA_LEN | ||||
| #define MAX_UA_LEN   32 | ||||
| #endif | ||||
| 
 | ||||
| #ifndef SID_T_DEFINED | ||||
| typedef uint32_t sid_t; | ||||
| #define SID_T_DEFINED | ||||
| #endif | ||||
| 
 | ||||
| struct plugin_handle; | ||||
| 
 | ||||
| struct plugin_user | ||||
| { | ||||
| 	sid_t sid; | ||||
| 	char nick[MAX_NICK_LEN+1]; | ||||
| 	char cid[MAX_CID_LEN+1]; | ||||
| 	char user_agent[MAX_UA_LEN+1]; | ||||
| 	struct ip_addr_encap addr; | ||||
| 	enum auth_credentials credentials; | ||||
| }; | ||||
| 
 | ||||
| struct plugin_hub_info | ||||
| { | ||||
| 	const char* description; | ||||
| }; | ||||
| 
 | ||||
| enum plugin_status | ||||
| { | ||||
| 	st_default = 0,    /* Use default */ | ||||
| 	st_allow = 1,      /* Allow action */ | ||||
| 	st_deny = -1,      /* Deny action */ | ||||
| }; | ||||
| 
 | ||||
| typedef enum plugin_status plugin_st; | ||||
| 
 | ||||
| struct auth_info | ||||
| { | ||||
| 	char nickname[MAX_NICK_LEN+1]; | ||||
| 	char password[MAX_PASS_LEN+1]; | ||||
| 	enum auth_credentials credentials; | ||||
| }; | ||||
| 
 | ||||
| enum ban_flags | ||||
| { | ||||
| 	ban_nickname = 0x01, /* Nickname is banned */ | ||||
| 	ban_cid      = 0x02, /* CID is banned */ | ||||
| 	ban_ip       = 0x04, /* IP address (range) is banned */ | ||||
| }; | ||||
| 
 | ||||
| struct ban_info | ||||
| { | ||||
| 	unsigned int flags;                 /* See enum ban_flags. */ | ||||
| 	char nickname[MAX_NICK_LEN+1];      /* Nickname - only defined if (ban_nickname & flags). */ | ||||
| 	char cid[MAX_CID_LEN+1];            /* CID - only defined if (ban_cid & flags). */ | ||||
| 	struct ip_addr_encap ip_addr_lo;    /* Low IP address of an IP range */ | ||||
| 	struct ip_addr_encap ip_addr_hi;    /* High IP address of an IP range */ | ||||
| 	time_t expiry;                      /* Time when the ban record expires */ | ||||
| }; | ||||
| 
 | ||||
| #endif /* HAVE_UHUB_PLUGIN_TYPES_H */ | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user