📄 evafiledownloader.h
字号:
};class EvaFTAgentPacket;class EvaFTAgentCreateReply;class EvaFTAgentLoginReply;class EvaFTAgentAskReady;class EvaFTAgentStartReply;class EvaFTAgentTransferReply;class EvaAgentThread : public EvaFileThread{ Q_OBJECTpublic: EvaAgentThread(QObject *receiver, const int id, const QValueList<QString> &dirList, const QValueList<QString> &filenameList, const QValueList<unsigned int> sizeList, const bool isSender); virtual ~EvaAgentThread(); // user must call following 3 methods before running the thread void setFileAgentToken(const unsigned char *token, const int len); void setFileAgentKey(const unsigned char *key); void setServerAddress(const unsigned int ip, const unsigned short port); void setProxySettings(const QHostAddress addr, const short port, const QCString ¶m);protected: enum AgentState { ENone, EDnsQuery, EDnsReady, ENetworkReady, ECreatingReady, ENotifyBuddyReady, ENotifyReady, EInfoReady, EAskForStart, ETransfer, ETransfering, EDataReply, EFinished, EError}; AgentState m_State; unsigned char m_FileAgentKey[16]; unsigned char *m_Token; int m_TokenLength; QValueList<QHostAddress> m_HostAddresses; unsigned short m_ServerPort; void doCreateConnection(); void send(EvaFTAgentPacket *packet); virtual void processAgentPacket( unsigned char * data, int len );private: // for receiving data unsigned char m_Buffer[65535]; unsigned int m_BufferLength; unsigned short m_PacketLength; bool m_UsingProxy; QHostAddress m_ProxyServer; short m_ProxyPort; QCString m_ProxyAuthParam;private slots: void slotNetworkReady(); void slotDataComming(int); void slotNetworkException(int);};class EvaAgentUploader : public EvaAgentThread{ Q_OBJECTpublic: EvaAgentUploader(QObject *receiver, const int id,const QValueList<QString> &dirList, const QValueList<QString> &filenameList); ~EvaAgentUploader(); // user must call this method before running the thread void setBuddyIp(const unsigned int ip) { m_BuddyIp = ip; }private: unsigned int m_BuddyIp; unsigned int m_AgentSession; bool m_IsSendingStart; unsigned char *m_OutBuffer; unsigned int m_OutBufferLength; unsigned int m_OutBytesSent; unsigned int m_NumPackets; QDns *m_Dns; void doDnsRequest(); void run(); void doCreateRequest(); void doNotifyBuddy(); void doReadyReply(); void doStartRequest(); void doSendInfo(); void doDataTransfering(); void doFinishProcessing(); void doErrorProcessing(); void processAgentPacket( unsigned char * data, int len ); void processCreateReply(EvaFTAgentCreateReply *packet); void processNotifyReady(EvaFTAgentAskReady *packet); void processStartReply(EvaFTAgentStartReply *packet); void processTransferStart(EvaFTAgentTransferReply *packet); void processTransferReply(EvaFTAgentTransferReply *packet);private slots: void slotDnsReady(); void slotWriteReady();};typedef struct {unsigned int no;unsigned int len;unsigned char data[EVA_FILE_BUFFER_UNIT];} FileItem;class EvaAgentDownloader : public EvaAgentThread{ Q_OBJECTpublic: EvaAgentDownloader(QObject *receiver, const int id, const QValueList<QString> &dirList, const QValueList<QString> &filenameList, const QValueList<unsigned int> sizeList); ~EvaAgentDownloader(); /** * @param factor the times of 50 * EVA_FILE_BUFFER_UNIT, default buffer size is 1, which * is 50 * EVA_FILE_BUFFER_UNIT(0x800). */ void setBufferSize(const unsigned int factor); void askResumeLastDownload( const bool rec = false);private: bool m_IsRecovery; unsigned int m_MaxBufferSize; unsigned int m_BufferSize; std::map<unsigned int, FileItem> m_ItemBuffer; bool m_IsSendingStart; unsigned short m_StartSequence; void run(); void processAgentPacket( unsigned char * data, int len ); void doLoginRequest(); void doReadyReply(); void doStartRequest(); void doDataReply(); void doFinishProcessing(); void doErrorProcessing(); void processLoginReply( EvaFTAgentLoginReply *packet); void processNotifyReady( EvaFTAgentAskReady *packet); void processStartReply(EvaFTAgentStartReply *packet); void processTransferInfo( EvaFTAgentTransferReply *packet); void processTransferData( EvaFTAgentTransferReply *packet); void processDataBuffer(const unsigned short seq, const unsigned char *data, const unsigned int len); void checkBuffer(const unsigned short seq); const bool parsePacket(EvaFTAgentPacket *packet);};class EvaFTSynPacket;class EvaUDPThread : public EvaFileThread{ Q_OBJECTpublic: EvaUDPThread(QObject *receiver, const int id, const QValueList<QString> &dirList, const QValueList<QString> &filenameList, const QValueList<unsigned int> sizeList, const bool isSender); virtual ~EvaUDPThread(); // user must call following 3 methods before running the thread void setFileAgentToken(const unsigned char *token, const int len); void setFileAgentKey(const unsigned char *key); void setServerAddress(const unsigned int ip, const unsigned short port);protected: enum AgentState { ENone, EDnsQuery, EDnsReady, ENetworkReady, ECreatingReady, EFinished, EError}; AgentState m_State; unsigned char m_FileAgentKey[16]; unsigned char *m_Token; int m_TokenLength; QValueList<QHostAddress> m_HostAddresses; unsigned short m_ServerPort; void doCreateConnection(); void sendSynPacket(EvaFTSynPacket *packet); virtual void processSynPacket( unsigned char * data, int len );private slots: void slotNetworkReady(); void slotDataComming(int); void slotNetworkException(int);};class EvaFTSynCreateReply;class EvaUdpUploader : public EvaUDPThread{ Q_OBJECTpublic: EvaUdpUploader(QObject *receiver, const int id, const QValueList<QString> &dirList, const QValueList<QString> &filenameList); ~EvaUdpUploader();private: QDns *m_Dns; void doDnsRequest(); void run(); void doCreateRequest(); void doNotifyBuddy(const unsigned int session, const unsigned int ip, const unsigned short port); void doFinishProcessing(); void doErrorProcessing(); void processSynPacket( unsigned char * data, int len ); void processCreateReply(EvaFTSynCreateReply *packet); //void processRegisterReply(EvaFTAgentAskReady *packet); const bool parsePacket(EvaFTSynPacket *packet);private slots: void slotDnsReady();};class EvaUdpDownloader : public EvaUDPThread{ Q_OBJECTpublic: EvaUdpDownloader(QObject *receiver, const int id, const QValueList<QString> &dirList, const QValueList<QString> &filenameList, const QValueList<unsigned int> sizeList) : EvaUDPThread(receiver, id, dirList, filenameList, sizeList, false) {}; ~EvaUdpDownloader() {};private: void run() {};};#endif // EVAFILEDOWNLOADER_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -