mirror of
https://github.com/kidfromjupiter/nearby.git
synced 2026-09-16 15:36:12 -04:00
Return more specific transfer failure status.
PiperOrigin-RevId: 887009931
This commit is contained in:
committed by
Copybara-Service
parent
92e901e466
commit
8946f20883
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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.";
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user