// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef NET_QUIC_QUIC_ENDPOINT_H_
#define NET_QUIC_QUIC_ENDPOINT_H_

#include "base/values.h"
#include "net/base/connection_endpoint_metadata.h"
#include "net/base/ip_endpoint.h"
#include "net/base/net_export.h"
#include "net/third_party/quiche/src/quiche/quic/core/quic_versions.h"

namespace net {

// Represents a single QUIC endpoint and the information necessary to attempt
// a QUIC session.
struct NET_EXPORT_PRIVATE QuicEndpoint {
  QuicEndpoint(quic::ParsedQuicVersion quic_version,
               IPEndPoint ip_endpoint,
               ConnectionEndpointMetadata metadata);

  QuicEndpoint(QuicEndpoint&&) = default;
  QuicEndpoint& operator=(QuicEndpoint&&) = default;
  QuicEndpoint(const QuicEndpoint&) = default;
  QuicEndpoint& operator=(const QuicEndpoint&) = default;

  ~QuicEndpoint();

  quic::ParsedQuicVersion quic_version = quic::ParsedQuicVersion::Unsupported();
  IPEndPoint ip_endpoint;
  ConnectionEndpointMetadata metadata;

  base::DictValue ToValue() const;
};

}  // namespace net

#endif  // NET_QUIC_QUIC_ENDPOINT_H_
