// Copyright (c) 2012 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. #ifndef REMOTING_PROTOCOL_JINGLE_SESSION_MANAGER_H_ #define REMOTING_PROTOCOL_JINGLE_SESSION_MANAGER_H_ #include #include #include "base/memory/raw_ptr.h" #include "base/sequence_checker.h" #include "remoting/protocol/jingle_messages.h" #include "remoting/protocol/session_manager.h" #include "remoting/signaling/signal_strategy.h" namespace jingle_xmpp { class XmlElement; } // namespace jingle_xmpp namespace remoting { class IqSender; namespace protocol { class JingleSession; // JingleSessionManager and JingleSession implement the subset of the // Jingle protocol used in Chromoting. JingleSessionManager provides // the protocol::SessionManager interface for accepting incoming and // creating outgoing sessions. class JingleSessionManager : public SessionManager, public SignalStrategy::Listener { public: explicit JingleSessionManager(SignalStrategy* signal_strategy); JingleSessionManager(const JingleSessionManager&) = delete; JingleSessionManager& operator=(const JingleSessionManager&) = delete; ~JingleSessionManager() override; // SessionManager interface. void AcceptIncoming( const IncomingSessionCallback& incoming_session_callback) override; void set_protocol_config( std::unique_ptr config) override; std::unique_ptr Connect( const SignalingAddress& peer_address, std::unique_ptr authenticator) override; void set_authenticator_factory( std::unique_ptr authenticator_factory) override; private: friend class JingleSession; // SignalStrategy::Listener interface. void OnSignalStrategyStateChange(SignalStrategy::State state) override; bool OnSignalStrategyIncomingStanza(const jingle_xmpp::XmlElement* stanza) override; typedef std::map SessionsMap; IqSender* iq_sender() { return iq_sender_.get(); } void SendReply(std::unique_ptr original_stanza, JingleMessageReply::ErrorType error); // Called by JingleSession when it is being destroyed. void SessionDestroyed(JingleSession* session); raw_ptr signal_strategy_ = nullptr; IncomingSessionCallback incoming_session_callback_; std::unique_ptr protocol_config_; std::unique_ptr authenticator_factory_; std::unique_ptr iq_sender_; SessionsMap sessions_; SEQUENCE_CHECKER(sequence_checker_); }; } // namespace protocol } // namespace remoting #endif // REMOTING_PROTOCOL_JINGLE_SESSION_MANAGER_H_