blob: d4a1af89f668c0acd57564df2ccb9575334e5083 [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "remoting/host/ftl_echo_message_listener.h"
#include "base/logging.h"
#include "remoting/base/logging.h"
#include "remoting/proto/ftl/v1/chromoting_message.pb.h"
#include "remoting/proto/ftl/v1/ftl_messages.pb.h"
#include "remoting/signaling/signaling_address.h"
namespace {
constexpr int kMaxEchoMessageLength = 16;
}
namespace remoting {
FtlEchoMessageListener::FtlEchoMessageListener(std::string host_owner,
SignalStrategy* signal_strategy)
: host_owner_(host_owner), signal_strategy_(signal_strategy) {
DCHECK(signal_strategy_);
signal_strategy_->AddListener(this);
}
FtlEchoMessageListener::~FtlEchoMessageListener() {
signal_strategy_->RemoveListener(this);
}
void FtlEchoMessageListener::OnSignalStrategyStateChange(
SignalStrategy::State state) {}
bool FtlEchoMessageListener::OnSignalStrategyIncomingStanza(
const jingle_xmpp::XmlElement* stanza) {
return false;
}
bool FtlEchoMessageListener::OnSignalStrategyIncomingMessage(
const ftl::Id& sender_id,
const std::string& sender_registration_id,
const ftl::ChromotingMessage& request_message) {
if (!request_message.has_echo() || !request_message.echo().has_message()) {
return false;
}
// Only respond to echo messages from the machine owner.
if (sender_id.type() != ftl::IdType_Type_EMAIL ||
sender_id.id() != host_owner_) {
LOG(WARNING) << "Dropping echo message from " << sender_id.id();
return false;
}
std::string request_message_payload(request_message.echo().message());
HOST_LOG << "Handling echo message: '" << request_message_payload << "'";
std::string response_message_payload =
request_message_payload.substr(0, kMaxEchoMessageLength);
ftl::ChromotingMessage response_message;
response_message.mutable_echo()->set_message(response_message_payload);
signal_strategy_->SendMessage(SignalingAddress::CreateFtlSignalingAddress(
sender_id.id(), sender_registration_id),
response_message);
return true;
}
} // namespace remoting