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:
parent
c16133c5ee
commit
89d99e2ff9
@ -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
|
||||||
|
|
@ -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> ¶ms)
|
||||||
|
+{
|
||||||
|
+ 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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
57
contrib/Anope/0010-ngircd-Add-ProtongIRCd.patch
Normal file
57
contrib/Anope/0010-ngircd-Add-ProtongIRCd.patch
Normal 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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
28
contrib/Anope/0013-ngircd-Update-copyright-notice.patch
Normal file
28
contrib/Anope/0013-ngircd-Update-copyright-notice.patch
Normal 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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
35
contrib/Anope/0016-ngircd-support-SQUERY-command.patch
Normal file
35
contrib/Anope/0016-ngircd-support-SQUERY-command.patch
Normal 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
|
||||||
|
|
@ -2,7 +2,7 @@
|
|||||||
ngIRCd - Next Generation IRC Server
|
ngIRCd - Next Generation IRC Server
|
||||||
http://ngircd.barton.de/
|
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
|
ngIRCd is free software and published under the
|
||||||
terms of the GNU General Public License.
|
terms of the GNU General Public License.
|
||||||
|
|
||||||
@ -11,22 +11,21 @@
|
|||||||
|
|
||||||
This directory contains two preliminary patches that (re-) add a ngIRCd
|
This directory contains two preliminary patches that (re-) add a ngIRCd
|
||||||
protocol module to the Anope 1.9 development branch. It has been tested
|
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 ...
|
versions as Anope 1.9.x is under heavy development ...
|
||||||
|
|
||||||
To build this Anope protocol module, you have to
|
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,
|
- Patch in the ngIRCd protocol module,
|
||||||
- Build and install Anope as usual,
|
- Build and install Anope as usual,
|
||||||
- Configure Anope as usual, use "ngircd" as protocol module.
|
- Configure Anope as usual, use "ngircd" as protocol module.
|
||||||
|
|
||||||
So the command sequence can be something like this:
|
So the command sequence can be something like this:
|
||||||
|
|
||||||
$ tar xzf anope-1.9.4-source.tar.gz
|
$ tar xzf anope-1.9.6-source.tar.gz
|
||||||
$ cd anope-1.9.4-source
|
$ cd anope-1.9.6-source
|
||||||
$ patch -p1 < .../ngircd/contrib/Anope/0001-Revert-Removed-ngircd.patch
|
$ for p in .../ngircd/contrib/Anope/*.patch ; do patch -p1 < $p ; done
|
||||||
$ patch -p1 < .../ngircd/contrib/Anope/0002-ngircd-whitespace-fixes.patch
|
|
||||||
$ ./Config
|
$ ./Config
|
||||||
$ cd build
|
$ cd build
|
||||||
$ make
|
$ make
|
||||||
|
Loading…
Reference in New Issue
Block a user