-bool TreeSocket::MetaData(const std::string &prefix, std::deque<std::string> ¶ms)
-{
- if (params.size() < 2)
- return true;
- else if (params.size() < 3)
- params.push_back("");
- TreeServer* ServerSource = Utils->FindServer(prefix);
- if (ServerSource)
+ time_t ChanTS = ServerCommand::ExtractTS(params[1]);
+ if (c->age < ChanTS)
+ // Their TS is newer than ours, discard this command and do not propagate
+ return CMD_FAILURE;
+
+ std::string value = params.size() < 4 ? "" : params[3];
+
+ ExtensionItem* item = ServerInstance->Extensions.GetItem(params[2]);
+ if ((item) && (item->type == ExtensionItem::EXT_CHANNEL))
+ item->unserialize(FORMAT_NETWORK, c, value);
+ FOREACH_MOD(OnDecodeMetaData, (c,params[2],value));
+ }
+ else