plebble
rpc_api.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_be7dc84108784c4af35dada40b3f9b325e2d9f0782781c75529a2c286e0cfa5c
18 #define USGOV_be7dc84108784c4af35dada40b3f9b325e2d9f0782781c75529a2c286e0cfa5c
19 
20 #include <us/gov/auth/peer_t.h>
21 #include <us/gov/socket/client.h>
22 #include <us/gov/socket/busyled.h>
23 #include <us/gov/socket/datagram.h>
24 #include <chrono>
25 #include <thread>
26 #include <condition_variable>
27 #include <mutex>
28 #include <atomic>
29 #include <stack>
30 #include <us/gov/bgtask.h>
31 #include <us/gov/config.h>
32 
33 namespace us { namespace gov {
34 namespace cli {
35 
36 using namespace std;
37 
40  typedef bgtask recv;
44  using b::pub_t;
45 
46  struct rendezvous_t final:unordered_map<uint16_t,datagram*> {
47  static const char* KO_76103;
50  bool arrived(datagram *);
51  std::pair<ko,datagram*> sendrecv(rpc_api& endpoint, datagram*d);
52 
53  void flush();
54 
55  uint16_t next_seq{0};
56  mutex mx;
57  condition_variable cv;
58  bool finished{false};
59  };
60 
61  static const char* KO_40928;
62  static const char* KO_10210;
63 
64 
65  rpc_api(const b::keys&, const string& host, uint16_t port, role_t role, uint16_t pport_pin, dispatcher_t*);
66  rpc_api(const b::keys&, const string& host, uint16_t port, role_t role, uint16_t pport_pin, dispatcher_t*, queue_t* sendq);
67  ~rpc_api() override;
68  inline const keys& get_keys() const override { return id; }
69  inline bool authorize(const pub_t& p, uint16_t pin) const override { return true; }
70 
71  //static const char* KO_30928;
72 /*
73  void ask_void(uint16_t service, ostream&os);
74  void ask_string(uint16_t service, const string& args, ostream&os);
75  void ask_void(uint16_t service);
76  void ask_string(uint16_t service, const string& args);
77 */
78  // ko ask_void(uint16_t service);
79  // ko ask_string(uint16_t service, const string& args);
80 
81  // template<typename... args>
82  // datagram* mk_datagram(uint16_t service, args... a) {
83  // return new datagram(service,0,a...);
84  // }
85 /*
86  ko ans_string(datagram* d, ostream&os);
87  ko ask_hsh_ans_string(uint16_t service, const hash_t&, const string&, const hash_t&, ostream&os);
88  ko ask_ss_ans_string(uint16_t service, const string&s1, const string&s2, ostream&os);
89  ko ask_sss_ans_string(uint16_t service, const string&s1, const string&s2, const string&s3, ostream&os);
90  ko ask_hs_ans_string(uint16_t service, const hash_t&h, const string&s, ostream&os);
91  ko ask_void_ans_string(uint16_t service, ostream&os);
92  ko ask_string_ans_string(uint16_t service, const string& args, ostream&os);
93 */
94 
95  ko connect(uint16_t pport_pin, ostream*);
96  std::pair<ko,datagram*> sendrecv(datagram*);
97  ko send1(datagram*) override;
98 // void wait(int ms);
99  void wait(const chrono::system_clock::time_point& deadline);
100  virtual queue_t* create_sendq();
101  void on_peer_disconnected(const string& reason) override;
102  void on_connect(ko) override;
103 
104  ko start() override;
105  ko wait_ready(const chrono::system_clock::time_point& deadline) const override;
106  void stop() override;
107  void join() override;
108  bool is_active() const;
109  void run_recv();
110  void onwakeup();
112  ko wait_connection(bool initiate);
113  bool is_connected() const;
114  void string_dgram(const datagram&);
116 
118 
119  static const char* KO_3029;
120  //static const char* KO_30112;
121 
122  condition_variable cv_recv;
123  condition_variable cv_connected;
124  string host;
125  uint16_t port;
127  chrono::system_clock::time_point connected_since;
128  bool ownsendq;
130  uint16_t pport_pin;
131  bool connect_for_recv{true};
132  bool stop_on_disconnection{true};
133  mutable mutex mx_connect;
135  stack<ostream*> cinfo;
138  int ms{10000}; //wait after failed connection
139  chrono::system_clock::time_point last_try_connect{chrono::system_clock::now()-chrono::milliseconds(ms)};
140 
141  #if CFG_LOGS==1
142  string logdir;
143  #endif
144 };
145 
146 }
147 }}
148 
149 #endif
us::gov::cli::rpc_api::join
void join() override
us::gov::cli::rpc_api::rendezvous_t::KO_76103
static const char * KO_76103
Definition: rpc_api.h:47
us::gov::id::peer_t::connect
ko connect(const string &host, uint16_t port, uint16_t pport, role_t, bool block)
us::is_ko
static bool is_ko(const std::string &s)
Definition: ko.h:30
us::gov::cli::rpc_api::rendezvous_t::rendezvous_t
rendezvous_t()
c
us::gov::cli::rpc_api c
Definition: rpc_api.cpp:26
us::gov::cli::rpc_api::rendezvous_t::cv
condition_variable cv
Definition: rpc_api.h:57
us::gov::cli::rpc_api::rendezvous_t::arrived
bool arrived(datagram *)
bgtask.h
us::gov::cli::rpc_api::on_connect
void on_connect(ko) override
us::gov::socket::client::connected
bool connected() const
Definition: client.h:63
us::gov::cli::rpc_api::string_dgram
void string_dgram(const datagram &)
us::gov::cli::rpc_api::stop
void stop() override
us::gov::cli::rpc_api::wait_ready
ko wait_ready(const chrono::system_clock::time_point &deadline) const override
us::gov::id::peer_t::role_t
role_t
Definition: peer_t.h:52
us.ko
Definition: ko.java:20
us::gov::socket::datagram::decode_sequence
uint16_t decode_sequence() const
us::gov::cli::rpc_api::busyled_recv
busyled_t busyled_recv
Definition: rpc_api.h:137
us::gov::cli::rpc_api::onwakeup
void onwakeup()
log_start
#define log_start
Definition: gov.h:85
us
Definition: daemon.h:22
us::gov::cli::rpc_api::is_connected
bool is_connected() const
us::gov::cli::rpc_api::run_recv
void run_recv()
unlikely
#define unlikely(x)
Definition: likely.h:30
us::gov::cli::rpc_api::sendrecv
std::pair< ko, datagram * > sendrecv(datagram *)
us::gov::cli::rpc_api::cinfo
stack< ostream * > cinfo
Definition: rpc_api.h:135
us::gov::socket::busyled_t
Definition: busyled.h:27
us::gov::cli::rpc_api::cv_recv
condition_variable cv_recv
Definition: rpc_api.h:122
us::gov::socket::queue_t
Definition: send_queue.h:48
us::gov::cli::rpc_api::rendezvous_t
Definition: rpc_api.h:46
us::gov::cli::rpc_api::dispatcher
dispatcher_t * dispatcher
Definition: rpc_api.h:136
us::gov::cli::rpc_api::KO_40928
static const char * KO_40928
Definition: rpc_api.h:61
us::gov::cli::rpc_api::cv_connected
condition_variable cv_connected
Definition: rpc_api.h:123
us::gov::cli::rpc_api::process_work
void process_work(datagram *)
us::gov::cli::rpc_api::~rpc_api
~rpc_api() override
us::gov::cli::rpc_api::role
role_t role
Definition: rpc_api.h:129
us::gov::cli::rpc_api::port
uint16_t port
Definition: rpc_api.h:125
us::gov::cli::rpc_api::KO_10210
static const char * KO_10210
Definition: rpc_api.h:62
us::gov::cli::rpc_api::wait_connected
ko wait_connected()
us::gov::crypto::ec::keys::pub_t
Definition: ec.h:44
us::gov::cli::rpc_api::is_active
bool is_active() const
us::gov::cli::rpc_api::get_keys
const keys & get_keys() const override
Definition: rpc_api.h:68
us::gov::socket::datagram
Definition: datagram.h:44
us::gov::cli::rpc_api::wait_connection
ko wait_connection(bool initiate)
us::gov::cli::rpc_api
Definition: rpc_api.h:38
us::gov::cli::rpc_api::send1
ko send1(datagram *) override
us::gov::cli::rpc_api::wait
void wait(const chrono::system_clock::time_point &deadline)
us::gov::auth::peer_t
Definition: peer_t.h:27
us::gov::cli::rpc_api::rendezvous_t::~rendezvous_t
~rendezvous_t()
us::gov::socket::client::on_connect
virtual void on_connect(ko)
us::gov::cli::rpc_api::start
ko start() override
us::gov::socket::datagram::service
uint16_t service
Definition: datagram.h:200
us::gov::cli::rpc_api::b
gov::auth::peer_t b
Definition: rpc_api.h:39
us::gov::engine::auth::pub_t
peer::daemon::pub_t pub_t
Definition: auth_app.h:53
us::gov::cli::rpc_api::recv
bgtask recv
Definition: rpc_api.h:40
us::gov::cli::rpc_api::id
keys id
Definition: rpc_api.h:126
us::gov::socket::busyled_t::handler_t
Definition: busyled.h:28
us::gov
Definition: daemon.h:22
us::gov::cli::rpc_api::KO_3029
static const char * KO_3029
Definition: rpc_api.h:119
us::gov::cli::rpc_api::connected_since
chrono::system_clock::time_point connected_since
Definition: rpc_api.h:127
cash.h
us::ko
const ko_t * ko
Definition: ko.h:27
us::gov::socket::datagram::decode_service
uint16_t decode_service() const
us::gov::cli::rpc_api::mx_connect
mutex mx_connect
Definition: rpc_api.h:133
datagram.h
us::gov::cli::rpc_api::authorize
bool authorize(const pub_t &p, uint16_t pin) const override
Definition: rpc_api.h:69
CFG_DGRAM_ROUNDTRIP_TIMEOUT_SECS
#define CFG_DGRAM_ROUNDTRIP_TIMEOUT_SECS
Definition: config.h:41
rpc_api.h
c
Definition: client.cpp:417
us::ok
static constexpr ko ok
Definition: ko.h:28
us::gov::socket::datagram::encode_sequence
void encode_sequence(uint16_t)
us::gov::cli::rpc_api::rpc_api
rpc_api(const b::keys &, const string &host, uint16_t port, role_t role, uint16_t pport_pin, dispatcher_t *, queue_t *sendq)
us::gov::cash::keys
crypto::ec::keys keys
Definition: app.h:52
us::gov::cli::rpc_api::rpc_api
rpc_api(const b::keys &, const string &host, uint16_t port, role_t role, uint16_t pport_pin, dispatcher_t *)
us::gov::cli::rpc_api::connect
ko connect(uint16_t pport_pin, ostream *)
us::gov::cli::rpc_api::set_busy_handlers
void set_busy_handlers(busyled_t::handler_t *hsend, busyled_t::handler_t *hrecv)
us::gov::id::peer_t::process_work
bool process_work(datagram *d)
std
Definition: app.h:380
us::gov::cli::rpc_api::pport_pin
uint16_t pport_pin
Definition: rpc_api.h:130
us::gov::cli::rpc_api::host
string host
Definition: rpc_api.h:124
us::gov::cli::rpc_api::rendezvous_t::sendrecv
std::pair< ko, datagram * > sendrecv(rpc_api &endpoint, datagram *d)
socket.h
us::gov::socket::client::send1
virtual ko send1(datagram *)
us::gov::socket::datagram::dispatcher_t
Definition: datagram.h:61
peer_t.h
us::gov::crypto::ec::keys
Definition: ec.h:43
config.h
us::gov::cli::rpc_api::rendezvous_t::flush
void flush()
busyled.h
us::gov::cli::rpc_api::on_peer_disconnected
void on_peer_disconnected(const string &reason) override
gov.h
us::gov::cli
Definition: hmi.h:36
us::gov::cli::rpc_api::ownsendq
bool ownsendq
Definition: rpc_api.h:128
us::gov::cli::rpc_api::queue_t
us::gov::socket::client::queue_t queue_t
Definition: rpc_api.h:41
us::gov::cli::rpc_api::rendezvous
rendezvous_t rendezvous
Definition: rpc_api.h:134
us::gov::cli::rpc_api::rendezvous_t::mx
mutex mx
Definition: rpc_api.h:56
client.h
log
#define log
Definition: gov.h:83
us::gov::socket::peer_t::on_peer_disconnected
virtual void on_peer_disconnected(const string &reason)
us::gov::cli::rpc_api::busyled_t
us::gov::socket::busyled_t busyled_t
Definition: rpc_api.h:43
us::gov::cli::rpc_api::create_sendq
virtual queue_t * create_sendq()
us::gov::bgtask
Definition: bgtask.h:31
us::gov::cli::rpc_api::dispatcher_t
us::gov::socket::datagram::dispatcher_t dispatcher_t
Definition: rpc_api.h:42