// Channel METADATA has an additional parameter: the channel TS
// :22D METADATA #channel 12345 extname :extdata
if (params.size() < 3)
- return CMD_INVALID;
+ throw ProtocolException("Insufficient parameters for channel METADATA");
Channel* c = ServerInstance->FindChan(params[0]);
if (!c)
return CMD_FAILURE;
- time_t ChanTS = ConvToInt(params[1]);
- if (!ChanTS)
- return CMD_INVALID;
-
+ 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;
return CMD_SUCCESS;
}
+CommandMetadata::Builder::Builder(User* user, const std::string& key, const std::string& val)
+ : CmdBuilder("METADATA")
+{
+ push(user->uuid);
+ push(key);
+ push_last(val);
+}
+
+CommandMetadata::Builder::Builder(Channel* chan, const std::string& key, const std::string& val)
+ : CmdBuilder("METADATA")
+{
+ push(chan->name);
+ push_int(chan->age);
+ push(key);
+ push_last(val);
+}
+
+CommandMetadata::Builder::Builder(const std::string& key, const std::string& val)
+ : CmdBuilder("METADATA")
+{
+ push("*");
+ push(key);
+ push_last(val);
+}