// 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.

#ifndef SRC_CONNECTIVITY_BLUETOOTH_CORE_BT_HOST_L2CAP_RX_ENGINE_H_
#define SRC_CONNECTIVITY_BLUETOOTH_CORE_BT_HOST_L2CAP_RX_ENGINE_H_

#include "src/connectivity/bluetooth/core/bt-host/common/byte_buffer.h"
#include "src/connectivity/bluetooth/core/bt-host/l2cap/pdu.h"

namespace bt {
namespace l2cap {
namespace internal {

// The interface between a Channel, and the module implementing the
// mode-specific receive logic. The primary purpose of an RxEngine is to
// transform PDUs into SDUs. See Bluetooth Core Spec v5.0, Volume 3, Part A,
// Sec 2.4, "Modes of Operation" for more information about the possible modes.
class RxEngine {
 public:
  RxEngine() = default;
  virtual ~RxEngine() = default;

  // Consumes a PDU and returns a buffer containing the resulting SDU. Returns
  // nullptr if no SDU was produced.
  //
  // Notes:
  // * Callers should not interpret a nullptr as an error, as there are many
  //   valid conditions under which a PDU does not yield an SDU.
  // * The caller must ensure that |pdu.is_valid() == true|.
  virtual ByteBufferPtr ProcessPdu(PDU pdu) = 0;

 private:
  DISALLOW_COPY_AND_ASSIGN_ALLOW_MOVE(RxEngine);
};

}  // namespace internal
}  // namespace l2cap
}  // namespace bt

#endif  // SRC_CONNECTIVITY_BLUETOOTH_CORE_BT_HOST_L2CAP_RX_ENGINE_H_
