00001 #ifndef FILESERVER_H_
00002 #define FILESERVER_H_
00003
00004 using namespace std;
00005
00006 #include <QMutex>
00007
00008 #include "mythsocketmanager.h"
00009 #include "filesysteminfo.h"
00010 #include "mythprotoserverexp.h"
00011
00012 #include "sockethandler/filetransfer.h"
00013 #include "requesthandler/fileserverutil.h"
00014
00015 class PROTOSERVER_PUBLIC FileServerHandler : public SocketRequestHandler
00016 {
00017 Q_OBJECT
00018 public:
00019 bool HandleAnnounce(MythSocket *socket, QStringList &commands,
00020 QStringList &slist);
00021 bool HandleQuery(SocketHandler *socket, QStringList &commands,
00022 QStringList &slist);
00023 QString GetHandlerName(void) { return "FILETRANSFER"; }
00024
00025 void connectionAnnounced(MythSocket *socket, QStringList &commands,
00026 QStringList &slist);
00027 void connectionClosed(MythSocket *socket);
00028
00029 bool DeleteFile(QString filename, QString storagegroup);
00030
00031 QList<FileSystemInfo> QueryFileSystems(void);
00032 QList<FileSystemInfo> QueryAllFileSystems(void);
00033
00034 private:
00035 bool HandleQueryFreeSpace(SocketHandler *socket);
00036 bool HandleQueryFreeSpaceList(SocketHandler *socket);
00037 bool HandleQueryFreeSpaceSummary(SocketHandler *socket);
00038
00039 bool HandleQueryFileExists(SocketHandler *socket, QStringList &slist);
00040 bool HandleQueryFileHash(SocketHandler *socket, QStringList &slist);
00041
00042 bool HandleDeleteFile(SocketHandler *socket, QStringList &slist);
00043 bool HandleDeleteFile(SocketHandler *socket, QString filename,
00044 QString storagegroup);
00045 bool HandleDeleteFile(QString filename, QString storagegroup);
00046 bool HandleDeleteFile(DeleteHandler *handler);
00047
00048 bool HandleGetFileList(SocketHandler *socket, QStringList &slist);
00049 bool HandleFileQuery(SocketHandler *socket, QStringList &slist);
00050 bool HandleQueryFileTransfer(SocketHandler *socket, QStringList &commands,
00051 QStringList &slist);
00052 bool HandleDownloadFile(SocketHandler *socket, QStringList &slist);
00053
00054 QString LocalFilePath(const QUrl &url, const QString &wantgroup);
00055 void RunDeleteThread(void);
00056
00057 QMap<int, FileTransfer*> m_ftMap;
00058 QReadWriteLock m_ftLock;
00059
00060 QMap<QString, SocketHandler*> m_fsMap;
00061 QReadWriteLock m_fsLock;
00062
00063 QMutex m_downloadURLsLock;
00064 QMap<QString, QString> m_downloadURLs;
00065 };
00066
00067 #endif