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