+ data << "<modulelist>";
+ const ModuleManager::ModuleMap& mods = ServerInstance->Modules->GetModules();
+
+ for (ModuleManager::ModuleMap::const_iterator i = mods.begin(); i != mods.end(); ++i)
+ {
+ Version v = i->second->GetVersion();
+ data << "<module><name>" << i->first << "</name><description>" << Sanitize(v.description) << "</description></module>";
+ }
+ return data << "</modulelist>";
+ }
+
+ std::ostream& Channels(std::ostream& data)
+ {
+ data << "<channellist>";
+
+ const chan_hash& chans = ServerInstance->GetChans();
+ for (chan_hash::const_iterator i = chans.begin(); i != chans.end(); ++i)
+ {
+ Channel* c = i->second;
+
+ data << "<channel>";
+ data << "<usercount>" << c->GetUsers().size() << "</usercount><channelname>" << Sanitize(c->name) << "</channelname>";
+ data << "<channeltopic>";
+ data << "<topictext>" << Sanitize(c->topic) << "</topictext>";
+ data << "<setby>" << Sanitize(c->setby) << "</setby>";
+ data << "<settime>" << c->topicset << "</settime>";
+ data << "</channeltopic>";
+ data << "<channelmodes>" << Sanitize(c->ChanModes(true)) << "</channelmodes>";
+
+ const Channel::MemberMap& ulist = c->GetUsers();
+ for (Channel::MemberMap::const_iterator x = ulist.begin(); x != ulist.end(); ++x)
+ {
+ Membership* memb = x->second;
+ data << "<channelmember><uid>" << memb->user->uuid << "</uid><privs>"
+ << Sanitize(memb->GetAllPrefixChars()) << "</privs><modes>"
+ << memb->modes << "</modes>";
+ DumpMeta(data, memb);
+ data << "</channelmember>";
+ }
+
+ DumpMeta(data, c);
+
+ data << "</channel>";
+ }
+
+ return data << "</channellist>";