OSDN Git Service

Fix L2CAP Cert and AclManagerFacade
authorHansong Zhang <hsz@google.com>
Wed, 4 Mar 2020 23:03:26 +0000 (15:03 -0800)
committerHansong Zhang <hsz@google.com>
Thu, 5 Mar 2020 00:27:55 +0000 (16:27 -0800)
* Store RetransmissionAndFlowControlMode from remote config request
* Send correct config request from cert
* SendAclPacket: Hold lock until packet has been dequeued to avoid
  double RegisterEnqueue

Test: cert/run --device
Bug: 150174451
Change-Id: I2c31f336a19d4a3e1e05efb56c20b9e4dbdd98a7

gd/hci/facade/acl_manager_facade.cc
gd/l2cap/classic/cert/cert_l2cap.py
gd/l2cap/classic/internal/signalling_manager.cc

index 05c0795..2a71062 100644 (file)
@@ -121,10 +121,10 @@ class AclManagerFacadeService : public AclManagerFacade::Service,
             facade_handler_, common::Bind(&AclManagerFacadeService::enqueue_packet, common::Unretained(this),
                                           common::Unretained(request), common::Passed(std::move(promise))));
       }
-    }
-    auto status = future.wait_for(std::chrono::milliseconds(1000));
-    if (status != std::future_status::ready) {
-      return ::grpc::Status(::grpc::StatusCode::RESOURCE_EXHAUSTED, "Can't send packet");
+      auto status = future.wait_for(std::chrono::milliseconds(1000));
+      if (status != std::future_status::ready) {
+        return ::grpc::Status(::grpc::StatusCode::RESOURCE_EXHAUSTED, "Can't send packet");
+      }
     }
     return ::grpc::Status::OK;
   }
index 17c6c7a..83b83ea 100644 (file)
@@ -162,7 +162,7 @@ class CertL2cap(Closable):
     def turn_on_ertm(self, tx_window_size=10, max_transmit=20):
         self.ertm_option = l2cap_packets.RetransmissionAndFlowControlConfigurationOption(
         )
-        self.ertm_option.mode = l2cap_packets.RetransmissionAndFlowControlModeOption.L2CAP_BASIC
+        self.ertm_option.mode = l2cap_packets.RetransmissionAndFlowControlModeOption.ENHANCED_RETRANSMISSION
         self.ertm_option.tx_window_size = tx_window_size
         self.ertm_option.max_transmit = max_transmit
         self.ertm_option.retransmission_time_out = 2000
index 9f0fd27..c56db10 100644 (file)
@@ -309,6 +309,7 @@ void ClassicSignallingManager::OnConfigurationRequest(SignalId signal_id, Cid ci
           config->monitor_time_out_ = 12000;
         }
         configuration_state.remote_retransmission_and_flow_control_ = *config;
+        configuration_state.retransmission_and_flow_control_mode_ = config->mode_;
         rsp_options.emplace_back(std::make_unique<RetransmissionAndFlowControlConfigurationOption>(*config));
         break;
       }