fixed to handle large files.
[vuplus_transtreamproxy] / src / eFilePumpThread.cpp
1 /*
2  * eFilePumpThread.cpp
3  *
4  *  Created on: 2013. 9. 12.
5  *      Author: kos
6  */
7
8 //#include "uLogger.h"
9
10 //#include "uDemux.h"
11
12 #include <poll.h>
13 #include <stdio.h>
14 #include <fcntl.h>
15
16 #include "ePreDefine.h"
17 #include "eFilePumpThread.h"
18 //-------------------------------------------------------------------------------
19
20 #ifdef DEBUG_LOG
21 //#undef LOG
22 //#define LOG(X,...) { do{}while(0); }
23 #endif
24
25 eFilePumpThread::eFilePumpThread(int aDeviceFd, std::string aFileName)
26         : mDeviceFd(aDeviceFd), mFileName(aFileName), mTermFlag(false), uThread("FilePumpThread", TYPE_DETACHABLE)
27 {
28 }
29 //-------------------------------------------------------------------------------
30
31 eFilePumpThread::~eFilePumpThread()
32 {
33 }
34 //-------------------------------------------------------------------------------
35
36 void eFilePumpThread::Run()
37 {
38         int rc = 0;
39         unsigned char buffer[BUFFER_SIZE];
40         int mediafilefd = open(mFileName.c_str(), O_RDONLY | O_LARGEFILE);
41
42         struct pollfd pollevt;
43
44         pollevt.fd      = mDeviceFd;
45         pollevt.events  = POLLOUT;
46         pollevt.revents = 0;
47
48         mTermFlag = true;
49         while(mTermFlag) {
50                 rc = poll((struct pollfd*)&pollevt, 1, 1000);
51
52                 if (pollevt.revents & POLLOUT) {
53                         rc = read(mediafilefd, buffer, BUFFER_SIZE);
54                         if(rc < 0) {
55                                 break;
56                         }
57 #ifdef DEBUG_LOG
58                         LOG("%d byte write.", rc);
59 #endif
60                         rc = write(mDeviceFd, buffer, rc);
61                 }
62         }
63         close(mediafilefd);
64         mTermFlag = false;
65 }
66 //-------------------------------------------------------------------------------
67
68 void eFilePumpThread::Terminate()
69 {
70         mTermFlag = false;
71 }
72 //-------------------------------------------------------------------------------
73