rippled
Loading...
Searching...
No Matches
Consumer.cpp
1#include <xrpl/basics/Log.h>
2#include <xrpl/beast/utility/Journal.h>
3#include <xrpl/beast/utility/instrumentation.h>
4#include <xrpl/resource/Charge.h>
5#include <xrpl/resource/Consumer.h>
6#include <xrpl/resource/Disposition.h>
7#include <xrpl/resource/detail/Entry.h>
8#include <xrpl/resource/detail/Logic.h>
9
10#include <ostream>
11#include <string>
12
13namespace xrpl {
14namespace Resource {
15
17 : m_logic(&logic), m_entry(&entry)
18{
19}
20
21Consumer::Consumer() : m_logic(nullptr), m_entry(nullptr)
22{
23}
24
26 : m_logic(other.m_logic), m_entry(nullptr)
27{
28 if (m_logic && other.m_entry)
29 {
30 m_entry = other.m_entry;
32 }
33}
34
40
43{
44 // remove old ref
45 if (m_logic && m_entry)
47
48 m_logic = other.m_logic;
49 m_entry = other.m_entry;
50
51 // add new ref
52 if (m_logic && m_entry)
54
55 return *this;
56}
57
60{
61 if (m_logic == nullptr)
62 return "(none)";
63
64 return m_entry->to_string();
65}
66
67bool
69{
70 if (m_entry)
71 return m_entry->isUnlimited();
72
73 return false;
74}
75
78{
79 Disposition d = ok;
80 if (m_logic && m_entry)
81 d = m_logic->charge(*m_entry, Charge(0));
82
83 return d;
84}
85
87Consumer::charge(Charge const& what, std::string const& context)
88{
89 Disposition d = ok;
90
91 if (m_logic && m_entry && !m_entry->isUnlimited())
92 d = m_logic->charge(*m_entry, what, context);
93
94 return d;
95}
96
97bool
99{
100 XRPL_ASSERT(m_entry, "xrpl::Resource::Consumer::warn : non-null entry");
101 return m_logic->warn(*m_entry);
102}
103
104bool
106{
107 XRPL_ASSERT(
108 m_entry, "xrpl::Resource::Consumer::disconnect : non-null entry");
109 bool const d = m_logic->disconnect(*m_entry);
110 if (d)
111 {
112 JLOG(j.debug()) << "disconnecting " << m_entry->to_string();
113 }
114 return d;
115}
116
117int
119{
120 XRPL_ASSERT(m_entry, "xrpl::Resource::Consumer::balance : non-null entry");
121 return m_logic->balance(*m_entry);
122}
123
124Entry&
126{
127 XRPL_ASSERT(m_entry, "xrpl::Resource::Consumer::entry : non-null entry");
128 return *m_entry;
129}
130
131void
133{
134 m_entry->publicKey = publicKey;
135}
136
138operator<<(std::ostream& os, Consumer const& v)
139{
140 os << v.to_string();
141 return os;
142}
143
144} // namespace Resource
145} // namespace xrpl
A generic endpoint for log messages.
Definition Journal.h:41
Stream debug() const
Definition Journal.h:309
A public key.
Definition PublicKey.h:43
A consumption charge.
Definition Charge.h:11
An endpoint that consumes resources.
Definition Consumer.h:17
Consumer & operator=(Consumer const &other)
Definition Consumer.cpp:42
void setPublicKey(PublicKey const &publicKey)
Definition Consumer.cpp:132
bool warn()
Returns true if the consumer should be warned.
Definition Consumer.cpp:98
bool isUnlimited() const
Returns true if this is a privileged endpoint.
Definition Consumer.cpp:68
bool disconnect(beast::Journal const &j)
Returns true if the consumer should be disconnected.
Definition Consumer.cpp:105
Disposition disposition() const
Returns the current disposition of this consumer.
Definition Consumer.cpp:77
std::string to_string() const
Return a human readable string uniquely identifying this consumer.
Definition Consumer.cpp:59
int balance()
Returns the credit balance representing consumption.
Definition Consumer.cpp:118
Disposition charge(Charge const &fee, std::string const &context={})
Apply a load charge to the consumer.
Definition Consumer.cpp:87
Disposition charge(Entry &entry, Charge const &fee, std::string context={})
Disposition
The disposition of a consumer after applying a load charge.
Definition Disposition.h:8
@ ok
No action required.
Definition Disposition.h:10
std::ostream & operator<<(std::ostream &os, Charge const &v)
Definition Charge.cpp:37
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:6
std::string to_string() const
Definition Entry.h:35
bool isUnlimited() const
Returns true if this connection should have no resource limits applied–it is still possible for certa...
Definition Entry.h:46
std::optional< PublicKey > publicKey
Definition Entry.h:67