ice_transport.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. // Copyright 2015 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. #ifndef REMOTING_PROTOCOL_ICE_TRANSPORT_H_
  5. #define REMOTING_PROTOCOL_ICE_TRANSPORT_H_
  6. #include <list>
  7. #include <map>
  8. #include "base/memory/raw_ptr.h"
  9. #include "base/memory/weak_ptr.h"
  10. #include "base/timer/timer.h"
  11. #include "remoting/protocol/datagram_channel_factory.h"
  12. #include "remoting/protocol/ice_transport_channel.h"
  13. #include "remoting/protocol/jingle_messages.h"
  14. #include "remoting/protocol/transport.h"
  15. namespace remoting {
  16. namespace protocol {
  17. class ChannelMultiplexer;
  18. class PseudoTcpChannelFactory;
  19. class SecureChannelFactory;
  20. class MessageChannelFactory;
  21. class IceTransport : public Transport,
  22. public IceTransportChannel::Delegate,
  23. public DatagramChannelFactory {
  24. public:
  25. class EventHandler {
  26. public:
  27. // Called when transport route changes.
  28. virtual void OnIceTransportRouteChange(const std::string& channel_name,
  29. const TransportRoute& route) = 0;
  30. // Called when there is an error connecting the session.
  31. virtual void OnIceTransportError(ErrorCode error) = 0;
  32. };
  33. // |transport_context| must outlive the session.
  34. IceTransport(scoped_refptr<TransportContext> transport_context,
  35. EventHandler* event_handler);
  36. IceTransport(const IceTransport&) = delete;
  37. IceTransport& operator=(const IceTransport&) = delete;
  38. ~IceTransport() override;
  39. MessageChannelFactory* GetChannelFactory();
  40. MessageChannelFactory* GetMultiplexedChannelFactory();
  41. // Transport interface.
  42. void Start(Authenticator* authenticator,
  43. SendTransportInfoCallback send_transport_info_callback) override;
  44. bool ProcessTransportInfo(jingle_xmpp::XmlElement* transport_info) override;
  45. private:
  46. typedef std::map<std::string, IceTransportChannel*> ChannelsMap;
  47. // DatagramChannelFactory interface.
  48. void CreateChannel(const std::string& name,
  49. ChannelCreatedCallback callback) override;
  50. void CancelChannelCreation(const std::string& name) override;
  51. // Passes transport info to a new |channel| in case it was received before the
  52. // channel was created.
  53. void AddPendingRemoteTransportInfo(IceTransportChannel* channel);
  54. // IceTransportChannel::Delegate interface.
  55. void OnChannelIceCredentials(IceTransportChannel* transport,
  56. const std::string& ufrag,
  57. const std::string& password) override;
  58. void OnChannelCandidate(IceTransportChannel* transport,
  59. const cricket::Candidate& candidate) override;
  60. void OnChannelRouteChange(IceTransportChannel* transport,
  61. const TransportRoute& route) override;
  62. void OnChannelFailed(IceTransportChannel* transport) override;
  63. void OnChannelDeleted(IceTransportChannel* transport) override;
  64. // Creates empty |pending_transport_info_message_| and schedules timer for
  65. // SentTransportInfo() to sent the message later.
  66. void EnsurePendingTransportInfoMessage();
  67. // Sends transport-info message with candidates from |pending_candidates_|.
  68. void SendTransportInfo();
  69. // Callback passed to StreamMessageChannelFactoryAdapter to handle read/write
  70. // errors on the data channels.
  71. void OnChannelError(int error);
  72. scoped_refptr<TransportContext> transport_context_;
  73. raw_ptr<EventHandler> event_handler_;
  74. SendTransportInfoCallback send_transport_info_callback_;
  75. ChannelsMap channels_;
  76. std::unique_ptr<PseudoTcpChannelFactory> pseudotcp_channel_factory_;
  77. std::unique_ptr<SecureChannelFactory> secure_channel_factory_;
  78. std::unique_ptr<MessageChannelFactory> message_channel_factory_;
  79. std::unique_ptr<ChannelMultiplexer> channel_multiplexer_;
  80. std::unique_ptr<MessageChannelFactory> mux_channel_factory_;
  81. // Pending remote transport info received before the local channels were
  82. // created.
  83. std::list<IceTransportInfo::IceCredentials> pending_remote_ice_credentials_;
  84. std::list<IceTransportInfo::NamedCandidate> pending_remote_candidates_;
  85. std::unique_ptr<IceTransportInfo> pending_transport_info_message_;
  86. base::OneShotTimer transport_info_timer_;
  87. base::WeakPtrFactory<IceTransport> weak_factory_{this};
  88. };
  89. } // namespace protocol
  90. } // namespace remoting
  91. #endif // REMOTING_PROTOCOL_ICE_TRANSPORT_H_