kademlia_interface.h

00001 #ifndef KADEMLIA_INTERFACE_H 
00002 #define KADEMLIA_INTERFACE_H 
00003 
00004 //namespace Kademlia_interface{
00005 #include "../kademlia/kademlia/Kademlia.h"
00006 #include "../kademlia/kademlia/Prefs.h"
00007 #include "Logger.h"
00008 #include "../kademlia/utils/KadUDPKey.h"
00009 #include "multicast.h"
00010 
00011 
00012 
00013 class CKnownFileList;
00014 class CSharedFileList;
00015 class CSearchList;
00016 class CSearchFile;
00017 class CPartFile;
00018 class CFileTransfer;
00019 class CMulticast;
00020 
00021 typedef std::pair<uint32_t, uint16_t> AddrPortPair;
00022 
00032 class CKadInterface{
00033 
00034 public:
00035 
00042         CKadInterface(std::string sFilename);
00043 
00047         virtual ~CKadInterface();
00048 
00054         int Run();
00055 
00059         void StartKad();
00060 
00064         void StopKad();
00065 
00069         void BootstrapKad();
00070 
00075         void GetAllContacts() ;
00076         void FindNodeByID(const uint8_t* nodeID);
00077         uint32_t GetPublicIP(bool ignorelocal) ;
00078         int GetSockFd(){return m_iSockFd;}
00079         int GetDaemonSockFd(){return m_iDaemonSockFd;}
00080         int GetClientTcpSockFd(){return m_iClientTcpSockFd;}
00081         int GetPeerSockFd(){return m_iPeerSockFd;}
00082         void SetPeerSockFd(int iFd){m_iPeerSockFd=iFd;}
00083 
00087         void CleanUp();
00088 
00092         void SearchSrcKad(CSearchFile* toadd);
00093 
00097         void KademliaSearchFile(uint32_t searchID, const Kademlia::CUInt128* pcontactID, const Kademlia::CUInt128* pbuddyID, uint8_t type, uint32_t ip, uint16_t tcp, uint16_t udp, uint32_t buddyip, uint16_t buddyport, uint8_t byCryptOptions);
00098         CPartFile* GetFileByID(const CMD4Hash& filehash) const;
00099 
00106         std::string GetSharedDir(){return m_sSharedDir;}
00107 
00113         std::string GetDownloadDir(){return m_sDownloadDir;}
00114         const int* GetSocketPair(){return m_iSockPairFd;}
00115 
00119         void PublishFile(const std::string& sFile);
00120 
00124         void SearchKeyKad(const std::string& sSearchStr);
00125 
00129         void AddSource(uint32_t searchID, uint32_t ip, uint16_t port);
00130 
00135         int CheckFileTransferStatus(int iFd);
00136         std::string MakeAbsPath(const std::string& sPath);
00137 
00141         void SetDownloadDir(const std::string& sPath);
00142 
00146         CMulticast* GetMulticastInstance(){return m_pMulticast;}        
00147 
00152         bool IsGossipEnable(){return m_bGossipEnable;}
00153 
00158         bool IsMulticastEnable(){return m_bMulticastEnable;}
00159 
00163         void BootstrapKad(uint32_t ip, uint16_t port);
00164 
00165 
00166 
00167 
00168 
00169 private:
00178         void StartNetworkThread();
00179         void SetLogger();
00180         static void *ThreadCallback(void *arg);
00181 
00185         int CreateSocket();
00186 
00190         int CreateDaemonSocket();
00191 
00195         int CreateClientTcpSocket();
00196 
00197         void CheckEvent(int iFd);
00198         int CheckDaemonEvent(int iFd);
00199         void DestroySocket();
00200 
00205         int ParseConfig();
00206         std::string GetString(const std::vector<std::string>& vConf, const std::string& sLine);
00207         void StrTrim(std::string&)const;
00208 
00214         void OnTimer();
00215         void SetSharedDir(const std::string& sPath);
00216 
00220         virtual void OnPacketReceived(uint32_t ip, uint16_t port, byte* buffer, size_t length);
00221 
00227         virtual int OnCommandReceived(int iFd){std::cout<<"i am in kad\n"; return 0;}
00228 
00233         virtual void NotifyApp(const std::string& sFileName, uint8_t filetype, uint8_t relatedModule );
00234 
00238         virtual void ProcessTcpGossipPacket(const std::string& sFileName, uint32 ip, uint16 port, uint8_t module);
00239 
00240         CPartFile* GetFileByKadFileSearchID(uint32 id) const;
00241         CFileTransfer* CheckFileTransByID(const int iSearchID) const;
00242         CFileTransfer* CheckFileTransByHash(const CMD4Hash& fHash) const;
00243         int InitSocketPair();
00244 
00249         void RetrySource(int iSearchID);
00250 
00254         void MakeDirs();
00255         void ShutdownNetworkThread();
00256 
00257 
00258 private:
00259         int m_iSockFd;
00260         int m_iDaemonSockFd;
00261         int m_iPeerSockFd;
00262         int m_iClientTcpSockFd;
00263 
00264         std::string m_sConfigFileName;
00265         std::string m_sClientName;
00266         bool m_bBootstrapEnable;
00267         bool m_bKadLogEnable;
00268         uint32_t m_uClientIP;
00269         uint16_t m_uClientPort;
00270         uint32_t m_uBootIP;
00271         uint16_t m_uBootPort;
00272         pthread_t m_Thread;
00273         uint16_t m_uDaemonTcpPort;
00274         uint16_t m_uClientTcpPort;
00275 
00276         CKnownFileList* knownfiles; 
00277 
00278         typedef std::deque<CPartFile*> FileQueue;
00279         FileQueue m_filelist;
00280 
00281         std::string m_sSharedDir;
00282         std::string m_sDownloadDir;
00283         int m_iSockPairFd[2];
00284 
00285         std::map<int, std::vector<AddrPortPair> > m_SourceMap;
00286 
00287         //multicast
00288         bool m_bMulticastEnable;
00289         bool m_bGossipEnable;
00290         std::string m_sMulticastInterface;
00291         uint32_t m_uMulticastIP;
00292         uint16_t m_uMulticastPort;
00293 
00294         CMulticast *m_pMulticast;
00295         bool    m_bInit;
00296 
00297 public:
00298         typedef std::deque<CFileTransfer*> FileTransfer;
00299         FileTransfer m_filetrans;
00300 
00301         CSharedFileList* sharedfiles; 
00302         CSearchList* searchlist ;
00303 };
00304 
00305 
00306 
00307 
00308 //}//end of Kademlia_interface
00309 
00310 #endif //KADEMLIA_INTERFACE_H 
00311 

Generated on Thu Sep 16 11:51:44 2010 for Communication Component by  doxygen 1.4.7