aboutsummaryrefslogtreecommitdiff
path: root/general_network.c
diff options
context:
space:
mode:
authorTest_User <hax@andrewyu.org>2024-06-14 07:51:00 -0400
committerTest_User <hax@andrewyu.org>2024-06-14 07:51:00 -0400
commit80bd818208729b24262141b9068c427f9d8a097a (patch)
tree949aa0fd89866fe5909b8b9f4204e5cf66b0c4b0 /general_network.c
parent60865e2f58cf75447745c718491488fd6e232992 (diff)
downloadhaxircd-80bd818208729b24262141b9068c427f9d8a097a.tar.gz
haxircd-80bd818208729b24262141b9068c427f9d8a097a.zip
PRIVMSG/NOTICE support, improve kill_user
Diffstat (limited to 'general_network.c')
-rw-r--r--general_network.c88
1 files changed, 87 insertions, 1 deletions
diff --git a/general_network.c b/general_network.c
index 6e80864..55423a1 100644
--- a/general_network.c
+++ b/general_network.c
@@ -352,7 +352,7 @@ void remove_user(struct string from, struct user_info *user, struct string reaso
free(user);
}
-void kill_user(struct string from, struct string source, struct user_info *user, struct string reason) {
+int kill_user(struct string from, struct string source, struct user_info *user, struct string reason) {
#ifdef USE_SERVER
#ifdef USE_HAXIRCD_PROTOCOL
protocols[HAXIRCD_PROTOCOL].propagate_kill_user(from, source, user, reason);
@@ -363,6 +363,8 @@ void kill_user(struct string from, struct string source, struct user_info *user,
#endif
remove_user(from, user, reason, 0);
+
+ return 0;
}
int set_channel(struct string from, struct string name, size_t timestamp, size_t user_count, struct user_info **users) {
@@ -514,3 +516,87 @@ void part_channel(struct string from, struct channel_info *channel, struct user_
free(channel);
}
}
+
+int kick_channel(struct string from, struct string source, struct channel_info *channel, struct user_info *user, struct string reason) {
+ return 1;
+}
+
+int privmsg(struct string from, struct string sender, struct string target, struct string msg) {
+ do {
+ struct user_info *user = get_table_index(user_list, target);
+ if (user)
+ break;
+ struct server_info *server = get_table_index(server_list, target);
+ if (server)
+ break;
+
+ char found = 0;
+ for (size_t i = 0; i < user_list.len; i++) {
+ user = user_list.array[i].ptr;
+ if (STRING_EQ(user->nick, target)) {
+ target = user->uid;
+ found = 1;
+ break;
+ }
+ }
+ if (found)
+ break;
+
+ struct channel_info *channel = get_table_index(channel_list, target);
+ if (channel)
+ break;
+
+ return 1; // Target not valid
+ } while (0);
+
+#ifdef USE_SERVER
+#ifdef USE_HAXIRCD_PROTOCOL
+ protocols[HAXIRCD_PROTOCOL].propagate_privmsg(from, sender, target, msg);
+#endif
+#ifdef USE_INSPIRCD2_PROTOCOL
+ protocols[INSPIRCD2_PROTOCOL].propagate_privmsg(from, sender, target, msg);
+#endif
+#endif
+
+ return 0;
+}
+
+int notice(struct string from, struct string sender, struct string target, struct string msg) {
+ do {
+ struct user_info *user = get_table_index(user_list, target);
+ if (user)
+ break;
+ struct server_info *server = get_table_index(server_list, target);
+ if (server)
+ break;
+
+ char found = 0;
+ for (size_t i = 0; i < user_list.len; i++) {
+ user = user_list.array[i].ptr;
+ if (STRING_EQ(user->nick, target)) {
+ target = user->uid;
+ found = 1;
+ break;
+ }
+ }
+ if (found)
+ break;
+
+ struct channel_info *channel = get_table_index(channel_list, target);
+ if (channel)
+ break;
+
+ return 1; // Target not valid
+ } while (0);
+
+#ifdef USE_SERVER
+#ifdef USE_HAXIRCD_PROTOCOL
+ protocols[HAXIRCD_PROTOCOL].propagate_notice(from, sender, target, msg);
+#endif
+#ifdef USE_INSPIRCD2_PROTOCOL
+ protocols[INSPIRCD2_PROTOCOL].propagate_notice(from, sender, target, msg);
+#endif
+#endif
+
+ return 0;
+}