#ifndef __NETWORK_OPS__ #define __NETWORK_OPS__ #include #include "Transaction.h" #include "AccountState.h" #include "Ledger.h" // Operations that clients may wish to perform against the network // Master operational handler, server sequencer, network tracker class Peer; class NetworkOPs { public: enum Fault { // exceptions these functions can throw IO_ERROR = 1, NO_NETWORK = 2, }; enum OperatingMode { // how we process transactions or account balance requests omDISCONNECTED = 0, // not ready to process requests omCONNECTED = 1, // convinced we are talking to the network omTRACKING = 2, // convinced we agree with the network omFULL = 3 // we have the ledger and can even validate }; protected: OperatingMode mMode; boost::asio::deadline_timer mNetTimer; public: NetworkOPs(boost::asio::io_service& io_service); // network information uint64 getNetworkTimeNC(); boost::posix_time::ptime getNetworkTimePT(); uint32 getCurrentLedgerID(); OperatingMode getOperatingMode() { return mMode; } // transaction operations Transaction::pointer processTransaction(Transaction::pointer transaction, Peer* source = NULL); Transaction::pointer findTransactionByID(const uint256& transactionID); int findTransactionsBySource(std::list&, const NewcoinAddress& sourceAccount, uint32 minSeq, uint32 maxSeq); int findTransactionsByDestination(std::list&, const NewcoinAddress& destinationAccount, uint32 startLedgerSeq, uint32 endLedgerSeq, int maxTransactions); // account operations AccountState::pointer getAccountState(const NewcoinAddress& accountID); // raw object operations bool findRawLedger(const uint256& ledgerHash, std::vector& rawLedger); bool findRawTransaction(const uint256& transactionHash, std::vector& rawTransaction); bool findAccountNode(const uint256& nodeHash, std::vector& rawAccountNode); bool findTransactionNode(const uint256& nodeHash, std::vector& rawTransactionNode); // tree synchronization operations bool getTransactionTreeNodes(uint32 ledgerSeq, const uint256& myNodeID, const std::vector& myNode, std::list >& newNodes); bool getAccountStateNodes(uint32 ledgerSeq, const uint256& myNodeId, const std::vector& myNode, std::list >& newNodes); // network state machine void checkState(); void switchLastClosedLedger(Ledger::pointer newLedger, bool normal); void setStateTimer(int seconds); }; #endif // vim:ts=4