|  | 
| void | on_peer_disconnected (const string &reason) override | 
|  | 
| void | on_connect (ko err) override | 
|  | 
|  | rpc_api (const b::keys &, const string &host, uint16_t port, role_t role, uint16_t pport_pin, dispatcher_t *) | 
|  | 
|  | rpc_api (const b::keys &, const string &host, uint16_t port, role_t role, uint16_t pport_pin, dispatcher_t *, queue_t *sendq) | 
|  | 
|  | ~rpc_api () override | 
|  | 
| const keys & | get_keys () const override | 
|  | 
| bool | authorize (const pub_t &p, uint16_t pin) const override | 
|  | 
| ko | connect (uint16_t pport_pin, ostream *) | 
|  | 
| std::pair< ko, datagram * > | sendrecv (datagram *) | 
|  | 
| ko | send1 (datagram *) override | 
|  | 
| void | wait (const chrono::system_clock::time_point &deadline) | 
|  | 
| virtual queue_t * | create_sendq () | 
|  | 
| void | on_peer_disconnected (const string &reason) override | 
|  | 
| void | on_connect (ko) override | 
|  | 
| ko | start () override | 
|  | 
| ko | wait_ready (const chrono::system_clock::time_point &deadline) const override | 
|  | 
| void | stop () override | 
|  | 
| void | join () override | 
|  | 
| bool | is_active () const | 
|  | 
| void | run_recv () | 
|  | 
| void | onwakeup () | 
|  | 
| ko | wait_connected () | 
|  | 
| ko | wait_connection (bool initiate) | 
|  | 
| bool | is_connected () const | 
|  | 
| void | string_dgram (const datagram &) | 
|  | 
| void | process_work (datagram *) | 
|  | 
| void | set_busy_handlers (busyled_t::handler_t *hsend, busyled_t::handler_t *hrecv) | 
|  | 
|  | rpc_api (KeyPair k, String host_, uint16_t port_, role_t role_, uint16_t pin_, datagram.dispatcher_t dis) | 
|  | 
|  | rpc_api (KeyPair k, String host_, uint16_t port_, role_t role_, uint16_t pin_, datagram.dispatcher_t dis, send_queue sendq_) | 
|  | 
| void | constructor (KeyPair k, String host_, uint16_t port_, role_t role_, uint16_t pin_, datagram.dispatcher_t dis, send_queue sendq_) | 
|  | 
| void | destroy () | 
|  | 
| ko | start () | 
|  | 
| ko | wait_ready (Date deadline) | 
|  | 
| void | stop () | 
|  | 
| void | join () | 
|  | 
| send_queue | create_sendq () | 
|  | 
| pair< ko, datagram > | sendrecv (datagram d) | 
|  | 
| ko | wait_connected () | 
|  | 
| ko | wait_connection (boolean initiate) | 
|  | 
| void | run_body () | 
|  | 
| void | onwakeup () | 
|  | 
| boolean | is_active () | 
|  | 
| ko | send1 (datagram d) | 
|  | 
| void | on_peer_disconnected (final String reason) | 
|  | 
| void | process_work2 (datagram d) | 
|  | 
| KeyPair | get_keys () | 
|  | 
| boolean | authorize (PublicKey p) | 
|  | 
| void | set_busy_handlers (busyled_t.handler_t hsend, busyled_t.handler_t hrecv) | 
|  | 
|  | peer_t (int sock=-1) | 
|  | 
|  | ~peer_t () override | 
|  | 
| void | verification_completed (uint16_t rpport) override | 
|  | 
| virtual bool | authorize (const pub_t &p, uint16_t pin) const =0 | 
|  | 
| void | dump_all (const string &prefix, ostream &os) const override | 
|  | 
| void | dump (const string &prefix, ostream &os) const | 
|  | 
|  | peer_t (Socket sock) | 
|  | 
| override void | verification_completed () | 
|  | 
| virtual bool | authorize (byte[] pub) | 
|  | 
|  | peer_t (Socket sock) | 
|  | 
| void | verification_completed (uint16_t rpport) | 
|  | 
|  | peer_t (int sock) | 
|  | 
| ko | connect (const string &host, uint16_t port, uint16_t pport, role_t, bool block) | 
|  | 
| virtual ko | connect (uint32_t host, uint16_t port, uint16_t pport, role_t, bool block) | 
|  | 
| virtual void | verification_completed (uint16_t rpport) | 
|  | 
| void | dump (const string &prefix, ostream &os) const | 
|  | 
| bool | process_work (datagram *d) | 
|  | 
| void | process_request (datagram *d, const keys &) | 
|  | 
| void | process_peer_challenge (datagram *d, const keys &) | 
|  | 
| void | process_challenge_response (datagram *d) | 
|  | 
| ko | initiate_dialogue (role_t role, uint16_t pport_pin) | 
|  | 
| bool | verification_is_fine () const | 
|  | 
| string | short_version () const | 
|  | 
| ko | turn_on_encryption () | 
|  | 
| ko | wait_auth () const | 
|  | 
| pair< ko, datagram * > | encrypt0 (datagram *) const override | 
|  | 
| pair< ko, datagram * > | decrypt0 (datagram *) const override | 
|  | 
| void | disconnect (uint16_t seq, const string &reason) override | 
|  | 
| stage_t | get_stage_peer () const | 
|  | 
| void | set_stage_peer (stage_t) | 
|  | 
| daemon * | get_parent () | 
|  | 
| const daemon * | get_parent () const | 
|  | 
| bool | is_role_peer () const | 
|  | 
| bool | is_role_sysop () const | 
|  | 
| bool | is_role_device () const | 
|  | 
|  | peer_t (Socket sock) | 
|  | 
| String | connect (String host, int port, char role, bool block) | 
|  | 
| override bool | process_work (datagram d) | 
|  | 
| void | process_request (datagram d, KeyPair mykeys) | 
|  | 
| void | process_peer_challenge (datagram d, KeyPair mykeys) | 
|  | 
| void | process_challenge_response (datagram d) | 
|  | 
| void | initiate_dialogue (char role) | 
|  | 
| bool | verification_is_fine () | 
|  | 
| String | run_auth_responder () | 
|  | 
| ko | connect (String host, uint16_t port, uint16_t pport_pin, role_t role, boolean block) | 
|  | 
| ko | connect (String endpoint, uint16_t pport_pin, role_t role, boolean block) | 
|  | 
| boolean | process_work (datagram d) | 
|  | 
| ko | initiate_dialogue (role_t role, uint16_t pport) | 
|  | 
| void | process_request (datagram d, KeyPair mykeys) | 
|  | 
| void | process_peer_challenge (datagram d, KeyPair mykeys) | 
|  | 
| void | process_challenge_response (datagram d) | 
|  | 
| ko | turn_on_encryption () | 
|  | 
| pair< ko, datagram > | encrypt0 (datagram d) | 
|  | 
| pair< ko, datagram > | decrypt0 (datagram e) | 
|  | 
| boolean | verification_is_fine () | 
|  | 
| void | verification_completed (uint16_t rpport) | 
|  | 
| ko | wait_auth () | 
|  | 
|  | peer_t () | 
|  | 
|  | peer_t (int sock) | 
|  | 
|  | peer_t (const peer_t &)=delete | 
|  | 
| peer_t & | operator= (const peer_t &)=delete | 
|  | 
|  | ~peer_t () override | 
|  | 
| void | dump_all (const string &prefix, ostream &os) const override | 
|  | 
| pair< security_level_t, string > | security_level () const override | 
|  | 
| bool | stalled_datagram () const | 
|  | 
| bool | process_work (datagram *d) | 
|  | 
| void | dump (const string &prefix, ostream &os) const | 
|  | 
|  | peer_t () | 
|  | 
|  | peer_t (Socket sock) | 
|  | 
| bool | is_slow () | 
|  | 
| bool | ping () | 
|  | 
| void | process_pong () | 
|  | 
|  | peer_t () | 
|  | 
|  | client () | 
|  | 
|  | client (int sock) | 
|  | 
| virtual | ~client () | 
|  | 
| ko | connect0 (uint32_t host, uint16_t port, bool block) | 
|  | 
| ko | connect0 (const string &host, uint16_t port, bool block) | 
|  | 
| bool | connected () const | 
|  | 
| pair< uint32_t, uint16_t > | raddress () const | 
|  | 
| pair< ko, datagram * > | recv4x (datagram *d) | 
|  | 
| pair< ko, datagram * > | recv6 () | 
|  | 
| ko | init_sock2 (uint32_t host, uint16_t port, bool block) | 
|  | 
| void | dump (const string &prefix, ostream &os) const | 
|  | 
| string | refdata () const | 
|  | 
| string | endpoint () const | 
|  | 
| void | prepare_worker_recv () | 
|  | 
| void | worker_ended_recv () | 
|  | 
| void | set_finished () | 
|  | 
| bool | is_finished () const | 
|  | 
| void | test_alive () | 
|  | 
| void | ping () | 
|  | 
|  | client () | 
|  | 
|  | client (Socket sock_) | 
|  | 
| String | connect0 (String host, int port) | 
|  | 
| String | connect0 (String host, int port, bool block) | 
|  | 
| void | disconnect () | 
|  | 
| bool | connected () | 
|  | 
| bool | IsConnected () | 
|  | 
| String | address () | 
|  | 
| void | ready () | 
|  | 
| pair< String, datagram > | send_recv3 (datagram d) | 
|  | 
| pair< String, datagram > | recv6 () | 
|  | 
| pair< String, datagram > | recv3 () | 
|  | 
| pair< String, datagram > | recv4 (datagram d) | 
|  | 
| String | send3 (datagram d) | 
|  | 
|  | client () | 
|  | 
|  | client (Socket sock_) | 
|  | 
| void | prepare_worker_recv () | 
|  | 
| void | worker_ended_recv () | 
|  | 
| ko | connect0 (String host, uint16_t port) | 
|  | 
| ko | connect0 (String host, uint16_t hport, boolean block) | 
|  | 
| void | disconnect (uint16_t seq, String reason) | 
|  | 
| boolean | connected () | 
|  | 
| String | address () | 
|  | 
| String | endpoint () | 
|  | 
| pair< ko, datagram > | recv6 () | 
|  | 
| pair< ko, datagram > | recv4x (datagram d) | 
|  | 
| boolean | is_finished () | 
|  | 
| void | dump (String prefix, PrintStream os) | 
|  | 
| void | test_alive () | 
|  | 
|  | bgtask () | 
|  | 
|  | bgtask (function< void()> run, function< void()> onwakeup) | 
|  | 
| virtual | ~bgtask () | 
|  | 
| void | set_run_function (function< void()> r) | 
|  | 
| void | wakeup () | 
|  | 
| bool | isup () const | 
|  | 
| bool | isdown () const | 
|  | 
| bool | resumed () const | 
|  | 
| void | run_ () | 
|  | 
| void | reset () | 
|  | 
| bool | reset_wait () | 
|  | 
| bool | reset_resume () | 
|  | 
| bool | is_active () const | 
|  | 
|  | bgtask () | 
|  | 
|  | bgtask (callback cb0) | 
|  | 
| void | set_callback (callback r) | 
|  | 
| void | run () | 
|  | 
| boolean | reset_wait () | 
|  | 
| void | wakeup () | 
|  | 
| boolean | reset_resume () | 
|  | 
| boolean | isup () | 
|  | 
| boolean | isdown () | 
|  | 
| boolean | resumed () | 
|  | 
| void | reset () | 
|  | 
|  | 
| static string | to_string (const vector< unsigned char > &data) | 
|  | 
| static String | get_random_message () | 
|  | 
| static uint32_t | host2addr (const string &host) | 
|  | 
| static string | age (uint64_t msts) | 
|  | 
| static string | age (chrono::system_clock::time_point time) | 
|  | 
| static string | ip4_decode (uint32_t addr) | 
|  | 
| static uint32_t | ip4_encode (const string &addr) | 
|  | 
| static bool | is_wan_ip (uint32_t) | 
|  | 
| static bool | is_valid_ip (uint32_t) | 
|  | 
| static string | endpoint (uint32_t addr, uint16_t port) | 
|  | 
| static string | endpoint (const pair< uint32_t, uint16_t > &ip) | 
|  | 
| static pair< ko, pair< string, uint16_t > > | parse_endpoint (const string &ipport) | 
|  | 
| static pair< ko, pair< String, Short > > | parse_endpoint (String ipport) | 
|  | 
| static String | ip4_decode (uint32_t addr0) | 
|  | 
| static uint32_t | ip4_encode (String addr0) | 
|  | 
| static String | endpoint (uint32_t a, uint16_t p) | 
|  | 
| static String | endpoint (String a, uint16_t p) | 
|  | 
| static const char * | KO_40928 | 
|  | 
| static const char * | KO_10210 | 
|  | 
| static const char * | KO_3029 | 
|  | 
| static ko | KO_3029 =new ko("KO 3029.2 Timeout") | 
|  | 
| static ko | KO_40928 =new ko("KO 40928 Unable to parse response datagram.") | 
|  | 
| constexpr static array< const char *, num_stages > | stagestr ={"denied","authorized"} | 
|  | 
| static const char * | KO_6017 | 
|  | 
| constexpr static array< const char *, num_stages > | stagestr ={"anonymous","verified","verified_fail"} | 
|  | 
| constexpr static array< const char *, num_roles > | rolestr ={"peer","sysop","device"} | 
|  | 
| static ko | KO_6017 =new ko("KO 6017 authentication failed.") | 
|  | 
| static final String[] | stagestr = {"anonymous","verified","verified_fail"} | 
|  | 
| static final ko | KO_43823 =new ko("KO 43823 Invalid endpoint") | 
|  | 
| constexpr static chrono::seconds | stall {5s} | 
|  | 
| static const char * | finished_reason_1 | 
|  | 
| static const char * | finished_reason_2 | 
|  | 
| static const char * | KO_7190 | 
|  | 
| static const char * | KO_58961 | 
|  | 
| static const char * | KO_60541 | 
|  | 
| static const char * | KO_10100 | 
|  | 
| static const char * | KO_20190 | 
|  | 
| static const char * | KO_20191 | 
|  | 
| static busyled_t | busyled_recv =new busyled_t() | 
|  | 
| static struct timeval | timeout | 
|  | 
| static final ko | KO_58961 =new ko("KO 58961 Invalid port.") | 
|  | 
| static final ko | KO_83911 =new ko("KO 83911 IO Exception.") | 
|  | 
| static final ko | KO_83912 =new ko("KO 83912 Exception.") | 
|  | 
| static final ko | KO_10100 =new ko("KO 10100 Unreachable host.") | 
|  | 
| static final ko | KO_20190 =new ko("KO 20190 Invalid endpoint port.") | 
|  | 
| static final ko | KO_20191 =new ko("KO 20191 Invalid endpoint host.") | 
|  | 
| static long | prev_uid =0 | 
|  | 
| static const char * | KO_81021 | 
|  | 
| static ko | KO_81021 =new ko("KO 81021 Ready status never reached.") | 
|  | 
| atomic< short > | resume {0} | 
|  | 
| thread * | th {nullptr} | 
|  | 
| bool | active {false} | 
|  | 
| function< void()> | run | 
|  | 
| function< void()> | onwakeup | 
|  | 
| mutex | mx_ready | 
|  | 
| bool | ready {false} | 
|  | 
| condition_variable | cv_ready | 
|  | 
| AtomicInteger | resume =new AtomicInteger(0) | 
|  | 
| Thread | th =null | 
|  | 
| boolean | active =false | 
|  | 
| callback | cb =null | 
|  | 
| ReentrantLock | mx_ready = new ReentrantLock() | 
|  | 
| boolean | ready =false | 
|  | 
| Condition | cv_ready =mx_ready.newCondition() | 
|  | 
| void | wait (Date deadline) | 
|  | 
| boolean | is_connected () | 
|  | 
| ko | connect (uint16_t pport_pin, PrintStream os) | 
|  | 
| boolean | is_role_peer () | 
|  | 
| boolean | is_role_sysop () | 
|  | 
| boolean | is_role_device () | 
|  | 
| void | set_stage_peer (stage_t s) | 
|  | 
| stage_t | get_stage_peer () | 
|  | 
| String | short_version () | 
|  | 
| String | refdata () | 
|  | 
| void | set_finished () | 
|  | 
| ReentrantLock | lock_recv =new ReentrantLock() | 
|  | 
| Condition | cv_recv =lock_recv.newCondition() | 
|  | 
| ReentrantLock | lock_connect =new ReentrantLock() | 
|  | 
| Condition | cv_connected =lock_connect.newCondition() | 
|  | 
| String | host | 
|  | 
| KeyPair | id | 
|  | 
| long | connected_since | 
|  | 
| boolean | ownsendq | 
|  | 
| datagram.dispatcher_t | dispatcher | 
|  | 
| Date | last_try_connect =new Date(System.currentTimeMillis()-ms) | 
|  | 
| uint16_t | daemon_pport =uint16_t.zero | 
|  | 
| handshakes_t | handshakes =null | 
|  | 
| ReentrantLock | mx_auth = new ReentrantLock() | 
|  | 
| Condition | cv_auth =mx_auth.newCondition() | 
|  | 
| symmetric_encryption | se =null | 
|  | 
| pair< uint16_t, String > | finished_reason =new pair<uint16_t, String>(new uint16_t(0), "") | 
|  | 
| AtomicBoolean | finished =new AtomicBoolean(false) | 
|  | 
| AtomicInteger | busyrecv =new AtomicInteger(0) | 
|  | 
| boolean | called_disconnect =false | 
|  | 
| long | activity_recv | 
|  | 
| long | last_test_alive | 
|  | 
| AtomicLong | activity =new AtomicLong(0L) | 
|  | 
| static datagram | waiting_arrival =new datagram(0) | 
|  |