|
plebble
|
#include <peer_t.h>


Classes | |
| class | handshake_t |
| class | handshakes_t |
| enum | role_t |
| enum | stage_t |
Public Types | |
| enum | stage_t { anonymous =0, verified, verified_fail, num_stages, stage_t.anonymous = 0, stage_t.verified = 1, stage_t.verified_fail = 2, stage_t.num_stages = 3 } |
| enum | role_t { role_peer =0, role_sysop =1, role_device =2, num_roles } |
| enum | stage_t { anonymous =0, verified, verified_fail, num_stages, stage_t.anonymous = 0, stage_t.verified = 1, stage_t.verified_fail = 2, stage_t.num_stages = 3 } |
| typedef socket::peer_t | b |
| typedef crypto::ec::keys | keys |
| typedef keys::pub_t | pub_t |
| typedef pub_t::hash_t | hash_t |
| using | datagram = socket::datagram |
Public Types inherited from us::gov::socket::peer_t | |
| typedef client | b |
Public Types inherited from us::gov::socket::client | |
| enum | security_level_t { security_level_ok, security_level_disconnect, security_level_ban } |
| typedef us::gov::socket::send_queue_t | queue_t |
Public Member Functions | |
| peer_t (int sock) | |
| virtual | ~peer_t () |
| 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) |
| virtual const keys & | get_keys () const |
| virtual void | dump_all (const string &prefix, ostream &os) const override |
| 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 () |
| virtual void | verification_completed () |
| virtual KeyPair | get_keys () |
| String | run_auth_responder () |
| peer_t (Socket sock) | |
| 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) |
| KeyPair | get_keys () |
| ko | wait_auth () |
Public Member Functions inherited from us::gov::socket::peer_t | |
| 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 |
| virtual void | on_peer_disconnected (const string &reason) |
| peer_t () | |
| peer_t (Socket sock) | |
| bool | is_slow () |
| bool | ping () |
| void | process_pong () |
| peer_t () | |
| void | on_peer_disconnected (String reason) |
Public Member Functions inherited from us::gov::socket::client | |
| 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 |
| virtual void | on_connect (ko) |
| 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 |
| virtual ko | send1 (datagram *) |
| 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 () |
| void | on_connect (ko err) |
| 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 () |
| ko | send1 (datagram d0) |
Static Public Member Functions | |
| static string | to_string (const vector< unsigned char > &data) |
| static String | get_random_message () |
Static Public Member Functions inherited from us::gov::socket::client | |
| 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) |
Public Attributes | |
| stage_t | stage_peer {anonymous} |
| handshakes_t * | handshakes {nullptr} |
| role_t | role {role_peer} |
| pub_t | pubkey |
| uint16_t | version_fingerprint {0} |
| mutex | mx_auth |
| condition_variable | cv_auth |
| crypto::symmetric_encryption * | se {nullptr} |
| byte[] | pubkey |
| PublicKey | pubkey =null |
Public Attributes inherited from us::gov::socket::peer_t | |
| datagram * | curd {nullptr} |
| mutex | mx_curd |
Public Attributes inherited from us::gov::socket::client | |
| chrono::system_clock::time_point | since |
| chrono::system_clock::time_point | activity_recv |
| chrono::system_clock::time_point | last_test_alive |
| atomic< uint64_t > | activity |
| atomic< int > | busyrecv {0} |
| int | sock =null |
| uint32_t | address |
| uint16_t | port |
| atomic< int > | sendref {0} |
| server * | parent {nullptr} |
| queue_t * | sendq {nullptr} |
| pair< uint16_t, string > | finished_reason |
| atomic< bool > | finished {false} |
| Socket | sock =null |
| long | since |
| send_queue | sendq =null |
| AtomicInteger | sendref =new AtomicInteger(0) |
| long | uid =++prev_uid |
Static Public Attributes | |
| 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") |
Static Public Attributes inherited from us::gov::socket::peer_t | |
| constexpr static chrono::seconds | stall {5s} |
| static const char * | finished_reason_1 |
| static const char * | finished_reason_2 |
Static Public Attributes inherited from us::gov::socket::client | |
| 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 |
Package Functions | |
| 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 () |
Package Functions inherited from us::gov::socket::client | |
| String | refdata () |
| void | set_finished () |
Package Attributes | |
| 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 |
Package Attributes inherited from us::gov::socket::client | |
| 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) |
Private Attributes | |
| String | msg |
| typedef socket::peer_t us::gov::id::peer_t::b |
|
strong |
| us::gov::id::peer_t::peer_t | ( | int | sock | ) |
|
virtual |
Reimplemented in us::gov::peer::peer_t, us::gov::engine::peer_t, and us::gov::auth::peer_t.
|
inline |
Reimplemented from us::gov::socket::peer_t.
|
inline |
Reimplemented from us::gov::socket::peer_t.
Reimplemented in us::gov::auth::peer_t, and us::gov::auth::peer_t.
References us::gov::socket::client.sock.
| ko us::gov::id::peer_t::connect | ( | const string & | host, |
| uint16_t | port, | ||
| uint16_t | pport, | ||
| role_t | , | ||
| bool | block | ||
| ) |
Referenced by connect(), and us.wallet.rpc_api::connect_walletd().

|
inline |
References connect(), us::gov::socket::client.endpoint(), KO_43823, us::gov::socket::client.KO_58961, us::gov::socket::client.on_connect(), us::gov::socket::client.port, and role.

|
inline |
References initiate_dialogue(), us::gov::socket::client.port, and role.

|
inline |
References initiate_dialogue(), us.ko.is_ok(), us::gov::socket::client.port, and role.

|
virtual |
Reimplemented from us::gov::socket::client.
Reimplemented from us::gov::socket::client.
References us::gov::socket::datagram.decrypt(), us.ok, se, and us::gov::socket::datagram.service.

|
overridevirtual |
Reimplemented from us::gov::socket::client.
Reimplemented in us::gov::peer::peer_t.
| void us::gov::id::peer_t::dump | ( | const string & | prefix, |
| ostream & | os | ||
| ) | const |
|
overridevirtual |
Reimplemented from us::gov::socket::client.
Reimplemented in us::gov::peer::peer_t, us::gov::engine::peer_t, and us::gov::auth::peer_t.
Reimplemented from us::gov::socket::client.
Reimplemented from us::gov::socket::client.
References us::gov::socket::datagram.decode_service(), us::gov::socket::datagram.encrypt(), us.gov.socket.client.pair< f, s >.first, us.ko.is_ko(), us.ok, se, and us.gov.protocol.svc_encrypted_from.

|
inlinevirtual |
Reimplemented in us::gov::cli::rpc_api, and us.wallet.rpc_api.
|
inline |
Reimplemented in us::gov::cli::rpc_api, and us.wallet.rpc_api.
|
virtual |
Reimplemented in test_client, us::gov::engine::peer_t, and us::gov::cli::rpc_api.
Referenced by process_work(), and turn_on_encryption().

| daemon* us::gov::id::peer_t::get_parent | ( | ) |
| const daemon* us::gov::id::peer_t::get_parent | ( | ) | const |
|
inlinestatic |
References us.gov.crypto.base58.encode().
Referenced by initiate_dialogue(), and process_request().


|
inlinepackage |
References mx_auth, and stage_peer.
| stage_t us::gov::id::peer_t::get_stage_peer | ( | ) | const |
Referenced by turn_on_encryption(), and verification_is_fine().

|
inline |
References get_random_message(), us.gov.protocol.gov_id_request, msg, role, and us::gov::socket::client.send3().

References us.gov.id.peer_t.stage_t.anonymous, us.gov.protocol.gov_id_request, handshakes, us::gov::id::peer_t::handshakes_t.me, us::gov::id::peer_t::handshake_t.msg, us::gov::id::peer_t::handshake_t.parse_role(), pubkey, role, se, us::gov::socket::client.send1(), and set_stage_peer().

|
inlinepackage |
References role, and us.gov.id.peer_t.role_t.role_device.
|
inline |
|
inlinepackage |
References role, and us.gov.id.peer_t.role_t.role_peer.
|
inline |
|
inlinepackage |
References role, and us.gov.id.peer_t.role_t.role_sysop.
|
inline |
| void us::gov::id::peer_t::process_challenge_response | ( | datagram * | d | ) |
|
inline |
References us.gov.crypto.base58.decode(), us::gov::crypto::ec.Instance, msg, us::gov::socket::datagram.parse_string(), pubkey, stage_peer, verification_completed(), us.gov.id.peer_t.stage_t.verified, us.gov.id.peer_t.stage_t.verified_fail, and us::gov::crypto::ec.verify().

|
inline |
References cv_auth, us::gov::socket::client.disconnect(), us.gov.socket.client.pair< f, s >.first, us::gov::socket::datagram.get_sequence(), handshakes, us::gov::crypto::ec.instance, us.ko.is_ko(), us::gov::id::peer_t::handshakes_t.me, us::gov::id::peer_t::handshake_t.msg, us.ko.msg, mx_auth, us::gov::id::peer_t::handshake_t.parse_pport(), us::gov::socket::datagram.parse_pv(), us::gov::id::peer_t::handshakes_t.peer, pubkey, us.gov.socket.client.pair< f, s >.second, set_stage_peer(), turn_on_encryption(), verification_completed(), us.gov.id.peer_t.stage_t.verified, us.gov.id.peer_t.stage_t.verified_fail, and us::gov::crypto::ec.verify().

|
inline |
References us.gov.crypto.base58.decode(), us.gov.protocol.gov_id_challenge_response, us::gov::crypto::ec.Instance, msg, us::gov::socket::datagram.parse_string(), pubkey, us::gov::socket::client.send3(), us::gov::crypto::ec.sign_encode(), stage_peer, us::gov::crypto::ec.to_b58(), verification_completed(), us.gov.id.peer_t.stage_t.verified, us.gov.id.peer_t.stage_t.verified_fail, and us::gov::crypto::ec.verify().

|
inline |
References cv_auth, us::gov::socket::client.disconnect(), us::gov::socket::datagram.get_sequence(), us.gov.protocol.gov_id_challenge_response, handshakes, us::gov::crypto::ec.instance, us.ko.is_ko(), us::gov::id::peer_t::handshakes_t.me, us::gov::id::peer_t::handshake_t.msg, us.ko.msg, mx_auth, us::gov::socket::datagram.parse_Hpv(), us::gov::id::peer_t::handshake_t.parse_pport(), us::gov::id::peer_t::handshake_t.parse_role(), us::gov::id::peer_t::handshakes_t.peer, pubkey, role, us.gov.id.peer_t.role_t.role_device, us.gov.id.peer_t.role_t.role_peer, us.gov.id.peer_t.role_t.role_sysop, us::gov::socket::client.send1(), set_stage_peer(), us::gov::crypto::ec.sign(), turn_on_encryption(), verification_completed(), us.gov.id.peer_t.stage_t.verified, us.gov.id.peer_t.stage_t.verified_fail, and us::gov::crypto::ec.verify().

|
inline |
References get_random_message(), us.gov.protocol.gov_id_peer_challenge, us::gov::crypto::ec.Instance, msg, us::gov::socket::datagram.parse_string(), us::gov::socket::client.send3(), us::gov::crypto::ec.sign_encode(), and us::gov::crypto::ec.to_b58().

|
inline |
References daemon_pport, us::gov::socket::client.disconnect(), us::gov::socket::datagram.get_sequence(), us.gov.protocol.gov_id_peer_challenge, handshakes, us::gov::crypto::ec.instance, us.ko.is_ko(), us::gov::id::peer_t::handshakes_t.me, us::gov::id::peer_t::handshake_t.msg, us::gov::socket::datagram.parse_H(), us::gov::id::peer_t::handshake_t.parse_role(), us::gov::id::peer_t::handshakes_t.peer, role, us.gov.id.peer_t.role_t.role_device, us.gov.id.peer_t.role_t.role_peer, us.gov.id.peer_t.role_t.role_sysop, us::gov::socket::client.send1(), set_stage_peer(), us::gov::crypto::ec.sign(), and us.gov.id.peer_t.stage_t.verified_fail.

| bool us::gov::id::peer_t::process_work | ( | datagram * | d | ) |
|
inlinevirtual |
Reimplemented from us::gov::socket::peer_t.
References get_keys(), us.gov.protocol.gov_id_challenge_response, us.gov.protocol.gov_id_peer_challenge, us.gov.protocol.gov_id_request, process_challenge_response(), process_peer_challenge(), process_request(), and us::gov::socket::datagram.service.

|
inlinevirtual |
Reimplemented from us::gov::socket::peer_t.
References get_keys(), us.gov.protocol.gov_id_challenge_response, us.gov.protocol.gov_id_peer_challenge, us.gov.protocol.gov_id_request, process_challenge_response(), process_peer_challenge(), process_request(), and us::gov::socket::datagram.service.

|
inline |
References us.gov.id.peer_t.stage_t.anonymous, us.gov.socket.client.pair< f, s >.first, process_work(), us::gov::socket::client.recv6(), us.gov.socket.client.pair< f, s >.second, stage_peer, us.gov.id.peer_t.stage_t.verified, and us.gov.id.peer_t.stage_t.verified_fail.
Referenced by us.wallet.rpc_api.connect_walletd().


|
inlinepackage |
References mx_auth, and stage_peer.
| void us::gov::id::peer_t::set_stage_peer | ( | stage_t | ) |
Referenced by initiate_dialogue(), process_challenge_response(), process_peer_challenge(), and process_request().

|
inlinepackage |
References us.gov.crypto.base58.encode(), and version_fingerprint.

| string us::gov::id::peer_t::short_version | ( | ) | const |
|
static |
| ko us::gov::id::peer_t::turn_on_encryption | ( | ) |
Referenced by process_challenge_response(), and process_peer_challenge().

|
inline |
References get_keys(), get_stage_peer(), us::gov::crypto::symmetric_encryption.init(), us.ko.is_ko(), us.ok, pubkey, se, and us.gov.id.peer_t.stage_t.verified.

|
inlinevirtual |
Reimplemented in us::gov::auth::peer_t.
Referenced by process_challenge_response(), and process_peer_challenge().

|
inlinevirtual |
Reimplemented in test_client, us::gov::engine::peer_t, and us.wallet.daemon.rpc_api.endpoint_t.
|
inline |
Reimplemented in test_client, us::gov::engine::peer_t, and us.wallet.daemon.rpc_api.endpoint_t.
|
inline |
References stage_peer, and us.gov.id.peer_t.stage_t.verified.
|
inline |
References get_stage_peer(), and us.gov.id.peer_t.stage_t.verified.

|
inline |
Referenced by us::gov::auth::peer_t::verification_completed(), and us.wallet.daemon.rpc_api.endpoint_t::verification_completed().

|
inline |
| ko us::gov::id::peer_t::wait_auth | ( | ) | const |
Referenced by us::gov::cli::rpc_api::send1(), and us.wallet.daemon.rpc_api::wait_auth().

|
mutable |
Referenced by process_challenge_response(), process_peer_challenge(), and wait_auth().
|
package |
|
package |
Referenced by process_request().
| handshakes_t* us::gov::id::peer_t::handshakes {nullptr} |
Referenced by initiate_dialogue(), process_challenge_response(), process_peer_challenge(), and process_request().
|
package |
Referenced by connect().
|
static |
Referenced by wait_auth().
|
private |
|
mutable |
Referenced by get_stage_peer(), process_challenge_response(), process_peer_challenge(), set_stage_peer(), and wait_auth().
|
package |
| pub_t us::gov::id::peer_t::pubkey |
| byte [] us.gov.id.peer_t.pubkey |
| PublicKey us.gov.id.peer_t.pubkey =null |
|
staticconstexpr |
Referenced by us::gov::id::peer_t::handshake_t::dump(), and us.gov.id.peer_t.role_t::str().
|
mutable |
Referenced by decrypt0(), encrypt0(), initiate_dialogue(), and turn_on_encryption().
|
package |
| stage_t us::gov::id::peer_t::stage_peer {anonymous} |
|
staticconstexpr |
|
static |
| uint16_t us::gov::id::peer_t::version_fingerprint {0} |
Referenced by us::gov::id::peer_t::handshake_t::handshake_t(), and short_version().