chia-blockchain/chia/util/network.py

44 lines
1.4 KiB
Python

from ipaddress import ip_address, IPv4Network, IPv6Network
from typing import Iterable, Union, Any
from chia.server.outbound_message import NodeType
def is_in_network(peer_host: str, networks: Iterable[Union[IPv4Network, IPv6Network]]) -> bool:
try:
peer_host_ip = ip_address(peer_host)
return any(peer_host_ip in network for network in networks)
except ValueError:
return False
def is_localhost(peer_host: str) -> bool:
return peer_host == "127.0.0.1" or peer_host == "localhost" or peer_host == "::1" or peer_host == "0:0:0:0:0:0:0:1"
def class_for_type(type: NodeType) -> Any:
if type is NodeType.FULL_NODE:
from chia.full_node.full_node_api import FullNodeAPI
return FullNodeAPI
elif type is NodeType.WALLET:
from chia.wallet.wallet_node_api import WalletNodeAPI
return WalletNodeAPI
elif type is NodeType.INTRODUCER:
from chia.introducer.introducer_api import IntroducerAPI
return IntroducerAPI
elif type is NodeType.TIMELORD:
from chia.timelord.timelord_api import TimelordAPI
return TimelordAPI
elif type is NodeType.FARMER:
from chia.farmer.farmer_api import FarmerAPI
return FarmerAPI
elif type is NodeType.HARVESTER:
from chia.harvester.harvester_api import HarvesterAPI
return HarvesterAPI
raise ValueError("No class for type")