mirror of
				https://github.com/osmarks/ngircd.git
				synced 2025-10-26 03:27:38 +00:00 
			
		
		
		
	Update preliminary ngIRCd protocol module for Anope 1.9.6
This commit is contained in:
		| @@ -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 | ||||
|                            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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Alexander Barton
					Alexander Barton