send answerEnq
[enigma2.git] / lib / base / message.cpp
1 #include <lib/base/message.h>
2 #include <unistd.h>
3 #include <lib/base/eerror.h>
4
5 eMessagePump::eMessagePump(int mt): content(1024*1024), ismt(mt)
6 {
7         pipe(fd);
8 }
9
10 eMessagePump::~eMessagePump()
11 {       
12         if (ismt)
13                 content.lock(); // blocks until all messages are processed.
14         close(fd[0]);
15         close(fd[1]);
16 }
17
18 int eMessagePump::send(const void *data, int len)
19 {
20         int wr = ::write(fd[1], data, len);
21         if (ismt && wr > 0)
22                 content.lock(wr);
23         return wr<0;
24 }
25
26 int eMessagePump::recv(void *data, int len)
27 {
28         unsigned char*dst=(unsigned char*)data;
29         int recv=::read(fd[0], dst, len);
30         if (recv > 0 && ismt)
31                 content.unlock(recv);
32         return recv;
33 }
34
35 int eMessagePump::getInputFD() const
36 {
37         return fd[1];
38 }
39
40 int eMessagePump::getOutputFD() const
41 {
42         return fd[0];
43 }