rippled
Handler.cpp
1 //------------------------------------------------------------------------------
2 /*
3  This file is part of rippled: https://github.com/ripple/rippled
4  Copyright (c) 2012, 2013 Ripple Labs Inc.
5 
6  Permission to use, copy, modify, and/or distribute this software for any
7  purpose with or without fee is hereby granted, provided that the above
8  copyright notice and this permission notice appear in all copies.
9 
10  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18 //==============================================================================
19 
20 #include <ripple/basics/contract.h>
21 #include <ripple/rpc/handlers/Handlers.h>
22 #include <ripple/rpc/handlers/Version.h>
23 #include <ripple/rpc/impl/Handler.h>
24 #include <ripple/rpc/impl/RPCHelpers.h>
25 
26 #include <map>
27 
28 namespace ripple {
29 namespace RPC {
30 namespace {
31 
33 template <typename Function>
34 Handler::Method<Json::Value>
35 byRef(Function const& f)
36 {
37  return [f](JsonContext& context, Json::Value& result) {
38  result = f(context);
39  if (result.type() != Json::objectValue)
40  {
41  assert(false);
42  result = RPC::makeObjectValue(result);
43  }
44 
45  return Status();
46  };
47 }
48 
49 template <class Object, class HandlerImpl>
50 Status
51 handle(JsonContext& context, Object& object)
52 {
53  assert(
54  context.apiVersion >= HandlerImpl::minApiVer &&
55  context.apiVersion <= HandlerImpl::maxApiVer);
56  HandlerImpl handler(context);
57 
58  auto status = handler.check();
59  if (status)
60  status.inject(object);
61  else
62  handler.writeResult(object);
63  return status;
64 }
65 
66 template <typename HandlerImpl>
67 Handler
68 handlerFrom()
69 {
70  return {
71  HandlerImpl::name,
72  &handle<Json::Value, HandlerImpl>,
73  HandlerImpl::role,
74  HandlerImpl::condition,
75  HandlerImpl::minApiVer,
76  HandlerImpl::maxApiVer};
77 }
78 
79 Handler const handlerArray[]{
80  // Some handlers not specified here are added to the table via addHandler()
81  // Request-response methods
82  {"account_info", byRef(&doAccountInfo), Role::USER, NO_CONDITION},
83  {"account_currencies",
84  byRef(&doAccountCurrencies),
85  Role::USER,
86  NO_CONDITION},
87  {"account_lines", byRef(&doAccountLines), Role::USER, NO_CONDITION},
88  {"account_channels", byRef(&doAccountChannels), Role::USER, NO_CONDITION},
89  {"account_nfts", byRef(&doAccountNFTs), Role::USER, NO_CONDITION},
90  {"account_objects", byRef(&doAccountObjects), Role::USER, NO_CONDITION},
91  {"account_offers", byRef(&doAccountOffers), Role::USER, NO_CONDITION},
92  {"account_tx", byRef(&doAccountTxJson), Role::USER, NO_CONDITION},
93  {"amm_info", byRef(&doAMMInfo), Role::USER, NO_CONDITION},
94  {"blacklist", byRef(&doBlackList), Role::ADMIN, NO_CONDITION},
95  {"book_changes", byRef(&doBookChanges), Role::USER, NO_CONDITION},
96  {"book_offers", byRef(&doBookOffers), Role::USER, NO_CONDITION},
97  {"can_delete", byRef(&doCanDelete), Role::ADMIN, NO_CONDITION},
98  {"channel_authorize", byRef(&doChannelAuthorize), Role::USER, NO_CONDITION},
99  {"channel_verify", byRef(&doChannelVerify), Role::USER, NO_CONDITION},
100  {"connect", byRef(&doConnect), Role::ADMIN, NO_CONDITION},
101  {"consensus_info", byRef(&doConsensusInfo), Role::ADMIN, NO_CONDITION},
102  {"crawl_shards", byRef(&doCrawlShards), Role::ADMIN, NO_CONDITION},
103  {"deposit_authorized",
104  byRef(&doDepositAuthorized),
105  Role::USER,
106  NO_CONDITION},
107  {"download_shard", byRef(&doDownloadShard), Role::ADMIN, NO_CONDITION},
108 #ifdef RIPPLED_REPORTING
109  {"gateway_balances", byRef(&doGatewayBalances), Role::ADMIN, NO_CONDITION},
110 #else
111  {"gateway_balances", byRef(&doGatewayBalances), Role::USER, NO_CONDITION},
112 #endif
113  {"get_counts", byRef(&doGetCounts), Role::ADMIN, NO_CONDITION},
114  {"feature", byRef(&doFeature), Role::ADMIN, NO_CONDITION},
115  {"fee", byRef(&doFee), Role::USER, NEEDS_CURRENT_LEDGER},
116  {"fetch_info", byRef(&doFetchInfo), Role::ADMIN, NO_CONDITION},
117  {"ledger_accept",
118  byRef(&doLedgerAccept),
119  Role::ADMIN,
121  {"ledger_cleaner",
122  byRef(&doLedgerCleaner),
123  Role::ADMIN,
125  {"ledger_closed", byRef(&doLedgerClosed), Role::USER, NEEDS_CLOSED_LEDGER},
126  {"ledger_current",
127  byRef(&doLedgerCurrent),
128  Role::USER,
130  {"ledger_data", byRef(&doLedgerData), Role::USER, NO_CONDITION},
131  {"ledger_entry", byRef(&doLedgerEntry), Role::USER, NO_CONDITION},
132  {"ledger_header", byRef(&doLedgerHeader), Role::USER, NO_CONDITION, 1, 1},
133  {"ledger_request", byRef(&doLedgerRequest), Role::ADMIN, NO_CONDITION},
134  {"log_level", byRef(&doLogLevel), Role::ADMIN, NO_CONDITION},
135  {"logrotate", byRef(&doLogRotate), Role::ADMIN, NO_CONDITION},
136  {"manifest", byRef(&doManifest), Role::USER, NO_CONDITION},
137  {"nft_buy_offers", byRef(&doNFTBuyOffers), Role::USER, NO_CONDITION},
138  {"nft_sell_offers", byRef(&doNFTSellOffers), Role::USER, NO_CONDITION},
139  {"node_to_shard", byRef(&doNodeToShard), Role::ADMIN, NO_CONDITION},
140  {"noripple_check", byRef(&doNoRippleCheck), Role::USER, NO_CONDITION},
141  {"owner_info", byRef(&doOwnerInfo), Role::USER, NEEDS_CURRENT_LEDGER},
142  {"peers", byRef(&doPeers), Role::ADMIN, NO_CONDITION},
143  {"path_find", byRef(&doPathFind), Role::USER, NEEDS_CURRENT_LEDGER},
144  {"ping", byRef(&doPing), Role::USER, NO_CONDITION},
145  {"print", byRef(&doPrint), Role::ADMIN, NO_CONDITION},
146  // { "profile", byRef (&doProfile), Role::USER,
147  // NEEDS_CURRENT_LEDGER },
148  {"random", byRef(&doRandom), Role::USER, NO_CONDITION},
149  {"peer_reservations_add",
150  byRef(&doPeerReservationsAdd),
151  Role::ADMIN,
152  NO_CONDITION},
153  {"peer_reservations_del",
154  byRef(&doPeerReservationsDel),
155  Role::ADMIN,
156  NO_CONDITION},
157  {"peer_reservations_list",
158  byRef(&doPeerReservationsList),
159  Role::ADMIN,
160  NO_CONDITION},
161  {"ripple_path_find", byRef(&doRipplePathFind), Role::USER, NO_CONDITION},
162  {"server_definitions",
163  byRef(&doServerDefinitions),
164  Role::USER,
165  NO_CONDITION},
166  {"server_info", byRef(&doServerInfo), Role::USER, NO_CONDITION},
167  {"server_state", byRef(&doServerState), Role::USER, NO_CONDITION},
168  {"sign", byRef(&doSign), Role::USER, NO_CONDITION},
169  {"sign_for", byRef(&doSignFor), Role::USER, NO_CONDITION},
170  {"stop", byRef(&doStop), Role::ADMIN, NO_CONDITION},
171  {"submit", byRef(&doSubmit), Role::USER, NEEDS_CURRENT_LEDGER},
172  {"submit_multisigned",
173  byRef(&doSubmitMultiSigned),
174  Role::USER,
176  {"transaction_entry", byRef(&doTransactionEntry), Role::USER, NO_CONDITION},
177  {"tx", byRef(&doTxJson), Role::USER, NEEDS_NETWORK_CONNECTION},
178  {"tx_history", byRef(&doTxHistory), Role::USER, NO_CONDITION, 1, 1},
179  {"tx_reduce_relay", byRef(&doTxReduceRelay), Role::USER, NO_CONDITION},
180  {"unl_list", byRef(&doUnlList), Role::ADMIN, NO_CONDITION},
181  {"validation_create",
182  byRef(&doValidationCreate),
183  Role::ADMIN,
184  NO_CONDITION},
185  {"validators", byRef(&doValidators), Role::ADMIN, NO_CONDITION},
186  {"validator_list_sites",
187  byRef(&doValidatorListSites),
188  Role::ADMIN,
189  NO_CONDITION},
190  {"validator_info", byRef(&doValidatorInfo), Role::ADMIN, NO_CONDITION},
191  {"wallet_propose", byRef(&doWalletPropose), Role::ADMIN, NO_CONDITION},
192  // Evented methods
193  {"subscribe", byRef(&doSubscribe), Role::USER, NO_CONDITION},
194  {"unsubscribe", byRef(&doUnsubscribe), Role::USER, NO_CONDITION},
195 };
196 
197 class HandlerTable
198 {
199 private:
200  using handler_table_t = std::multimap<std::string, Handler>;
201 
202  // Use with equal_range to enforce that API range of a newly added handler
203  // does not overlap with API range of an existing handler with same name
204  [[nodiscard]] bool
205  overlappingApiVersion(
207  unsigned minVer,
208  unsigned maxVer)
209  {
210  assert(minVer <= maxVer);
211  assert(maxVer <= RPC::apiMaximumValidVersion);
212 
213  return std::any_of(
214  range.first,
215  range.second, //
216  [minVer, maxVer](auto const& item) {
217  return item.second.minApiVer_ <= maxVer &&
218  item.second.maxApiVer_ >= minVer;
219  });
220  }
221 
222  template <std::size_t N>
223  explicit HandlerTable(const Handler (&entries)[N])
224  {
225  for (auto const& entry : entries)
226  {
227  if (overlappingApiVersion(
228  table_.equal_range(entry.name_),
229  entry.minApiVer_,
230  entry.maxApiVer_))
231  LogicError(
232  std::string("Handler for ") + entry.name_ +
233  " overlaps with an existing handler");
234 
235  table_.insert({entry.name_, entry});
236  }
237 
238  // This is where the new-style handlers are added.
239  addHandler<LedgerHandler>();
240  addHandler<VersionHandler>();
241  }
242 
243 public:
244  static HandlerTable const&
245  instance()
246  {
247  static HandlerTable const handlerTable(handlerArray);
248  return handlerTable;
249  }
250 
251  [[nodiscard]] Handler const*
252  getHandler(unsigned version, bool betaEnabled, std::string const& name)
253  const
254  {
255  if (version < RPC::apiMinimumSupportedVersion ||
256  version > (betaEnabled ? RPC::apiBetaVersion
258  return nullptr;
259 
260  auto const range = table_.equal_range(name);
261  auto const i = std::find_if(
262  range.first, range.second, [version](auto const& entry) {
263  return entry.second.minApiVer_ <= version &&
264  version <= entry.second.maxApiVer_;
265  });
266 
267  return i == range.second ? nullptr : &i->second;
268  }
269 
270  [[nodiscard]] std::set<char const*>
271  getHandlerNames() const
272  {
274  for (auto const& i : table_)
275  ret.insert(i.second.name_);
276 
277  return ret;
278  }
279 
280 private:
281  handler_table_t table_;
282 
283  template <class HandlerImpl>
284  void
285  addHandler()
286  {
287  static_assert(HandlerImpl::minApiVer <= HandlerImpl::maxApiVer);
288  static_assert(HandlerImpl::maxApiVer <= RPC::apiMaximumValidVersion);
289  static_assert(
290  RPC::apiMinimumSupportedVersion <= HandlerImpl::minApiVer);
291 
292  if (overlappingApiVersion(
293  table_.equal_range(HandlerImpl::name),
294  HandlerImpl::minApiVer,
295  HandlerImpl::maxApiVer))
296  LogicError(
297  std::string("Handler for ") + HandlerImpl::name +
298  " overlaps with an existing handler");
299 
300  table_.insert({HandlerImpl::name, handlerFrom<HandlerImpl>()});
301  }
302 };
303 
304 } // namespace
305 
306 Handler const*
307 getHandler(unsigned version, bool betaEnabled, std::string const& name)
308 {
309  return HandlerTable::instance().getHandler(version, betaEnabled, name);
310 }
311 
314 {
315  return HandlerTable::instance().getHandlerNames();
316 }
317 
318 } // namespace RPC
319 } // namespace ripple
ripple::doAccountNFTs
Json::Value doAccountNFTs(RPC::JsonContext &context)
General RPC command that can retrieve objects in the account root.
Definition: AccountObjects.cpp:51
ripple::doFeature
Json::Value doFeature(RPC::JsonContext &context)
Definition: Feature1.cpp:35
ripple::doLedgerAccept
Json::Value doLedgerAccept(RPC::JsonContext &)
Definition: LedgerAccept.cpp:35
ripple::doUnlList
Json::Value doUnlList(RPC::JsonContext &)
Definition: UnlList.cpp:30
ripple::doGetCounts
Json::Value doGetCounts(RPC::JsonContext &context)
Definition: GetCounts.cpp:161
ripple::doLedgerEntry
Json::Value doLedgerEntry(RPC::JsonContext &)
Definition: LedgerEntry.cpp:42
ripple::doLedgerCurrent
Json::Value doLedgerCurrent(RPC::JsonContext &)
Definition: LedgerCurrent.cpp:30
ripple::doAccountCurrencies
Json::Value doAccountCurrencies(RPC::JsonContext &context)
Definition: AccountCurrenciesHandler.cpp:32
std::string
STL class.
ripple::doValidationCreate
Json::Value doValidationCreate(RPC::JsonContext &)
Definition: ValidationCreate.cpp:45
ripple::doOwnerInfo
Json::Value doOwnerInfo(RPC::JsonContext &)
Definition: OwnerInfo.cpp:35
ripple::doPathFind
Json::Value doPathFind(RPC::JsonContext &)
Definition: PathFind.cpp:33
ripple::doDownloadShard
Json::Value doDownloadShard(RPC::JsonContext &context)
RPC command that downloads and import shard archives.
Definition: DownloadShard.cpp:49
ripple::doAccountInfo
Json::Value doAccountInfo(RPC::JsonContext &context)
Definition: AccountInfo.cpp:50
ripple::doRipplePathFind
Json::Value doRipplePathFind(RPC::JsonContext &)
Definition: RipplePathFind.cpp:32
ripple::doSignFor
Json::Value doSignFor(RPC::JsonContext &)
Definition: SignFor.cpp:35
ripple::RPC::getHandler
Handler const * getHandler(unsigned version, bool betaEnabled, std::string const &name)
Definition: Handler.cpp:307
ripple::RPC::getHandlerNames
std::set< char const * > getHandlerNames()
Return names of all methods.
Definition: Handler.cpp:313
std::pair
ripple::doAccountObjects
Json::Value doAccountObjects(RPC::JsonContext &context)
Definition: AccountObjects.cpp:164
std::find_if
T find_if(T... args)
ripple::doServerDefinitions
Json::Value doServerDefinitions(RPC::JsonContext &)
Definition: ServerInfo.cpp:300
ripple::doValidators
Json::Value doValidators(RPC::JsonContext &)
Definition: Validators.cpp:29
ripple::doValidatorListSites
Json::Value doValidatorListSites(RPC::JsonContext &)
Definition: ValidatorListSites.cpp:29
ripple::doTxReduceRelay
Json::Value doTxReduceRelay(RPC::JsonContext &)
Definition: TxReduceRelay.cpp:28
std::any_of
T any_of(T... args)
ripple::doChannelVerify
Json::Value doChannelVerify(RPC::JsonContext &)
Definition: PayChanClaim.cpp:100
ripple::RPC::NEEDS_NETWORK_CONNECTION
@ NEEDS_NETWORK_CONNECTION
Definition: Handler.h:42
ripple::doPrint
Json::Value doPrint(RPC::JsonContext &)
Definition: Print.cpp:29
ripple::doGatewayBalances
Json::Value doGatewayBalances(RPC::JsonContext &context)
Definition: GatewayBalances.cpp:54
ripple::doManifest
Json::Value doManifest(RPC::JsonContext &)
Definition: rpc/handlers/Manifest.cpp:30
ripple::doPeers
Json::Value doPeers(RPC::JsonContext &)
Definition: Peers.cpp:32
ripple::doSubmitMultiSigned
Json::Value doSubmitMultiSigned(RPC::JsonContext &)
Definition: SubmitMultiSigned.cpp:34
ripple::RPC::apiBetaVersion
constexpr unsigned int apiBetaVersion
Definition: RPCHelpers.h:237
ripple::doNFTBuyOffers
Json::Value doNFTBuyOffers(RPC::JsonContext &)
Definition: NFTOffers.cpp:165
ripple::doCrawlShards
Json::Value doCrawlShards(RPC::JsonContext &context)
RPC command that reports stored shards by nodes.
Definition: CrawlShards.cpp:44
ripple::doTxHistory
Json::Value doTxHistory(RPC::JsonContext &)
Definition: TxHistory.cpp:43
ripple::doLogLevel
Json::Value doLogLevel(RPC::JsonContext &)
Definition: LogLevel.cpp:32
ripple::doSubmit
Json::Value doSubmit(RPC::JsonContext &)
Definition: Submit.cpp:47
ripple::Role::ADMIN
@ ADMIN
Json::objectValue
@ objectValue
object value (collection of name/value pairs).
Definition: json_value.h:43
ripple::doPing
Json::Value doPing(RPC::JsonContext &)
Definition: Ping.cpp:32
ripple::doLedgerRequest
Json::Value doLedgerRequest(RPC::JsonContext &)
Definition: LedgerRequest.cpp:40
ripple::doNFTSellOffers
Json::Value doNFTSellOffers(RPC::JsonContext &)
Definition: NFTOffers.cpp:151
ripple::Role::USER
@ USER
ripple::doChannelAuthorize
Json::Value doChannelAuthorize(RPC::JsonContext &)
Definition: PayChanClaim.cpp:44
ripple::RPC::NEEDS_CURRENT_LEDGER
@ NEEDS_CURRENT_LEDGER
Definition: Handler.h:43
ripple::doRandom
Json::Value doRandom(RPC::JsonContext &)
Definition: Random.cpp:39
ripple::doValidatorInfo
Json::Value doValidatorInfo(RPC::JsonContext &)
Definition: ValidatorInfo.cpp:30
ripple::doStop
Json::Value doStop(RPC::JsonContext &)
Definition: Stop.cpp:33
ripple::doWalletPropose
Json::Value doWalletPropose(RPC::JsonContext &)
Definition: WalletPropose.cpp:67
ripple::RPC::NO_CONDITION
@ NO_CONDITION
Definition: Handler.h:41
ripple::doCanDelete
Json::Value doCanDelete(RPC::JsonContext &context)
Definition: CanDelete.cpp:35
ripple::doConsensusInfo
Json::Value doConsensusInfo(RPC::JsonContext &context)
Definition: ConsensusInfo.cpp:31
ripple::doLedgerData
Json::Value doLedgerData(RPC::JsonContext &)
Definition: LedgerData.cpp:45
ripple::doAccountOffers
Json::Value doAccountOffers(RPC::JsonContext &context)
Definition: AccountOffers.cpp:57
ripple::doLogRotate
Json::Value doLogRotate(RPC::JsonContext &)
Definition: LogRotate.cpp:28
ripple::doNoRippleCheck
Json::Value doNoRippleCheck(RPC::JsonContext &)
Definition: NoRippleCheck.cpp:61
ripple::RPC::NEEDS_CLOSED_LEDGER
@ NEEDS_CLOSED_LEDGER
Definition: Handler.h:44
map
ripple::doLedgerClosed
Json::Value doLedgerClosed(RPC::JsonContext &)
Definition: LedgerClosed.cpp:29
ripple::range
ClosedInterval< T > range(T low, T high)
Create a closed range interval.
Definition: RangeSet.h:54
ripple::doBookOffers
Json::Value doBookOffers(RPC::JsonContext &context)
Definition: BookOffers.cpp:36
std::experimental::filesystem::status
T status(T... args)
ripple::doPeerReservationsList
Json::Value doPeerReservationsList(RPC::JsonContext &)
Definition: Reservations.cpp:121
ripple::doAMMInfo
Json::Value doAMMInfo(RPC::JsonContext &context)
Definition: AMMInfo.cpp:74
ripple::NodeStore::Status
Status
Return codes from Backend operations.
Definition: nodestore/Types.h:44
ripple::doTransactionEntry
Json::Value doTransactionEntry(RPC::JsonContext &)
Definition: TransactionEntry.cpp:38
std::multimap::equal_range
T equal_range(T... args)
ripple::doUnsubscribe
Json::Value doUnsubscribe(RPC::JsonContext &)
Definition: Unsubscribe.cpp:32
ripple::RPC::apiMinimumSupportedVersion
constexpr unsigned int apiMinimumSupportedVersion
Definition: RPCHelpers.h:234
ripple
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition: RCLCensorshipDetector.h:29
ripple::RPC::apiMaximumValidVersion
constexpr unsigned int apiMaximumValidVersion
Definition: RPCHelpers.h:238
ripple::doBlackList
Json::Value doBlackList(RPC::JsonContext &context)
Definition: BlackList.cpp:28
ripple::LogicError
void LogicError(std::string const &how) noexcept
Called when faulty logic causes a broken invariant.
Definition: contract.cpp:48
ripple::doAccountTxJson
Json::Value doAccountTxJson(RPC::JsonContext &context)
Definition: AccountTx.cpp:413
std::multimap::insert
T insert(T... args)
ripple::doSign
Json::Value doSign(RPC::JsonContext &)
Definition: SignHandler.cpp:33
ripple::doPeerReservationsDel
Json::Value doPeerReservationsDel(RPC::JsonContext &)
Definition: Reservations.cpp:91
ripple::doTxJson
Json::Value doTxJson(RPC::JsonContext &)
Definition: Tx.cpp:399
ripple::RPC::apiMaximumSupportedVersion
constexpr unsigned int apiMaximumSupportedVersion
Definition: RPCHelpers.h:235
ripple::doNodeToShard
Json::Value doNodeToShard(RPC::JsonContext &)
Definition: NodeToShard.cpp:33
std::multimap
STL class.
ripple::RPC::makeObjectValue
Json::Value makeObjectValue(Value const &value, Json::StaticString const &field=jss::message)
Return a Json::objectValue with a single entry.
Definition: Handler.h:67
ripple::doAccountChannels
Json::Value doAccountChannels(RPC::JsonContext &context)
Definition: AccountChannels.cpp:68
ripple::doServerInfo
Json::Value doServerInfo(RPC::JsonContext &)
Definition: ServerInfo.cpp:323
ripple::doLedgerHeader
Json::Value doLedgerHeader(RPC::JsonContext &)
Definition: rpc/handlers/LedgerHeader.cpp:33
ripple::doFetchInfo
Json::Value doFetchInfo(RPC::JsonContext &context)
Definition: FetchInfo.cpp:31
ripple::doServerState
Json::Value doServerState(RPC::JsonContext &)
Definition: ServerState.cpp:31
ripple::doConnect
Json::Value doConnect(RPC::JsonContext &context)
Definition: Connect.cpp:38
ripple::doLedgerCleaner
Json::Value doLedgerCleaner(RPC::JsonContext &)
Definition: LedgerCleanerHandler.cpp:29
ripple::doDepositAuthorized
Json::Value doDepositAuthorized(RPC::JsonContext &context)
Definition: DepositAuthorized.cpp:38
std::set
STL class.
ripple::doPeerReservationsAdd
Json::Value doPeerReservationsAdd(RPC::JsonContext &)
Definition: Reservations.cpp:35
ripple::doBookChanges
Json::Value doBookChanges(RPC::JsonContext &context)
Definition: BookOffers.cpp:205
ripple::doAccountLines
Json::Value doAccountLines(RPC::JsonContext &context)
Definition: AccountLines.cpp:77
Json::Value
Represents a JSON value.
Definition: json_value.h:145
ripple::doFee
Json::Value doFee(RPC::JsonContext &context)
Definition: Fee1.cpp:30
ripple::doSubscribe
Json::Value doSubscribe(RPC::JsonContext &)
Definition: Subscribe.cpp:37