diff options
| author | Felix Domke <tmbinc@elitedvb.net> | 2003-10-17 15:35:43 +0000 |
|---|---|---|
| committer | Felix Domke <tmbinc@elitedvb.net> | 2003-10-17 15:35:43 +0000 |
| commit | fc2f5b2cd655f1391f2abda1b39e37cdec98a951 (patch) | |
| tree | 312efcea86a319de407a7c314fb981fb1c71019a /lib/base/message.cpp | |
| download | enigma2-fc2f5b2cd655f1391f2abda1b39e37cdec98a951.tar.gz enigma2-fc2f5b2cd655f1391f2abda1b39e37cdec98a951.zip | |
Initial revision
Diffstat (limited to 'lib/base/message.cpp')
| -rw-r--r-- | lib/base/message.cpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/lib/base/message.cpp b/lib/base/message.cpp new file mode 100644 index 00000000..dafbf3f8 --- /dev/null +++ b/lib/base/message.cpp @@ -0,0 +1,49 @@ +#include <lib/base/message.h> +#include <unistd.h> +#include <lib/base/eerror.h> + +eMessagePump::eMessagePump(int mt): content(1024*1024), ismt(mt) +{ + pipe(fd); +} + +eMessagePump::~eMessagePump() +{ + if (ismt) + content.lock(); // blocks until all messages are processed. + close(fd[0]); + close(fd[1]); +} + +int eMessagePump::send(const void *data, int len) +{ + if (ismt) + content.lock(len); + return ::write(fd[1], data, len)<0; +} + +int eMessagePump::recv(void *data, int len) +{ + unsigned char*dst=(unsigned char*)data; + while (len) + { + if (ismt) + content.unlock(len); + int r=::read(fd[0], dst, len); + if (r<0) + return r; + dst+=r; + len-=r; + } + return 0; +} + +int eMessagePump::getInputFD() const +{ + return fd[1]; +} + +int eMessagePump::getOutputFD() const +{ + return fd[0]; +} |
