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  {"feature", byRef(&doFeature), Role::USER, NO_CONDITION},
109  {"fee", byRef(&doFee), Role::USER, NEEDS_CURRENT_LEDGER},
110  {"fetch_info", byRef(&doFetchInfo), Role::ADMIN, NO_CONDITION},
111 #ifdef RIPPLED_REPORTING
112  {"gateway_balances", byRef(&doGatewayBalances), Role::ADMIN, NO_CONDITION},
113 #else
114  {"gateway_balances", byRef(&doGatewayBalances), Role::USER, NO_CONDITION},
115 #endif
116  {"get_counts", byRef(&doGetCounts), Role::ADMIN, NO_CONDITION},
117  {"get_aggregate_price",
118  byRef(&doGetAggregatePrice),
119  Role::USER,
120  NO_CONDITION},
121  {"ledger_accept",
122  byRef(&doLedgerAccept),
123  Role::ADMIN,
125  {"ledger_cleaner",
126  byRef(&doLedgerCleaner),
127  Role::ADMIN,
129  {"ledger_closed", byRef(&doLedgerClosed), Role::USER, NEEDS_CLOSED_LEDGER},
130  {"ledger_current",
131  byRef(&doLedgerCurrent),
132  Role::USER,
134  {"ledger_data", byRef(&doLedgerData), Role::USER, NO_CONDITION},
135  {"ledger_entry", byRef(&doLedgerEntry), Role::USER, NO_CONDITION},
136  {"ledger_header", byRef(&doLedgerHeader), Role::USER, NO_CONDITION, 1, 1},
137  {"ledger_request", byRef(&doLedgerRequest), Role::ADMIN, NO_CONDITION},
138  {"log_level", byRef(&doLogLevel), Role::ADMIN, NO_CONDITION},
139  {"logrotate", byRef(&doLogRotate), Role::ADMIN, NO_CONDITION},
140  {"manifest", byRef(&doManifest), Role::USER, NO_CONDITION},
141  {"nft_buy_offers", byRef(&doNFTBuyOffers), Role::USER, NO_CONDITION},
142  {"nft_sell_offers", byRef(&doNFTSellOffers), Role::USER, NO_CONDITION},
143  {"node_to_shard", byRef(&doNodeToShard), Role::ADMIN, NO_CONDITION},
144  {"noripple_check", byRef(&doNoRippleCheck), Role::USER, NO_CONDITION},
145  {"owner_info", byRef(&doOwnerInfo), Role::USER, NEEDS_CURRENT_LEDGER},
146  {"peers", byRef(&doPeers), Role::ADMIN, NO_CONDITION},
147  {"path_find", byRef(&doPathFind), Role::USER, NEEDS_CURRENT_LEDGER},
148  {"ping", byRef(&doPing), Role::USER, NO_CONDITION},
149  {"print", byRef(&doPrint), Role::ADMIN, NO_CONDITION},
150  // { "profile", byRef (&doProfile), Role::USER,
151  // NEEDS_CURRENT_LEDGER },
152  {"random", byRef(&doRandom), Role::USER, NO_CONDITION},
153  {"peer_reservations_add",
154  byRef(&doPeerReservationsAdd),
155  Role::ADMIN,
156  NO_CONDITION},
157  {"peer_reservations_del",
158  byRef(&doPeerReservationsDel),
159  Role::ADMIN,
160  NO_CONDITION},
161  {"peer_reservations_list",
162  byRef(&doPeerReservationsList),
163  Role::ADMIN,
164  NO_CONDITION},
165  {"ripple_path_find", byRef(&doRipplePathFind), Role::USER, NO_CONDITION},
166  {"server_definitions",
167  byRef(&doServerDefinitions),
168  Role::USER,
169  NO_CONDITION},
170  {"server_info", byRef(&doServerInfo), Role::USER, NO_CONDITION},
171  {"server_state", byRef(&doServerState), Role::USER, NO_CONDITION},
172  {"sign", byRef(&doSign), Role::USER, NO_CONDITION},
173  {"sign_for", byRef(&doSignFor), Role::USER, NO_CONDITION},
174  {"stop", byRef(&doStop), Role::ADMIN, NO_CONDITION},
175  {"submit", byRef(&doSubmit), Role::USER, NEEDS_CURRENT_LEDGER},
176  {"submit_multisigned",
177  byRef(&doSubmitMultiSigned),
178  Role::USER,
180  {"transaction_entry", byRef(&doTransactionEntry), Role::USER, NO_CONDITION},
181  {"tx", byRef(&doTxJson), Role::USER, NEEDS_NETWORK_CONNECTION},
182  {"tx_history", byRef(&doTxHistory), Role::USER, NO_CONDITION, 1, 1},
183  {"tx_reduce_relay", byRef(&doTxReduceRelay), Role::USER, NO_CONDITION},
184  {"unl_list", byRef(&doUnlList), Role::ADMIN, NO_CONDITION},
185  {"validation_create",
186  byRef(&doValidationCreate),
187  Role::ADMIN,
188  NO_CONDITION},
189  {"validators", byRef(&doValidators), Role::ADMIN, NO_CONDITION},
190  {"validator_list_sites",
191  byRef(&doValidatorListSites),
192  Role::ADMIN,
193  NO_CONDITION},
194  {"validator_info", byRef(&doValidatorInfo), Role::ADMIN, NO_CONDITION},
195  {"wallet_propose", byRef(&doWalletPropose), Role::ADMIN, NO_CONDITION},
196  // Evented methods
197  {"subscribe", byRef(&doSubscribe), Role::USER, NO_CONDITION},
198  {"unsubscribe", byRef(&doUnsubscribe), Role::USER, NO_CONDITION},
199 };
200 
201 class HandlerTable
202 {
203 private:
204  using handler_table_t = std::multimap<std::string, Handler>;
205 
206  // Use with equal_range to enforce that API range of a newly added handler
207  // does not overlap with API range of an existing handler with same name
208  [[nodiscard]] bool
209  overlappingApiVersion(
211  unsigned minVer,
212  unsigned maxVer)
213  {
214  assert(minVer <= maxVer);
215  assert(maxVer <= RPC::apiMaximumValidVersion);
216 
217  return std::any_of(
218  range.first,
219  range.second, //
220  [minVer, maxVer](auto const& item) {
221  return item.second.minApiVer_ <= maxVer &&
222  item.second.maxApiVer_ >= minVer;
223  });
224  }
225 
226  template <std::size_t N>
227  explicit HandlerTable(const Handler (&entries)[N])
228  {
229  for (auto const& entry : entries)
230  {
231  if (overlappingApiVersion(
232  table_.equal_range(entry.name_),
233  entry.minApiVer_,
234  entry.maxApiVer_))
235  LogicError(
236  std::string("Handler for ") + entry.name_ +
237  " overlaps with an existing handler");
238 
239  table_.insert({entry.name_, entry});
240  }
241 
242  // This is where the new-style handlers are added.
243  addHandler<LedgerHandler>();
244  addHandler<VersionHandler>();
245  }
246 
247 public:
248  static HandlerTable const&
249  instance()
250  {
251  static HandlerTable const handlerTable(handlerArray);
252  return handlerTable;
253  }
254 
255  [[nodiscard]] Handler const*
256  getHandler(unsigned version, bool betaEnabled, std::string const& name)
257  const
258  {
259  if (version < RPC::apiMinimumSupportedVersion ||
260  version > (betaEnabled ? RPC::apiBetaVersion
262  return nullptr;
263 
264  auto const range = table_.equal_range(name);
265  auto const i = std::find_if(
266  range.first, range.second, [version](auto const& entry) {
267  return entry.second.minApiVer_ <= version &&
268  version <= entry.second.maxApiVer_;
269  });
270 
271  return i == range.second ? nullptr : &i->second;
272  }
273 
274  [[nodiscard]] std::set<char const*>
275  getHandlerNames() const
276  {
278  for (auto const& i : table_)
279  ret.insert(i.second.name_);
280 
281  return ret;
282  }
283 
284 private:
285  handler_table_t table_;
286 
287  template <class HandlerImpl>
288  void
289  addHandler()
290  {
291  static_assert(HandlerImpl::minApiVer <= HandlerImpl::maxApiVer);
292  static_assert(HandlerImpl::maxApiVer <= RPC::apiMaximumValidVersion);
293  static_assert(
294  RPC::apiMinimumSupportedVersion <= HandlerImpl::minApiVer);
295 
296  if (overlappingApiVersion(
297  table_.equal_range(HandlerImpl::name),
298  HandlerImpl::minApiVer,
299  HandlerImpl::maxApiVer))
300  LogicError(
301  std::string("Handler for ") + HandlerImpl::name +
302  " overlaps with an existing handler");
303 
304  table_.insert({HandlerImpl::name, handlerFrom<HandlerImpl>()});
305  }
306 };
307 
308 } // namespace
309 
310 Handler const*
311 getHandler(unsigned version, bool betaEnabled, std::string const& name)
312 {
313  return HandlerTable::instance().getHandler(version, betaEnabled, name);
314 }
315 
318 {
319  return HandlerTable::instance().getHandlerNames();
320 }
321 
322 } // namespace RPC
323 } // 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:36
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:43
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:311
ripple::RPC::getHandlerNames
std::set< char const * > getHandlerNames()
Return names of all methods.
Definition: Handler.cpp:317
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:105
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:47
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::doGetAggregatePrice
Json::Value doGetAggregatePrice(RPC::JsonContext &context)
oracles: array of {account, oracle_document_id} base_asset: is the asset to be priced quote_asset: is...
Definition: GetAggregatePrice.cpp:152
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