def main(): list_addr_to_send = [net.addrLocalHost, net.addrLocalHost] s = serialize.PyDataStream() s.stream_in(list_addr_to_send).stream_in( net.PyAddress("123.123.123.123", 9090)) print((s.stream_out("list", (net.PyAddress)))) print(str(s.stream_out(cls=net.PyAddress))) pass
def decode_address(s): ret = keyutil.base58CheckDecode(s[1:]) if ret is None: return None if len(ret) != 6: # sizeof (uint) + sizeof(ushort) return None addr = net.PyAddress() s_io = StringIO(ret) addr.ip = base.uint2ip(serialize.deser_uint(s_io)) addr.port = serialize.deser_ushort(s_io) return addr
def __init__(self): self.nVersion = 1 # int self.addr = net.PyAddress() self.dict_value = dict( ) # dict<str, str> keys=['title', 'price', 'seller', 'stars', 'category', 'description', 'date', 'instructions'] self.dict_details = dict() # dict<str, str> self.list_order_from = list( ) # list<(str,str)> <label:str, control:str> self.sequence = 0 # uint self.pubkey_from = b'' self.sig = b'' # disk only self.atoms = 0 # int # memory only self.set_sources = set() # set<uint> pass
def deserialize(self, f, nType=0, nVersion=cfg.VERSION): f = wrap_to_StringIO(f) self.nVersion = deser_int(f) nVersion = self.nVersion self.addr = net.PyAddress() self.addr.deserialize(f, nType, nVersion) self.dict_value = deser_dict(f, deser_str, deser_str) if not (nType & SerType.SER_GETHASH): self.dict_details = deser_dict(f, deser_str, deser_str) self.list_order_from = deser_strpair_list(f) self.sequence = deser_uint(f) self.pubkey_from = deser_str(f) if not (nType & SerType.SER_GETHASH): self.sig = deser_str(f) if nType & SerType.SER_DISK: self.atoms = ser_int(f) return self
def thread_IRC_seed(self, arg=None): while True: irc_ip = socket.gethostbyname(cfg.IRC_URL) addr_conn = net.PyAddress(irc_ip, cfg.IRC_PORT) hsocket = base.connect_socket(addr_conn) if hsocket is None: print("IRC connect failed") return if not recv_until(hsocket, "Found your hostname", "using your IP address instead", "Couldn't look up your hostname"): hsocket.close() return str_my_name = encode_address(net.addrLocalHost) if not net.addrLocalHost.is_routable(): str_my_name = keyutil.base58CheckEncode(os.urandom(6)) base.socket_send(hsocket, ("NICK %s\r" % str_my_name)) base.socket_send(hsocket, ("USER %s 8 * : %s\r" % (str_my_name, str_my_name))) if not recv_until(hsocket, " 004 "): hsocket.close() return timeutil.sleep_msec(500) base.socket_send(hsocket, "JOIN #%s\r" % cfg.IRC_CHANNEL) base.socket_send(hsocket, "WHO #%s\r" % cfg.IRC_CHANNEL) global fRestrartIRCSeed while not fRestrartIRCSeed: str_line = recv_line_IRC(hsocket) if ctx.fShutdown or str_line is None: hsocket.close() return if len(str_line) == 0 or str_line[0] != ':': continue print("IRC line:(%s)" % str_line) words = str_line.split(' ') if len(words) < 2: continue sz_name = '\x00' if words[1] == "352" and len(words) >= 8: sz_name = words[7] print("GOT WHO: [%s] " % sz_name) if words[1] == "JOIN": # :[email protected] JOIN :#channelname sz_name = words[0][1:] i = sz_name.find('!') if i > 0: sz_name = sz_name[:i] print("GOT JOIN: [%s] " % sz_name) if sz_name[0] == 'u': addr = decode_address(sz_name) if addr is not None: with net.PyAddrDB() as addrdb: if net.add_address(addrdb, addr): print("store new address! ") print(str(addr)) else: print("meet 'u' prdix, buf decode failed, for %s" % sz_name) else: print("decode failed") pass # end loop fRestrartIRCSeed = False hsocket.close() pass pass
else: print("decode failed") pass # end loop fRestrartIRCSeed = False hsocket.close() pass pass def main(): pass if __name__ == '__main__': addr = net.PyAddress("192.168.100.1", 8080) s = encode_address(addr) print(len(s)) addr = net.PyAddress("0.0.0.0", 0) s = encode_address(addr) print(len(s)) print(str(decode_address(s))) # get local host ip hostname, aliaslist, ipaddrlist = socket.gethostbyname_ex(socket.gethostname()) net.addrLocalHost = net.PyAddress(ipaddrlist[-1], cfg.DEFAULT_PORT, ctx.localServices()) IRCSeedThread(None).thread_IRC_seed(None) t = IRCSeedThread(None)
def add_new_address(): Net.add_address(Net.PyAddrDB("cr+"), Net.PyAddress("192.168.1.50", 8333, services_in=cfg.NODE_NETWORK))
def start_node(): # sockets startup # ... # get local host ip # hostname, aliaslist, ipaddrlist = socket.gethostbyname_ex(socket.gethostname()) # TODO check for local_ip # net.addrLocalHost = net.PyAddress(ipaddrlist[-1], cfg.DEFAULT_PORT, ctx.localServices()) net.addrLocalHost = net.PyAddress(get_local_ip(), cfg.DEFAULT_PORT, ctx.localServices()) # Create socket for listening for incoming connections try: hlisten_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP) ctx.hlistenSocket = hlisten_socket except socket.error as msg: print(msg) print( "Error: Couldn't set properties on socket for incoming connections (ioctlsocket returned error %d)" % msg.errno) return False # Set to nonblocking, incoming connections will also inherit this # socket.oct hlisten_socket.setblocking(False) hlisten_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # bind & listen try: hlisten_socket.bind((net.addrLocalHost.ip, net.addrLocalHost.port)) hlisten_socket.listen(socket.SOMAXCONN) except socket.error as msg: hlisten_socket.close() print(msg) print("Error: Unable to bind to port %d on this computer or " "listening for incoming connections failed(returned error %d)" % (net.addrLocalHost.port, msg.errno)) return False # Get our external IP address for incoming connections if ctx.addrIncoming is not None and ctx.addrIncoming.ip is not '0.0.0.0': net.addrLocalHost.ip = ctx.addrIncoming.ip # TODO check for external IP is current for real use # external_ip = util.extrenal_IP() # if external_ip is not None: # net.addrLocalHost.ip = external_ip # ctx.addrIncoming = net.addrLocalHost # Block.PyWalletDB().write_setting("addrIncoming", ctx.addrIncoming) # start thread # Get addresses from IRC and advertise ours # irc_t = irc.IRCSeedThread(None) # irc_t.start() # ctx.listWorkThreads.append((irc_t, "irc_thread")) socket_t = thread.SocketThread(hlisten_socket) socket_t.start() ctx.listWorkThreads.append((socket_t, "socket_thread")) connections_t = thread.OpenConnectionsThread(None) connections_t.start() ctx.listWorkThreads.append((connections_t, "connections_thread")) message_t = thread.MessageThread(None) message_t.start() ctx.listWorkThreads.append((message_t, "message_thread")) return True