- User* u = dynamic_cast<User*>(target);
- Channel* c = dynamic_cast<Channel*>(target);
- if (u)
- CommandMetadata::Builder(u, key, data).Broadcast();
- else if (c)
- CommandMetadata::Builder(c, key, data).Broadcast();
- else
- CommandMetadata::Builder(key, data).Broadcast();
+ if (!source)
+ source = ServerInstance->FakeClient;
+
+ // If omit is non-NULL we pass the route belonging to the user to Forward(),
+ // otherwise we pass NULL, which is equivalent to Broadcast()
+ TreeServer* server = (omit ? TreeServer::Get(omit)->GetRoute() : NULL);
+ CmdBuilder(source, "ENCAP * ").push_raw(cmd).insert(params).Forward(server);
+}
+
+void SpanningTreeProtocolInterface::SendMetaData(User* u, const std::string& key, const std::string& data)
+{
+ CommandMetadata::Builder(u, key, data).Broadcast();
+}
+
+void SpanningTreeProtocolInterface::SendMetaData(Channel* c, const std::string& key, const std::string& data)
+{
+ CommandMetadata::Builder(c, key, data).Broadcast();
+}
+
+void SpanningTreeProtocolInterface::SendMetaData(const std::string& key, const std::string& data)
+{
+ CommandMetadata::Builder(key, data).Broadcast();
+}
+
+void SpanningTreeProtocolInterface::Server::SendMetaData(const std::string& key, const std::string& data)
+{
+ sock->WriteLine(CommandMetadata::Builder(key, data));