Return more specific transfer failure status.

PiperOrigin-RevId: 887009931
This commit is contained in:
Francis Tsui
2026-03-20 15:48:19 -07:00
committed by Copybara-Service
parent 92e901e466
commit 8946f20883
5 changed files with 45 additions and 33 deletions
+4 -3
View File
@@ -2443,7 +2443,7 @@ void NearbySharingServiceImpl::OnIncomingSessionFrameRead(
if (is_timeout) {
LOG(WARNING) << __func__ << ": Timed out reading frame from target: "
<< share_target_id;
session->Abort(TransferMetadata::Status::kFailed);
session->Abort(TransferMetadata::Status::kTimedOut);
return;
}
if (!frame.has_value()) {
@@ -2609,7 +2609,8 @@ void NearbySharingServiceImpl::OnReceivedIntroduction(
}
void NearbySharingServiceImpl::OnReceiveConnectionResponse(
int64_t share_target_id, std::optional<ConnectionResponseFrame> frame) {
int64_t share_target_id, bool is_timeout,
std::optional<ConnectionResponseFrame> frame) {
OutgoingShareSession* session =
outgoing_targets_manager_.GetOutgoingShareSession(share_target_id);
if (!session || !session->IsConnected()) {
@@ -2620,7 +2621,7 @@ void NearbySharingServiceImpl::OnReceiveConnectionResponse(
}
std::optional<TransferMetadata::Status> status =
session->HandleConnectionResponse(std::move(frame));
session->HandleConnectionResponse(is_timeout, std::move(frame));
if (status.has_value()) {
session->Abort(*status);
return;
+1 -1
View File
@@ -327,7 +327,7 @@ class NearbySharingServiceImpl
IncomingShareSession& session,
const nearby::sharing::service::proto::IntroductionFrame& frame);
void OnReceiveConnectionResponse(
int64_t share_target_id,
int64_t share_target_id, bool is_timeout,
std::optional<nearby::sharing::service::proto::ConnectionResponseFrame>
frame);
void OnStorageCheckCompleted(IncomingShareSession& session);
+7 -5
View File
@@ -316,7 +316,8 @@ bool OutgoingShareSession::FillIntroductionFrame(
}
bool OutgoingShareSession::AcceptTransfer(
std::function<void(std::optional<ConnectionResponseFrame>)>
std::function<void(bool is_timeout,
std::optional<ConnectionResponseFrame>)>
response_callback) {
if (!IsConnected()) {
LOG(WARNING) << "Accept invoked for unconnected share target";
@@ -339,10 +340,10 @@ bool OutgoingShareSession::AcceptTransfer(
[callback = std::move(response_callback)](bool is_timeout,
std::optional<V1Frame> frame) {
if (!frame.has_value()) {
callback(std::nullopt);
callback(is_timeout, std::nullopt);
return;
}
callback(frame->connection_response());
callback(is_timeout, frame->connection_response());
},
kReadResponseFrameTimeout);
return true;
@@ -429,14 +430,15 @@ bool OutgoingShareSession::SendIntroduction(
std::optional<TransferMetadata::Status>
OutgoingShareSession::HandleConnectionResponse(
std::optional<ConnectionResponseFrame> response) {
bool is_timeout, std::optional<ConnectionResponseFrame> response) {
// Stop accept timer.
mutual_acceptance_timeout_.reset();
if (!response.has_value()) {
LOG(WARNING)
<< "Failed to read a response from the remote device. Disconnecting.";
return TransferMetadata::Status::kFailed;
return is_timeout ? TransferMetadata::Status::kTimedOut
: TransferMetadata::Status::kFailed;
}
VLOG(1) << "Successfully read the connection response frame.";
+4 -2
View File
@@ -80,14 +80,16 @@ class OutgoingShareSession : public ShareSession {
// ConnectionResponseFrame.
bool AcceptTransfer(
std::function<
void(std::optional<
nearby::sharing::service::proto::ConnectionResponseFrame>)>
void(bool is_timeout,
std::optional<
nearby::sharing::service::proto::ConnectionResponseFrame>)>
response_callback);
// Process the ConnectionResponseFrame.
// On success, returns std::nullopt.
// On failure, returns the status if the connection should be aborted.
std::optional<TransferMetadata::Status> HandleConnectionResponse(
bool is_timeout,
std::optional<nearby::sharing::service::proto::ConnectionResponseFrame>
response);
+29 -22
View File
@@ -45,7 +45,6 @@
#include "sharing/nearby_connection_impl.h"
#include "sharing/nearby_connections_manager.h"
#include "sharing/nearby_connections_types.h"
#include "sharing/paired_key_verification_runner.h"
#include "sharing/proto/analytics/nearby_sharing_log.pb.h"
#include "sharing/proto/analytics/nearby_sharing_log.proto.static_reflection.h"
#include "sharing/proto/wire_format.pb.h"
@@ -61,7 +60,6 @@ namespace {
using ::location::nearby::proto::sharing::EstablishConnectionStatus;
using ::location::nearby::proto::sharing::EventCategory;
using ::location::nearby::proto::sharing::EventType;
using ::location::nearby::proto::sharing::OSType;
using ::nearby::analytics::HasCategory;
using ::nearby::analytics::HasEventType;
using ::nearby::sharing::analytics::proto::SharingLog;
@@ -507,7 +505,7 @@ TEST_F(OutgoingShareSessionTest, SendIntroductionTimeoutCancelled) {
Call(_, HasStatus(TransferMetadata::Status::kInProgress)));
std::optional<TransferMetadata::Status> status =
session_.HandleConnectionResponse(response);
session_.HandleConnectionResponse(/*is_timeout=*/false, response);
EXPECT_THAT(status.has_value(), IsFalse());
fake_clock_.FastForward(absl::Seconds(60));
@@ -517,9 +515,9 @@ TEST_F(OutgoingShareSessionTest, SendIntroductionTimeoutCancelled) {
}
TEST_F(OutgoingShareSessionTest, AcceptTransferNotConnected) {
EXPECT_THAT(
session_.AcceptTransfer([](std::optional<ConnectionResponseFrame>) {}),
IsFalse());
EXPECT_THAT(session_.AcceptTransfer(
[](bool, std::optional<ConnectionResponseFrame>) {}),
IsFalse());
}
TEST_F(OutgoingShareSessionTest, AcceptTransferNotReady) {
@@ -527,9 +525,9 @@ TEST_F(OutgoingShareSessionTest, AcceptTransferNotReady) {
session_.set_session_id(1234);
ConnectionSuccess(&connection);
EXPECT_THAT(
session_.AcceptTransfer([](std::optional<ConnectionResponseFrame>) {}),
IsFalse());
EXPECT_THAT(session_.AcceptTransfer(
[](bool, std::optional<ConnectionResponseFrame>) {}),
IsFalse());
}
TEST_F(OutgoingShareSessionTest, AcceptTransferSuccess) {
@@ -553,12 +551,12 @@ TEST_F(OutgoingShareSessionTest, AcceptTransferSuccess) {
Call(_, HasStatus(TransferMetadata::Status::kAwaitingRemoteAcceptance)));
bool connection_response_received = false;
EXPECT_THAT(
session_.AcceptTransfer([&connection_response_received](
std::optional<ConnectionResponseFrame>) {
connection_response_received = true;
}),
IsTrue());
EXPECT_THAT(session_.AcceptTransfer(
[&connection_response_received](
bool, std::optional<ConnectionResponseFrame>) {
connection_response_received = true;
}),
IsTrue());
// Send response frame
nearby::sharing::service::proto::Frame frame =
@@ -575,19 +573,28 @@ TEST_F(OutgoingShareSessionTest, AcceptTransferSuccess) {
EXPECT_THAT(connection_response_received, IsTrue());
}
TEST_F(OutgoingShareSessionTest, HandleConnectionResponseEmptyResponse) {
TEST_F(OutgoingShareSessionTest, HandleConnectionResponseEmptyResponseFailed) {
std::optional<TransferMetadata::Status> status =
session_.HandleConnectionResponse(std::nullopt);
session_.HandleConnectionResponse(/*is_timeout=*/false, std::nullopt);
ASSERT_THAT(status.has_value(), IsTrue());
EXPECT_THAT(status.value(), Eq(TransferMetadata::Status::kFailed));
}
TEST_F(OutgoingShareSessionTest,
HandleConnectionResponseEmptyResponseTimedOut) {
std::optional<TransferMetadata::Status> status =
session_.HandleConnectionResponse(/*is_timeout=*/true, std::nullopt);
ASSERT_THAT(status.has_value(), IsTrue());
EXPECT_THAT(status.value(), Eq(TransferMetadata::Status::kTimedOut));
}
TEST_F(OutgoingShareSessionTest, HandleConnectionResponseRejectResponse) {
ConnectionResponseFrame response;
response.set_status(ConnectionResponseFrame::REJECT);
std::optional<TransferMetadata::Status> status =
session_.HandleConnectionResponse(response);
session_.HandleConnectionResponse(/*is_timeout=*/false, response);
ASSERT_THAT(status.has_value(), IsTrue());
EXPECT_THAT(status.value(), Eq(TransferMetadata::Status::kRejected));
@@ -598,7 +605,7 @@ TEST_F(OutgoingShareSessionTest,
ConnectionResponseFrame response;
response.set_status(ConnectionResponseFrame::NOT_ENOUGH_SPACE);
std::optional<TransferMetadata::Status> status =
session_.HandleConnectionResponse(response);
session_.HandleConnectionResponse(/*is_timeout=*/false, response);
ASSERT_THAT(status.has_value(), IsTrue());
EXPECT_THAT(status.value(), Eq(TransferMetadata::Status::kNotEnoughSpace));
@@ -609,7 +616,7 @@ TEST_F(OutgoingShareSessionTest,
ConnectionResponseFrame response;
response.set_status(ConnectionResponseFrame::UNSUPPORTED_ATTACHMENT_TYPE);
std::optional<TransferMetadata::Status> status =
session_.HandleConnectionResponse(response);
session_.HandleConnectionResponse(/*is_timeout=*/false, response);
ASSERT_THAT(status.has_value(), IsTrue());
EXPECT_THAT(status.value(),
@@ -620,7 +627,7 @@ TEST_F(OutgoingShareSessionTest, HandleConnectionResponseTimeoutResponse) {
ConnectionResponseFrame response;
response.set_status(ConnectionResponseFrame::TIMED_OUT);
std::optional<TransferMetadata::Status> status =
session_.HandleConnectionResponse(response);
session_.HandleConnectionResponse(/*is_timeout=*/true, response);
ASSERT_THAT(status.has_value(), IsTrue());
EXPECT_THAT(status.value(), Eq(TransferMetadata::Status::kTimedOut));
@@ -636,7 +643,7 @@ TEST_F(OutgoingShareSessionTest, HandleConnectionResponseAcceptResponse) {
Call(_, HasStatus(TransferMetadata::Status::kInProgress)));
std::optional<TransferMetadata::Status> status =
session_.HandleConnectionResponse(response);
session_.HandleConnectionResponse(/*is_timeout=*/false, response);
ASSERT_THAT(status.has_value(), IsFalse());
}