diff --git a/sharing/nearby_sharing_service_impl.cc b/sharing/nearby_sharing_service_impl.cc index 0d08d02e..2769409c 100644 --- a/sharing/nearby_sharing_service_impl.cc +++ b/sharing/nearby_sharing_service_impl.cc @@ -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 frame) { + int64_t share_target_id, bool is_timeout, + std::optional frame) { OutgoingShareSession* session = outgoing_targets_manager_.GetOutgoingShareSession(share_target_id); if (!session || !session->IsConnected()) { @@ -2620,7 +2621,7 @@ void NearbySharingServiceImpl::OnReceiveConnectionResponse( } std::optional status = - session->HandleConnectionResponse(std::move(frame)); + session->HandleConnectionResponse(is_timeout, std::move(frame)); if (status.has_value()) { session->Abort(*status); return; diff --git a/sharing/nearby_sharing_service_impl.h b/sharing/nearby_sharing_service_impl.h index b3528bc3..542594b2 100644 --- a/sharing/nearby_sharing_service_impl.h +++ b/sharing/nearby_sharing_service_impl.h @@ -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 frame); void OnStorageCheckCompleted(IncomingShareSession& session); diff --git a/sharing/outgoing_share_session.cc b/sharing/outgoing_share_session.cc index 0073f259..4c194315 100644 --- a/sharing/outgoing_share_session.cc +++ b/sharing/outgoing_share_session.cc @@ -316,7 +316,8 @@ bool OutgoingShareSession::FillIntroductionFrame( } bool OutgoingShareSession::AcceptTransfer( - std::function)> + std::function)> 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 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 OutgoingShareSession::HandleConnectionResponse( - std::optional response) { + bool is_timeout, std::optional 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."; diff --git a/sharing/outgoing_share_session.h b/sharing/outgoing_share_session.h index d7a37430..f8eb02a9 100644 --- a/sharing/outgoing_share_session.h +++ b/sharing/outgoing_share_session.h @@ -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 HandleConnectionResponse( + bool is_timeout, std::optional response); diff --git a/sharing/outgoing_share_session_test.cc b/sharing/outgoing_share_session_test.cc index 983fc8fb..3ebf44f4 100644 --- a/sharing/outgoing_share_session_test.cc +++ b/sharing/outgoing_share_session_test.cc @@ -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 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) {}), - IsFalse()); + EXPECT_THAT(session_.AcceptTransfer( + [](bool, std::optional) {}), + 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) {}), - IsFalse()); + EXPECT_THAT(session_.AcceptTransfer( + [](bool, std::optional) {}), + 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) { - connection_response_received = true; - }), - IsTrue()); + EXPECT_THAT(session_.AcceptTransfer( + [&connection_response_received]( + bool, std::optional) { + 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 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 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 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 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 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 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 status = - session_.HandleConnectionResponse(response); + session_.HandleConnectionResponse(/*is_timeout=*/false, response); ASSERT_THAT(status.has_value(), IsFalse()); }