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 ripple {
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, "ripple::Resource::Consumer::warn : non-null entry");
101 return m_logic->warn(*m_entry);
102}
103
104bool
106{
107 XRPL_ASSERT(
108 m_entry, "ripple::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(
121 m_entry, "ripple::Resource::Consumer::balance : non-null entry");
122 return m_logic->balance(*m_entry);
123}
124
125Entry&
127{
128 XRPL_ASSERT(m_entry, "ripple::Resource::Consumer::entry : non-null entry");
129 return *m_entry;
130}
131
132void
134{
135 m_entry->publicKey = publicKey;
136}
137
139operator<<(std::ostream& os, Consumer const& v)
140{
141 os << v.to_string();
142 return os;
143}
144
145} // namespace Resource
146} // namespace ripple
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
bool warn()
Returns true if the consumer should be warned.
Definition Consumer.cpp:98
Consumer & operator=(Consumer const &other)
Definition Consumer.cpp:42
int balance()
Returns the credit balance representing consumption.
Definition Consumer.cpp:118
std::string to_string() const
Return a human readable string uniquely identifying this consumer.
Definition Consumer.cpp:59
bool disconnect(beast::Journal const &j)
Returns true if the consumer should be disconnected.
Definition Consumer.cpp:105
Disposition charge(Charge const &fee, std::string const &context={})
Apply a load charge to the consumer.
Definition Consumer.cpp:87
void setPublicKey(PublicKey const &publicKey)
Definition Consumer.cpp:133
bool isUnlimited() const
Returns true if this is a privileged endpoint.
Definition Consumer.cpp:68
Disposition disposition() const
Returns the current disposition of this consumer.
Definition Consumer.cpp:77
Disposition charge(Entry &entry, Charge const &fee, std::string context={})
std::ostream & operator<<(std::ostream &os, Charge const &v)
Definition Charge.cpp:37
Disposition
The disposition of a consumer after applying a load charge.
Definition Disposition.h:8
@ ok
No action required.
Definition Disposition.h:10
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
std::optional< PublicKey > publicKey
Definition Entry.h:67
bool isUnlimited() const
Returns true if this connection should have no resource limits applied–it is still possible for certa...
Definition Entry.h:46