summaryrefslogtreecommitdiff
path: root/server_network.c
diff options
context:
space:
mode:
Diffstat (limited to 'server_network.c')
-rw-r--r--server_network.c61
1 files changed, 61 insertions, 0 deletions
diff --git a/server_network.c b/server_network.c
index 342b254..3e8e6dd 100644
--- a/server_network.c
+++ b/server_network.c
@@ -813,6 +813,66 @@ int part_handler(struct string sender, uint64_t argc, struct string *argv) {
return 0;
}
+int notice_handler(struct string sender, uint64_t argc, struct string *argv) {
+ if (argc < 2) {
+ WRITES(2, STRING("Invalid NOTICE received! (Missing parameters)\n"));
+ return 1;
+ }
+
+ struct user_info *user = get_table_index(user_list, sender);
+ struct server_info *server;
+ if (user)
+ server = 0;
+ else
+ server = get_table_index(server_list, sender);
+
+ if (!user && !server) {
+ WRITES(2, STRING("Invalid NOTICE received! (Unknown source)\n"));
+ return 1;
+ }
+
+ if (argv[0].data[0] == '#') {
+ struct channel_info *channel = get_table_index(channel_list, argv[0]);
+ if (channel && has_table_index(channel->user_list, STRING("1HC000001"))) {
+ SENDCLIENT(STRING(":"));
+ if (user) {
+ SENDCLIENT(user->nick);
+ SENDCLIENT(STRING("!"));
+ SENDCLIENT(user->ident);
+ SENDCLIENT(STRING("@"));
+ SENDCLIENT(user->vhost);
+ } else {
+ SENDCLIENT(server->address);
+ }
+
+ SENDCLIENT(STRING(" NOTICE "));
+ SENDCLIENT(argv[0]);
+ SENDCLIENT(STRING(" :"));
+ SENDCLIENT(argv[1]);
+ SENDCLIENT(STRING("\r\n"));
+ }
+ } else if (STRING_EQ(argv[0], STRING("1HC000001"))) {
+ SENDCLIENT(STRING(":"));
+ if (user) {
+ SENDCLIENT(user->nick);
+ SENDCLIENT(STRING("!"));
+ SENDCLIENT(user->ident);
+ SENDCLIENT(STRING("@"));
+ SENDCLIENT(user->vhost);
+ } else {
+ SENDCLIENT(server->address);
+ }
+
+ SENDCLIENT(STRING(" NOTICE "));
+ SENDCLIENT(argv[0]);
+ SENDCLIENT(STRING(" :"));
+ SENDCLIENT(argv[1]);
+ SENDCLIENT(STRING("\r\n"));
+ }
+
+ return 0;
+}
+
int initservernetwork(void) {
server_network_commands.array = malloc(0);
server_list.array = malloc(0);
@@ -830,6 +890,7 @@ int initservernetwork(void) {
set_table_index(&server_network_commands, STRING("FJOIN"), &fjoin_handler);
set_table_index(&server_network_commands, STRING("SQUIT"), &squit_handler);
set_table_index(&server_network_commands, STRING("PART"), &part_handler);
+ set_table_index(&server_network_commands, STRING("NOTICE"), &notice_handler);
init_user_commands();