| // 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 |