// Copyright 2019 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.telephony.snoop;

using zx;

enum Direction {
    FROM_MODEM = 1;
    TO_MODEM = 2;
};

struct QmiMessage {
    zx.time timestamp;
    Direction direction;
    bool is_partial_copy;
    array<uint8>:256 opaque_bytes;
};

//TODO(jiamingw): change it to xunion after transport driver is converted to LLCPP
union Message {
    1: QmiMessage qmi_message;
};

/// Protocol for forwarding messages to Snooper.
protocol Publisher {
    SendMessage(Message msg);
};

/// Protocol for forwarding Message from Snooper.
[Discoverable]
protocol Snooper {
    /// Get number of devices that connect to Snooper.
    GetDeviceNum() -> (uint32 device_num);
    /// Snoop message which receives by Snooper client.
    -> OnMessage(Message msg);
};
