WIP: Implementing sqlite objects storage #13

Draft
lee.miller wants to merge 12 commits from lee.miller/MiNode:sqlite into v0.3
Showing only changes of commit 20ae076746 - Show all commits

View File

@ -162,14 +162,25 @@ class NetAddrNoPrefix():
return 'net_addr_no_prefix, services: {}, host: {}, port {}'.format( return 'net_addr_no_prefix, services: {}, host: {}, port {}'.format(
self.services, self.host, self.port) self.services, self.host, self.port)
@staticmethod
def decode_host(host):
if host.startswith(
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF'):
return socket.inet_ntop(socket.AF_INET, host[-4:])
return socket.inet_ntop(socket.AF_INET6, host)
@staticmethod
def encode_host(host):
try:
host = socket.inet_pton(socket.AF_INET, host)
return b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF' + host
except socket.error:
return socket.inet_pton(socket.AF_INET6, host)
def to_bytes(self): def to_bytes(self):
b = b'' b = b''
b += struct.pack('>Q', self.services) b += struct.pack('>Q', self.services)
try: b += self.encode_host(self.host)
host = socket.inet_pton(socket.AF_INET, self.host)
b += b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF' + host
except socket.error:
b += socket.inet_pton(socket.AF_INET6, self.host)
b += struct.pack('>H', int(self.port)) b += struct.pack('>H', int(self.port))
return b return b
@ -191,12 +202,7 @@ class NetAddrNoPrefix():
@classmethod @classmethod
def from_bytes(cls, b): def from_bytes(cls, b):
services, host, port = struct.unpack('>Q16sH', b) services, host, port = struct.unpack('>Q16sH', b)
if host.startswith( return cls(services, cls.decode_host(host), port)
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF'):
host = socket.inet_ntop(socket.AF_INET, host[-4:])
else:
host = socket.inet_ntop(socket.AF_INET6, host)
return cls(services, host, port)
class NetAddr(): class NetAddr():