xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
xrpld
rpc
handlers
admin
peer
Connect.cpp
1
#include <xrpld/app/main/Application.h>
2
#include <xrpld/core/Config.h>
3
#include <xrpld/overlay/Overlay.h>
4
#include <xrpld/rpc/Context.h>
5
#include <xrpld/rpc/detail/Handler.h>
6
7
#include <xrpl/beast/net/IPEndpoint.h>
8
#include <xrpl/json/json_value.h>
9
#include <xrpl/protocol/ErrorCodes.h>
10
#include <xrpl/protocol/RPCErr.h>
11
#include <xrpl/protocol/SystemParameters.h>
12
#include <xrpl/protocol/jss.h>
13
14
#include <
string
>
15
16
namespace
xrpl
{
17
18
// {
19
// ip: <string>,
20
// port: <number>
21
// }
22
// XXX Might allow domain for manual connections.
23
json::Value
24
doConnect
(
rpc::JsonContext
& context)
25
{
26
if
(context.
app
.
config
().
standalone
())
27
{
28
return
rpc::makeError
(
RpcNotSynced
);
29
}
30
31
if
(!context.
params
.
isMember
(jss::ip))
32
return
rpc::missingFieldError
(jss::ip);
33
34
if
(context.
params
.
isMember
(jss::port) &&
35
!context.
params
[jss::port].
isConvertibleTo
(
json::ValueType::Int
))
36
{
37
return
rpcError
(
RpcInvalidParams
);
38
}
39
40
int
iPort = 0;
41
42
if
(context.
params
.
isMember
(jss::port))
43
{
44
iPort = context.
params
[jss::port].
asInt
();
45
}
46
else
47
{
48
iPort = kDefaultPeerPort;
49
}
50
51
auto
const
ipStr = context.
params
[jss::ip].
asString
();
52
auto
ip =
beast::ip::Endpoint::fromString
(ipStr);
53
54
if
(!isUnspecified(ip))
55
context.
app
.
getOverlay
().
connect
(ip.atPort(iPort));
56
57
return
rpc::makeObjectValue
(
58
"attempting connection to IP:"
+ ipStr +
" port: "
+
std::to_string
(iPort));
59
}
60
61
}
// namespace xrpl
beast::ip::Endpoint::fromString
static Endpoint fromString(std::string const &s)
Definition
IPEndpoint.cpp:42
json::Value::isConvertibleTo
bool isConvertibleTo(ValueType other) const
Definition
json_value.cpp:742
json::Value::asString
std::string asString() const
Returns the unquoted string value.
Definition
json_value.cpp:494
json::Value::isMember
bool isMember(char const *key) const
Return true if the object has a member named key.
Definition
json_value.cpp:1049
json::Value::asInt
Int asInt() const
Definition
json_value.cpp:530
xrpl::Application::config
virtual Config & config()=0
xrpl::Config::standalone
bool standalone() const
Definition
src/xrpld/core/Config.h:360
xrpl::Overlay::connect
virtual void connect(beast::ip::Endpoint const &address)=0
Establish a peer connection to the specified endpoint.
xrpl::ServiceRegistry::getOverlay
virtual Overlay & getOverlay()=0
json::ValueType::Int
@ Int
signed integer value
Definition
json_value.h:23
xrpl::rpc::makeObjectValue
json::Value makeObjectValue(Value const &value, json::StaticString const &field=jss::message)
Return a json::ValueType::Object with a single entry.
Definition
Handler.h:120
xrpl::rpc::missingFieldError
json::Value missingFieldError(std::string const &name)
Definition
ErrorCodes.h:243
xrpl::rpc::makeError
json::Value makeError(ErrorCodeI code)
Returns a new json object that reflects the error code.
Definition
ErrorCodes.cpp:190
xrpl
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition
algorithm.h:5
xrpl::RpcNotSynced
@ RpcNotSynced
Definition
ErrorCodes.h:50
xrpl::RpcInvalidParams
@ RpcInvalidParams
Definition
ErrorCodes.h:67
xrpl::doConnect
json::Value doConnect(rpc::JsonContext &context)
Definition
Connect.cpp:24
xrpl::rpcError
json::Value rpcError(ErrorCodeI iError)
Definition
RPCErr.cpp:13
string
xrpl::rpc::Context::app
Application & app
Definition
Context.h:29
xrpl::rpc::JsonContext
Definition
Context.h:41
xrpl::rpc::JsonContext::params
json::Value params
Definition
Context.h:51
std::to_string
T to_string(T... args)
Generated by
1.17.0