blob: 12c7b0dfa7d8837ddf8f21bf0b2a87b82f4cbde1 [file] [log] [blame]
// 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.
#include "net/quic/quic_session_attempt_request.h"
#include <optional>
#include <set>
#include <string>
#include <utility>
#include "base/check.h"
#include "net/base/completion_once_callback.h"
#include "net/base/net_error_details.h"
#include "net/base/net_errors.h"
#include "net/quic/quic_session_attempt_manager.h"
namespace net {
QuicSessionAttemptRequest::QuicSessionAttemptRequest(
QuicSessionAttemptManager* manager,
QuicSessionAliasKey key)
: manager_(manager), key_(std::move(key)) {}
QuicSessionAttemptRequest::~QuicSessionAttemptRequest() {
if (manager_ && callback_) {
manager_->RemoveRequest(this);
}
}
int QuicSessionAttemptRequest::RequestSession(
QuicEndpoint endpoint,
int cert_verify_flags,
base::TimeTicks dns_resolution_start_time,
base::TimeTicks dns_resolution_end_time,
bool use_dns_aliases,
std::set<std::string> dns_aliases,
MultiplexedSessionCreationInitiator session_creation_initiator,
std::optional<ConnectionManagementConfig> connection_management_config,
const NetLogWithSource& net_log,
CompletionOnceCallback callback) {
int rv = manager_->RequestSession(
this, std::move(endpoint), cert_verify_flags, dns_resolution_start_time,
dns_resolution_end_time, use_dns_aliases, std::move(dns_aliases),
session_creation_initiator, std::move(connection_management_config),
net_log);
if (rv == ERR_IO_PENDING) {
CHECK(!completed_);
callback_ = std::move(callback);
} else {
CHECK(completed_);
}
return rv;
}
void QuicSessionAttemptRequest::Complete(int rv,
QuicChromiumClientSession* session,
NetErrorDetails error_details) {
CHECK(!completed_);
completed_ = true;
session_ = session;
error_details_ = std::move(error_details);
manager_ = nullptr;
if (callback_) {
std::move(callback_).Run(rv);
}
}
} // namespace net