blob: 10dfdc1400b7bc46db2baecaf856cb5c80baf4ef [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.bluetooth.snoop;
using fuchsia.bluetooth;
/// Timestamp represents the number of seconds and nanoseconds since the Unix epoch.
struct Timestamp {
/// Valid values for |subsec_nanos| can be greater than 10^9-1. Therefore the total
/// seconds elapsed since the epoch is defined by the value of |seconds| plus
/// |subsec_nanos| / 10^9 - the value of |seconds| alone may not be sufficient.
///
/// It is invalid for the carry from |subsec_nanos| to overflow the |seconds| field.
/// A client or server should reject such data as malformed.
uint32 subsec_nanos;
uint64 seconds;
};
/// Messages coming through the Host Controller Interface can be one of three types.
enum PacketType {
/// Command sent from the host to the controller.
CMD = 0;
/// Event sent from the controller to the host.
EVENT = 1;
/// Data sent from the controller to the host.
DATA = 2;
};
struct SnoopPacket {
/// true if this packet is sent from the controller to the host.
bool is_received;
PacketType type;
/// Timestamp that the bt-snoop service received the packet from a snoop channel as measured
/// by the host system.
Timestamp timestamp;
/// Original length of the packet before truncation.
uint32 original_len;
/// Payload sent over the HCI.
bytes payload;
};
/// Interface to receive packets recorded as received or transmitted for a Bluetooth host.
/// Packets are received by the client as datagrams through the fidl channel as |OnPacket|
/// events.
[Discoverable]
protocol Snoop {
/// Subscribe to receive packets from the server. Packets that have been recorded are sent
/// first.
///
/// If |follow| is true, the channel stays open and packets are sent to the client as
/// the snoop server receives them. If |follow| is false, the channel is closed by the server
/// when all recorded packets have been sent.
///
/// A |host_device| name may be provided; if so, only events from that host are sent to the client.
/// If |host_device| is absent, the client is sent events from all host devices.
///
/// Errors:
/// |Start| can only be called once per connection. After the first request, subsequent requests
/// always return an error.
/// |host_device| values that are not recognized by the server return an error.
Start(bool follow, string? host_device) -> (fuchsia.bluetooth.Status status);
/// An event containing a packet that the client has registered interest in receiving and the
/// |host_device| which generated the packet.
-> OnPacket(string host_device, SnoopPacket packet);
};