summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/extern.h2
-rw-r--r--include/services.h40
-rw-r--r--src/protocol/charybdis.c29
-rw-r--r--src/protocol/charybdis.h6
4 files changed, 34 insertions, 43 deletions
diff --git a/include/extern.h b/include/extern.h
index 69d94ab8c..1ed29b69b 100644
--- a/include/extern.h
+++ b/include/extern.h
@@ -151,7 +151,7 @@ E Entry *elist_find_mask(EList *list, const char *mask);
E long get_memuse(EList *list);
-#define whosends(ci) ((!(ci) || !((ci)->botflags & BS_SYMBIOSIS) || !(ci)->bi || !(ci)->c || (ci)->c->usercount < BSMinUsers) ? s_ChanServ : (ci)->bi->nick)
+#define whosends(ci) ((!(ci) || !((ci)->botflags & BS_SYMBIOSIS) || !(ci)->bi || !(ci)->c || (ci)->c->usercount < BSMinUsers) ? findbot(s_ChanServ) : (ci)->bi)
/**** chanserv.c ****/
diff --git a/include/services.h b/include/services.h
index 66a7e4c5c..22b76fdf3 100644
--- a/include/services.h
+++ b/include/services.h
@@ -1222,15 +1222,18 @@ struct capabinfo_ {
/*************************************************************************/
-class IRCDProto;
+/*
+ * Forward declaration reqired, because the base IRCDProto class uses some crap from in here.
+ */
+class IRCDProto;
#include "extern.h"
class IRCDProto {
public:
virtual void cmd_svsnoop(const char *, int) { }
virtual void cmd_remove_akill(const char *, const char *) = 0;
- virtual void cmd_topic(const char *, const char *, const char *, const char *, time_t) = 0;
+ virtual void SendTopic(BotInfo *, const char *, const char *, const char *, time_t) = 0;
virtual void cmd_vhost_off(User *) { }
virtual void cmd_akill(const char *, const char *, const char *, time_t, time_t, const char *) = 0;
virtual void cmd_svskill(const char *, const char *, const char *) = 0;
@@ -1240,17 +1243,18 @@ class IRCDProto {
virtual void cmd_bot_nick(const char *, const char *, const char *, const char *, const char *) = 0;
virtual void cmd_kick(const char *, const char *, const char *, const char *) = 0;
virtual void cmd_notice_ops(const char *, const char *, const char *) = 0;
- virtual void cmd_message(const char *source, const char *dest, const char *buf)
+ virtual void SendMessage(BotInfo *bi, const char *dest, const char *buf)
{
- if (!buf || !dest) return;
- if (NSDefFlags & NI_MSG) cmd_privmsg(source, dest, buf);
- else cmd_notice(source, dest, buf);
+ if (NSDefFlags & NI_MSG)
+ cmd_privmsg(bi, dest, buf);
+ else
+ cmd_notice(bi, dest, buf);
}
- virtual void cmd_notice(const char *source, const char *dest, const char *msg)
+ virtual void SendNotice(BotInfo *bi, const char *dest, const char *msg)
{
send_cmd(source, "NOTICE %s :%s", dest, msg);
}
- virtual void cmd_privmsg(const char *source, const char *dest, const char *buf)
+ virtual void SendPrivmsg(BotInfo *bi, const char *dest, const char *buf)
{
if (!buf || !dest) return;
send_cmd(source, "PRIVMSG %s :%s", dest, buf);
@@ -1352,6 +1356,26 @@ class IRCDProto {
}
};
+class IRCdProtoTS6 : public IRCdProto
+{
+ virtual void SendNotice(BotInfo *bi, const char *dest, const char *msg)
+ {
+ User *u = finduser(dest);
+ send_cmd(UseTS6 ? bi->uid.c_str() : bi->nick, "NOTICE %s :%s", UseTS6 ? (u ? u->uid : dest) : dest, msg);
+ }
+
+ virtual void SendPrivmsg(BotInfo *bi, const char *dest, const char *buf)
+ {
+ User *u = finduser(dest);
+ send_cmd(UseTS6 ? bi->uid.c_str() ? bi->nick) : source, "PRIVMSG %s :%s", UseTS6 ? (u ? u->uid : dest) : dest, buf);
+ }
+
+ virtual void SendTopic(BotInfo *whosets, const char *chan, const char *whosetit, const char *topic, time_t when)
+ {
+ send_cmd(UseTS6 ? whosetsts->uid.c_str() : whosetsts->nick, "TOPIC %s :%s", chan, topic);
+ }
+}
+
/*************************************************************************/
#endif /* SERVICES_H */
diff --git a/src/protocol/charybdis.c b/src/protocol/charybdis.c
index 3a714a2f7..62f2574e0 100644
--- a/src/protocol/charybdis.c
+++ b/src/protocol/charybdis.c
@@ -434,29 +434,6 @@ CUMode myCumodes[128] = {
{0}, {0}, {0}, {0}, {0}
};
-
-
-void CharybdisProto::cmd_message(const char *source, const char *dest, const char *buf)
-{
- if (!buf) return;
- if (NSDefFlags & NI_MSG) cmd_privmsg(source, dest, buf);
- else cmd_notice(source, dest, buf);
-}
-
-void CharybdisProto::cmd_notice(const char *source, const char *dest, const char *msg)
-{
- Uid *ud = find_uid(source);
- User *u = finduser(dest);
- send_cmd(UseTS6 ? (ud ? ud->uid : source) : source, "NOTICE %s :%s", UseTS6 ? (u ? u->uid : dest) : dest, msg);
-}
-
-void CharybdisProto::cmd_privmsg(const char *source, const char *dest, const char *buf)
-{
- if (!buf) return;
- Uid *ud = find_uid(source), *ud2 = find_uid(dest);
- send_cmd(UseTS6 ? (ud ? ud->uid : source) : source, "PRIVMSG %s :%s", UseTS6 ? (ud2 ? ud2->uid : dest) : dest, buf);
-}
-
void CharybdisProto::cmd_global(const char *source, const char *buf)
{
if (!buf) return;
@@ -758,12 +735,6 @@ void CharybdisProto::cmd_remove_akill(const char *user, const char *host)
send_cmd(UseTS6 ? (ud ? ud->uid : s_OperServ) : s_OperServ, "UNKLINE * %s %s", user, host);
}
-void CharybdisProto::cmd_topic(const char *whosets, const char *chan, const char *whosetit, const char *topic, time_t when)
-{
- Uid *ud = find_uid(whosets);
- send_cmd(UseTS6 ? (ud ? ud->uid : whosets) : whosets, "TOPIC %s :%s", chan, topic);
-}
-
void CharybdisProto::cmd_vhost_off(User *u)
{
send_cmd(UseTS6 ? TS6SID : ServerName, "ENCAP * CHGHOST %s :%s", u->nick, u->host);
diff --git a/src/protocol/charybdis.h b/src/protocol/charybdis.h
index f5754accb..2e85b0c3c 100644
--- a/src/protocol/charybdis.h
+++ b/src/protocol/charybdis.h
@@ -46,10 +46,9 @@
#define DEFAULT_MLOCK CMODE_n | CMODE_t
-class CharybdisProto : public IRCDProto {
+class CharybdisProto : public IRCDTS6Proto {
public:
void cmd_remove_akill(const char *, const char *);
- void cmd_topic(const char *, const char *, const char *, const char *, time_t);
void cmd_vhost_off(User *);
void cmd_akill(const char *, const char *, const char *, time_t, time_t, const char *);
void cmd_svskill(const char *, const char *, const char *);
@@ -58,9 +57,6 @@ class CharybdisProto : public IRCDProto {
void cmd_bot_nick(const char *, const char *, const char *, const char *, const char *);
void cmd_kick(const char *, const char *, const char *, const char *);
void cmd_notice_ops(const char *, const char *, const char *);
- void cmd_message(const char *, const char *, const char *);
- void cmd_notice(const char *, const char *, const char *);
- void cmd_privmsg(const char *, const char *, const char *);
void cmd_bot_chan_mode(const char *, const char *);
void cmd_quit(const char *, const char *);
void cmd_pong(const char *, const char *);