Home | History | Annotate | Download | only in protocol
      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