/** \file rcvthread.h \author michael.zohner@ec-spride.de \copyright ABY - A Framework for Efficient Mixed-protocol Secure Two-party Computation Copyright (C) 2019 ENCRYPTO Group, TU Darmstadt This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. ABY is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . \brief Receiver Thread Implementation */ #ifndef RCV_THREAD_H_ #define RCV_THREAD_H_ #include "constants.h" #include "thread.h" #include #include #include #include #include class CSocket; struct rcv_ctx { uint8_t *buf; uint64_t rcvbytes; }; class RcvThread: public CThread { public: RcvThread(CSocket* sock, CLock* glock); ~RcvThread(); CLock* getlock() const; void setlock(CLock *glock); void flush_queue(uint8_t channelid); void remove_listener(uint8_t channelid); std::queue* add_listener(uint8_t channelid, CEvent* rcv_event, CEvent* fin_event); std::mutex& get_listener_mutex(uint8_t channelid); void ThreadMain(); private: //A receive task listens to a particular id and writes incoming data on that id into rcv_buf and triggers event struct rcv_task { std::queue rcv_buf; std::mutex rcv_buf_mutex; //std::queue rcvbytes; CEvent* rcv_event; CEvent* fin_event; bool inuse; bool forward_notify_fin; }; CLock* rcvlock; CSocket* mysock; std::array listeners; }; #endif /* RCV_THREAD_H_ */