summary refs log tree commit diff
path: root/contrib/Anope/0009-ngircd-Update-protocol-module-for-current-Anope-1.9.patch
blob: b6a003abec5157bd87947da71e81bd12eff4e998 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
From e74a5303f2357f4a9915bb91038a2e326323db3c Mon Sep 17 00:00:00 2001
From: Alexander Barton <alex@barton.de>
Date: Fri, 25 Nov 2011 19:16:37 +0100
Subject: [PATCH 09/16] ngircd: Update protocol module for current Anope 1.9
 GIT

This changes are rquired by:

 - b14f5ea88: Fixed accidentally clearing botmodes when joins are sent
 - cef3eb78d: Remove send_cmd and replace it with a stringstream
 - ddc3c2f38: Added options:nonicknameownership config option
---
 modules/protocol/ngircd.cpp |   54 ++++++++++++++++++++++--------------------
 1 files changed, 28 insertions(+), 26 deletions(-)

diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp
index 2774168..55cb8d7 100644
--- a/modules/protocol/ngircd.cpp
+++ b/modules/protocol/ngircd.cpp
@@ -54,16 +54,22 @@ class ngIRCdProto : public IRCDProto
 
 	void SendGlobopsInternal(const BotInfo *source, const Anope::string &buf)
 	{
-		send_cmd(source ? source->nick : Config->ServerName, "WALLOPS :%s", buf.c_str());
+		UplinkSocket::Message(source ? source->nick : Config->ServerName) << "WALLOPS :" << buf;
 	}
 
-	void SendJoin(User *user, Channel *c, ChannelStatus *status)
+	void SendJoin(User *user, Channel *c, const ChannelStatus *status)
 	{
-		send_cmd(user->nick, "JOIN %s", c->name.c_str());
+		UplinkSocket::Message(user->nick) << "JOIN " << c->name;
 		if (status)
 		{
+			/* First save the channel status incase uc->Status == status */
 			ChannelStatus cs = *status;
-			status->ClearFlags();
+			/* If the user is internally on the channel with flags, kill them so that
+			 * the stacker will allow this.
+			 */
+			UserContainer *uc = c->FindUser(user);
+			if (uc != NULL)
+				uc->Status->ClearFlags();
 
 			BotInfo *setter = findbot(user->nick);
 			for (unsigned i = 0; i < ModeManager::ChannelModes.size(); ++i)
@@ -74,18 +80,18 @@ class ngIRCdProto : public IRCDProto
 
 	void SendSVSKillInternal(const BotInfo *source, const User *user, const Anope::string &buf)
 	{
-		send_cmd(source ? source->nick : Config->ServerName, "KILL %s :%s", user->nick.c_str(), buf.c_str());
+		UplinkSocket::Message(source ? source->nick : Config->ServerName) << "KILL " << user->nick << " :" << buf;
 	}
 
 	/* SERVER name hop descript */
 	void SendServer(const Server *server)
 	{
-		send_cmd("", "SERVER %s %d :%s", server->GetName().c_str(), server->GetHops(), server->GetDescription().c_str());
+		UplinkSocket::Message() << "SERVER " << server->GetName() << " " << server->GetHops() << " :" << server->GetDescription();
 	}
 
 	void SendConnect()
 	{
-		send_cmd("", "PASS %s 0210-IRC+ Anope|%s:CLHSo P", Config->Uplinks[CurrentUplink]->password.c_str(), Anope::VersionShort().c_str());
+		UplinkSocket::Message() << "PASS " << Config->Uplinks[CurrentUplink]->password << " 0210-IRC+ Anope|" << Anope::VersionShort() << ":CLHSo P";
 		/* Make myself known to myself in the serverlist */
 		SendServer(Me);
 		/* finish the enhanced server handshake and register the connection */
@@ -98,56 +104,52 @@ class ngIRCdProto : public IRCDProto
 		Anope::string modes = "+" + u->GetModes();
 		XLine x(u->nick, "Reserved for services");
 		ircdproto->SendSQLine(NULL, &x);
-		send_cmd(Config->ServerName, "NICK %s 1 %s %s 1 %s :%s", u->nick.c_str(), u->GetIdent().c_str(), u->host.c_str(), modes.c_str(), u->realname.c_str());
+		UplinkSocket::Message(Config->ServerName) << "NICK " << u->nick << " 1 " << u->GetIdent() << " " << u->host << " 1 " << modes << " :" << u->realname;
 	}
 
 	void SendPartInternal(const BotInfo *bi, const Channel *chan, const Anope::string &buf)
 	{
 		if (!buf.empty())
-			send_cmd(bi->nick, "PART %s :%s", chan->name.c_str(), buf.c_str());
+			UplinkSocket::Message(bi->nick) << "PART " << chan->name << " :" << buf;
 		else
-			send_cmd(bi->nick, "PART %s", chan->name.c_str());
+			UplinkSocket::Message(bi->nick) << "PART " << chan->name;
 	}
 
 	void SendModeInternal(const BotInfo *bi, const Channel *dest, const Anope::string &buf)
 	{
-Log(LOG_DEBUG) << "SendModeInternal 1";
-		send_cmd(bi ? bi->nick : Config->ServerName, "MODE %s %s", dest->name.c_str(), buf.c_str());
+		UplinkSocket::Message(bi ? bi->nick : Config->ServerName) << "MODE " << dest->name << " " << buf;
 	}
 
 	void SendModeInternal(const BotInfo *bi, const User *u, const Anope::string &buf)
 	{
-Log(LOG_DEBUG) << "SendModeInternal 2";
-		send_cmd(bi ? bi->nick : Config->ServerName, "MODE %s %s", u->nick.c_str(), buf.c_str());
+		UplinkSocket::Message(bi ? bi->nick : Config->ServerName) << "MODE " << u->nick << " " << buf;
 	}
 
 	void SendKickInternal(const BotInfo *bi, const Channel *chan, const User *user, const Anope::string &buf)
 	{
 		if (!buf.empty())
-			send_cmd(bi->nick, "KICK %s %s :%s", chan->name.c_str(), user->nick.c_str(), buf.c_str());
+			UplinkSocket::Message(bi->nick) << "KICK " << chan->name << " " << user->nick << " :" << buf;
 		else
-			send_cmd(bi->nick, "KICK %s %s", chan->name.c_str(), user->nick.c_str());
+			UplinkSocket::Message(bi->nick) << "KICK " << chan->name << " " << user->nick;
 	}
 
-	void SendNoticeChanopsInternal(const BotInfo *source, const Channel *dest, const Anope::string &buf)
+	void SendChannel(Channel *c)
 	{
-		send_cmd(source->nick, "NOTICE @%s :%s", dest->name.c_str(), buf.c_str());
+		Anope::string modes = c->GetModes(true, true);
+		UplinkSocket::Message(Config->ServerName) << "CHANINFO " << c->name << " +" << modes;
 	}
 
-	/* INVITE */
-	void SendInvite(BotInfo *source, const Anope::string &chan, const Anope::string &nick)
+	void SendTopic(BotInfo *bi, Channel *c)
 	{
-		send_cmd(source->nick, "INVITE %s %s", nick.c_str(), chan.c_str());
+		UplinkSocket::Message(bi->nick) << "TOPIC " << c->name << " :" << c->topic;
 	}
 
-	void SendChannel(Channel *c)
+	void SendLogin(User *u)
 	{
-		Anope::string modes = c->GetModes(true, true);
-		send_cmd(Config->ServerName, "CHANINFO %s +%s", c->name.c_str(), modes.c_str());
 	}
-	void SendTopic(BotInfo *bi, Channel *c)
+
+	void SendLogout(User *u)
 	{
-		send_cmd(bi->nick, "TOPIC %s :%s", c->name.c_str(), c->topic.c_str());
 	}
 };
 
-- 
1.7.8.3