Implement more plugin invokers, and call them.
This commit is contained in:
parent
1ff0f54a4b
commit
c6cf03614f
|
@ -20,6 +20,7 @@
|
|||
#include "uhub.h"
|
||||
#include "plugin_api/handle.h"
|
||||
|
||||
#ifndef PLUGIN_SUPPORT
|
||||
static void log_user_login(struct hub_user* u)
|
||||
{
|
||||
const char* cred = auth_cred_to_string(u->credentials);
|
||||
|
@ -52,7 +53,7 @@ static void log_user_nick_change(struct hub_user* u, const char* nick)
|
|||
const char* addr = user_get_address(u);
|
||||
LOG_USER("NickChange %s/%s %s \"%s\" -> \"%s\"", sid_to_string(u->id.sid), u->id.cid, addr, u->id.nick, nick);
|
||||
}
|
||||
|
||||
#endif /* !PLUGIN_SUPPORT */
|
||||
|
||||
/* Send MOTD, do logging etc */
|
||||
void on_login_success(struct hub_info* hub, struct hub_user* u)
|
||||
|
@ -65,11 +66,11 @@ void on_login_success(struct hub_info* hub, struct hub_user* u)
|
|||
user_set_state(u, state_normal);
|
||||
uman_add(hub, u);
|
||||
|
||||
/* Print log message */
|
||||
log_user_login(u);
|
||||
|
||||
#ifdef PLUGIN_SUPPORT
|
||||
plugin_log_user_login_success(hub, u);
|
||||
#else
|
||||
/* Print log message */
|
||||
log_user_login(u);
|
||||
#endif
|
||||
|
||||
/* Announce new user to all connected users */
|
||||
|
@ -90,14 +91,22 @@ void on_login_success(struct hub_info* hub, struct hub_user* u)
|
|||
|
||||
void on_login_failure(struct hub_info* hub, struct hub_user* u, enum status_message msg)
|
||||
{
|
||||
#ifdef PLUGIN_SUPPORT
|
||||
plugin_log_user_login_error(hub, u, hub_get_status_message_log(hub, msg));
|
||||
#else
|
||||
log_user_login_error(u, msg);
|
||||
#endif
|
||||
hub_send_status(hub, u, msg, status_level_fatal);
|
||||
hub_disconnect_user(hub, u, quit_logon_error);
|
||||
}
|
||||
|
||||
void on_update_failure(struct hub_info* hub, struct hub_user* u, enum status_message msg)
|
||||
{
|
||||
#ifdef PLUGIN_SUPPORT
|
||||
plugin_log_user_update_error(hub, u, hub_get_status_message_log(hub, msg));
|
||||
#else
|
||||
log_user_update_error(u, msg);
|
||||
#endif
|
||||
hub_send_status(hub, u, msg, status_level_fatal);
|
||||
hub_disconnect_user(hub, u, quit_update_error);
|
||||
}
|
||||
|
@ -106,17 +115,22 @@ void on_nick_change(struct hub_info* hub, struct hub_user* u, const char* nick)
|
|||
{
|
||||
if (user_is_logged_in(u))
|
||||
{
|
||||
#ifdef PLUGIN_SUPPORT
|
||||
plugin_log_user_nick_change(hub, u, nick);
|
||||
#else
|
||||
log_user_nick_change(u, nick);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void on_logout_user(struct hub_info* hub, struct hub_user* user)
|
||||
{
|
||||
const char* reason = user_get_quit_reason_string(user->quit_reason);
|
||||
log_user_logout(user, reason);
|
||||
|
||||
#ifdef PLUGIN_SUPPORT
|
||||
plugin_log_user_logout(hub, user);
|
||||
plugin_log_user_logout(hub, user, reason);
|
||||
#else
|
||||
log_user_logout(user, reason);
|
||||
#endif
|
||||
|
||||
hub_logout_log(hub, user);
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
#include "uhub.h"
|
||||
#include "plugin_api/handle.h"
|
||||
|
||||
#define PLUGIN_INVOKE(HUB, FUNCNAME, CODE) \
|
||||
#define INVOKE(HUB, FUNCNAME, CODE) \
|
||||
if (HUB->plugins && HUB->plugins->loaded) \
|
||||
{ \
|
||||
struct uhub_plugin_handle* plugin = (struct uhub_plugin_handle*) list_get_first(HUB->plugins->loaded); \
|
||||
|
@ -34,13 +34,17 @@
|
|||
|
||||
#define PLUGIN_INVOKE_STATUS(HUB, FUNCNAME, ARGS) \
|
||||
plugin_st status = st_default; \
|
||||
PLUGIN_INVOKE(HUB, FUNCNAME, { \
|
||||
INVOKE(HUB, FUNCNAME, { \
|
||||
status = plugin->funcs.FUNCNAME ARGS ; \
|
||||
if (status != st_default) \
|
||||
break; \
|
||||
}); \
|
||||
return status
|
||||
|
||||
#define PLUGIN_INVOKE(HUB, FUNCNAME, ARGS) \
|
||||
INVOKE(HUB, FUNCNAME, { \
|
||||
plugin->funcs.FUNCNAME ARGS ; \
|
||||
})
|
||||
|
||||
static void convert_user_type(struct plugin_user* puser, struct hub_user* user)
|
||||
{
|
||||
|
@ -73,42 +77,80 @@ void plugin_log_connection_denied(struct hub_info* hub, struct ip_addr_encap* ip
|
|||
LOG_INFO("Denied connection from %s", addr);
|
||||
}
|
||||
|
||||
void plugin_log_user_login_success(struct hub_info* hub, struct hub_user* user)
|
||||
void plugin_log_user_login_success(struct hub_info* hub, struct hub_user* who)
|
||||
{
|
||||
|
||||
struct plugin_user user;
|
||||
convert_user_type(&user, who);
|
||||
PLUGIN_INVOKE(hub, on_user_login, (&user));
|
||||
}
|
||||
|
||||
void plugin_log_user_login_error(struct hub_info* hub, struct hub_user* user)
|
||||
void plugin_log_user_login_error(struct hub_info* hub, struct hub_user* who, const char* reason)
|
||||
{
|
||||
struct plugin_user user;
|
||||
convert_user_type(&user, who);
|
||||
PLUGIN_INVOKE(hub, on_user_login_error, (&user, reason));
|
||||
}
|
||||
|
||||
void plugin_log_user_logout(struct hub_info* hub, struct hub_user* user)
|
||||
void plugin_log_user_logout(struct hub_info* hub, struct hub_user* who, const char* reason)
|
||||
{
|
||||
struct plugin_user user;
|
||||
convert_user_type(&user, who);
|
||||
PLUGIN_INVOKE(hub, on_user_logout, (&user, reason));
|
||||
}
|
||||
|
||||
void plugin_log_user_nick_change(struct hub_info* hub, struct hub_user* who, const char* new_nick)
|
||||
{
|
||||
struct plugin_user user;
|
||||
convert_user_type(&user, who);
|
||||
PLUGIN_INVOKE(hub, on_user_nick_change, (&user, new_nick));
|
||||
}
|
||||
|
||||
void plugin_log_user_update_error(struct hub_info* hub, struct hub_user* who, const char* reason)
|
||||
{
|
||||
struct plugin_user user;
|
||||
convert_user_type(&user, who);
|
||||
PLUGIN_INVOKE(hub, on_user_update_error, (&user, reason));
|
||||
}
|
||||
|
||||
plugin_st plugin_handle_chat_message(struct hub_info* hub, struct hub_user* from, const char* message, int flags)
|
||||
{
|
||||
return st_default;
|
||||
struct plugin_user user;
|
||||
convert_user_type(&user, from);
|
||||
PLUGIN_INVOKE_STATUS(hub, on_chat_msg, (&user, message));
|
||||
}
|
||||
|
||||
plugin_st plugin_handle_private_message(struct hub_info* hub, struct hub_user* from, struct hub_user* to, const char* message, int flags)
|
||||
{
|
||||
return st_default;
|
||||
struct plugin_user user1;
|
||||
struct plugin_user user2;
|
||||
convert_user_type(&user1, from);
|
||||
convert_user_type(&user2, to);
|
||||
PLUGIN_INVOKE_STATUS(hub, on_private_msg, (&user1, &user2, message));
|
||||
}
|
||||
|
||||
plugin_st plugin_handle_search(struct hub_info* hub, struct hub_user* user, const char* data)
|
||||
plugin_st plugin_handle_search(struct hub_info* hub, struct hub_user* from, const char* data)
|
||||
{
|
||||
return st_default;
|
||||
struct plugin_user user;
|
||||
convert_user_type(&user, from);
|
||||
PLUGIN_INVOKE_STATUS(hub, on_search, (&user, data));
|
||||
}
|
||||
|
||||
plugin_st plugin_handle_connect(struct hub_info* hub, struct hub_user* from, struct hub_user* to)
|
||||
{
|
||||
return st_default;
|
||||
struct plugin_user user1;
|
||||
struct plugin_user user2;
|
||||
convert_user_type(&user1, from);
|
||||
convert_user_type(&user2, to);
|
||||
PLUGIN_INVOKE_STATUS(hub, on_p2p_connect, (&user1, &user2));
|
||||
}
|
||||
|
||||
plugin_st plugin_handle_revconnect(struct hub_info* hub, struct hub_user* from, struct hub_user* to)
|
||||
{
|
||||
return st_default;
|
||||
struct plugin_user user1;
|
||||
struct plugin_user user2;
|
||||
convert_user_type(&user1, from);
|
||||
convert_user_type(&user2, to);
|
||||
PLUGIN_INVOKE_STATUS(hub, on_p2p_revconnect, (&user1, &user2));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -31,8 +31,10 @@ struct ip_addr_encap;
|
|||
void plugin_log_connection_accepted(struct hub_info* hub, struct ip_addr_encap* addr);
|
||||
void plugin_log_connection_denied(struct hub_info* hub, struct ip_addr_encap* addr);
|
||||
void plugin_log_user_login_success(struct hub_info* hub, struct hub_user* user);
|
||||
void plugin_log_user_login_error(struct hub_info* hub, struct hub_user* user);
|
||||
void plugin_log_user_logout(struct hub_info* hub, struct hub_user* user);
|
||||
void plugin_log_user_login_error(struct hub_info* hub, struct hub_user* user, const char* reason);
|
||||
void plugin_log_user_logout(struct hub_info* hub, struct hub_user* user, const char* reason);
|
||||
void plugin_log_user_nick_change(struct hub_info* hub, struct hub_user* user, const char* new_nick);
|
||||
void plugin_log_user_update_error(struct hub_info* hub, struct hub_user* user, const char* reason);
|
||||
|
||||
plugin_st plugin_check_ip_early(struct hub_info* hub, struct ip_addr_encap* addr);
|
||||
plugin_st plugin_check_ip_late(struct hub_info* hub, struct ip_addr_encap* addr);
|
||||
|
|
|
@ -67,8 +67,10 @@ typedef plugin_st (*on_p2p_revconnect_t)(struct plugin_user* from, struct plugin
|
|||
|
||||
typedef void (*on_user_connect_t)(struct ip_addr_encap*);
|
||||
typedef void (*on_user_login_t)(struct plugin_user*);
|
||||
typedef void (*on_user_logout_t)(struct plugin_user*);
|
||||
typedef void (*on_user_login_error_t)(struct plugin_user*, const char* reason);
|
||||
typedef void (*on_user_logout_t)(struct plugin_user*, const char* reason);
|
||||
typedef void (*on_user_nick_change_t)(struct plugin_user*, const char* new_nick);
|
||||
typedef void (*on_user_update_error_t)(struct plugin_user*, const char* reason);
|
||||
|
||||
typedef plugin_st (*on_change_nick_t)(struct plugin_user*, const char* new_nick);
|
||||
|
||||
|
@ -84,11 +86,13 @@ typedef plugin_st (*auth_delete_user_t)(struct auth_info* user);
|
|||
|
||||
struct plugin_funcs
|
||||
{
|
||||
// Users logging in and out
|
||||
// Log events for users
|
||||
on_user_connect_t on_user_connect; /* A user has connected to the hub */
|
||||
on_user_login_t on_user_login; /* A user has successfully logged in to the hub */
|
||||
on_user_login_error_t on_user_login_error; /* A user has failed to log in to the hub */
|
||||
on_user_logout_t on_user_logout; /* A user has logged out of the hub (was previously logged in) */
|
||||
on_user_nick_change_t on_user_nick_change; /* A user has changed nickname */
|
||||
on_user_update_error_t on_user_update_error;/* A user has failed to update - nickname, etc. */
|
||||
|
||||
// Activity events (can be intercepted and refused by a plugin)
|
||||
on_chat_msg_t on_chat_msg; /* A public chat message is about to be sent (can be intercepted) */
|
||||
|
|
Loading…
Reference in New Issue