From 17a80c5a8ef43675bf0d6937f35c950d7348f9ee Mon Sep 17 00:00:00 2001 From: brain Date: Fri, 2 Nov 2007 14:01:55 +0000 Subject: 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 --- src/modules/m_spanningtree/main.cpp | 12 +++++++--- src/modules/m_spanningtree/treesocket1.cpp | 38 +++++++++++++----------------- 2 files changed, 26 insertions(+), 24 deletions(-) (limited to 'src/modules/m_spanningtree') 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 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 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 types = Instance->XLines->GetAllTypes(); -/* for (std::vector::iterator i = Instance->XLines->zlines.begin(); i != Instance->XLines->zlines.end(); i++) + for (std::vector::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::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::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::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); } -- cgit v1.2.3