OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "extensions/browser/api/cast_channel/cast_socket.h" | 5 #include "extensions/browser/api/cast_channel/cast_socket.h" |
6 | 6 |
7 #include <stdlib.h> | 7 #include <stdlib.h> |
8 #include <string.h> | 8 #include <string.h> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
82 | 82 |
83 CastSocket::CastSocket(const std::string& owner_extension_id) | 83 CastSocket::CastSocket(const std::string& owner_extension_id) |
84 : ApiResource(owner_extension_id) { | 84 : ApiResource(owner_extension_id) { |
85 } | 85 } |
86 | 86 |
87 CastSocketImpl::CastSocketImpl(const std::string& owner_extension_id, | 87 CastSocketImpl::CastSocketImpl(const std::string& owner_extension_id, |
88 const net::IPEndPoint& ip_endpoint, | 88 const net::IPEndPoint& ip_endpoint, |
89 ChannelAuthType channel_auth, | 89 ChannelAuthType channel_auth, |
90 net::NetLog* net_log, | 90 net::NetLog* net_log, |
91 const base::TimeDelta& timeout, | 91 const base::TimeDelta& timeout, |
92 const scoped_refptr<Logger>& logger) | 92 const scoped_refptr<Logger>& logger, |
| 93 long device_capabilities) |
93 : CastSocket(owner_extension_id), | 94 : CastSocket(owner_extension_id), |
94 auth_delegate_(this), | 95 auth_delegate_(this), |
95 owner_extension_id_(owner_extension_id), | 96 owner_extension_id_(owner_extension_id), |
96 channel_id_(0), | 97 channel_id_(0), |
97 ip_endpoint_(ip_endpoint), | 98 ip_endpoint_(ip_endpoint), |
98 channel_auth_(channel_auth), | 99 channel_auth_(channel_auth), |
99 net_log_(net_log), | 100 net_log_(net_log), |
100 logger_(logger), | 101 logger_(logger), |
101 connect_timeout_(timeout), | 102 connect_timeout_(timeout), |
102 connect_timeout_timer_(new base::OneShotTimer<CastSocketImpl>), | 103 connect_timeout_timer_(new base::OneShotTimer<CastSocketImpl>), |
103 is_canceled_(false), | 104 is_canceled_(false), |
| 105 device_capabilities_(device_capabilities), |
104 connect_state_(proto::CONN_STATE_NONE), | 106 connect_state_(proto::CONN_STATE_NONE), |
105 error_state_(CHANNEL_ERROR_NONE), | 107 error_state_(CHANNEL_ERROR_NONE), |
106 ready_state_(READY_STATE_NONE) { | 108 ready_state_(READY_STATE_NONE) { |
107 DCHECK(net_log_); | 109 DCHECK(net_log_); |
108 DCHECK(channel_auth_ == CHANNEL_AUTH_TYPE_SSL || | 110 DCHECK(channel_auth_ == CHANNEL_AUTH_TYPE_SSL || |
109 channel_auth_ == CHANNEL_AUTH_TYPE_SSL_VERIFIED); | 111 channel_auth_ == CHANNEL_AUTH_TYPE_SSL_VERIFIED); |
110 net_log_source_.type = net::NetLog::SOURCE_SOCKET; | 112 net_log_source_.type = net::NetLog::SOURCE_SOCKET; |
111 net_log_source_.id = net_log_->NextID(); | 113 net_log_source_.id = net_log_->NextID(); |
112 } | 114 } |
113 | 115 |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
209 ssl_info.cert->os_cert_handle(), cert); | 211 ssl_info.cert->os_cert_handle(), cert); |
210 if (result) { | 212 if (result) { |
211 VLOG_WITH_CONNECTION(1) << "Successfully extracted peer certificate"; | 213 VLOG_WITH_CONNECTION(1) << "Successfully extracted peer certificate"; |
212 } | 214 } |
213 | 215 |
214 logger_->LogSocketEventWithRv( | 216 logger_->LogSocketEventWithRv( |
215 channel_id_, proto::DER_ENCODED_CERT_OBTAIN, result ? 1 : 0); | 217 channel_id_, proto::DER_ENCODED_CERT_OBTAIN, result ? 1 : 0); |
216 return result; | 218 return result; |
217 } | 219 } |
218 | 220 |
| 221 bool CastSocketImpl::VerifyChannelPolicy(const AuthResult& result) { |
| 222 if ((device_capabilities_ & CastDeviceCapability::VIDEO_OUT) != 0 && |
| 223 (result.channel_policies & AuthResult::POLICY_AUDIO_ONLY) != 0) { |
| 224 LOG(ERROR) << "Audio only policy enforced"; |
| 225 logger_->LogSocketEventWithDetails( |
| 226 channel_id_, proto::CHANNEL_POLICY_ENFORCED, std::string()); |
| 227 return false; |
| 228 } |
| 229 return true; |
| 230 } |
| 231 |
219 bool CastSocketImpl::VerifyChallengeReply() { | 232 bool CastSocketImpl::VerifyChallengeReply() { |
220 AuthResult result = AuthenticateChallengeReply(*challenge_reply_, peer_cert_); | 233 AuthResult result = AuthenticateChallengeReply(*challenge_reply_, peer_cert_); |
221 if (result.success()) { | 234 if (result.success()) { |
222 VLOG(1) << result.error_message; | 235 VLOG(1) << result.error_message; |
| 236 if (!VerifyChannelPolicy(result)) { |
| 237 return false; |
| 238 } |
223 } | 239 } |
224 logger_->LogSocketChallengeReplyEvent(channel_id_, result); | 240 logger_->LogSocketChallengeReplyEvent(channel_id_, result); |
225 return result.success(); | 241 return result.success(); |
226 } | 242 } |
227 | 243 |
228 void CastSocketImpl::SetTransportForTesting( | 244 void CastSocketImpl::SetTransportForTesting( |
229 scoped_ptr<CastTransport> transport) { | 245 scoped_ptr<CastTransport> transport) { |
230 transport_ = transport.Pass(); | 246 transport_ = transport.Pass(); |
231 } | 247 } |
232 | 248 |
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
560 void CastSocketImpl::SetErrorState(ChannelError error_state) { | 576 void CastSocketImpl::SetErrorState(ChannelError error_state) { |
561 VLOG_WITH_CONNECTION(1) << "SetErrorState " << error_state; | 577 VLOG_WITH_CONNECTION(1) << "SetErrorState " << error_state; |
562 DCHECK_EQ(CHANNEL_ERROR_NONE, error_state_); | 578 DCHECK_EQ(CHANNEL_ERROR_NONE, error_state_); |
563 error_state_ = error_state; | 579 error_state_ = error_state; |
564 logger_->LogSocketErrorState(channel_id_, ErrorStateToProto(error_state_)); | 580 logger_->LogSocketErrorState(channel_id_, ErrorStateToProto(error_state_)); |
565 } | 581 } |
566 } // namespace cast_channel | 582 } // namespace cast_channel |
567 } // namespace core_api | 583 } // namespace core_api |
568 } // namespace extensions | 584 } // namespace extensions |
569 #undef VLOG_WITH_CONNECTION | 585 #undef VLOG_WITH_CONNECTION |
OLD | NEW |