plebble
app.h
Go to the documentation of this file.
1 /*
2 -------------------------------------------------------------------------------
3  PLEBBLE
4 -------------------------------------------------------------------------------
5  Copyright (C) 2019-2020 KATLAS Technology. (http://katlastechnology.com)
6  Copyright (C) 2017-2020 Marcos Mayorga. (mm@mm-studios.com)
7 
8  This file is part of our Plebble(R) Platform.
9 
10  The code below cannot be copied, used for any purpose other than the one
11  agreed and/or distributed without the express permission of
12  KATLAS Technology.
13 -------------------------------------------------------------------------------
14 
15 
16 */
17 #ifndef USGOV_7dffbbfc737462a907fd04b004cc37b5831ebb01a4bec16ea1b2ff1f59b92301
18 #define USGOV_7dffbbfc737462a907fd04b004cc37b5831ebb01a4bec16ea1b2ff1f59b92301
19 
20 #include <us/gov/auth.h>
21 #include <us/gov/engine.h>
22 #include <vector>
23 #include <thread>
24 #include <unordered_map>
25 #include <unordered_set>
26 #include <map>
27 #include <us/gov/socket/datagram.h>
28 #include <us/gov/crypto/crypto.h>
29 #include <us/gov/engine/diff.h>
30 #include "protocol.h"
31 #include <chrono>
32 #include <cassert>
33 #include <map>
34 #include <atomic>
35 #include <mutex>
36 #include <us/gov/engine/evidence.h>
37 #include <us/gov/config.h>
38 
39 namespace us { namespace gov {
40 namespace engine {
41  struct daemon;
42 }
43 namespace sys {
44 
45  using namespace std;
46  using socket::datagram;
47  using engine::local_deltas;
48  using crypto::ripemd160;
49  using crypto::ec;
50  using engine::peer_t;
51 
56  typedef int64_t cash_t;
58 
59  static const hash_t min_locking_program(10000);
60 
62  struct install_script;
63  struct app:engine::app {
64  typedef engine::app b;
65 
67 
68  struct sensor_t {
70  virtual ~sensor_t() {}
71  void to_stream(ostream&) const;
72  void from_stream(istream&);
73  void from_stream_prev(istream&);
74  void dump(ostream& os) const;
77 
78 
79  struct iodata {
80  //iodata() {}
81  //iodata(const socket::datagram::iodata&);
82  struct data {
83  //void to_stream(ostream&) const;
84  //void from_stream(istream&);
85  void from_stream_prev(istream&);
86  //void dump(ostream&) const;
87  //void hash_data_to_sign(crypto::ec::sigmsg_hasher_t&) const;
88  //void hash_data(crypto::ripemd160&) const;
89 
90  uint32_t num{0};
91  size_t bytes{0};
92  };
93  //void to_stream(ostream&) const;
94  //void from_stream(istream&);
95  void from_stream_prev(istream&);
96  //void dump(ostream&) const;
97  //void hash_data_to_sign(crypto::ec::sigmsg_hasher_t&) const;
98  //void hash_data(crypto::ripemd160&) const;
99 
102  };
103 
104  struct io_t: map<uint16_t,iodata> {
105  //void to_stream(ostream&) const;
106  //void from_stream(istream&);
107  void from_stream_prev(istream&);
108  //void from_counters();
109  //void dump(ostream&) const;
110  //void hash_data_to_sign(crypto::ec::sigmsg_hasher_t&) const;
111  //void hash_data(crypto::ripemd160&) const;
112 
113  };
114 /*
115  uint8_t num_cores{0};
116  uint32_t bogomips;
117  float load_avg_15;
118  uint32_t swap_free;
119  uint32_t ram_free;
120  uint32_t disk_free;
121  io_t io;
122  float govd_pcpu;
123  float govd_pmem;
124  float walletd_pcpu;
125  float walletd_pmem;
126  uint16_t max_edges;
127  bool in_sync;
128  vector<pair<uint32_t,uint16_t>> edges;
129 */
130  };
131 
134  local_delta& operator =(const local_delta& other) { id=other.id; sensor=other.sensor; return *this; }
135  local_delta& operator =(int zero)=delete;// { sensor.clear(); return *this; }
137  local_delta(const local_delta& other): sensor(other.sensor), id(other.id) {}
138  bool operator == (const local_delta& other) const=delete;
139 
140  ~local_delta() override;
141  int app_id() const override;
142  void to_stream(ostream&) const override;
143  void from_stream(istream&) override;
144  void from_stream_prev(istream&) override;
146  void hash_data(crypto::ripemd160&) const override;
147 
150 
151  mutable hash_t hash{0};
152  const hash_t& get_hash() const;
154  };
155 
156  struct sensors_t:map<hash_t,sensor_t> {
157  void dump(ostream& os) const;
158  void to_stream(ostream&) const;
159  void from_stream(istream&);
160  void from_stream_prev(istream&);
161  };
162 
165  delta();
166  delta(const delta&)=delete;
167  delta& operator = (const delta&)=delete;
168  ~delta() override;
169  uint64_t merge(engine::app::local_delta* other0) override;
170  void end_merge() override;
171  void to_stream(ostream& os) const override;
172  static delta* from_stream(istream& is);
173  static delta* from_stream_prev(istream& is);
175 
176  struct merger:sensors_t {
177  void merge(const sensor_t&);
178  };
179 
181  };
182 
183  struct db_t {
184  db_t();
185  db_t(const db_t&)=delete;
186  db_t& operator = (const db_t&)=delete;
187  db_t(db_t&& other);
188  ~db_t();
189  void dump(ostream& os) const;
190  void clear();
191  void to_stream(ostream&) const;
192  void from_stream(istream&);
193  void from_stream_prev(istream&);
194 
195  mutable mutex mx;
197  };
198 
199  constexpr static const char* name={"sys"};
200  static constexpr int id() { return 1; }
201 
203  app(const app&)=delete;
204  app& operator = (const app&)=delete;
205  ~app() override;
207  bool process_query(peer_t *, datagram*) override;
208  static evidence* evidence_from_stream(uint8_t evid, istream& is); // const override;
209  string get_name() const override { return name; }
210  void import(const engine::app::delta&, const engine::pow_t&) override;
211  bool process(const evidence&) override;
212  bool process(const install_script& t);
214 
215  void save_db(ostream&) const override;
216  bool load_db(istream&) override;
217  bool load_db_prev(istream&) override;
218  void clear() override;
219  void dump_policies(ostream& os) const;
220  int get_id() const override { return id(); }
221  bool shell_command(istream&, ostream&) override;
222  void maintenance(int code, const hash_t& jobid);
223  void send_response(const string& response, const hash_t& job);
224  string exec(const string& cmd) const;
225 
226  string src_hash;
228 
230  };
231 
232 }}
233 }
234 
235 namespace std {
236  template <>
237  struct hash<us::gov::sys::app::local_delta> {
238  size_t operator()(const us::gov::sys::app::local_delta&) const;
239  };
240 }
241 
242 #endif
243 
evidence.h
us::gov::sys::app::db_t::from_stream_prev
void from_stream_prev(istream &)
us::gov::sys::app::dump_policies
void dump_policies(ostream &os) const
us::gov::sys::app::sensor_t::iodata::from_stream_prev
void from_stream_prev(istream &)
diff.h
us::gov::sys::app::delta::~delta
~delta() override
us::gov::sys::install_script_response
Definition: install_script_response.h:32
us::gov::sys::app::local_delta::compute_hash
hash_t compute_hash() const
us::gov::sys::app::b
engine::app b
Definition: app.h:64
us::gov::engine::pow_t
Definition: diff.h:62
us::gov::sys::app::local_delta::to_stream
void to_stream(ostream &) const override
us::gov::sys::app::db_t::sensors
sensors_t sensors
Definition: app.h:196
us::gov::sys::app::app
app(const app &)=delete
protocol.h
us::gov::engine::app::local_delta
Definition: app.h:47
us::gov::sys::app::sensors_t::to_stream
void to_stream(ostream &) const
us::gov::sys::app::local_delta::app_id
int app_id() const override
us::gov::dfs::peer_t
relay::peer_t peer_t
Definition: daemon.h:31
us
Definition: daemon.h:22
us::gov::sys::app::delta::m
merger m
Definition: app.h:180
us::gov::sys::app::sensor_t::iodata::data
Definition: app.h:82
us::gov::crypto::ripemd160::value_type
Definition: ripemd160.h:38
us::gov::sys::app::db_t::db_t
db_t(db_t &&other)
us::gov::sys::app::db_t::dump
void dump(ostream &os) const
us::gov::engine::app::delta
Definition: app.h:67
us::gov::sys::app::local_delta::hash_data_to_sign
void hash_data_to_sign(crypto::ec::sigmsg_hasher_t &) const override
us::gov::sys::min_locking_program
static const hash_t min_locking_program(10000)
us::gov::sys::app::db_t::db_t
db_t(const db_t &)=delete
us::gov::sys::app::sensors_t
Definition: app.h:156
us::gov::sys::hash_t
hasher_t::value_type hash_t
Definition: app.h:55
us::gov::sys::app::app
app(engine::daemon &)
us::gov::sys::app::sensor_t::from_stream
void from_stream(istream &)
us::gov::sys::app::process
bool process(const install_script &t)
us::gov::sys::app::sensors_t::dump
void dump(ostream &os) const
us::gov::sys::app::sensor_t::iodata::received
data received
Definition: app.h:101
us::gov::sys::app::sensors_t::from_stream
void from_stream(istream &)
us::gov::sys::app::process_query
bool process_query(peer_t *, datagram *) override
us::gov::crypto::ec::keys::pub_t
Definition: ec.h:44
us::gov::sys::app::delta::merger
Definition: app.h:176
us::gov::sys::hasher_t
ripemd160 hasher_t
Definition: app.h:54
us::gov::socket::datagram
Definition: datagram.h:44
us::gov::crypto::sha256
Definition: sha256.h:33
us::gov::sys::evidence
engine::evidence evidence
Definition: app.h:57
us::gov::engine::peer_t
Definition: peer_t.h:27
us::gov::auth::daemon
id::daemon daemon
Definition: daemon.h:25
us::gov::sys::app::delta::from_stream
static delta * from_stream(istream &is)
us::gov::sys::pubkey_t
keys::pub_t pubkey_t
Definition: app.h:53
us::gov::sys::app::exec
string exec(const string &cmd) const
us::gov::sys::app::sensor_t::hash_data_to_sign
void hash_data_to_sign(crypto::ec::sigmsg_hasher_t &) const
us::gov::sys::app::sensor_t::iodata::data::from_stream_prev
void from_stream_prev(istream &)
us::gov::sys::app::sensor_t::~sensor_t
virtual ~sensor_t()
Definition: app.h:70
us::gov::engine::app
Definition: app.h:43
us::gov::sys::app::sensor_t::to_stream
void to_stream(ostream &) const
us::gov::sys::app::delta::g
local_delta g
Definition: app.h:174
us::gov::sys::app::clear
void clear() override
us::gov::sys::app::local_delta::local_delta
local_delta()
us::gov::sys::app::automatic_updates_subscription
static pubkey_t automatic_updates_subscription
Definition: app.h:66
us::gov::sys::app::delta::end_merge
void end_merge() override
us::gov::sys::app::process
bool process(const install_script_response &t)
us::gov::sys::app::sensor_t::iodata::sent
data sent
Definition: app.h:100
us::gov::sys::app::db_t::mx
mutex mx
Definition: app.h:195
us::gov::sys::app::db_t::from_stream
void from_stream(istream &)
us::gov::sys::app::local_delta::hash_data
void hash_data(crypto::ripemd160 &) const override
us::gov::sys::app::id
static constexpr int id()
Definition: app.h:200
us::gov::sys::app::db_t
Definition: app.h:183
us::gov::sys::app::create_local_delta
engine::app::local_delta * create_local_delta() override
us::gov::sys::app::us_cash_android_hash
string us_cash_android_hash
Definition: app.h:227
us::gov::sys::app::send_response
void send_response(const string &response, const hash_t &job)
us::gov::engine::daemon
Definition: daemon.h:71
datagram.h
us::gov::sys::app::process
bool process(const evidence &) override
us::gov::sys::app::db_t::clear
void clear()
us::gov::sys::app::local_delta::from_stream
void from_stream(istream &) override
us::gov::crypto::ripemd160
Definition: ripemd160.h:34
us::gov::sys::app::load_db_prev
bool load_db_prev(istream &) override
us::gov::sys::app::sensor_t::hash_data
void hash_data(crypto::ripemd160 &) const
us::gov::sys::app::local_delta::~local_delta
~local_delta() override
us::gov::sys::app::load_db
bool load_db(istream &) override
us::gov::sys::app::local_delta::b
engine::app::local_delta b
Definition: app.h:133
us::gov::sys::app::delta::from_stream_prev
static delta * from_stream_prev(istream &is)
us::gov::sys::app::db_t::db_t
db_t()
us::gov::sys::app::~app
~app() override
us::gov::sys::app::delta::to_stream
void to_stream(ostream &os) const override
us::gov::sys::app::db
db_t db
Definition: app.h:229
std
Definition: app.h:380
us::gov::sys::app::local_delta
Definition: app.h:132
auth.h
us::gov::sys::app::sensor_t::io_t::from_stream_prev
void from_stream_prev(istream &)
us::gov::sys::app::get_id
int get_id() const override
Definition: app.h:220
us::gov::sys::app::src_hash
string src_hash
Definition: app.h:226
us::gov::crypto::ec::keys
Definition: ec.h:43
config.h
us::gov::sys::app::sensor_t::from_stream_prev
void from_stream_prev(istream &)
us::gov::sys::app::sensor_t::io_t
Definition: app.h:104
engine.h
us::gov::sys::app::save_db
void save_db(ostream &) const override
us::gov::sys::keys
crypto::ec::keys keys
Definition: app.h:52
us::gov::sys::app::db_t::to_stream
void to_stream(ostream &) const
us::gov::sys::app::sensors_t::from_stream_prev
void from_stream_prev(istream &)
us::gov::sys::app::shell_command
bool shell_command(istream &, ostream &) override
us::gov::sys::app::delta::merge
uint64_t merge(engine::app::local_delta *other0) override
us::gov::sys::app::delta::delta
delta(const delta &)=delete
us::gov::sys::app::sensor_t::dump
void dump(ostream &os) const
us::gov::relay::evidence
Definition: evidence.h:31
us::gov::sys::app
Definition: app.h:63
us::gov::sys::app::delta::b
engine::app::delta b
Definition: app.h:164
us::gov::sys::app::local_delta::local_delta
local_delta(const local_delta &other)
Definition: app.h:137
us::gov::sys::app::sensor_t
Definition: app.h:68
us::gov::sys::app::get_name
string get_name() const override
Definition: app.h:209
us::gov::sys::app::local_delta::from_stream_prev
void from_stream_prev(istream &) override
crypto.h
us::gov::sys::app::sensor_t::iodata
Definition: app.h:79
us::gov::sys::install_script
Definition: install_script.h:32
us::gov::sys::app::local_delta::get_hash
const hash_t & get_hash() const
us::gov::sys::app::local_delta::id
hash_t id
Definition: app.h:148
us::gov::sys::app::delta::delta
delta()
us::gov::sys::app::maintenance
void maintenance(int code, const hash_t &jobid)
us::gov::sys::app::sensor_t::sensor_t
sensor_t()
us::gov::sys::app::delta::merger::merge
void merge(const sensor_t &)
us::gov::sys::app::local_delta::sensor
sensor_t sensor
Definition: app.h:149
us::gov::sys::app::delta
Definition: app.h:163
us::gov::sys::app::db_t::~db_t
~db_t()
us::gov::sys::app::evidence_from_stream
static evidence * evidence_from_stream(uint8_t evid, istream &is)
us::gov::sys::cash_t
int64_t cash_t
Definition: app.h:56