OSDN Git Service

L2CAP: Reject unknown command
authorHansong Zhang <hsz@google.com>
Fri, 8 Nov 2019 23:22:40 +0000 (15:22 -0800)
committerHansong Zhang <hsz@google.com>
Fri, 8 Nov 2019 23:23:50 +0000 (15:23 -0800)
Test: cert/run_cert.sh, L2CAP/COS/CED/BI-01-C
Bug: 141557006
Change-Id: Id59adc37b9df773c90832baa3eafa9759492ac9c

gd/l2cap/classic/cert/simple_l2cap_test.py
gd/l2cap/classic/internal/signalling_manager.cc

index eb4363f..5a033f1 100644 (file)
@@ -170,3 +170,26 @@ class SimpleL2capTest(GdBaseTestClass):
         )
         cert_packet_stream.unsubscribe()
 
+    def test_reject_unknown_command(self):
+        """
+        L2CAP/COS/CED/BI-01-C
+        """
+        cert_connection_stream = self.cert_device.l2cap.connection_complete_stream
+        cert_connection_stream.subscribe()
+        self.device_under_test.l2cap.RegisterChannel(l2cap_facade_pb2.RegisterChannelRequest(channel=2))
+        self.device_under_test.l2cap.Connect(self.cert_address)
+        cert_connection_stream.assert_event_occurs(
+            lambda device: device.remote == self.dut_address
+        )
+        cert_connection_stream.unsubscribe()
+        cert_packet_stream = self.cert_device.l2cap.packet_stream
+        cert_packet_stream.subscribe()
+        invalid_command_packet = b"\xff\x01\x00\x00"
+        self.cert_device.l2cap.SendL2capPacket(l2cap_facade_pb2.L2capPacket(channel=1, payload=invalid_command_packet))
+        command_reject_packet = b"\x01\x01\x02\x00\x00\x00"
+        cert_packet_stream.assert_event_occurs(
+            lambda packet: command_reject_packet in packet.payload
+        )
+        cert_packet_stream.unsubscribe()
+
+        time.sleep(ASYNC_OP_TIME_SECONDS)  # TODO(b/144186649): Remove this line
index 7ba61a7..30e18a6 100644 (file)
@@ -444,6 +444,8 @@ void ClassicSignallingManager::on_incoming_packet() {
     }
     default:
       LOG_WARN("Unhandled event 0x%x", static_cast<int>(code));
+      auto builder = CommandRejectNotUnderstoodBuilder::Create(control_packet_view.GetIdentifier());
+      enqueue_buffer_->Enqueue(std::move(builder), handler_);
       return;
   }
 }