📄 util.py
字号:
# The contents of this file are subject to the BitTorrent Open Source License# Version 1.1 (the License). You may not copy or use this file, in either# source code or executable form, except in compliance with the License. You# may obtain a copy of the License at http://www.bittorrent.com/license/.## Software distributed under the License is distributed on an AS IS basis,# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License# for the specific language governing rights and limitations under the# License.from struct import pack, unpackdef bucket_stats(l): """given a list of khashmir instances, finds min, max, and average number of nodes in tables""" max = avg = 0 min = None def count(buckets): c = 0 for bucket in buckets: c = c + len(bucket.l) return c for node in l: c = count(node.table.buckets) if min == None: min = c elif c < min: min = c if c > max: max = c avg = avg + c avg = avg / len(l) return {'min':min, 'max':max, 'avg':avg}def compact_peer_info(ip, port): return pack('!BBBBH', *([int(i) for i in ip.split('.')] + [port]))def packPeers(peers): return map(lambda a: compact_peer_info(a[0], a[1]), peers)def reducePeers(peers): return reduce(lambda a, b: a + b, peers, '')def unpackPeers(p): peers = [] if type(p) == type(''): for x in xrange(0, len(p), 6): ip = '.'.join([str(ord(i)) for i in p[x:x+4]]) port = unpack('!H', p[x+4:x+6])[0] peers.append((ip, port, None)) else: for x in p: peers.append((x['ip'], x['port'], x.get('peer id'))) return peersdef compact_node_info(id, ip, port): return id + compact_peer_info(ip, port)def packNodes(nodes): return ''.join([compact_node_info(x['id'], x['host'], x['port']) for x in nodes])def unpackNodes(n): nodes = [] for x in xrange(0, len(n), 26): id = n[x:x+20] ip = '.'.join([str(ord(i)) for i in n[x+20:x+24]]) port = unpack('!H', n[x+24:x+26])[0] nodes.append({'id':id, 'host':ip, 'port': port}) return nodes
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -