1
0
mirror of https://github.com/osmarks/ngircd.git synced 2024-12-13 02:10:27 +00:00

Update preliminary ngIRCd protocol module for Anope 1.9.6

This commit is contained in:
Alexander Barton 2012-02-04 12:55:41 +01:00
parent c16133c5ee
commit 89d99e2ff9
15 changed files with 816 additions and 7 deletions

View File

@ -0,0 +1,128 @@
From d8eddbeaadc7d161865b5342d59748b80266533c Mon Sep 17 00:00:00 2001
From: DukePyrolator <DukePyrolator@anope.org>
Date: Mon, 22 Aug 2011 14:53:37 +0200
Subject: [PATCH 03/16] Update ngIRCd protocol module for current Anope 1.9
GIT
---
modules/protocol/ngircd.cpp | 37 ++++++++++++++++++-------------------
1 files changed, 18 insertions(+), 19 deletions(-)
diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp
index e546d05..790b8f4 100644
--- a/modules/protocol/ngircd.cpp
+++ b/modules/protocol/ngircd.cpp
@@ -11,6 +11,8 @@
#include "services.h"
#include "modules.h"
+#include "nickserv.h"
+#include "oper.h"
IRCDVar myIrcd[] = {
{"ngIRCd", /* ircd name */
@@ -45,14 +47,7 @@ class ngIRCdProto : public IRCDProto
{
void SendAkill(User *u, const XLine *x)
{
- if (SGLine && u == NULL)
- for (Anope::insensitive_map<User *>::iterator it = UserListByNick.begin(); it != UserListByNick.end();)
- {
- u = it->second;
- ++it;
- if (SGLine->Check(u) != NULL)
- break;
- }
+ // TODO: ADD SOME CODE
}
void SendAkillDel(const XLine*) { }
@@ -62,13 +57,16 @@ class ngIRCdProto : public IRCDProto
send_cmd(source ? source->nick : Config->ServerName, "WALLOPS :%s", buf.c_str());
}
- void SendJoin(BotInfo *user, Channel *c, const ChannelStatus *status)
+ void SendJoin(User *user, Channel *c, const ChannelStatus *status)
{
send_cmd(user->nick, "JOIN %s", c->name.c_str());
if (status)
+ {
+ BotInfo *setter = findbot(user->nick);
for (unsigned i = 0; i < ModeManager::ChannelModes.size(); ++i)
if (status->HasFlag(ModeManager::ChannelModes[i]->Name))
- c->SetMode(user, ModeManager::ChannelModes[i], user->nick, false);
+ c->SetMode(setter, ModeManager::ChannelModes[i], user->nick, false);
+ }
}
void SendSVSKillInternal(const BotInfo *source, const User *user, const Anope::string &buf)
@@ -84,7 +82,7 @@ class ngIRCdProto : public IRCDProto
void SendConnect()
{
- send_cmd("", "PASS %s 0210-IRC+ Anope|%s:CLHSo P", uplink_server->password.c_str(), Anope::VersionShort().c_str());
+ send_cmd("", "PASS %s 0210-IRC+ Anope|%s:CLHSo P", Config->Uplinks[CurrentUplink]->password.c_str(), Anope::VersionShort().c_str());
/* Make myself known to myself in the serverlist */
SendServer(Me);
/* finish the enhanced server handshake and register the connection */
@@ -92,9 +90,11 @@ class ngIRCdProto : public IRCDProto
}
// Received: :dev.anope.de NICK DukeP 1 ~DukePyro p57ABF9C9.dip.t-dialin.net 1 +i :DukePyrolator
- void SendClientIntroduction(const User *u, const Anope::string &modes)
+ void SendClientIntroduction(const User *u)
{
- EnforceQlinedNick(u->nick, "");
+ 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());
}
@@ -126,7 +126,7 @@ class ngIRCdProto : public IRCDProto
void SendNoticeChanopsInternal(const BotInfo *source, const Channel *dest, const Anope::string &buf)
{
- send_cmd(source ? source->nick : Config->s_ChanServ, "NOTICE @%s :%s", dest->name.c_str(), buf.c_str());
+ send_cmd(source->nick, "NOTICE @%s :%s", dest->name.c_str(), buf.c_str());
}
/* INVITE */
@@ -196,8 +196,8 @@ class ngIRCdIRCdMessage : public IRCdMessage
{
// a new user is connecting to the network
User *user = do_nick("", params[0], params[2], params[3], source, params[6], Anope::CurTime, "", "", "", params[5]);
- if (user)
- validate_user(user);
+ if (user && nickserv)
+ nickserv->Validate(user);
}
else
{
@@ -433,7 +433,7 @@ class ProtongIRCd : public Module
ModeManager::AddUserMode(new UserMode(UMODE_CLOAK, 'x'));
/* b/e/I */
- ModeManager::AddChannelMode(new ChannelModeBan(CMODE_BAN, 'b'));
+ ModeManager::AddChannelMode(new ChannelModeList(CMODE_BAN, 'b'));
ModeManager::AddChannelMode(new ChannelModeList(CMODE_INVITEOVERRIDE, 'I'));
/* v/h/o/a/q */
@@ -454,13 +454,12 @@ class ProtongIRCd : public Module
}
public:
- ProtongIRCd(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator),
+ ProtongIRCd(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, PROTOCOL),
message_kick("KICK", event_kick), message_pass("PASS", event_pass),
message_njoin("NJOIN", event_njoin), message_chaninfo("CHANINFO", event_chaninfo),
message_005("005", event_005), message_442("442", event_442), message_376("376", event_376)
{
this->SetAuthor("Anope");
- this->SetType(PROTOCOL);
Capab.SetFlag(CAPAB_QS);
--
1.7.8.3

View File

@ -0,0 +1,93 @@
From 88b2b14a76b8ee053b1f6ea64139350260590043 Mon Sep 17 00:00:00 2001
From: DukePyrolator <DukePyrolator@anope.org>
Date: Mon, 22 Aug 2011 14:55:07 +0200
Subject: [PATCH 04/16] ngircd: Do PING-PONG on server burst to "sync servers"
Imagine we had three servers, A, B & C linked like so: A<->B<->C:
If Anope is linked to A and B splits from A and then reconnects B
introduces itself, introduces C, sends EOS for C, introduces B's clients
introduces C's clients, sends EOS for B. This causes all of C's clients
to be introduced with their server "not syncing".
We now send a PING immediately when receiving a new server and then
finish sync once we get a pong back from that server.
---
modules/protocol/ngircd.cpp | 28 ++++++++++++++++++++++++++--
1 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp
index 790b8f4..89aecfd 100644
--- a/modules/protocol/ngircd.cpp
+++ b/modules/protocol/ngircd.cpp
@@ -108,11 +108,13 @@ class ngIRCdProto : public IRCDProto
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());
}
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());
}
@@ -212,6 +214,8 @@ class ngIRCdIRCdMessage : public IRCdMessage
do_server("", params[0], 0, params[2], params[1]);
else
do_server(source, params[0], params[1].is_pos_number_only() ? convertTo<unsigned>(params[1]) : 0, params[3], params[2]);
+
+ ircdproto->SendPing(Config->ServerName, params[0]);
return true;
}
@@ -253,6 +257,25 @@ class ngIRCdIRCdMessage : public IRCdMessage
}
};
+/** This is here because:
+ *
+ * If we had three servers, A, B & C linked like so: A<->B<->C
+ * If Anope is linked to A and B splits from A and then reconnects
+ * B introduces itself, introduces C, sends EOS for C, introduces Bs clients
+ * introduces Cs clients, sends EOS for B. This causes all of Cs clients to be introduced
+ * with their server "not syncing". We now send a PING immediately when receiving a new server
+ * and then finish sync once we get a pong back from that server.
+ */
+bool event_pong(const Anope::string &source, const std::vector<Anope::string> &params)
+{
+ Server *s = Server::Find(source);
+ if (s && !s->IsSynced())
+ s->Sync(false);
+ return true;
+}
+
+
+
/*
* CHANINFO <chan> +<modes>
* CHANINFO <chan> +<modes> :<topic>
@@ -416,7 +439,7 @@ bool event_376(const Anope::string &source, const std::vector<Anope::string> &pa
class ProtongIRCd : public Module
{
Message message_kick, message_pass, message_njoin, message_chaninfo, message_005,
- message_442, message_376;
+ message_442, message_376, message_pong;
ngIRCdProto ircd_proto;
ngIRCdIRCdMessage ircd_message;
@@ -457,7 +480,8 @@ class ProtongIRCd : public Module
ProtongIRCd(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, PROTOCOL),
message_kick("KICK", event_kick), message_pass("PASS", event_pass),
message_njoin("NJOIN", event_njoin), message_chaninfo("CHANINFO", event_chaninfo),
- message_005("005", event_005), message_442("442", event_442), message_376("376", event_376)
+ message_005("005", event_005), message_442("442", event_442), message_376("376", event_376),
+ message_pong("PONG", event_pong)
{
this->SetAuthor("Anope");
--
1.7.8.3

View File

@ -0,0 +1,29 @@
From 0d83f8f9ca0de651d664eca6f467f36df0417f7d Mon Sep 17 00:00:00 2001
From: Alexander Barton <alex@barton.de>
Date: Mon, 22 Aug 2011 14:59:49 +0200
Subject: [PATCH 05/16] ngircd: always prefix modes in CHANINFO with "+"
---
modules/protocol/ngircd.cpp | 6 ++----
1 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp
index 89aecfd..3e5beb3 100644
--- a/modules/protocol/ngircd.cpp
+++ b/modules/protocol/ngircd.cpp
@@ -139,10 +139,8 @@ Log(LOG_DEBUG) << "SendModeInternal 2";
void SendChannel(Channel *c)
{
- Anope::string mlock_modes = get_mlock_modes(c->ci, true);
- if (mlock_modes.empty())
- mlock_modes = "+";
- send_cmd(Config->ServerName, "CHANINFO %s %s", c->name.c_str(), mlock_modes.c_str());
+ 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)
{
--
1.7.8.3

View File

@ -0,0 +1,47 @@
From 1914a36b83b1fc6b4678ef261a1a06eefab9a0ca Mon Sep 17 00:00:00 2001
From: Alexander Barton <alex@barton.de>
Date: Fri, 26 Aug 2011 17:51:37 +0200
Subject: [PATCH 06/16] ngircd: support user mode "R" and channel mode "R"
---
modules/protocol/ngircd.cpp | 7 ++++---
1 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp
index 3e5beb3..7f4186e 100644
--- a/modules/protocol/ngircd.cpp
+++ b/modules/protocol/ngircd.cpp
@@ -449,26 +449,27 @@ class ProtongIRCd : public Module
ModeManager::AddUserMode(new UserMode(UMODE_INVIS, 'i'));
ModeManager::AddUserMode(new UserMode(UMODE_OPER, 'o'));
ModeManager::AddUserMode(new UserMode(UMODE_RESTRICTED, 'r'));
+ ModeManager::AddUserMode(new UserMode(UMODE_REGISTERED, 'R'));
ModeManager::AddUserMode(new UserMode(UMODE_SNOMASK, 's'));
ModeManager::AddUserMode(new UserMode(UMODE_WALLOPS, 'w'));
ModeManager::AddUserMode(new UserMode(UMODE_CLOAK, 'x'));
- /* b/e/I */
+ /* Add modes for ban and invite lists */
ModeManager::AddChannelMode(new ChannelModeList(CMODE_BAN, 'b'));
ModeManager::AddChannelMode(new ChannelModeList(CMODE_INVITEOVERRIDE, 'I'));
- /* v/h/o/a/q */
+ /* Add channel user modes */
ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_VOICE, 'v', '+'));
ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OP, 'o', '@'));
/* Add channel modes */
- // channel modes: biIklmnoPstvz
ModeManager::AddChannelMode(new ChannelMode(CMODE_INVITE, 'i'));
ModeManager::AddChannelMode(new ChannelModeKey('k'));
ModeManager::AddChannelMode(new ChannelModeParam(CMODE_LIMIT, 'l'));
ModeManager::AddChannelMode(new ChannelMode(CMODE_MODERATED, 'm'));
ModeManager::AddChannelMode(new ChannelMode(CMODE_NOEXTERNAL, 'n'));
ModeManager::AddChannelMode(new ChannelMode(CMODE_PERM, 'P'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_REGISTEREDONLY, 'R'));
ModeManager::AddChannelMode(new ChannelMode(CMODE_SECRET, 's'));
ModeManager::AddChannelMode(new ChannelMode(CMODE_TOPIC, 't'));
ModeManager::AddChannelMode(new ChannelMode(CMODE_SSL, 'z'));
--
1.7.8.3

View File

@ -0,0 +1,96 @@
From 4c9300ede35310ee5642f34e5ac227bd96fc7384 Mon Sep 17 00:00:00 2001
From: DukePyrolator <DukePyrolator@anope.org>
Date: Sun, 4 Sep 2011 15:08:55 +0200
Subject: [PATCH 07/16] ngircd: Fix handling of JOIN commands
---
modules/protocol/ngircd.cpp | 60 +++++++++++++++++++++++++++++++++++++++---
1 files changed, 55 insertions(+), 5 deletions(-)
diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp
index 7f4186e..3024fdd 100644
--- a/modules/protocol/ngircd.cpp
+++ b/modules/protocol/ngircd.cpp
@@ -240,16 +240,58 @@ class ngIRCdIRCdMessage : public IRCdMessage
{
if (!params.empty())
{
+ Anope::string channel, mode;
size_t pos = params[0].find('\7');
if (pos != Anope::string::npos)
{
- Anope::string channel = params[0].substr(0, pos);
- Anope::string mode = '+' + params[0].substr(pos, params[0].length()) + " " + source;
- do_join(source, channel, "");
- do_cmode(source, channel, mode, "");
+ channel = params[0].substr(0, pos);
+ mode = '+' + params[0].substr(pos+1, params[0].length()) + " " + source;
}
else
- do_join(source, params[0], "");
+ channel = params[0];
+
+ Channel *c = findchan(channel);
+
+ if (!c)
+ {
+ c = new Channel(channel, Anope::CurTime);
+ c->SetFlag(CH_SYNCING);
+ }
+
+ User *u = finduser(source);
+
+ if (!u)
+ {
+ Log(LOG_DEBUG) << "JOIN for nonexistant user " << source << " on " << channel;
+ return false;
+ }
+
+ EventReturn MOD_RESULT;
+ FOREACH_RESULT(I_OnPreJoinChannel, OnPreJoinChannel(u, c));
+
+ /* Add the user to the channel */
+ c->JoinUser(u);
+
+ /* set the usermodes to the channel */
+ do_cmode(source, channel, mode, "");
+
+ /* Now set whatever modes this user is allowed to have on the channel */
+ chan_set_correct_modes(u, c, 1);
+
+ /* Check to see if modules want the user to join, if they do
+ * check to see if they are allowed to join (CheckKick will kick/ban them)
+ * Don't trigger OnJoinChannel event then as the user will be destroyed
+ */
+ if (MOD_RESULT != EVENT_STOP && c->ci && c->ci->CheckKick(u))
+ return false;
+
+ FOREACH_MOD(I_OnJoinChannel, OnJoinChannel(u, c));
+
+ if (c->HasFlag(CH_SYNCING))
+ {
+ c->UnsetFlag(CH_SYNCING);
+ c->Sync();
+ }
}
return true;
}
@@ -491,7 +533,15 @@ class ProtongIRCd : public Module
pmodule_ircd_message(&this->ircd_message);
this->AddModes();
+
+ ModuleManager::Attach(I_OnUserNickChange, this);
}
+
+ void OnUserNickChange(User *u, const Anope::string &)
+ {
+ u->RemoveModeInternal(ModeManager::FindUserModeByName(UMODE_REGISTERED));
+ }
+
};
MODULE_INIT(ProtongIRCd)
--
1.7.8.3

View File

@ -0,0 +1,38 @@
From d363ebd841ea7e1db3c62730023759d69520e0d8 Mon Sep 17 00:00:00 2001
From: Alexander Barton <alex@barton.de>
Date: Tue, 27 Sep 2011 15:08:09 +0200
Subject: [PATCH 08/16] ngircd: Allow setting modes by clients on burst
This change is required by commit 43201ead9575a for the ngIRCd protocol
module as well.
---
modules/protocol/ngircd.cpp | 7 +++++--
1 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp
index 3024fdd..2774168 100644
--- a/modules/protocol/ngircd.cpp
+++ b/modules/protocol/ngircd.cpp
@@ -57,14 +57,17 @@ class ngIRCdProto : public IRCDProto
send_cmd(source ? source->nick : Config->ServerName, "WALLOPS :%s", buf.c_str());
}
- void SendJoin(User *user, Channel *c, const ChannelStatus *status)
+ void SendJoin(User *user, Channel *c, ChannelStatus *status)
{
send_cmd(user->nick, "JOIN %s", c->name.c_str());
if (status)
{
+ ChannelStatus cs = *status;
+ status->ClearFlags();
+
BotInfo *setter = findbot(user->nick);
for (unsigned i = 0; i < ModeManager::ChannelModes.size(); ++i)
- if (status->HasFlag(ModeManager::ChannelModes[i]->Name))
+ if (cs.HasFlag(ModeManager::ChannelModes[i]->Name))
c->SetMode(setter, ModeManager::ChannelModes[i], user->nick, false);
}
}
--
1.7.8.3

View File

@ -0,0 +1,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

View File

@ -0,0 +1,57 @@
From d2c45d7c578ec684d3b471020f631847316de196 Mon Sep 17 00:00:00 2001
From: Alexander Barton <alex@barton.de>
Date: Fri, 25 Nov 2011 19:17:19 +0100
Subject: [PATCH 10/16] ngircd: Add ~ProtongIRCd()
---
modules/protocol/ngircd.cpp | 13 ++++++++-----
1 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp
index 55cb8d7..5fd62db 100644
--- a/modules/protocol/ngircd.cpp
+++ b/modules/protocol/ngircd.cpp
@@ -302,8 +302,7 @@ class ngIRCdIRCdMessage : public IRCdMessage
}
};
-/** This is here because:
- *
+/*
* If we had three servers, A, B & C linked like so: A<->B<->C
* If Anope is linked to A and B splits from A and then reconnects
* B introduces itself, introduces C, sends EOS for C, introduces Bs clients
@@ -319,8 +318,6 @@ bool event_pong(const Anope::string &source, const std::vector<Anope::string> &p
return true;
}
-
-
/*
* CHANINFO <chan> +<modes>
* CHANINFO <chan> +<modes> :<topic>
@@ -480,7 +477,6 @@ bool event_376(const Anope::string &source, const std::vector<Anope::string> &pa
return true;
}
-
class ProtongIRCd : public Module
{
Message message_kick, message_pass, message_njoin, message_chaninfo, message_005,
@@ -542,6 +538,13 @@ class ProtongIRCd : public Module
ModuleManager::Attach(I_OnUserNickChange, this);
}
+ ~ProtongIRCd()
+ {
+ pmodule_ircd_var(NULL);
+ pmodule_ircd_proto(NULL);
+ pmodule_ircd_message(NULL);
+ }
+
void OnUserNickChange(User *u, const Anope::string &)
{
u->RemoveModeInternal(ModeManager::FindUserModeByName(UMODE_REGISTERED));
--
1.7.8.3

View File

@ -0,0 +1,29 @@
From 4dc5a3d3e2fbb218461d9459bff1c0a392a75881 Mon Sep 17 00:00:00 2001
From: Alexander Barton <alex@barton.de>
Date: Sat, 31 Dec 2011 16:12:52 +0100
Subject: [PATCH 11/16] ngircd: Update protocol module for current Anope 1.9
GIT
This changes are rquired by:
- 150831c1a: Made capab management a bit simplier
---
modules/protocol/ngircd.cpp | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp
index 5fd62db..9c26ec8 100644
--- a/modules/protocol/ngircd.cpp
+++ b/modules/protocol/ngircd.cpp
@@ -527,7 +527,7 @@ class ProtongIRCd : public Module
{
this->SetAuthor("Anope");
- Capab.SetFlag(CAPAB_QS);
+ Capab.insert("QS");
pmodule_ircd_var(myIrcd);
pmodule_ircd_proto(&this->ircd_proto);
--
1.7.8.3

View File

@ -0,0 +1,25 @@
From 99c18cafdee28bfb17fad5f0526b3ed5d1f5f312 Mon Sep 17 00:00:00 2001
From: Alexander Barton <alex@barton.de>
Date: Sat, 31 Dec 2011 16:17:50 +0100
Subject: [PATCH 12/16] ngircd: let Anope know that channel mode "r" is
supported
---
modules/protocol/ngircd.cpp | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp
index 9c26ec8..6155667 100644
--- a/modules/protocol/ngircd.cpp
+++ b/modules/protocol/ngircd.cpp
@@ -512,6 +512,7 @@ class ProtongIRCd : public Module
ModeManager::AddChannelMode(new ChannelMode(CMODE_MODERATED, 'm'));
ModeManager::AddChannelMode(new ChannelMode(CMODE_NOEXTERNAL, 'n'));
ModeManager::AddChannelMode(new ChannelMode(CMODE_PERM, 'P'));
+ ModeManager::AddChannelMode(new ChannelModeRegistered('r'));
ModeManager::AddChannelMode(new ChannelMode(CMODE_REGISTEREDONLY, 'R'));
ModeManager::AddChannelMode(new ChannelMode(CMODE_SECRET, 's'));
ModeManager::AddChannelMode(new ChannelMode(CMODE_TOPIC, 't'));
--
1.7.8.3

View File

@ -0,0 +1,28 @@
From 5a19b69f0daceb5b12ec751bc919519a7f712f2d Mon Sep 17 00:00:00 2001
From: Alexander Barton <alex@barton.de>
Date: Sun, 15 Jan 2012 13:36:14 +0100
Subject: [PATCH 13/16] ngircd: Update copyright notice
---
modules/protocol/ngircd.cpp | 7 ++++---
1 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp
index 6155667..024c61d 100644
--- a/modules/protocol/ngircd.cpp
+++ b/modules/protocol/ngircd.cpp
@@ -1,7 +1,8 @@
-/* ngIRCd IRCD functions
+/*
+ * ngIRCd Protocol module for Anope IRC Services
*
- * (C) 2003-2011 Anope Team
- * Contact us at team@anope.org
+ * (C) 2011-2012 Alexander Barton <alex@barton.de>
+ * (C) 2011 Anope Team <team@anope.org>
*
* Please read COPYING and README for further details.
*
--
1.7.8.3

View File

@ -0,0 +1,35 @@
From acc24a7f4488f6ef0fb240a76766db4220b62d53 Mon Sep 17 00:00:00 2001
From: Alexander Barton <alex@barton.de>
Date: Sun, 22 Jan 2012 19:05:28 +0100
Subject: [PATCH 14/16] ngircd: set/unset GLINE's on AKILL commands
---
modules/protocol/ngircd.cpp | 10 ++++++++--
1 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp
index 024c61d..3bc3812 100644
--- a/modules/protocol/ngircd.cpp
+++ b/modules/protocol/ngircd.cpp
@@ -48,10 +48,16 @@ class ngIRCdProto : public IRCDProto
{
void SendAkill(User *u, const XLine *x)
{
- // TODO: ADD SOME CODE
+ // Calculate the time left before this would expire, capping it at 2 days
+ time_t timeleft = x->Expires - Anope::CurTime;
+ if (timeleft > 172800 || !x->Expires)
+ timeleft = 172800;
+ UplinkSocket::Message(Config->ServerName) << "GLINE " << x->Mask << " " << timeleft << " :" << x->Reason << " (" << x->By << ")";
}
- void SendAkillDel(const XLine*) { }
+ void SendAkillDel(const XLine *x) {
+ UplinkSocket::Message(Config->ServerName) << "GLINE " << x->Mask;
+ }
void SendGlobopsInternal(const BotInfo *source, const Anope::string &buf)
{
--
1.7.8.3

View File

@ -0,0 +1,27 @@
From 3a61b190db79848d4519296432ebb2ab714c42b7 Mon Sep 17 00:00:00 2001
From: Alexander Barton <alex@barton.de>
Date: Sun, 22 Jan 2012 19:06:34 +0100
Subject: [PATCH 15/16] ngircd: ngIRCd supports channel mode 'e' now
---
modules/protocol/ngircd.cpp | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp
index 3bc3812..0f87cbd 100644
--- a/modules/protocol/ngircd.cpp
+++ b/modules/protocol/ngircd.cpp
@@ -504,8 +504,9 @@ class ProtongIRCd : public Module
ModeManager::AddUserMode(new UserMode(UMODE_WALLOPS, 'w'));
ModeManager::AddUserMode(new UserMode(UMODE_CLOAK, 'x'));
- /* Add modes for ban and invite lists */
+ /* Add modes for ban, exception, and invite lists */
ModeManager::AddChannelMode(new ChannelModeList(CMODE_BAN, 'b'));
+ ModeManager::AddChannelMode(new ChannelModeList(CMODE_EXCEPT, 'e'));
ModeManager::AddChannelMode(new ChannelModeList(CMODE_INVITEOVERRIDE, 'I'));
/* Add channel user modes */
--
1.7.8.3

View File

@ -0,0 +1,35 @@
From a7c48fcf47af757cf1b4eeaa6bcc96f4ae1f7410 Mon Sep 17 00:00:00 2001
From: Alexander Barton <alex@barton.de>
Date: Sat, 4 Feb 2012 11:13:36 +0100
Subject: [PATCH 16/16] ngircd: support SQUERY command
Thanks to DukePyrolator for explaining these changes to me.
---
modules/protocol/ngircd.cpp | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp
index 0f87cbd..530686e 100644
--- a/modules/protocol/ngircd.cpp
+++ b/modules/protocol/ngircd.cpp
@@ -487,7 +487,7 @@ bool event_376(const Anope::string &source, const std::vector<Anope::string> &pa
class ProtongIRCd : public Module
{
Message message_kick, message_pass, message_njoin, message_chaninfo, message_005,
- message_442, message_376, message_pong;
+ message_442, message_376, message_pong, message_squery;
ngIRCdProto ircd_proto;
ngIRCdIRCdMessage ircd_message;
@@ -532,7 +532,7 @@ class ProtongIRCd : public Module
message_kick("KICK", event_kick), message_pass("PASS", event_pass),
message_njoin("NJOIN", event_njoin), message_chaninfo("CHANINFO", event_chaninfo),
message_005("005", event_005), message_442("442", event_442), message_376("376", event_376),
- message_pong("PONG", event_pong)
+ message_pong("PONG", event_pong), message_squery("SQUERY", ::OnPrivmsg)
{
this->SetAuthor("Anope");
--
1.7.8.3

View File

@ -2,7 +2,7 @@
ngIRCd - Next Generation IRC Server
http://ngircd.barton.de/
(c)2001-2011 Alexander Barton and Contributors.
(c)2001-2012 Alexander Barton and Contributors.
ngIRCd is free software and published under the
terms of the GNU General Public License.
@ -11,22 +11,21 @@
This directory contains two preliminary patches that (re-) add a ngIRCd
protocol module to the Anope 1.9 development branch. It has been tested
with Anope 1.9.4, there is no guarantee that it will work with other
with Anope 1.9.6, there is no guarantee that it will work with other
versions as Anope 1.9.x is under heavy development ...
To build this Anope protocol module, you have to
- Download the Anope 1.9.x sources (tested with 1.9.4),
- Download the Anope 1.9.x sources (only tested with 1.9.6!),
- Patch in the ngIRCd protocol module,
- Build and install Anope as usual,
- Configure Anope as usual, use "ngircd" as protocol module.
So the command sequence can be something like this:
$ tar xzf anope-1.9.4-source.tar.gz
$ cd anope-1.9.4-source
$ patch -p1 < .../ngircd/contrib/Anope/0001-Revert-Removed-ngircd.patch
$ patch -p1 < .../ngircd/contrib/Anope/0002-ngircd-whitespace-fixes.patch
$ tar xzf anope-1.9.6-source.tar.gz
$ cd anope-1.9.6-source
$ for p in .../ngircd/contrib/Anope/*.patch ; do patch -p1 < $p ; done
$ ./Config
$ cd build
$ make