add ignore files.
[vuplus_transtreamproxy] / src / eNetworkPumpThread.cpp
1 /*
2  * eDemuxPumpThread.cpp
3  *
4  *  Created on: 2013. 9. 12.
5  *      Author: kos
6  */
7
8 //#include "uLogger.h"
9 //#include "uDemux.h"
10
11 #include <poll.h>
12 #include <stdio.h>
13 #include <errno.h>
14 #include <string.h>
15 #include <sys/ioctl.h>
16
17 #include "ePreDefine.h"
18 #include "eNetworkPumpThread.h"
19 //-------------------------------------------------------------------------------
20
21 #ifdef DEBUG_LOG
22 //#undef LOG
23 //#define LOG(X,...) { do{}while(0); }
24 #endif
25
26 eNetworkPumpThread::eNetworkPumpThread(int aDeviceFd)
27         : mTermFlag(0), mDeviceFd(aDeviceFd), uThread("eNetworkPumpThread")
28 {
29 }
30 //-------------------------------------------------------------------------------
31
32 eNetworkPumpThread::~eNetworkPumpThread()
33 {
34 }
35 //-------------------------------------------------------------------------------
36
37 void eNetworkPumpThread::Run()
38 {
39         int rc = 0, wc = 0;
40         unsigned char buffer[BUFFER_SIZE];
41         struct pollfd pollevt;
42
43         pollevt.fd      = mDeviceFd;
44         pollevt.events  = POLLIN | POLLHUP;
45         pollevt.revents = 0;
46
47         mTermFlag = true;
48
49         const char *c = "\
50 HTTP/1.0 200 OK\r\n\
51 Connection: close\r\n\
52 Content-Type: video/mpeg\r\n\
53 Server: stream_enigma2\r\n\
54 \r\n";
55
56         write(1, c, strlen(c));
57
58         while(mTermFlag) {
59                 rc = poll((struct pollfd*)&pollevt, 1, 1000);
60                 if (pollevt.revents & POLLIN) {
61                         rc = read(mDeviceFd, buffer, BUFFER_SIZE);
62
63                         if (errno == EINTR || errno == EAGAIN || errno == EBUSY || errno == EOVERFLOW) {
64 #ifdef DEBUG_LOG
65                                 LOG("(retry... errno : %d)", errno);
66 #endif
67                                 continue;
68                         }
69 #ifdef DEBUG_LOG
70                         LOG("%d byte read", rc);
71 #endif
72                         wc = write(1, buffer, rc);
73 #ifdef DEBUG_LOG
74                         LOG("%d byte write", wc);
75 #endif
76                 } else if (pollevt.revents & POLLHUP) {
77                         ioctl(mDeviceFd, 200, 0);
78                         break;
79                 }
80         }
81         mTermFlag = false;
82 }
83 //-------------------------------------------------------------------------------
84
85 void eNetworkPumpThread::Terminate()
86 {
87         mTermFlag = false;
88 }
89 //-------------------------------------------------------------------------------
90