summaryrefslogtreecommitdiff
path: root/src/modules/m_spanningtree
diff options
context:
space:
mode:
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2007-11-02 14:01:55 +0000
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2007-11-02 14:01:55 +0000
commit17a80c5a8ef43675bf0d6937f35c950d7348f9ee (patch)
tree0bf58bddba4d476814e03ceed924434eca78515d /src/modules/m_spanningtree
parent5028040d96a9c736f48ad2b62c6232078bf470db (diff)
Hopefully fix the bursting of xlines to work again (even with unknown types) and also add facility to enumerate them
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@8461 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/modules/m_spanningtree')
-rw-r--r--src/modules/m_spanningtree/main.cpp12
-rw-r--r--src/modules/m_spanningtree/treesocket1.cpp38
2 files changed, 26 insertions, 24 deletions
diff --git a/src/modules/m_spanningtree/main.cpp b/src/modules/m_spanningtree/main.cpp
index 87206ea2a..2e743689c 100644
--- a/src/modules/m_spanningtree/main.cpp
+++ b/src/modules/m_spanningtree/main.cpp
@@ -742,7 +742,7 @@ void ModuleSpanningTree::OnAddLine(XLine* line, User* user)
{
/* Server-set lines */
char data[MAXBUF];
- snprintf(data,MAXBUF,"%c %s %s %lu %lu :%s", line->type, line->Displayable(), ServerInstance->Config->ServerName, line->set_time,
+ snprintf(data,MAXBUF,"%s %s %s %lu %lu :%s", line->type.c_str(), line->Displayable(), ServerInstance->Config->ServerName, line->set_time,
line->duration, line->reason);
std::deque<std::string> params;
params.push_back(data);
@@ -750,10 +750,13 @@ void ModuleSpanningTree::OnAddLine(XLine* line, User* user)
}
else
{
+ /** XXX: This is WRONG and needs fixing.
+ * We need to implement a DELLINE
+ */
if (user && IS_LOCAL(user))
{
char type[8];
- snprintf(type,8,"%cLINE",line->type);
+ snprintf(type,8,"%sLINE",line->type.c_str());
std::string stype(type);
char sduration[MAXBUF];
snprintf(sduration,MAXBUF,"%ld",line->duration);
@@ -770,8 +773,11 @@ void ModuleSpanningTree::OnDelLine(XLine* line, User* user)
{
if (user && IS_LOCAL(user))
{
+ /** XXX: This is WRONG and needs fixing.
+ * We need to implement a DELLINE
+ */
char type[8];
- snprintf(type,8,"%cLINE",line->type);
+ snprintf(type,8,"%sLINE",line->type.c_str());
std::string stype(type);
std::deque<std::string> params;
params.push_back(line->Displayable());
diff --git a/src/modules/m_spanningtree/treesocket1.cpp b/src/modules/m_spanningtree/treesocket1.cpp
index 84964833f..18ae9b6cd 100644
--- a/src/modules/m_spanningtree/treesocket1.cpp
+++ b/src/modules/m_spanningtree/treesocket1.cpp
@@ -1217,31 +1217,27 @@ void TreeSocket::SendXLines(TreeServer* Current)
std::string buffer;
std::string n = this->Instance->Config->GetSID();
const char* sn = n.c_str();
- /* Yes, these arent too nice looking, but they get the job done */
- /* FIXME: FOR THE LOVE OF ZOMBIE JESUS, FIX ME */
+ std::vector<std::string> types = Instance->XLines->GetAllTypes();
-/* for (std::vector<ZLine*>::iterator i = Instance->XLines->zlines.begin(); i != Instance->XLines->zlines.end(); i++)
+ for (std::vector<std::string>::iterator it = types.begin(); it != types.end(); ++it)
{
- snprintf(data,MAXBUF,":%s ADDLINE Z %s %s %lu %lu :%s\r\n",sn,(*i)->ipaddr,(*i)->source,(unsigned long)(*i)->set_time,(unsigned long)(*i)->duration,(*i)->reason);
- buffer.append(data);
- }
- for (std::vector<QLine*>::iterator i = Instance->XLines->qlines.begin(); i != Instance->XLines->qlines.end(); i++)
- {
- snprintf(data,MAXBUF,":%s ADDLINE Q %s %s %lu %lu :%s\r\n",sn,(*i)->nick,(*i)->source,(unsigned long)(*i)->set_time,(unsigned long)(*i)->duration,(*i)->reason);
- buffer.append(data);
- }
- for (std::vector<GLine*>::iterator i = Instance->XLines->glines.begin(); i != Instance->XLines->glines.end(); i++)
- {
- snprintf(data,MAXBUF,":%s ADDLINE G %s@%s %s %lu %lu :%s\r\n",sn,(*i)->identmask,(*i)->hostmask,(*i)->source,(unsigned long)(*i)->set_time,(unsigned long)(*i)->duration,(*i)->reason);
- buffer.append(data);
- }
- for (std::vector<ELine*>::iterator i = Instance->XLines->elines.begin(); i != Instance->XLines->elines.end(); i++)
- {
- snprintf(data,MAXBUF,":%s ADDLINE E %s@%s %s %lu %lu :%s\r\n",sn,(*i)->identmask,(*i)->hostmask,(*i)->source,(unsigned long)(*i)->set_time,(unsigned long)(*i)->duration,(*i)->reason);
- buffer.append(data);
+ XLineLookup* lookup = Instance->XLines->GetAll(*it);
+
+ if (lookup)
+ {
+ for (LookupIter i = lookup->begin(); i != lookup->end(); ++i)
+ {
+ snprintf(data,MAXBUF,":%s ADDLINE %s %s %s %lu %lu :%s\r\n",sn, it->c_str(), i->second->Displayable(),
+ i->second->source,
+ (unsigned long)i->second->set_time,
+ (unsigned long)i->second->duration,
+ i->second->reason);
+ buffer.append(data);
+ }
+ }
}
-*/
+
if (!buffer.empty())
this->WriteLine(buffer);
}