1 // Copyright 2015 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.
5 #include "remoting/protocol/port_range.h"
10 #include "base/strings/string_number_conversions.h"
11 #include "base/strings/string_util.h"
15 bool PortRange::Parse(const std::string
& port_range
, PortRange
* result
) {
18 if (port_range
.empty()) {
24 size_t separator_index
= port_range
.find('-');
25 if (separator_index
== std::string::npos
)
28 std::string min_port_string
, max_port_string
;
29 base::TrimWhitespaceASCII(port_range
.substr(0, separator_index
),
30 base::TRIM_ALL
, &min_port_string
);
31 base::TrimWhitespaceASCII(port_range
.substr(separator_index
+ 1),
32 base::TRIM_ALL
, &max_port_string
);
34 unsigned min_port
, max_port
;
35 if (!base::StringToUint(min_port_string
, &min_port
) ||
36 !base::StringToUint(max_port_string
, &max_port
)) {
40 if (min_port
== 0 || min_port
> max_port
|| max_port
> USHRT_MAX
)
43 result
->min_port
= static_cast<uint16
>(min_port
);
44 result
->max_port
= static_cast<uint16
>(max_port
);
48 std::ostream
& operator<<(std::ostream
& os
, const PortRange
& port_range
) {
49 if (port_range
.is_null()) {
50 os
<< "<no port range specified>";
52 os
<< "[" << port_range
.min_port
<< ", " << port_range
.max_port
<< "]";
57 } // namespace remoting