/**
\file sndthread.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 SND_THREAD_H_
#define SND_THREAD_H_
#include "thread.h"
#include
#include
class CSocket;
class SndThread: public CThread {
public:
SndThread(CSocket* sock, CLock *glock);
void stop();
~SndThread();
CLock* getlock() const;
void setlock(CLock *glock);
void add_snd_task_start_len(uint8_t channelid, uint64_t sndbytes, uint8_t* sndbuf, uint64_t startid, uint64_t len);
void add_event_snd_task_start_len(CEvent* eventcaller, uint8_t channelid, uint64_t sndbytes, uint8_t* sndbuf, uint64_t startid, uint64_t len);
void add_snd_task(uint8_t channelid, uint64_t sndbytes, uint8_t* sndbuf);
void add_event_snd_task(CEvent* eventcaller, uint8_t channelid, uint64_t sndbytes, uint8_t* sndbuf);
void signal_end(uint8_t channelid);
void kill_task();
void ThreadMain();
private:
struct snd_task {
uint8_t channelid;
std::vector snd_buf;
CEvent* eventcaller;
};
void push_task(std::unique_ptr task);
CSocket* mysock;
CLock* sndlock;
std::unique_ptr send;
std::queue> send_tasks;
};
#endif /* SND_THREAD_H_ */