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