blob: d9c1fd8d901b6569f0cb31fbe16e47cf2b476113 [file] [log] [blame]
// Copyright (c) 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "net/third_party/quic/platform/impl/quic_url_impl.h"
#include "net/third_party/quic/platform/api/quic_text_utils.h"
using std::string;
namespace quic {
QuicUrlImpl::QuicUrlImpl(QuicStringPiece url) : url_(url) {}
QuicUrlImpl::QuicUrlImpl(QuicStringPiece url, QuicStringPiece default_scheme)
: url_(url) {
if (url_.has_scheme()) {
return;
}
string buffer = default_scheme.as_string() + "://" + url.as_string();
url_ = GURL(buffer);
}
QuicUrlImpl::QuicUrlImpl(const QuicUrlImpl& url) : url_(url.url()) {}
string QuicUrlImpl::ToStringIfValid() const {
if (IsValid()) {
return url_.spec();
}
return "";
}
bool QuicUrlImpl::IsValid() const {
if (!url_.is_valid() || !url_.has_scheme()) {
return false;
}
if (url_.has_host() && url_.host().length() > kMaxHostNameLength) {
return false;
}
return true;
}
string QuicUrlImpl::HostPort() const {
if (!IsValid() || !url_.has_host()) {
return "";
}
string buffer = url_.host();
int port = url_.IntPort();
string scheme = url_.scheme();
if (port == url::PORT_UNSPECIFIED ||
(url_.IsStandard() &&
port == url::DefaultPortForScheme(scheme.c_str(), scheme.length()))) {
return buffer;
}
buffer = buffer + ":" + std::to_string(port);
return buffer;
}
string QuicUrlImpl::PathParamsQuery() const {
if (!IsValid() || !url_.has_path()) {
return "/";
}
return url_.PathForRequest();
}
string QuicUrlImpl::scheme() const {
if (!IsValid()) {
return "";
}
return url_.scheme();
}
string QuicUrlImpl::host() const {
if (!IsValid()) {
return "";
}
return url_.HostNoBrackets();
}
string QuicUrlImpl::path() const {
if (!IsValid()) {
return "";
}
return url_.path();
}
uint16_t QuicUrlImpl::port() const {
if (!IsValid()) {
return 0;
}
int port = url_.EffectiveIntPort();
if (port == url::PORT_UNSPECIFIED) {
return 0;
}
return port;
}
} // namespace quic