summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAttila Molnar <attilamolnar@hush.com>2014-09-03 14:23:30 +0200
committerAttila Molnar <attilamolnar@hush.com>2014-09-03 14:23:30 +0200
commit2f9dda9b8e6842850ec6b986d23cb6a56e9af547 (patch)
treed9c526988b1f8f4a9f13fb56f4282b770fb7944c
parent8d066e557eeabaea40634dec8d6f5cd4d39cfe60 (diff)
m_spanningtree Add function to serialize parameters in a Modes::ChangeList::List into MODE/FMODE format
-rw-r--r--src/modules/m_spanningtree/translate.cpp48
-rw-r--r--src/modules/m_spanningtree/translate.h30
2 files changed, 78 insertions, 0 deletions
diff --git a/src/modules/m_spanningtree/translate.cpp b/src/modules/m_spanningtree/translate.cpp
new file mode 100644
index 000000000..48c0632e5
--- /dev/null
+++ b/src/modules/m_spanningtree/translate.cpp
@@ -0,0 +1,48 @@
+/*
+ * InspIRCd -- Internet Relay Chat Daemon
+ *
+ * Copyright (C) 2014 Attila Molnar <attilamolnar@hush.com>
+ *
+ * This file is part of InspIRCd. InspIRCd is free software: you can
+ * redistribute it and/or modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation, version 2.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#include "inspircd.h"
+#include "translate.h"
+
+std::string Translate::ModeChangeListToParams(const Modes::ChangeList::List& modes)
+{
+ std::string ret;
+ for (Modes::ChangeList::List::const_iterator i = modes.begin(); i != modes.end(); ++i)
+ {
+ const Modes::Change& item = *i;
+ ModeHandler* mh = item.mh;
+ if (!mh->GetNumParams(item.adding))
+ continue;
+
+ ret.push_back(' ');
+
+ if (mh->IsPrefixMode())
+ {
+ User* target = ServerInstance->FindNick(item.param);
+ if (target)
+ {
+ ret.append(target->uuid);
+ continue;
+ }
+ }
+
+ ret.append(item.param);
+ }
+ return ret;
+}
diff --git a/src/modules/m_spanningtree/translate.h b/src/modules/m_spanningtree/translate.h
new file mode 100644
index 000000000..a2bc6df78
--- /dev/null
+++ b/src/modules/m_spanningtree/translate.h
@@ -0,0 +1,30 @@
+/*
+ * InspIRCd -- Internet Relay Chat Daemon
+ *
+ * Copyright (C) 2014 Attila Molnar <attilamolnar@hush.com>
+ *
+ * This file is part of InspIRCd. InspIRCd is free software: you can
+ * redistribute it and/or modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation, version 2.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#pragma once
+
+namespace Translate
+{
+ /** Generate a list of mode parameters suitable for FMODE/MODE from a Modes::ChangeList::List
+ * @param modes List of mode changes
+ * @return List of mode parameters built from the input. Does not include the modes themselves,
+ * only the parameters.
+ */
+ std::string ModeChangeListToParams(const Modes::ChangeList::List& modes);
+}