blob: 9a4685cee597a6b6d56938d1fc798d2054351a56 [file] [log] [blame]
// Copyright (c) 2022 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 "quiche/quic/load_balancer/load_balancer_server_id.h"
#include <array>
#include <cstdint>
#include <cstring>
#include <string>
#include "absl/strings/escaping.h"
#include "absl/strings/string_view.h"
#include "absl/types/span.h"
#include "quiche/quic/platform/api/quic_bug_tracker.h"
namespace quic {
LoadBalancerServerId::LoadBalancerServerId(absl::string_view data)
: LoadBalancerServerId(
absl::MakeSpan(reinterpret_cast<const uint8_t*>(data.data()),
data.length()),
absl::Span<const uint8_t>()) {}
LoadBalancerServerId::LoadBalancerServerId(absl::Span<const uint8_t> data)
: LoadBalancerServerId(data, absl::Span<const uint8_t>()) {}
LoadBalancerServerId::LoadBalancerServerId(absl::Span<const uint8_t> data1,
absl::Span<const uint8_t> data2)
: length_(data1.length() + data2.length()) {
if (length_ == 0 || length_ > kLoadBalancerMaxServerIdLen) {
QUIC_BUG(quic_bug_433312504_02)
<< "Attempted to create LoadBalancerServerId with length "
<< static_cast<int>(length_);
length_ = 0;
return;
}
memcpy(data_.data(), data1.data(), data1.length());
if (data2.empty()) {
return;
}
memcpy(data_.data() + data1.length(), data2.data(), data2.length());
}
std::string LoadBalancerServerId::ToString() const {
return absl::BytesToHexString(
absl::string_view(reinterpret_cast<const char*>(data_.data()), length_));
}
} // namespace quic