OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 #include "remoting/protocol/pepper_session_manager.h" | 5 #include "remoting/protocol/pepper_session_manager.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "remoting/jingle_glue/iq_sender.h" | 8 #include "remoting/jingle_glue/iq_sender.h" |
9 #include "remoting/jingle_glue/jingle_info_request.h" | 9 #include "remoting/jingle_glue/jingle_info_request.h" |
10 #include "remoting/jingle_glue/signal_strategy.h" | 10 #include "remoting/jingle_glue/signal_strategy.h" |
| 11 #include "remoting/protocol/authenticator.h" |
11 #include "remoting/protocol/jingle_messages.h" | 12 #include "remoting/protocol/jingle_messages.h" |
12 #include "remoting/protocol/pepper_session.h" | 13 #include "remoting/protocol/pepper_session.h" |
13 #include "third_party/libjingle/source/talk/base/socketaddress.h" | 14 #include "third_party/libjingle/source/talk/base/socketaddress.h" |
14 #include "third_party/libjingle/source/talk/xmllite/xmlelement.h" | 15 #include "third_party/libjingle/source/talk/xmllite/xmlelement.h" |
15 | 16 |
16 using buzz::QName; | 17 using buzz::QName; |
17 | 18 |
18 namespace remoting { | 19 namespace remoting { |
19 namespace protocol { | 20 namespace protocol { |
20 | 21 |
21 PepperSessionManager::PepperSessionManager(pp::Instance* pp_instance) | 22 PepperSessionManager::PepperSessionManager(pp::Instance* pp_instance) |
22 : pp_instance_(pp_instance), | 23 : pp_instance_(pp_instance), |
23 signal_strategy_(NULL), | 24 signal_strategy_(NULL), |
24 listener_(NULL), | 25 listener_(NULL), |
25 allow_nat_traversal_(false) { | 26 allow_nat_traversal_(false) { |
26 } | 27 } |
27 | 28 |
28 PepperSessionManager::~PepperSessionManager() { | 29 PepperSessionManager::~PepperSessionManager() { |
29 Close(); | 30 Close(); |
30 } | 31 } |
31 | 32 |
32 void PepperSessionManager::Init( | 33 void PepperSessionManager::Init( |
33 const std::string& local_jid, | 34 const std::string& local_jid, |
34 SignalStrategy* signal_strategy, | 35 SignalStrategy* signal_strategy, |
35 SessionManager::Listener* listener, | 36 SessionManager::Listener* listener, |
36 crypto::RSAPrivateKey* private_key, | |
37 const std::string& certificate, | |
38 bool allow_nat_traversal) { | 37 bool allow_nat_traversal) { |
39 listener_ = listener; | 38 listener_ = listener; |
40 local_jid_ = local_jid; | 39 local_jid_ = local_jid; |
41 signal_strategy_ = signal_strategy; | 40 signal_strategy_ = signal_strategy; |
42 iq_sender_.reset(new IqSender(signal_strategy_)); | 41 iq_sender_.reset(new IqSender(signal_strategy_)); |
43 private_key_.reset(private_key); | |
44 certificate_ = certificate; | |
45 allow_nat_traversal_ = allow_nat_traversal; | 42 allow_nat_traversal_ = allow_nat_traversal; |
46 | 43 |
47 signal_strategy_->AddListener(this); | 44 signal_strategy_->AddListener(this); |
48 | 45 |
49 // If NAT traversal is enabled then we need to request STUN/Relay info. | 46 // If NAT traversal is enabled then we need to request STUN/Relay info. |
50 if (allow_nat_traversal) { | 47 if (allow_nat_traversal) { |
51 jingle_info_request_.reset(new JingleInfoRequest(signal_strategy_)); | 48 jingle_info_request_.reset(new JingleInfoRequest(signal_strategy_)); |
52 jingle_info_request_->Send(base::Bind(&PepperSessionManager::OnJingleInfo, | 49 jingle_info_request_->Send(base::Bind(&PepperSessionManager::OnJingleInfo, |
53 base::Unretained(this))); | 50 base::Unretained(this))); |
54 } else { | 51 } else { |
(...skipping 14 matching lines...) Expand all Loading... |
69 transport_config_.relay_token = relay_token; | 66 transport_config_.relay_token = relay_token; |
70 VLOG(1) << "STUN server: " << transport_config_.stun_server | 67 VLOG(1) << "STUN server: " << transport_config_.stun_server |
71 << " Relay server: " << transport_config_.relay_server | 68 << " Relay server: " << transport_config_.relay_server |
72 << " Relay token: " << transport_config_.relay_token; | 69 << " Relay token: " << transport_config_.relay_token; |
73 | 70 |
74 listener_->OnSessionManagerInitialized(); | 71 listener_->OnSessionManagerInitialized(); |
75 } | 72 } |
76 | 73 |
77 Session* PepperSessionManager::Connect( | 74 Session* PepperSessionManager::Connect( |
78 const std::string& host_jid, | 75 const std::string& host_jid, |
79 const std::string& host_public_key, | 76 Authenticator* authenticator, |
80 const std::string& client_token, | |
81 CandidateSessionConfig* config, | 77 CandidateSessionConfig* config, |
82 const Session::StateChangeCallback& state_change_callback) { | 78 const Session::StateChangeCallback& state_change_callback) { |
83 PepperSession* session = new PepperSession(this); | 79 PepperSession* session = new PepperSession(this); |
84 session->StartConnection(host_jid, host_public_key, client_token, | 80 session->StartConnection(host_jid, authenticator, config, |
85 config, state_change_callback); | 81 state_change_callback); |
86 sessions_[session->session_id_] = session; | 82 sessions_[session->session_id_] = session; |
87 return session; | 83 return session; |
88 } | 84 } |
89 | 85 |
90 void PepperSessionManager::Close() { | 86 void PepperSessionManager::Close() { |
91 DCHECK(CalledOnValidThread()); | 87 DCHECK(CalledOnValidThread()); |
92 | 88 |
93 // Close() can be called only after all sessions are destroyed. | 89 // Close() can be called only after all sessions are destroyed. |
94 DCHECK(sessions_.empty()); | 90 DCHECK(sessions_.empty()); |
95 | 91 |
96 listener_ = NULL; | 92 listener_ = NULL; |
97 jingle_info_request_.reset(); | 93 jingle_info_request_.reset(); |
98 | 94 |
99 signal_strategy_->RemoveListener(this); | 95 signal_strategy_->RemoveListener(this); |
100 } | 96 } |
101 | 97 |
| 98 void PepperSessionManager::set_authenticator_factory( |
| 99 AuthenticatorFactory* authenticator_factory) { |
| 100 DCHECK(CalledOnValidThread()); |
| 101 authenticator_factory_.reset(authenticator_factory); |
| 102 } |
| 103 |
102 bool PepperSessionManager::OnIncomingStanza(const buzz::XmlElement* stanza) { | 104 bool PepperSessionManager::OnIncomingStanza(const buzz::XmlElement* stanza) { |
103 if (!JingleMessage::IsJingleMessage(stanza)) | 105 if (!JingleMessage::IsJingleMessage(stanza)) |
104 return false; | 106 return false; |
105 | 107 |
106 JingleMessage message; | 108 JingleMessage message; |
107 std::string error; | 109 std::string error; |
108 if (!message.ParseXml(stanza, &error)) { | 110 if (!message.ParseXml(stanza, &error)) { |
109 SendReply(stanza, JingleMessageReply(JingleMessageReply::BAD_REQUEST)); | 111 SendReply(stanza, JingleMessageReply(JingleMessageReply::BAD_REQUEST)); |
110 return true; | 112 return true; |
111 } | 113 } |
(...skipping 22 matching lines...) Expand all Loading... |
134 buzz::XmlElement* stanza = reply.ToXml(original_stanza); | 136 buzz::XmlElement* stanza = reply.ToXml(original_stanza); |
135 signal_strategy_->SendStanza(stanza); | 137 signal_strategy_->SendStanza(stanza); |
136 } | 138 } |
137 | 139 |
138 void PepperSessionManager::SessionDestroyed(PepperSession* session) { | 140 void PepperSessionManager::SessionDestroyed(PepperSession* session) { |
139 sessions_.erase(session->session_id_); | 141 sessions_.erase(session->session_id_); |
140 } | 142 } |
141 | 143 |
142 } // namespace protocol | 144 } // namespace protocol |
143 } // namespace remoting | 145 } // namespace remoting |
OLD | NEW |