mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-19 10:35:50 +00:00
Remove `tx_history` and `ledger_header` methods from API version 2. Update `RPC::Handler` to allow for methods (or method implementations) to be API version specific. This partially resolves #4727. We can now store multiple handlers with the same name, as long as they belong to different (non-overlapping) API versions. This necessarily impacts the handler lookup algorithm and its complexity; however, there is no performance loss on x86_64 architecture, and only minimal performance loss on arm64 (around 10ns). This design change gives us extra flexibility evolving the API in the future, including other parts of #4727. In API version 2, `tx_history` and `ledger_header` are no longer recognised; if they are called, `rippled` will return error `unknownCmd` Resolve #3638 Resolve #3539
68 lines
1.9 KiB
C++
68 lines
1.9 KiB
C++
//------------------------------------------------------------------------------
|
|
/*
|
|
This file is part of rippled: https://github.com/ripple/rippled
|
|
Copyright (c) 2012, 2013 Ripple Labs Inc.
|
|
|
|
Permission to use, copy, modify, and/or distribute this software for any
|
|
purpose with or without fee is hereby granted, provided that the above
|
|
copyright notice and this permission notice appear in all copies.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
*/
|
|
//==============================================================================
|
|
|
|
#ifndef RIPPLED_RIPPLE_RPC_HANDLERS_VERSION_H
|
|
#define RIPPLED_RIPPLE_RPC_HANDLERS_VERSION_H
|
|
|
|
#include <ripple/rpc/impl/RPCHelpers.h>
|
|
|
|
namespace ripple {
|
|
namespace RPC {
|
|
|
|
class VersionHandler
|
|
{
|
|
public:
|
|
explicit VersionHandler(JsonContext& c)
|
|
: apiVersion_(c.apiVersion), betaEnabled_(c.app.config().BETA_RPC_API)
|
|
{
|
|
}
|
|
|
|
Status
|
|
check()
|
|
{
|
|
return Status::OK;
|
|
}
|
|
|
|
template <class Object>
|
|
void
|
|
writeResult(Object& obj)
|
|
{
|
|
setVersion(obj, apiVersion_, betaEnabled_);
|
|
}
|
|
|
|
static constexpr char const* name = "version";
|
|
|
|
static constexpr unsigned minApiVer = RPC::apiMinimumSupportedVersion;
|
|
|
|
static constexpr unsigned maxApiVer = RPC::apiMaximumValidVersion;
|
|
|
|
static constexpr Role role = Role::USER;
|
|
|
|
static constexpr Condition condition = NO_CONDITION;
|
|
|
|
private:
|
|
unsigned int apiVersion_;
|
|
bool betaEnabled_;
|
|
};
|
|
|
|
} // namespace RPC
|
|
} // namespace ripple
|
|
|
|
#endif
|