gossip.h

00001 #ifndef GOSSIP_H 
00002 #define GOSSIP_H 
00003 
00004 
00005 
00006 #include <boost/uuid/uuid.hpp>
00007 #include <boost/uuid/uuid_generators.hpp>
00008 
00009 #include "kademlia_interface.h"
00010 #include "EventMessage.h"
00011 
00012 
00013 
00014 #define GOSSIP_PROTO    0xC1
00015 #define MAXCHAR        1500
00016 #define MAX_FORWARD     3
00017 
00018 #define MAX_GOSSIP_SEND 5
00019 
00026 struct _TransactionLog{
00027 
00028         time_t t; 
00029         boost::uuids::uuid Tag;
00030         std::string sFileName;
00031         _TransactionLog(time_t time, boost::uuids::uuid id, const std::string& s):
00032                 t(time),
00033                 Tag(id),
00034                 sFileName(s){
00035         }
00036 };
00037 typedef _TransactionLog TransactionLog;
00038 
00039 
00043 struct gossipPacket{
00044         uint8_t m_iProtocol;
00045         boost::uuids::uuid m_Tag;
00046         /*We put command packet as  a stream..it save time for packet converstion */
00047         uint8_t m_cPack[MAXCHAR];
00048         //CommandPacket m_cPack;
00049 };
00050 typedef struct gossipPacket GossipPacket;
00051 
00052 typedef std::map<boost::uuids::uuid, std::vector< std::string > > MapFwHist;
00053 
00054 class CBootStrapClient;
00055 
00056 
00061 class CGossip:public CKadInterface{
00062 
00063 public:
00067         virtual ~CGossip();
00068 
00069 
00074         static CGossip* getGossipInstance(std::string);
00075 
00080         void NotifyApp(const std::string& sFileName, uint8_t filetype, uint8_t relatedModule);
00081 
00086         int GetTransactionLog(std::string& transList)const;
00087 
00091         int FindMissingGossip(const std::string& sTransList, std::string& sMissingList)const;
00092 
00097         int SendMissingGossip(const std::string& sMissingList, uint32_t ip, uint16_t port);
00098 
00099 
00100 
00101 private:
00102         static bool bInstance;
00103         static CGossip* instance;
00108         CGossip(std::string sFileName);
00109 
00110 private:
00114         void ProcessGossipPacket(const GossipPacket& gPack, uint32 ip, uint16 port, size_t length);
00115 
00119         int SendGossipPacket(const GossipPacket& packet, int pktLen, uint32_t destinationHost, uint16_t destinationPort);
00120 
00124         void OnPacketReceived(uint32 ip, uint16 port, byte* buffer, size_t length);
00125 
00129         int OnCommandReceived(int iFd);
00130 
00134         int SendCommand(const GossipPacket& gPack, int len, uint32_t srcIP, uint16_t srcPort);
00135 
00140         int SendTcpCommand(const std::string& sFileToSend, const boost::uuids::uuid& Tag, uint32_t srcIP, uint16_t srcPort);
00141 
00145         int SendCommand(const std::string& sCommand, bool bTcp = false, uint8_t module = MODULE_GOSSIP);
00146 
00150         int NotifyCommand(const std::string&);
00151 
00156         int GetTransactionID(const std::string& sFile, boost::uuids::uuid& id);
00157 
00161         int SendTcpGossipPacket(const std::string& sFileName, uint32_t destinationHost, uint16_t destinationPort);
00162 
00166         void ProcessTcpGossipPacket(const std::string& sFileName, uint32 ip, uint16 port, uint8_t module);
00167         std::string CopyFileToTmpDir(const std::string & sFile);
00168 
00172         int GetKadBootstrapInfo(int iServerIP, int iPort);
00173 
00178         int DoTransactionLog(const  boost::uuids::uuid&Tag, const std::string& sFileName);
00179         std::string BackupFileToDownloadDir(const std::string & sFile, const  boost::uuids::uuid& Tag);
00180 
00184         int SendMissingGossip(const boost::uuids::uuid& Tag, uint32_t ip, uint16_t port);
00185 
00186 
00187 
00188 
00189 private:
00190         /*Gossip*/
00191         MapFwHist mFwHist;
00192         MapFwHist mRecvHist;
00193 
00194         typedef std::deque<CFileTransfer*> FileTransfer;
00195         FileTransfer m_gfiletrans;
00196         CBootStrapClient* m_pBootStrapClient;
00197 
00198         //gossip transaction logging
00199         std::deque<TransactionLog> m_qTransactionLog;
00200 
00201 
00202 
00203 };
00204 
00205 #endif //GOSSIP_H
00206 
00207 

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