#ifndef _PFREQUEST__H #define _PFREQUEST__H #include #include #include #include #include #include #include "../json/value.h" #include "uint256.h" #include "RippleAddress.h" #include "SerializedTypes.h" // A pathfinding request submitted by a client // The request issuer must maintain a strong pointer class Ledger; class InfoSub; class STAmount; // Return values from parseJson <0 = invalid, >0 = valid #define PFR_PJ_INVALID -1 #define PFR_PJ_NOCHANGE 0 #define PFR_PJ_CHANGE 1 class PFRequest : public boost::enable_shared_from_this { public: typedef boost::weak_ptr wptr; typedef boost::shared_ptr pointer; typedef const pointer& ref; typedef std::pair currIssuer_t; protected: boost::recursive_mutex mLock; boost::weak_ptr wpSubscriber; // Who this request came from Json::Value jvStatus; // Last result // Client request parameters RippleAddress raSrcAccount; RippleAddress raDstAccount; STAmount saDstAmount; std::set sciSourceCurrencies; std::vector vjvBridges; bool bValid; // Track all requests static std::set sRequests; static boost::recursive_mutex sLock; void setValid(); int parseJson(const Json::Value&, bool complete); public: PFRequest(const boost::shared_ptr& subscriber); bool isValid(const boost::shared_ptr&); bool isValid(); Json::Value getStatus(); Json::Value doCreate(const boost::shared_ptr&, const Json::Value&); Json::Value doClose(const Json::Value&); Json::Value doStatus(const Json::Value&); void doUpdate(); // do an update void trigger(); // schedule an update static void updateAll(const boost::shared_ptr &); }; #endif // vim:ts=4