5 #include <condition_variable>
9 #include <tins/packet.h>
27 void send(std::unique_ptr<Tins::Packet> pkt) {
28 std::unique_lock<std::mutex> send_lock(send_mtx);
30 std::unique_lock<std::mutex> lock(mtx);
31 decrypted_packets.push(std::move(pkt));
41 std::optional<std::unique_ptr<Tins::Packet>>
receive() {
42 std::unique_lock<std::mutex> lock(mtx);
43 cv.wait(lock, [
this] {
return !decrypted_packets.empty() || closed; });
47 std::unique_ptr<Tins::Packet> value = std::move(decrypted_packets.front());
48 decrypted_packets.pop();
70 bool is_empty() {
return decrypted_packets.empty(); }
76 size_t len() {
return decrypted_packets.size(); }
84 return std::unique_lock(send_mtx);
94 std::queue<std::unique_ptr<Tins::Packet>> decrypted_packets;
97 std::condition_variable cv;
98 std::atomic<bool> closed;
Thread-friendly blocking channel for sending packets.
Definition: channel.h:16
std::optional< std::unique_ptr< Tins::Packet > > receive()
Definition: channel.h:41
void send(std::unique_ptr< Tins::Packet > pkt)
Definition: channel.h:27
void unlock_send()
Definition: channel.h:91
void close()
Definition: channel.h:55
std::unique_lock< std::mutex > lock_send()
Definition: channel.h:83
bool is_empty()
Definition: channel.h:70
PacketChannel()
Definition: channel.h:21
size_t len()
Definition: channel.h:76
bool is_closed()
Definition: channel.h:64
Definition: access_point.cpp:22