summaryrefslogtreecommitdiff
path: root/src/modules
diff options
context:
space:
mode:
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2007-03-15 17:37:25 +0000
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2007-03-15 17:37:25 +0000
commit38ca8be9a3881a3cb3cf6864e67b779ffbab6874 (patch)
tree2f611ef900a80433c881702fbc5ea4c7f1a5da98 /src/modules
parentd1dc60e83eef53da5368e18955acfa6c72be0374 (diff)
Add third parameter to OnUserQuit (quit reason for opers only) - bump api version
Add SetOperQuit and GetOperQuit methods to userrec Add OPERQUIT command to protocol - bump protocol version All this is to properly allow hidebans etc to work properly git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@6675 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/extra/m_sqllog.cpp2
-rw-r--r--src/modules/m_blockcaps.cpp1
-rw-r--r--src/modules/m_cgiirc.cpp2
-rw-r--r--src/modules/m_dccallow.cpp2
-rw-r--r--src/modules/m_foobar.cpp2
-rw-r--r--src/modules/m_httpd_stats.cpp2
-rw-r--r--src/modules/m_nicklock.cpp2
-rw-r--r--src/modules/m_safelist.cpp2
-rw-r--r--src/modules/m_services_account.cpp2
-rw-r--r--src/modules/m_silence.cpp2
-rw-r--r--src/modules/m_silence_ext.cpp2
-rw-r--r--src/modules/m_spanningtree/main.cpp9
-rw-r--r--src/modules/m_spanningtree/main.h4
-rw-r--r--src/modules/m_spanningtree/treesocket.h2
-rw-r--r--src/modules/m_spanningtree/treesocket2.cpp19
-rw-r--r--src/modules/m_swhois.cpp2
-rw-r--r--src/modules/m_watch.cpp2
17 files changed, 44 insertions, 15 deletions
diff --git a/src/modules/extra/m_sqllog.cpp b/src/modules/extra/m_sqllog.cpp
index 1202ac2d3..3ebd6c0f3 100644
--- a/src/modules/extra/m_sqllog.cpp
+++ b/src/modules/extra/m_sqllog.cpp
@@ -291,7 +291,7 @@ class ModuleSQLLog : public Module
AddLogEntry(LT_CONNECT,user->nick,user->host,user->server);
}
- virtual void OnUserQuit(userrec* user, const std::string &reason)
+ virtual void OnUserQuit(userrec* user, const std::string &reason, const std::string &oper_message)
{
AddLogEntry(LT_DISCONNECT,user->nick,user->host,user->server);
}
diff --git a/src/modules/m_blockcaps.cpp b/src/modules/m_blockcaps.cpp
index c1edcfd04..662bdc865 100644
--- a/src/modules/m_blockcaps.cpp
+++ b/src/modules/m_blockcaps.cpp
@@ -77,6 +77,7 @@ public:
virtual int OnUserPreMessage(userrec* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list)
{
+ ServerInstance->Log(DEBUG, "*** " + ConvToStr( ( 20 * 100 / 26) ));
if (target_type == TYPE_CHANNEL)
{
if ((!IS_LOCAL(user)) || (text.length() < minlen))
diff --git a/src/modules/m_cgiirc.cpp b/src/modules/m_cgiirc.cpp
index 96ac66f14..04a56b1fa 100644
--- a/src/modules/m_cgiirc.cpp
+++ b/src/modules/m_cgiirc.cpp
@@ -235,7 +235,7 @@ public:
}
}
- virtual void OnUserQuit(userrec* user, const std::string &message)
+ virtual void OnUserQuit(userrec* user, const std::string &message, const std::string &oper_message)
{
OnCleanup(TYPE_USER, user);
}
diff --git a/src/modules/m_dccallow.cpp b/src/modules/m_dccallow.cpp
index bed359e3c..d92aeed82 100644
--- a/src/modules/m_dccallow.cpp
+++ b/src/modules/m_dccallow.cpp
@@ -272,7 +272,7 @@ class ModuleDCCAllow : public Module
Conf = new ConfigReader(ServerInstance);
}
- virtual void OnUserQuit(userrec* user, const std::string &reason)
+ virtual void OnUserQuit(userrec* user, const std::string &reason, const std::string &oper_message)
{
dccallowlist* dl;
diff --git a/src/modules/m_foobar.cpp b/src/modules/m_foobar.cpp
index b353d71c7..deb4c1229 100644
--- a/src/modules/m_foobar.cpp
+++ b/src/modules/m_foobar.cpp
@@ -66,7 +66,7 @@ class ModuleFoobar : public Module
ServerInstance->Log(DEBUG,"Foobar: User connecting: "+b);
}
- virtual void OnUserQuit(userrec* user, const std::string &reason)
+ virtual void OnUserQuit(userrec* user, const std::string &reason, const std::string &oper_message)
{
// method called when a user disconnects
diff --git a/src/modules/m_httpd_stats.cpp b/src/modules/m_httpd_stats.cpp
index 961885677..ac49fccf8 100644
--- a/src/modules/m_httpd_stats.cpp
+++ b/src/modules/m_httpd_stats.cpp
@@ -203,7 +203,7 @@ class ModuleHttpStats : public Module
this->changed = true;
}
- void OnUserQuit(userrec* user, const std::string &message)
+ void OnUserQuit(userrec* user, const std::string &message, const std::string &oper_message)
{
for (UCListIter v = user->chans.begin(); v != user->chans.end(); v++)
{
diff --git a/src/modules/m_nicklock.cpp b/src/modules/m_nicklock.cpp
index 5b7e78faf..509b565ca 100644
--- a/src/modules/m_nicklock.cpp
+++ b/src/modules/m_nicklock.cpp
@@ -136,7 +136,7 @@ class ModuleNickLock : public Module
return 0;
}
- virtual void OnUserQuit(userrec* user, const std::string &reason)
+ virtual void OnUserQuit(userrec* user, const std::string &reason, const std::string &oper_message)
{
user->Shrink("nick_locked");
}
diff --git a/src/modules/m_safelist.cpp b/src/modules/m_safelist.cpp
index 11bfe6721..53d3e08f6 100644
--- a/src/modules/m_safelist.cpp
+++ b/src/modules/m_safelist.cpp
@@ -233,7 +233,7 @@ class ModuleSafeList : public Module
output.append(" SAFELIST");
}
- virtual void OnUserQuit(userrec* user, const std::string &message)
+ virtual void OnUserQuit(userrec* user, const std::string &message, const std::string &oper_message)
{
this->OnCleanup(TYPE_USER,user);
}
diff --git a/src/modules/m_services_account.cpp b/src/modules/m_services_account.cpp
index 54a61d4df..1f9daf452 100644
--- a/src/modules/m_services_account.cpp
+++ b/src/modules/m_services_account.cpp
@@ -243,7 +243,7 @@ class ModuleServicesAccount : public Module
}
// when a user quits, tidy up their metadata
- virtual void OnUserQuit(userrec* user, const std::string &message)
+ virtual void OnUserQuit(userrec* user, const std::string &message, const std::string &oper_message)
{
std::string* account;
user->GetExt("accountname", account);
diff --git a/src/modules/m_silence.cpp b/src/modules/m_silence.cpp
index 2bc58821d..5c8e5fdef 100644
--- a/src/modules/m_silence.cpp
+++ b/src/modules/m_silence.cpp
@@ -142,7 +142,7 @@ class ModuleSilence : public Module
List[I_OnUserQuit] = List[I_On005Numeric] = List[I_OnUserPreNotice] = List[I_OnUserPreMessage] = 1;
}
- virtual void OnUserQuit(userrec* user, const std::string &reason)
+ virtual void OnUserQuit(userrec* user, const std::string &reason, const std::string &oper_message)
{
// when the user quits tidy up any silence list they might have just to keep things tidy
// and to prevent a HONKING BIG MEMORY LEAK!
diff --git a/src/modules/m_silence_ext.cpp b/src/modules/m_silence_ext.cpp
index 5acd9e22d..ba76abc29 100644
--- a/src/modules/m_silence_ext.cpp
+++ b/src/modules/m_silence_ext.cpp
@@ -253,7 +253,7 @@ class ModuleSilence : public Module
List[I_OnBuildExemptList] = List[I_OnUserQuit] = List[I_On005Numeric] = List[I_OnUserPreNotice] = List[I_OnUserPreMessage] = List[I_OnUserPreInvite] = 1;
}
- virtual void OnUserQuit(userrec* user, const std::string &reason)
+ virtual void OnUserQuit(userrec* user, const std::string &reason, const std::string &oper_message)
{
// when the user quits tidy up any silence list they might have just to keep things tidy
silencelist* sl;
diff --git a/src/modules/m_spanningtree/main.cpp b/src/modules/m_spanningtree/main.cpp
index 31f8a1f10..1f2509d4e 100644
--- a/src/modules/m_spanningtree/main.cpp
+++ b/src/modules/m_spanningtree/main.cpp
@@ -904,11 +904,18 @@ void ModuleSpanningTree::OnUserConnect(userrec* user)
}
}
-void ModuleSpanningTree::OnUserQuit(userrec* user, const std::string &reason)
+void ModuleSpanningTree::OnUserQuit(userrec* user, const std::string &reason, const std::string &oper_message)
{
if ((IS_LOCAL(user)) && (user->registered == REG_ALL))
{
std::deque<std::string> params;
+
+ if (oper_message != reason)
+ {
+ params.push_back(":"+oper_message);
+ Utils->DoOneToMany(user->nick,"OPERQUIT",params);
+ }
+ params.clear();
params.push_back(":"+reason);
Utils->DoOneToMany(user->nick,"QUIT",params);
}
diff --git a/src/modules/m_spanningtree/main.h b/src/modules/m_spanningtree/main.h
index da0860eac..4bf11ddd7 100644
--- a/src/modules/m_spanningtree/main.h
+++ b/src/modules/m_spanningtree/main.h
@@ -13,7 +13,7 @@
* Failure to document your protocol changes will result in a painfully
* painful death by pain. You have been warned.
*/
-const long ProtocolVersion = 1104;
+const long ProtocolVersion = 1105;
/** Forward declarations
*/
@@ -137,7 +137,7 @@ class ModuleSpanningTree : public Module
virtual void OnChangeName(userrec* user, const std::string &gecos);
virtual void OnUserPart(userrec* user, chanrec* channel, const std::string &partmessage);
virtual void OnUserConnect(userrec* user);
- virtual void OnUserQuit(userrec* user, const std::string &reason);
+ virtual void OnUserQuit(userrec* user, const std::string &reason, const std::string &oper_message);
virtual void OnUserPostNick(userrec* user, const std::string &oldnick);
virtual void OnUserKick(userrec* source, userrec* user, chanrec* chan, const std::string &reason);
virtual void OnRemoteKill(userrec* source, userrec* dest, const std::string &reason);
diff --git a/src/modules/m_spanningtree/treesocket.h b/src/modules/m_spanningtree/treesocket.h
index 52496a4ef..5a5ec52f8 100644
--- a/src/modules/m_spanningtree/treesocket.h
+++ b/src/modules/m_spanningtree/treesocket.h
@@ -240,6 +240,8 @@ class TreeSocket : public InspSocket
*/
bool ForceNick(const std::string &prefix, std::deque<std::string> &params);
+ bool OperQuit(const std::string &prefix, std::deque<std::string> &params);
+
/** Remote SQUIT (RSQUIT). Routing works similar to SVSNICK: Route it to the server that the target is connected to locally,
* then let that server do the dirty work (squit it!). Example:
* A -> B -> C -> D: oper on A squits D, A routes to B, B routes to C, C notices D connected locally, kills it. -- w00t
diff --git a/src/modules/m_spanningtree/treesocket2.cpp b/src/modules/m_spanningtree/treesocket2.cpp
index fe56ea1bf..8bb404a45 100644
--- a/src/modules/m_spanningtree/treesocket2.cpp
+++ b/src/modules/m_spanningtree/treesocket2.cpp
@@ -207,6 +207,21 @@ bool TreeSocket::ForceNick(const std::string &prefix, std::deque<std::string> &p
return true;
}
+bool TreeSocket::OperQuit(const std::string &prefix, std::deque<std::string> &params)
+{
+ if (params.size() < 1)
+ return true;
+
+ userrec* u = this->Instance->FindNick(prefix);
+
+ if (u)
+ {
+ Utils->DoOneToAllButSender(prefix,"OPERQUIT",params,prefix);
+ u->SetOperQuit(params[0]);
+ }
+ return true;
+}
+
/*
* Remote SQUIT (RSQUIT). Routing works similar to SVSNICK: Route it to the server that the target is connected to locally,
* then let that server do the dirty work (squit it!). Example:
@@ -1157,6 +1172,10 @@ bool TreeSocket::ProcessLine(std::string &line)
}
return this->ForceNick(prefix,params);
}
+ else if (command == "OPERQUIT")
+ {
+ return this->OperQuit(prefix,params);
+ }
else if (command == "RSQUIT")
{
return this->RemoteSquit(prefix, params);
diff --git a/src/modules/m_swhois.cpp b/src/modules/m_swhois.cpp
index d4432a0d6..3dcdb10f2 100644
--- a/src/modules/m_swhois.cpp
+++ b/src/modules/m_swhois.cpp
@@ -141,7 +141,7 @@ class ModuleSWhois : public Module
}
// when a user quits, tidy up their metadata
- virtual void OnUserQuit(userrec* user, const std::string &message)
+ virtual void OnUserQuit(userrec* user, const std::string &message, const std::string &oper_message)
{
std::string* swhois;
user->GetExt("swhois", swhois);
diff --git a/src/modules/m_watch.cpp b/src/modules/m_watch.cpp
index f1cef7bf0..28c809d5b 100644
--- a/src/modules/m_watch.cpp
+++ b/src/modules/m_watch.cpp
@@ -306,7 +306,7 @@ class Modulewatch : public Module
List[I_OnGarbageCollect] = List[I_OnCleanup] = List[I_OnUserQuit] = List[I_OnPostConnect] = List[I_OnUserPostNick] = List[I_On005Numeric] = 1;
}
- virtual void OnUserQuit(userrec* user, const std::string &reason)
+ virtual void OnUserQuit(userrec* user, const std::string &reason, const std::string &oper_message)
{
watchentries::iterator x = whos_watching_me->find(user->nick);
if (x != whos_watching_me->end())