Make sure chat messages are routed through plugins.
This commit is contained in:
parent
4a977da514
commit
0c6a58d35a
|
@ -25,6 +25,7 @@ struct hub_info* g_hub = 0;
|
||||||
if (hub->config->chat_only && u->credentials < auth_cred_operator) \
|
if (hub->config->chat_only && u->credentials < auth_cred_operator) \
|
||||||
break
|
break
|
||||||
|
|
||||||
|
/* FIXME: Flood control should be done in a plugin! */
|
||||||
#define CHECK_FLOOD(TYPE, WARN) \
|
#define CHECK_FLOOD(TYPE, WARN) \
|
||||||
if (flood_control_check(&u->flood_ ## TYPE , hub->config->flood_ctl_ ## TYPE, hub->config->flood_ctl_interval, net_get_time())) \
|
if (flood_control_check(&u->flood_ ## TYPE , hub->config->flood_ctl_ ## TYPE, hub->config->flood_ctl_interval, net_get_time())) \
|
||||||
{ \
|
{ \
|
||||||
|
@ -255,6 +256,8 @@ int hub_handle_chat_message(struct hub_info* hub, struct hub_user* u, struct adc
|
||||||
char* message = adc_msg_get_argument(cmd, 0);
|
char* message = adc_msg_get_argument(cmd, 0);
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
int relay = 1;
|
int relay = 1;
|
||||||
|
int broadcast;
|
||||||
|
int command;
|
||||||
int offset;
|
int offset;
|
||||||
|
|
||||||
if (!message)
|
if (!message)
|
||||||
|
@ -266,7 +269,10 @@ int hub_handle_chat_message(struct hub_info* hub, struct hub_user* u, struct adc
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((cmd->cache[0] == 'B') && (message[0] == '!' || message[0] == '+'))
|
broadcast = (cmd->cache[0] == 'B' || cmd->cache[0] == 'F');
|
||||||
|
command = (message[0] == '!' || message[0] == '+');
|
||||||
|
|
||||||
|
if (broadcast && command)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* A message such as "++message" is handled as "+message", by removing the first character.
|
* A message such as "++message" is handled as "+message", by removing the first character.
|
||||||
|
@ -285,14 +291,35 @@ int hub_handle_chat_message(struct hub_info* hub, struct hub_user* u, struct adc
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (((hub->config->chat_is_privileged && !user_is_protected(u)) || (user_flag_get(u, flag_muted))) && (cmd->cache[0] == 'B' || cmd->cache[0] == 'F'))
|
/* FIXME: Plugin should do this! */
|
||||||
|
if (relay && (((hub->config->chat_is_privileged && !user_is_protected(u)) || (user_flag_get(u, flag_muted))) && broadcast))
|
||||||
{
|
{
|
||||||
relay = 0;
|
relay = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (relay)
|
||||||
|
{
|
||||||
|
plugin_st status;
|
||||||
|
if (broadcast)
|
||||||
|
{
|
||||||
|
status = plugin_handle_chat_message(hub, u, message, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
struct hub_user* target = uman_get_user_by_sid(hub, cmd->target);
|
||||||
|
status = plugin_handle_private_message(hub, u, target, message, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (status == st_deny)
|
||||||
|
relay = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (relay)
|
if (relay)
|
||||||
{
|
{
|
||||||
/* adc_msg_remove_named_argument(cmd, "PM"); */
|
/* adc_msg_remove_named_argument(cmd, "PM"); */
|
||||||
|
|
||||||
|
/* FIXME: Plugin should do history management */
|
||||||
if (cmd->cache[0] == 'B')
|
if (cmd->cache[0] == 'B')
|
||||||
hub_chat_history_add(hub, u, cmd);
|
hub_chat_history_add(hub, u, cmd);
|
||||||
ret = route_message(hub, u, cmd);
|
ret = route_message(hub, u, cmd);
|
||||||
|
|
|
@ -36,6 +36,7 @@ void plugin_log_user_logout(struct hub_info* hub, struct hub_user* user, const c
|
||||||
void plugin_log_user_nick_change(struct hub_info* hub, struct hub_user* user, const char* new_nick);
|
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);
|
void plugin_log_user_update_error(struct hub_info* hub, struct hub_user* user, const char* reason);
|
||||||
|
|
||||||
|
/* IP ban related */
|
||||||
plugin_st plugin_check_ip_early(struct hub_info* hub, struct ip_addr_encap* addr);
|
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);
|
plugin_st plugin_check_ip_late(struct hub_info* hub, struct ip_addr_encap* addr);
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,11 @@
|
||||||
#define MAX_PASS_LEN 64
|
#define MAX_PASS_LEN 64
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef MAX_CID_LEN
|
||||||
|
#define MAX_CID_LEN 39
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
struct plugin_handle;
|
struct plugin_handle;
|
||||||
|
|
||||||
struct plugin_user
|
struct plugin_user
|
||||||
|
@ -61,6 +66,23 @@ struct auth_info
|
||||||
enum auth_credentials credentials;
|
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 */
|
||||||
|
};
|
||||||
|
|
||||||
typedef plugin_st (*on_chat_msg_t)(struct plugin_handle*, struct plugin_user* from, const char* message);
|
typedef plugin_st (*on_chat_msg_t)(struct plugin_handle*, struct plugin_user* from, const char* message);
|
||||||
typedef plugin_st (*on_private_msg_t)(struct plugin_handle*, struct plugin_user* from, struct plugin_user* to, const char* message);
|
typedef plugin_st (*on_private_msg_t)(struct plugin_handle*, struct plugin_user* from, struct plugin_user* to, const char* message);
|
||||||
typedef plugin_st (*on_search_t)(struct plugin_handle*, struct plugin_user* from, const char* data);
|
typedef plugin_st (*on_search_t)(struct plugin_handle*, struct plugin_user* from, const char* data);
|
||||||
|
|
Loading…
Reference in New Issue