Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
 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
Beispiel #4
0
 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
Beispiel #5
0
    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
Beispiel #6
0
                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)
Beispiel #7
0
def add_new_address():
    Net.add_address(Net.PyAddrDB("cr+"), Net.PyAddress("192.168.1.50", 8333, services_in=cfg.NODE_NETWORK))
Beispiel #8
0
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