blob: c3cd326b9644dfec5c0f0b7ea938901b621fe2e0 [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 <optional>
#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 {
namespace {
// Helper to allow setting the const array during initialization.
std::array<uint8_t, kLoadBalancerMaxServerIdLen> MakeArray(
const absl::Span<const uint8_t> data, const uint8_t length) {
std::array<uint8_t, kLoadBalancerMaxServerIdLen> array;
memcpy(array.data(), data.data(), length);
return array;
}
} // namespace
std::optional<LoadBalancerServerId> LoadBalancerServerId::Create(
const absl::Span<const uint8_t> data) {
if (data.length() == 0 || data.length() > kLoadBalancerMaxServerIdLen) {
QUIC_BUG(quic_bug_433312504_01)
<< "Attempted to create LoadBalancerServerId with length "
<< data.length();
return std::optional<LoadBalancerServerId>();
}
return LoadBalancerServerId(data);
}
std::string LoadBalancerServerId::ToString() const {
return absl::BytesToHexString(
absl::string_view(reinterpret_cast<const char*>(data_.data()), length_));
}
LoadBalancerServerId::LoadBalancerServerId(const absl::Span<const uint8_t> data)
: data_(MakeArray(data, data.length())), length_(data.length()) {}
} // namespace quic