| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef REMOTING_PROTOCOL_JINGLE_SESSION_H_ | 5 #ifndef REMOTING_PROTOCOL_JINGLE_SESSION_H_ |
| 6 #define REMOTING_PROTOCOL_JINGLE_SESSION_H_ | 6 #define REMOTING_PROTOCOL_JINGLE_SESSION_H_ |
| 7 | 7 |
| 8 #include <list> | 8 #include <list> |
| 9 #include <map> | 9 #include <map> |
| 10 #include <set> | 10 #include <set> |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 public Transport::EventHandler { | 44 public Transport::EventHandler { |
| 45 public: | 45 public: |
| 46 ~JingleSession() override; | 46 ~JingleSession() override; |
| 47 | 47 |
| 48 // Session interface. | 48 // Session interface. |
| 49 void SetEventHandler(Session::EventHandler* event_handler) override; | 49 void SetEventHandler(Session::EventHandler* event_handler) override; |
| 50 ErrorCode error() override; | 50 ErrorCode error() override; |
| 51 const std::string& jid() override; | 51 const std::string& jid() override; |
| 52 const CandidateSessionConfig* candidate_config() override; | 52 const CandidateSessionConfig* candidate_config() override; |
| 53 const SessionConfig& config() override; | 53 const SessionConfig& config() override; |
| 54 void set_config(scoped_ptr<SessionConfig> config) override; | 54 void set_config(const SessionConfig& config) override; |
| 55 StreamChannelFactory* GetTransportChannelFactory() override; | 55 StreamChannelFactory* GetTransportChannelFactory() override; |
| 56 StreamChannelFactory* GetMultiplexedChannelFactory() override; | 56 StreamChannelFactory* GetMultiplexedChannelFactory() override; |
| 57 void Close() override; | 57 void Close() override; |
| 58 | 58 |
| 59 // DatagramChannelFactory interface. | 59 // DatagramChannelFactory interface. |
| 60 void CreateChannel(const std::string& name, | 60 void CreateChannel(const std::string& name, |
| 61 const ChannelCreatedCallback& callback) override; | 61 const ChannelCreatedCallback& callback) override; |
| 62 void CancelChannelCreation(const std::string& name) override; | 62 void CancelChannelCreation(const std::string& name) override; |
| 63 | 63 |
| 64 // Transport::EventHandler interface. | 64 // Transport::EventHandler interface. |
| 65 void OnTransportIceCredentials(Transport* transport, | |
| 66 const std::string& ufrag, | |
| 67 const std::string& password) override; | |
| 68 void OnTransportCandidate(Transport* transport, | 65 void OnTransportCandidate(Transport* transport, |
| 69 const cricket::Candidate& candidate) override; | 66 const cricket::Candidate& candidate) override; |
| 70 void OnTransportRouteChange(Transport* transport, | 67 void OnTransportRouteChange(Transport* transport, |
| 71 const TransportRoute& route) override; | 68 const TransportRoute& route) override; |
| 72 void OnTransportFailed(Transport* transport) override; | 69 void OnTransportFailed(Transport* transport) override; |
| 73 void OnTransportDeleted(Transport* transport) override; | 70 void OnTransportDeleted(Transport* transport) override; |
| 74 | 71 |
| 75 private: | 72 private: |
| 76 friend class JingleSessionManager; | 73 friend class JingleSessionManager; |
| 77 | 74 |
| 78 typedef std::map<std::string, Transport*> ChannelsMap; | 75 typedef std::map<std::string, Transport*> ChannelsMap; |
| 79 typedef base::Callback<void(JingleMessageReply::ErrorType)> ReplyCallback; | 76 typedef base::Callback<void(JingleMessageReply::ErrorType)> ReplyCallback; |
| 80 | 77 |
| 81 explicit JingleSession(JingleSessionManager* session_manager); | 78 explicit JingleSession(JingleSessionManager* session_manager); |
| 82 | 79 |
| 83 // Start connection by sending session-initiate message. | 80 // Start connection by sending session-initiate message. |
| 84 void StartConnection(const std::string& peer_jid, | 81 void StartConnection(const std::string& peer_jid, |
| 85 scoped_ptr<Authenticator> authenticator, | 82 scoped_ptr<Authenticator> authenticator, |
| 86 scoped_ptr<CandidateSessionConfig> config); | 83 scoped_ptr<CandidateSessionConfig> config); |
| 87 | 84 |
| 88 // Passes transport info to a new |channel| in case it was received before the | 85 // Adds to a new channel the remote candidates received before it was created. |
| 89 // channel was created. | 86 void AddPendingRemoteCandidates(Transport* channel, const std::string& name); |
| 90 void AddPendingRemoteTransportInfo(Transport* channel); | |
| 91 | 87 |
| 92 // Called by JingleSessionManager for incoming connections. | 88 // Called by JingleSessionManager for incoming connections. |
| 93 void InitializeIncomingConnection(const JingleMessage& initiate_message, | 89 void InitializeIncomingConnection(const JingleMessage& initiate_message, |
| 94 scoped_ptr<Authenticator> authenticator); | 90 scoped_ptr<Authenticator> authenticator); |
| 95 void AcceptIncomingConnection(const JingleMessage& initiate_message); | 91 void AcceptIncomingConnection(const JingleMessage& initiate_message); |
| 96 | 92 |
| 97 // Sends |message| to the peer. The session is closed if the send fails or no | 93 // Sends |message| to the peer. The session is closed if the send fails or no |
| 98 // response is received within a reasonable time. All other responses are | 94 // response is received within a reasonable time. All other responses are |
| 99 // ignored. | 95 // ignored. |
| 100 void SendMessage(const JingleMessage& message); | 96 void SendMessage(const JingleMessage& message); |
| 101 | 97 |
| 102 // Iq response handler. | 98 // Iq response handler. |
| 103 void OnMessageResponse(JingleMessage::ActionType request_type, | 99 void OnMessageResponse(JingleMessage::ActionType request_type, |
| 104 IqRequest* request, | 100 IqRequest* request, |
| 105 const buzz::XmlElement* response); | 101 const buzz::XmlElement* response); |
| 106 | 102 |
| 107 // Creates empty |pending_transport_info_message_| and schedules timer for | |
| 108 // SentTransportInfo() to sent the message later. | |
| 109 void EnsurePendingTransportInfoMessage(); | |
| 110 | |
| 111 // Sends transport-info message with candidates from |pending_candidates_|. | 103 // Sends transport-info message with candidates from |pending_candidates_|. |
| 112 void SendTransportInfo(); | 104 void SendTransportInfo(); |
| 113 | 105 |
| 114 // Response handler for transport-info responses. Transport-info timeouts are | 106 // Response handler for transport-info responses. Transport-info timeouts are |
| 115 // ignored and don't terminate connection. | 107 // ignored and don't terminate connection. |
| 116 void OnTransportInfoResponse(IqRequest* request, | 108 void OnTransportInfoResponse(IqRequest* request, |
| 117 const buzz::XmlElement* response); | 109 const buzz::XmlElement* response); |
| 118 | 110 |
| 119 // Called by JingleSessionManager on incoming |message|. Must call | 111 // Called by JingleSessionManager on incoming |message|. Must call |
| 120 // |reply_callback| to send reply message before sending any other | 112 // |reply_callback| to send reply message before sending any other |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 159 | 151 |
| 160 JingleSessionManager* session_manager_; | 152 JingleSessionManager* session_manager_; |
| 161 std::string peer_jid_; | 153 std::string peer_jid_; |
| 162 scoped_ptr<CandidateSessionConfig> candidate_config_; | 154 scoped_ptr<CandidateSessionConfig> candidate_config_; |
| 163 Session::EventHandler* event_handler_; | 155 Session::EventHandler* event_handler_; |
| 164 | 156 |
| 165 std::string session_id_; | 157 std::string session_id_; |
| 166 State state_; | 158 State state_; |
| 167 ErrorCode error_; | 159 ErrorCode error_; |
| 168 | 160 |
| 169 scoped_ptr<SessionConfig> config_; | 161 SessionConfig config_; |
| 162 bool config_is_set_; |
| 170 | 163 |
| 171 scoped_ptr<Authenticator> authenticator_; | 164 scoped_ptr<Authenticator> authenticator_; |
| 172 | 165 |
| 173 // Pending Iq requests. Used for all messages except transport-info. | 166 // Pending Iq requests. Used for all messages except transport-info. |
| 174 std::set<IqRequest*> pending_requests_; | 167 std::set<IqRequest*> pending_requests_; |
| 175 | 168 |
| 176 // Pending transport-info requests. | 169 // Pending transport-info requests. |
| 177 std::list<IqRequest*> transport_info_requests_; | 170 std::list<IqRequest*> transport_info_requests_; |
| 178 | 171 |
| 179 ChannelsMap channels_; | 172 ChannelsMap channels_; |
| 180 scoped_ptr<PseudoTcpChannelFactory> pseudotcp_channel_factory_; | 173 scoped_ptr<PseudoTcpChannelFactory> pseudotcp_channel_factory_; |
| 181 scoped_ptr<SecureChannelFactory> secure_channel_factory_; | 174 scoped_ptr<SecureChannelFactory> secure_channel_factory_; |
| 182 scoped_ptr<ChannelMultiplexer> channel_multiplexer_; | 175 scoped_ptr<ChannelMultiplexer> channel_multiplexer_; |
| 183 | 176 |
| 184 scoped_ptr<JingleMessage> pending_transport_info_message_; | 177 base::OneShotTimer<JingleSession> transport_infos_timer_; |
| 185 base::OneShotTimer<JingleSession> transport_info_timer_; | 178 std::list<JingleMessage::NamedCandidate> pending_candidates_; |
| 186 | 179 |
| 187 // Pending remote transport info received before the local channels were | 180 // Pending remote candidates, received before the local channels were created. |
| 188 // created. | |
| 189 std::list<JingleMessage::IceCredentials> pending_remote_ice_credentials_; | |
| 190 std::list<JingleMessage::NamedCandidate> pending_remote_candidates_; | 181 std::list<JingleMessage::NamedCandidate> pending_remote_candidates_; |
| 191 | 182 |
| 192 base::WeakPtrFactory<JingleSession> weak_factory_; | 183 base::WeakPtrFactory<JingleSession> weak_factory_; |
| 193 | 184 |
| 194 DISALLOW_COPY_AND_ASSIGN(JingleSession); | 185 DISALLOW_COPY_AND_ASSIGN(JingleSession); |
| 195 }; | 186 }; |
| 196 | 187 |
| 197 } // namespace protocol | 188 } // namespace protocol |
| 198 } // namespace remoting | 189 } // namespace remoting |
| 199 | 190 |
| 200 #endif // REMOTING_PROTOCOL_JINGLE_SESSION_H_ | 191 #endif // REMOTING_PROTOCOL_JINGLE_SESSION_H_ |
| OLD | NEW |