Go to the documentation of this file.
17 #ifndef USGOV_39bdfeac516fc1718aed51b86fa8d93d0d07d38ad969652da578521c0fd96067
18 #define USGOV_39bdfeac516fc1718aed51b86fa8d93d0d07d38ad969652da578521c0fd96067
21 #include <netinet/in.h>
22 #include <arpa/inet.h>
25 #include <unordered_map>
38 #include <type_traits>
40 namespace us {
namespace gov {
45 typedef vector<uint8_t>
b;
70 void dump(ostream& os)
const;
71 void to_stream(ostream& os)
const;
72 atomic<uint32_t> num{0};
73 atomic<uint32_t> bytes{0};
75 void dump(ostream& os)
const;
76 void to_stream(ostream& os)
const;
81 struct counters_t:unordered_map<uint16_t,iodata*> {
84 uint32_t wrong_channel{0};
85 uint32_t closed_connection{0};
86 uint32_t peer_timeout{0};
87 uint32_t peer_ended{0};
88 uint32_t infraheader_datagram{0};
89 uint32_t wrong_size{};
90 uint32_t valid_dgram_fragment1{0};
91 uint32_t valid_dgram_fragment2{0};
92 uint64_t bytes_received{0};
93 void update(
const datagram& d,
bool send);
94 void dump(ostream& os)
const;
95 void dump_bw(
const chrono::system_clock::time_point&, ostream& os)
const;
96 void to_stream_io(ostream& os)
const;
97 pair<uint32_t,uint32_t> totals()
const;
99 static counters_t counters;
102 static constexpr
size_t offset_channel{0};
103 static constexpr
size_t size_channel{
sizeof(uint16_t)};
104 static constexpr
size_t offset_size{offset_channel+size_channel};
105 static constexpr
size_t size_size{
sizeof(uint32_t)};
106 static constexpr
size_t offset_service{offset_size+size_size};
107 static constexpr
size_t size_service{
sizeof(uint16_t)};
108 static constexpr
size_t offset_sequence{offset_size+size_size+size_service};
109 static constexpr
size_t size_sequence{
sizeof(uint16_t)};
111 static constexpr
size_t h{size_channel+size_size+size_service+size_sequence};
118 void constructor(uint16_t service, uint16_t sequence, uint32_t size);
122 #include <us/api/apitool_generated__c++__datagram_hdr>
171 if (
unlikely(size()<h))
return (
ko)
"KO 81198 Invalid size.";
172 auto payload_sz=size()-h;
173 if (
unlikely((payload_sz%
sizeof(t))!=0))
return (
ko)
"KO 48535 Invalid size.";
174 content.resize(payload_sz/
sizeof(t));
175 ::memcpy(content.data(),data()+h,payload_sz);
193 return h+payload.size()*
sizeof(t)<maxsize;
static const char * KO_0001
Definition: datagram.h:54
crypto::ripemd160 hasher_t
Definition: datagram.h:46
static bool is_ko(const std::string &s)
Definition: ko.h:30
void dump(ostream &) const
string header_bytes() const
hasher_t::value_type hash_t
Definition: app.h:55
static const char * KO_4038
Definition: datagram.h:57
uint16_t decode_sequence() const
string service_str() const
Definition: datagram.h:163
crypto::ec::keys::priv_t priv_t
Definition: datagram.h:52
pair< ko, datagram * > encrypt(crypto::symmetric_encryption &) const
Definition: ripemd160.h:38
#define unlikely(x)
Definition: likely.h:30
f first
Definition: pair.java:20
datagram(const datagram &)
static string service_str(uint16_t svc)
sighasher_t::value_type sighash_t
Definition: datagram.h:50
ko write_bin(ostream &) const
virtual void dispatch(datagram *)
hash_t compute_hash() const
uint32_t dend
Definition: datagram.h:201
Definition: datagram.h:44
static uint16_t system_channel
Definition: datagram.h:199
Definition: protocol.h:24
uint16_t service
Definition: datagram.h:200
uint32_t decode_size() const
s second
Definition: pair.java:21
us::gov::socket::datagram c
Definition: datagram.cpp:48
uint16_t decode_channel() const
Definition: symmetric_encryption.h:37
const ko_t * ko
Definition: ko.h:27
uint16_t decode_service() const
void constructor(uint16_t service, uint16_t sequence, uint32_t size)
ripemd160 hasher_t
Definition: app.h:54
Definition: ripemd160.h:34
static const char * KO_4921
Definition: datagram.h:58
static bool validate_payload(const string &payload)
static bool validate_payload(const vector< unsigned char > &)
hash_t compute_hash_payload() const
Definition: client.cpp:417
static constexpr ko ok
Definition: ko.h:28
int64_t cash_t
Definition: datagram.h:48
void encode_sequence(uint16_t)
vector< uint8_t > b
Definition: datagram.h:45
long size()
Definition: datagram.cs:178
ko parse(vector< t > &content) const
Definition: datagram.h:170
static const char * KO_0002
Definition: datagram.h:55
Definition: datagram.h:61
#define CFG_MAX_SIZE_DATAGRAM
Definition: config.h:29
crypto::ec::keys::pub_t pub_t
Definition: datagram.h:51
static const char * KO_9021
Definition: datagram.h:59
#define print_stacktrace
Definition: stacktrace.h:104
void write(const vector< unsigned char > &)
virtual ~dispatcher_t()
Definition: datagram.h:62
string parse_string() const
void encode_size(uint32_t)
hasher_t::value_type hash_t
Definition: datagram.h:47
static const char * KO_0003
Definition: datagram.h:56
void encode_service(uint16_t)
crypto::sha256 sighasher_t
Definition: datagram.h:49
static bool validate_payload(const vector< t > &payload)
Definition: datagram.h:192
#define log
Definition: gov.h:83
pair< ko, datagram * > decrypt(crypto::symmetric_encryption &) const
#define CFG_CHANNEL
Definition: config.h:27