Skip to content

Commit 31e0e5f

Browse files
Bluetooth: Make EIR_AdvertisingInterval variable length
1 parent 8f9c7a6 commit 31e0e5f

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

scapy/layers/bluetooth.py

+10-1
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
XLEIntField,
5757
LEMACField,
5858
BitEnumField,
59+
LEThreeBytesField,
5960
)
6061
from scapy.supersocket import SuperSocket
6162
from scapy.sendrecv import sndrcv
@@ -1266,7 +1267,15 @@ class EIR_PublicTargetAddress(EIR_Element):
12661267
class EIR_AdvertisingInterval(EIR_Element):
12671268
name = "Advertising Interval"
12681269
fields_desc = [
1269-
LEShortField("advertising_interval", 0)
1270+
MultipleTypeField(
1271+
[
1272+
(ByteField("advertising_interval", 0), lambda p: p.underlayer.len-1 == 1),
1273+
(LEShortField("advertising_interval", 0), lambda p: p.underlayer.len-1 == 2),
1274+
(LEThreeBytesField("advertising_interval", 0), lambda p: p.underlayer.len-1 == 3),
1275+
(LEIntField("advertising_interval", 0), lambda p: p.underlayer.len-1 == 4),
1276+
],
1277+
LEShortField("advertising_interval", 0)
1278+
)
12701279
]
12711280

12721281

test/scapy/layers/bluetooth.uts

+4
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,10 @@ p = HCI_Event_Hdr(hex_bytes('3e23020100002e4961121110170201060f0954656c655361742
481481
assert EIR_AdvertisingInterval in p
482482
assert p[EIR_AdvertisingInterval].advertising_interval == 400
483483

484+
p = BTLE(hex_bytes('d6be898e20234fe761e5b754021a1803030a18020ace12fffa07104a2b010000000054b7e561e74f00000000'))
485+
assert EIR_AdvertisingInterval in p
486+
assert p[EIR_AdvertisingInterval].advertising_interval == 24
487+
484488
= Parse EIR_LEBluetoothDeviceAddress
485489
p = HCI_Event_Hdr(hex_bytes("3e2a02010000d93519d7ba4c1e0201020affc4000734151317fd80081b00d93519d7ba4c0303b9fe020ad4ad"))
486490
assert EIR_LEBluetoothDeviceAddress in p

0 commit comments

Comments
 (0)