1 // Copyright (c) 2012 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 5 #ifndef REMOTING_PROTOCOL_JINGLE_SESSION_MANAGER_H_ 6 #define REMOTING_PROTOCOL_JINGLE_SESSION_MANAGER_H_ 7 8 #include <list> 9 #include <map> 10 #include <string> 11 12 #include "base/memory/ref_counted.h" 13 #include "net/cert/x509_certificate.h" 14 #include "remoting/jingle_glue/signal_strategy.h" 15 #include "remoting/protocol/jingle_messages.h" 16 #include "remoting/protocol/session_manager.h" 17 18 namespace pp { 19 class Instance; 20 } // namespace pp 21 22 namespace buzz { 23 class XmlElement; 24 } // namespace buzz 25 26 namespace talk_base { 27 class SocketAddress; 28 } // namespace talk_base 29 30 namespace remoting { 31 32 class IqSender; 33 34 namespace protocol { 35 36 class JingleSession; 37 class TransportFactory; 38 39 // JingleSessionManager and JingleSession implement the subset of the 40 // Jingle protocol used in Chromoting. JingleSessionManager provides 41 // the protocol::SessionManager interface for accepting incoming and 42 // creating outgoing sessions. 43 class JingleSessionManager : public SessionManager, 44 public SignalStrategy::Listener { 45 public: 46 explicit JingleSessionManager(scoped_ptr<TransportFactory> transport_factory); 47 virtual ~JingleSessionManager(); 48 49 // SessionManager interface. 50 virtual void Init(SignalStrategy* signal_strategy, 51 SessionManager::Listener* listener) OVERRIDE; 52 virtual scoped_ptr<Session> Connect( 53 const std::string& host_jid, 54 scoped_ptr<Authenticator> authenticator, 55 scoped_ptr<CandidateSessionConfig> config) OVERRIDE; 56 virtual void Close() OVERRIDE; 57 virtual void set_authenticator_factory( 58 scoped_ptr<AuthenticatorFactory> authenticator_factory) OVERRIDE; 59 60 // SignalStrategy::Listener interface. 61 virtual void OnSignalStrategyStateChange( 62 SignalStrategy::State state) OVERRIDE; 63 virtual bool OnSignalStrategyIncomingStanza( 64 const buzz::XmlElement* stanza) OVERRIDE; 65 66 private: 67 friend class JingleSession; 68 69 typedef std::map<std::string, JingleSession*> SessionsMap; 70 71 void OnJingleInfo( 72 const std::string& relay_token, 73 const std::vector<std::string>& relay_hosts, 74 const std::vector<talk_base::SocketAddress>& stun_hosts); 75 76 IqSender* iq_sender() { return iq_sender_.get(); } 77 void SendReply(const buzz::XmlElement* original_stanza, 78 JingleMessageReply::ErrorType error); 79 80 // Called by JingleSession when it is being destroyed. 81 void SessionDestroyed(JingleSession* session); 82 83 scoped_ptr<TransportFactory> transport_factory_; 84 bool fetch_stun_relay_config_; 85 86 SignalStrategy* signal_strategy_; 87 scoped_ptr<AuthenticatorFactory> authenticator_factory_; 88 scoped_ptr<IqSender> iq_sender_; 89 SessionManager::Listener* listener_; 90 91 bool ready_; 92 93 SessionsMap sessions_; 94 95 DISALLOW_COPY_AND_ASSIGN(JingleSessionManager); 96 }; 97 98 } // namespace protocol 99 } // namespace remoting 100 101 #endif // REMOTING_PROTOCOL_JINGLE_SESSION_MANAGER_H_ 102