bbc1.core.bbc_network module¶
Copyright (c) 2017 beyond-blockchain.org.
Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
-
class
bbc1.core.bbc_network.
BBcNetwork
(config, core=None, p2p_port=None, external_ip4addr=None, external_ip6addr=None, loglevel='all', logname=None)[source]¶ Bases:
object
Socket and thread management for infrastructure layers
-
CONFIRM_KEY_EXCHANGE
= b'\x00\x03'¶
-
NOTIFY_LEAVE
= b'\x00\x00'¶
-
REQUEST_KEY_EXCHANGE
= b'\x00\x01'¶
-
RESPONSE_KEY_EXCHANGE
= b'\x00\x02'¶
-
add_neighbor
(domain_id, node_id, ipv4=None, ipv6=None, port=None, is_static=False)[source]¶ Add node in the neighbor list
Parameters: - domain_id (bytes) – target domain_id
- node_id (bytes) – target node_id
- ipv4 (str) – IPv4 address of the node
- ipv6 (str) – IPv6 address of the node
- port (int) – Port number that the node is waiting at
- is_static (bool) – If true, the entry is treated as static one and will be saved in config.json
Returns: True if it is a new entry, None if error.
Return type: bool
-
broadcast_message_in_network
(domain_id, payload_type=1, msg=None)[source]¶ Send message to all neighbor nodes
Parameters: - payload_type (bytes) – message format type
- domain_id (bytes) – target domain_id
- msg (dict) – message to send
Returns: True if successful
Return type: bool
-
check_admin_signature
(domain_id, msg)[source]¶ Check admin signature in the message
Parameters: - domain_id (bytes) – target domain_id
- msg (dict) – received message
Returns: True if valid
Return type: bool
-
create_domain
(domain_id=b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', config=None)[source]¶ Create domain and register user in the domain
Parameters: - domain_id (bytes) – target domain_id to create
- config (dict) – configuration for the domain
Returns: Return type: bool
-
get_domain_keypair
(domain_id)[source]¶ Get domain_keys (private key and public key)
Parameters: domain_id (bytes) – target domain_id
-
include_admin_info_into_message_if_needed
(domain_id, msg, admin_info)[source]¶ Serialize admin info into one binary object and add signature
-
remove_domain
(domain_id=b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')[source]¶ Leave the domain and remove it
Parameters: domain_id (bytes) – target domain_id to remove Returns: True if successful Return type: bool
-
send_domain_ping
(domain_id, ipv4, ipv6, port, is_static=False)[source]¶ Send domain ping to the specified node
Parameters: - domain_id (bytes) – target domain_id
- ipv4 (str) – IPv4 address of the node
- ipv6 (str) – IPv6 address of the node
- port (int) – Port number
- is_static (bool) – If true, the entry is treated as static one and will be saved in config.json
Returns: True if successful
Return type: bool
-
send_key_exchange_message
(domain_id, node_id, command, pubkey, nonce, random_val, key_name)[source]¶ Send ECDH key exchange message
-
send_message_in_network
(nodeinfo=None, payload_type=1, domain_id=None, msg=None)[source]¶ Send message over a domain network
Parameters: - nodeinfo (NodeInfo) – NodeInfo object of the destination
- payload_type (bytes) – message format type
- domain_id (bytes) – target domain_id
- msg (dict) – message to send
Returns: True if successful
Return type: bool
-
-
class
bbc1.core.bbc_network.
NeighborInfo
(network=None, domain_id=None, node_id=None, my_info=None)[source]¶ Bases:
object
Manage information of neighbor nodes
-
NODEINFO_LIFETIME
= 900¶
-
PURGE_INTERVAL_SEC
= 300¶
-
-
class
bbc1.core.bbc_network.
NodeInfo
(node_id=None, ipv4=None, ipv6=None, port=None, is_static=False, domain0=False)[source]¶ Bases:
object
Node information entry
-
SECURITY_STATE_CONFIRMING
= 2¶
-
SECURITY_STATE_ESTABLISHED
= 3¶
-
SECURITY_STATE_NONE
= 0¶
-
SECURITY_STATE_REQUESTING
= 1¶
-
get_nodeinfo
()[source]¶ Return a list of node info
Returns: [node_id, ipv4, ipv6, port, domain0_flag, update_at] Return type: list
-
update
(ipv4=None, ipv6=None, port=None, seq=None, domain0=None)[source]¶ Update the entry
Parameters: - ipv4 (str) – IPv4 address of the sender node
- ipv6 (str) – IPv6 address of the sender node
- port (int) – Port number of the sender
- sec (int) – message sequence number
- domain0 (bool or None) – If True, the node is domain0 manager
Returns: True if the entry has changed
Return type: bool
-