ftl_echo_message_listener.cc 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. // Copyright 2020 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "remoting/host/ftl_echo_message_listener.h"
  5. #include "base/logging.h"
  6. #include "remoting/base/logging.h"
  7. #include "remoting/proto/ftl/v1/chromoting_message.pb.h"
  8. #include "remoting/proto/ftl/v1/ftl_messages.pb.h"
  9. #include "remoting/signaling/signaling_address.h"
  10. namespace {
  11. constexpr int kMaxEchoMessageLength = 16;
  12. }
  13. namespace remoting {
  14. FtlEchoMessageListener::FtlEchoMessageListener(std::string host_owner,
  15. SignalStrategy* signal_strategy)
  16. : host_owner_(host_owner), signal_strategy_(signal_strategy) {
  17. DCHECK(signal_strategy_);
  18. signal_strategy_->AddListener(this);
  19. }
  20. FtlEchoMessageListener::~FtlEchoMessageListener() {
  21. signal_strategy_->RemoveListener(this);
  22. }
  23. void FtlEchoMessageListener::OnSignalStrategyStateChange(
  24. SignalStrategy::State state) {}
  25. bool FtlEchoMessageListener::OnSignalStrategyIncomingStanza(
  26. const jingle_xmpp::XmlElement* stanza) {
  27. return false;
  28. }
  29. bool FtlEchoMessageListener::OnSignalStrategyIncomingMessage(
  30. const ftl::Id& sender_id,
  31. const std::string& sender_registration_id,
  32. const ftl::ChromotingMessage& request_message) {
  33. if (!request_message.has_echo() || !request_message.echo().has_message()) {
  34. return false;
  35. }
  36. // Only respond to echo messages from the machine owner.
  37. if (sender_id.type() != ftl::IdType_Type_EMAIL ||
  38. sender_id.id() != host_owner_) {
  39. LOG(WARNING) << "Dropping echo message from " << sender_id.id();
  40. return false;
  41. }
  42. std::string request_message_payload(request_message.echo().message());
  43. HOST_LOG << "Handling echo message: '" << request_message_payload << "'";
  44. std::string response_message_payload =
  45. request_message_payload.substr(0, kMaxEchoMessageLength);
  46. ftl::ChromotingMessage response_message;
  47. response_message.mutable_echo()->set_message(response_message_payload);
  48. signal_strategy_->SendMessage(SignalingAddress::CreateFtlSignalingAddress(
  49. sender_id.id(), sender_registration_id),
  50. response_message);
  51. return true;
  52. }
  53. } // namespace remoting