#ifndef RIPPLE_HASHROUTER_H #define RIPPLE_HASHROUTER_H DEFINE_INSTANCE (HashRouterEntry); // VFALCO: TODO, convert these macros to int constants #define SF_RELAYED 0x01 // Has already been relayed to other nodes #define SF_BAD 0x02 // Signature/format is bad #define SF_SIGGOOD 0x04 // Signature is good #define SF_SAVED 0x08 #define SF_RETRY 0x10 // Transaction can be retried #define SF_TRUSTED 0x20 // comes from trusted source // VFALCO: TODO move this class into the scope of class HashRouter class HashRouterEntry : private IS_INSTANCE (HashRouterEntry) { public: HashRouterEntry () : mFlags(0) { ; } const std::set& peekPeers() { return mPeers; } void addPeer(uint64 peer) { if (peer != 0) mPeers.insert(peer); } bool hasPeer(uint64 peer) { return mPeers.count(peer) > 0; } int getFlags(void) { return mFlags; } bool hasFlag(int f) { return (mFlags & f) != 0; } void setFlag(int f) { mFlags |= f; } void clearFlag(int f) { mFlags &= ~f; } void swapSet(std::set& s) { mPeers.swap(s); } protected: int mFlags; std::set mPeers; }; class IHashRouter { public: // VFALCO: NOTE, this preferred alternative to default parameters makes // behavior clear. // static inline int getDefaultHoldTime () { return 120; } // VFALCO: TODO rename the parameter to entryHoldTimeInSeconds static IHashRouter* New (int holdTime); virtual ~IHashRouter () { } virtual bool addSuppression(const uint256& index) = 0; virtual bool addSuppressionPeer(const uint256& index, uint64 peer) = 0; virtual bool addSuppressionPeer(const uint256& index, uint64 peer, int& flags) = 0; virtual bool addSuppressionFlags(const uint256& index, int flag) = 0; virtual bool setFlag(const uint256& index, int flag) = 0; virtual int getFlags(const uint256& index) = 0; virtual HashRouterEntry getEntry(const uint256&) = 0; virtual bool swapSet(const uint256& index, std::set& peers, int flag) = 0; }; #endif