本文整理汇总了Python中dht.DHT._iterativeFind方法的典型用法代码示例。如果您正苦于以下问题:Python DHT._iterativeFind方法的具体用法?Python DHT._iterativeFind怎么用?Python DHT._iterativeFind使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类dht.DHT
的用法示例。
在下文中一共展示了DHT._iterativeFind方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: CryptoTransportLayer
# 需要导入模块: from dht import DHT [as 别名]
# 或者: from dht.DHT import _iterativeFind [as 别名]
class CryptoTransportLayer(TransportLayer):
def __init__(self, my_ip, my_port, market_id, db, bm_user=None, bm_pass=None,
bm_port=None, seed_mode=0, dev_mode=False, disable_ip_update=False):
self.log = logging.getLogger(
'[%s] %s' % (market_id, self.__class__.__name__)
)
requests_log = logging.getLogger("requests")
requests_log.setLevel(logging.WARNING)
# Connect to database
self.db = db
self.bitmessage_api = None
if (bm_user, bm_pass, bm_port) != (None, None, None):
if not self._connect_to_bitmessage(bm_user, bm_pass, bm_port):
self.log.info('Bitmessage not installed or started')
try:
socket.inet_pton(socket.AF_INET6, my_ip)
my_uri = "tcp://[%s]:%s" % (my_ip, my_port)
except (socket.error, ValueError):
my_uri = "tcp://%s:%s" % (my_ip, my_port)
self.market_id = market_id
self.nick_mapping = {}
self.uri = my_uri
self.ip = my_ip
self.nickname = ""
self._dev_mode = dev_mode
# Set up
self._setup_settings()
self.dht = DHT(self, self.market_id, self.settings, self.db)
# self._myself = ec.ECC(pubkey=self.pubkey.decode('hex'),
# privkey=self.secret.decode('hex'),
# curve='secp256k1')
TransportLayer.__init__(self, market_id, my_ip, my_port,
self.guid, self.nickname)
self.setup_callbacks()
self.listen(self.pubkey)
if seed_mode == 0 and not dev_mode and not disable_ip_update:
self.start_ip_address_checker()
def setup_callbacks(self):
self.add_callbacks([('hello', self._ping),
('findNode', self._find_node),
('findNodeResponse', self._find_node_response),
('store', self._store_value)])
def start_ip_address_checker(self):
'''Checks for possible public IP change'''
self.caller = PeriodicCallback(self._ip_updater_periodic_callback, 5000, ioloop.IOLoop.instance())
self.caller.start()
def _ip_updater_periodic_callback(self):
try:
r = requests.get('http://ipv4.icanhazip.com')
if r and hasattr(r, 'text'):
ip = r.text
ip = ip.strip(' \t\n\r')
if ip != self.ip:
self.ip = ip
try:
socket.inet_pton(socket.AF_INET6, self.ip)
my_uri = 'tcp://[%s]:%s' % (self.ip, self.port)
except (socket.error, ValueError):
my_uri = 'tcp://%s:%s' % (self.ip, self.port)
self.uri = my_uri
self.stream.close()
self.listen(self.pubkey)
self.dht._iterativeFind(self.guid, [], 'findNode')
else:
self.log.error('Could not get IP')
except Exception as e:
self.log.error('[Requests] error: %s' % e)
def save_peer_to_db(self, peer_tuple):
uri = peer_tuple[0]
pubkey = peer_tuple[1]
guid = peer_tuple[2]
nickname = peer_tuple[3]
# Update query
self.db.deleteEntries("peers", {"uri": uri, "guid": guid}, "OR")
# if len(results) > 0:
# self.db.updateEntries("peers", {"id": results[0]['id']}, {"market_id": self.market_id, "uri": uri, "pubkey": pubkey, "guid": guid, "nickname": nickname})
# else:
if guid is not None:
self.db.insertEntry("peers", {
"uri": uri,
"pubkey": pubkey,
#.........这里部分代码省略.........
示例2: CryptoTransportLayer
# 需要导入模块: from dht import DHT [as 别名]
# 或者: from dht.DHT import _iterativeFind [as 别名]
class CryptoTransportLayer(TransportLayer):
def __init__(self, ob_ctx, db):
self.ob_ctx = ob_ctx
self.log = logging.getLogger(
'[%s] %s' % (ob_ctx.market_id, self.__class__.__name__)
)
requests_log = logging.getLogger("requests")
requests_log.setLevel(logging.WARNING)
self.db = db
self.bitmessage_api = None
if (ob_ctx.bm_user, ob_ctx.bm_pass, ob_ctx.bm_port) != (None, None, -1):
if not self._connect_to_bitmessage():
self.log.info('Bitmessage not installed or started')
self.market_id = ob_ctx.market_id
self.nick_mapping = {}
self.uri = network_util.get_peer_url(ob_ctx.server_ip, ob_ctx.server_port)
self.ip = ob_ctx.server_ip
self.nickname = ""
self.dev_mode = ob_ctx.dev_mode
self.all_messages = (
'hello',
'findNode',
'findNodeResponse',
'store'
)
self._setup_settings()
ob_ctx.market_id = self.market_id
self.dht = DHT(self, self.market_id, self.settings, self.db)
TransportLayer.__init__(self, ob_ctx, self.guid, self.nickname)
self.start_listener()
if ob_ctx.enable_ip_checker and not ob_ctx.seed_mode and not ob_ctx.dev_mode:
self.start_ip_address_checker()
def start_listener(self):
self.add_callbacks([
(
msg,
{
'cb': getattr(self, 'on_%s' % msg),
'validator_cb': getattr(self, 'validate_on_%s' % msg)
}
)
for msg in self.all_messages
])
self.listener = connection.CryptoPeerListener(
self.ip, self.port, self.pubkey, self.secret, self.ctx,
self.guid,
self._on_message
)
self.listener.set_ok_msg({
'type': 'ok',
'senderGUID': self.guid,
'pubkey': self.pubkey,
'senderNick': self.nickname
})
self.listener.listen()
def start_ip_address_checker(self):
'''Checks for possible public IP change'''
if self.ob_ctx.enable_ip_checker:
self.caller = PeriodicCallback(self._ip_updater_periodic_callback, 5000, ioloop.IOLoop.instance())
self.caller.start()
self.log.info("IP_CHECKER_ENABLED: Periodic IP Address Checker started.")
def _ip_updater_periodic_callback(self):
if self.ob_ctx.enable_ip_checker:
new_ip = network_util.get_my_ip()
if not new_ip or new_ip == self.ip:
return
self.ob_ctx.server_ip = new_ip
self.ip = new_ip
if self.listener is not None:
self.listener.set_ip_address(new_ip)
self.dht._iterativeFind(self.guid, [], 'findNode')
def save_peer_to_db(self, peer_tuple):
uri = peer_tuple[0]
pubkey = peer_tuple[1]
guid = peer_tuple[2]
nickname = peer_tuple[3]
# Update query
self.db.deleteEntries("peers", {"uri": uri, "guid": guid}, "OR")
if guid is not None:
self.db.insertEntry("peers", {
#.........这里部分代码省略.........
示例3: CryptoTransportLayer
# 需要导入模块: from dht import DHT [as 别名]
# 或者: from dht.DHT import _iterativeFind [as 别名]
#.........这里部分代码省略.........
self._log.debug('Retrieved Settings: %s', self.settings)
def _generate_new_keypair(self):
# Generate new keypair
key = ec.ECC(curve='secp256k1')
self.secret = key.get_privkey().encode('hex')
pubkey = key.get_pubkey()
signedPubkey = key.sign(pubkey)
self.pubkey = pubkey.encode('hex')
self._myself = key
# Generate a node ID by ripemd160 hashing the signed pubkey
guid = hashlib.new('ripemd160')
guid.update(signedPubkey)
self.guid = guid.digest().encode('hex')
self._db.settings.update({"id":'%s' % self._market_id}, {"$set": {"secret":self.secret, "pubkey":self.pubkey, "guid":self.guid}}, True)
def _generate_new_bitmessage_address(self):
# Use the guid generated previously as the key
self.bitmessage = self._bitmessage_api.createRandomAddress(self.guid.encode('base64'),
False, 1.05, 1.1111)
self._db.settings.update({"id":'%s' % self._market_id}, {"$set": {"bitmessage":self.bitmessage}}, True)
def join_network(self, seed_uri, callback=lambda msg: None):
if seed_uri:
self._log.info('Initializing Seed Peer(s): [%s]' % (seed_uri))
def cb(msg):
self._dht._iterativeFind(self._guid, self._dht._knownNodes, 'findNode')
callback(msg)
self.connect(seed_uri, callback=cb)
# self.listen(self.pubkey) # Turn on zmq socket
#
# if seed_uri:
# self._log.info('Initializing Seed Peer(s): [%s]' % seed_uri)
# seed_peer = CryptoPeerConnection(self, seed_uri)
# self._dht.start(seed_peer)
def connect(self, uri, callback):
def cb(msg):
ip = urlparse(uri).hostname
port = urlparse(uri).port
self._dht.add_known_node((ip, port, peer._guid))
# Turning off peers
#self.init_peer({'uri': seed_uri, 'guid':seed_guid})
# Add to routing table
self.addCryptoPeer(peer)
callback(msg)
peer = CryptoPeerConnection(self, uri, callback=cb)
return peer
def get_crypto_peer(self, guid, uri, pubkey=None):
示例4: CryptoTransportLayer
# 需要导入模块: from dht import DHT [as 别名]
# 或者: from dht.DHT import _iterativeFind [as 别名]
#.........这里部分代码省略.........
self._myself = key
# Generate SIN
sha_hash = hashlib.sha256()
sha_hash.update(pubkey)
ripe_hash = hashlib.new('ripemd160')
ripe_hash.update(sha_hash.digest())
self.guid = ripe_hash.digest().encode('hex')
self.sin = obelisk.EncodeBase58Check('\x0F\x02%s' + ripe_hash.digest())
self._db.settings.update({"id":'%s' % self._market_id}, {"$set": {"secret":self.secret, "pubkey":self.pubkey, "guid":self.guid, "sin":self.sin}}, True)
def _generate_new_bitmessage_address(self):
# Use the guid generated previously as the key
self.bitmessage = self._bitmessage_api.createRandomAddress(self.guid.encode('base64'),
False, 1.05, 1.1111)
self._db.settings.update({"id":'%s' % self._market_id}, {"$set": {"bitmessage":self.bitmessage}}, True)
def join_network(self, dev_mode=0, callback=lambda msg: None):
if dev_mode:
self._log.info('DEV MODE')
seed_peers = {'127.0.0.1'}
else:
seed_peers = ('seed.openbazaar.org',
'seed2.openbazaar.org')
for seed in seed_peers:
self._log.info('Initializing Seed Peer(s): [%s]' % seed)
def cb(msg):
self._dht._iterativeFind(self._guid, self._dht._knownNodes, 'findNode')
callback(msg)
self.connect('tcp://%s:12345' % seed, callback=cb)
# Try to connect to known peers
known_peers = self._db.peers.find()
for known_peer in known_peers:
def cb(msg):
#self._dht._iterativeFind(self._guid, self._dht._knownNodes, 'findNode')
callback(msg)
self.connect(known_peer['uri'], callback=cb)
# self.listen(self.pubkey) # Turn on zmq socket
#
# if seed_uri:
# self._log.info('Initializing Seed Peer(s): [%s]' % seed_uri)
# seed_peer = CryptoPeerConnection(self, seed_uri)
# self._dht.start(seed_peer)
def connect(self, uri, callback):
def cb(msg):
ip = urlparse(uri).hostname
port = urlparse(uri).port
self._dht.add_known_node((ip, port, peer._guid))
# Turning off peers
示例5: CryptoTransportLayer
# 需要导入模块: from dht import DHT [as 别名]
# 或者: from dht.DHT import _iterativeFind [as 别名]
#.........这里部分代码省略.........
self.guid = self.settings['guid']
else:
self.nickname = 'Default'
self._generate_new_keypair()
self.settings = self._db.settings.find_one({'id':"%s" % self._market_id})
self._log.debug('Retrieved Settings: %s', self.settings)
def _generate_new_keypair(self):
# Generate new keypair
key = ec.ECC(curve='secp256k1')
self.secret = key.get_privkey().encode('hex')
pubkey = key.get_pubkey()
signedPubkey = key.sign(pubkey)
self.pubkey = pubkey.encode('hex')
self._myself = key
# Generate a node ID by ripemd160 hashing the signed pubkey
guid = hashlib.new('ripemd160')
guid.update(signedPubkey)
self.guid = guid.digest().encode('hex')
self._db.settings.update({"id":'%s' % self._market_id}, {"$set": {"secret":self.secret, "pubkey":self.pubkey, "guid":self.guid}}, True)
def join_network(self, seed_uri, callback=lambda msg: None):
if seed_uri:
self._log.info('Initializing Seed Peer(s): [%s]' % (seed_uri))
def cb(msg):
self._dht._iterativeFind(self._guid, self._dht._knownNodes, 'findNode')
callback(msg)
self.connect(seed_uri, callback=cb)
# self.listen(self.pubkey) # Turn on zmq socket
#
# if seed_uri:
# self._log.info('Initializing Seed Peer(s): [%s]' % seed_uri)
# seed_peer = CryptoPeerConnection(self, seed_uri)
# self._dht.start(seed_peer)
def connect(self, uri, callback):
def cb(msg):
ip = urlparse(uri).hostname
port = urlparse(uri).port
self._dht.add_known_node((ip, port, peer._guid))
# Turning off peers
#self.init_peer({'uri': seed_uri, 'guid':seed_guid})
# Add to routing table
self.addCryptoPeer(peer)
callback(msg)
peer = CryptoPeerConnection(self, uri, callback=cb)
return peer
def get_crypto_peer(self, guid, uri, pubkey=None):