00001 #ifndef FILETRANSFER_H_ 00002 #define FILETRANSFER_H_ 00003 00004 // POSIX headers 00005 #include <pthread.h> 00006 00007 // C++ headers 00008 #include <vector> 00009 using namespace std; 00010 00011 // Qt headers 00012 #include <qstring.h> 00013 #include <qmutex.h> 00014 00015 class RingBuffer; 00016 class MythSocket; 00017 00018 class FileTransfer 00019 { 00020 friend class QObject; // quiet OSX gcc warning 00021 00022 public: 00023 FileTransfer(QString &filename, MythSocket *remote); 00024 FileTransfer(QString &filename, MythSocket *remote, 00025 bool usereadahead, int retries); 00026 00027 MythSocket *getSocket() { return sock; } 00028 00029 bool isOpen(void); 00030 00031 void Stop(void); 00032 00033 void UpRef(void); 00034 bool DownRef(void); 00035 00036 void Pause(void); 00037 void Unpause(void); 00038 int RequestBlock(int size); 00039 00040 long long Seek(long long curpos, long long pos, int whence); 00041 00042 long long GetFileSize(void); 00043 00044 void SetTimeout(bool fast); 00045 00046 private: 00047 ~FileTransfer(); 00048 00049 bool readthreadlive; 00050 QMutex readthreadLock; 00051 00052 RingBuffer *rbuffer; 00053 MythSocket *sock; 00054 bool ateof; 00055 00056 vector<char> requestBuffer; 00057 00058 QMutex refLock; 00059 int refCount; 00060 }; 00061 00062 #endif
1.5.5