OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2017 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 #include "chrome/browser/media/router/discovery/media_sink_internal.h" | |
6 | |
7 #include <algorithm> | |
8 #include "base/logging.h" | |
9 #include "net/base/ip_address.h" | |
10 | |
11 namespace { | |
12 bool IsValidSinkIdChar(char ch) { | |
mark a. foltz
2017/02/28 00:05:29
I would just simplify this to base::IsStringAscii
zhaobin
2017/02/28 18:46:28
Done.
| |
13 return (('A' <= ch) && (ch <= 'Z')) || (('a' <= ch) && (ch <= 'z')) || | |
zhaobin
2017/02/27 21:45:15
This check passes for our cloud view devices. Not
| |
14 (('0' <= ch) && (ch <= '9')) || (ch == '+') || (ch == '/') || | |
15 (ch == '-') || (ch == '_') || (ch == '.'); | |
16 } | |
17 } | |
18 | |
19 namespace media_router { | |
20 | |
21 MediaSinkInternal::MediaSinkInternal(const MediaSink& sink) : sink_(sink) {} | |
22 | |
23 MediaSinkInternal::MediaSinkInternal(const MediaSink& sink, | |
24 const DialSinkExtraData& dial_data) | |
25 : sink_(sink), dial_data_(dial_data) {} | |
26 | |
27 MediaSinkInternal::MediaSinkInternal(const MediaSink& sink, | |
28 const CastSinkExtraData& cast_data) | |
29 : sink_(sink), cast_data_(cast_data) {} | |
30 | |
31 MediaSinkInternal::MediaSinkInternal() = default; | |
32 | |
33 MediaSinkInternal::MediaSinkInternal(const MediaSinkInternal& other) = default; | |
34 | |
35 MediaSinkInternal::~MediaSinkInternal() = default; | |
36 | |
37 MediaSinkInternal& MediaSinkInternal::operator=( | |
38 const MediaSinkInternal& other) = default; | |
39 | |
40 void MediaSinkInternal::set_sink(const MediaSink& sink) { | |
41 sink_ = sink; | |
42 } | |
43 | |
44 void MediaSinkInternal::set_dial_data(const DialSinkExtraData& dial_data) { | |
45 DCHECK(dial_data_ || !cast_data_); | |
46 dial_data_ = dial_data; | |
47 } | |
48 | |
49 const DialSinkExtraData& MediaSinkInternal::dial_data() const { | |
50 DCHECK(is_dial_sink()); | |
51 return *dial_data_; | |
52 } | |
53 | |
54 void MediaSinkInternal::set_cast_data(const CastSinkExtraData& cast_data) { | |
55 DCHECK(cast_data_ || !dial_data_); | |
56 cast_data_ = cast_data; | |
57 } | |
58 | |
59 const CastSinkExtraData& MediaSinkInternal::cast_data() const { | |
60 DCHECK(is_cast_sink()); | |
61 return *cast_data_; | |
62 } | |
63 | |
64 // static | |
65 bool MediaSinkInternal::IsValidSinkId(const std::string& sink_id) { | |
66 if (sink_id.empty()) | |
67 return false; | |
68 | |
69 bool is_valid = std::find_if(sink_id.begin(), sink_id.end(), [](char c) { | |
70 return !IsValidSinkIdChar(c); | |
71 }) == sink_id.end(); | |
72 | |
73 if (!is_valid) | |
74 DLOG(WARNING) << "Invalid [sink_id]: " << sink_id; | |
75 | |
76 return is_valid; | |
77 } | |
78 | |
79 bool MediaSinkInternal::IsValidIPAddress(const std::string& ip_address) { | |
80 net::IPAddress address; | |
81 if (!address.AssignFromIPLiteral(ip_address)) | |
82 return false; | |
83 | |
84 return address.IsValid(); | |
85 } | |
86 | |
87 DialSinkExtraData::DialSinkExtraData() = default; | |
88 DialSinkExtraData::DialSinkExtraData(const DialSinkExtraData& other) = default; | |
89 DialSinkExtraData::~DialSinkExtraData() = default; | |
90 | |
91 CastSinkExtraData::CastSinkExtraData() = default; | |
92 CastSinkExtraData::CastSinkExtraData(const CastSinkExtraData& other) = default; | |
93 CastSinkExtraData::~CastSinkExtraData() = default; | |
94 | |
95 } // namespace media_router | |
OLD | NEW |