def refreshNodeStatus(self, src_ipp, pktnum, expire, sesid, uptime,
                          persist, nick, info):
        CHECK(src_ipp != self.me.ipp)
        try:
            n = self.lookup_ipp[src_ipp]
            in_nodes = True
        except KeyError:
            n = Node(src_ipp)
            in_nodes = False

        self.main.logPacket("Status: %s %d (%s)" %
                            (hexlify(src_ipp), expire, nick))

        # Update the last-seen status packet number
        n.status_pktnum = pktnum

        # Change uptime to a fixed time when the node went up
        uptime = seconds() - uptime

        if self.syncd and in_nodes and n.sesid != sesid:
            # session ID changed; remove n from sorted nodes list
            # so that it will be reinserted into the correct place
            self.removeNodeFromNodesList(n)
            in_nodes = False

        # Update info
        n.sesid = sesid
        n.uptime = uptime
        n.persist = persist

        # Save version info
        n.dttag = parse_dtella_tag(info)

        if nick == n.nick:
            # Nick hasn't changed, just update info
            self.nkm.setInfoInList(n, info)

        else:
            # Nick has changed.

            # Remove old nick, if it's in there
            self.nkm.removeNode(n, "No DC client")

            # Run a sanity check on the new nick
            if nick and validateNick(nick) != '':
                # Malformed
                n.setNoUser()

            else:
                # Good nick, update the info
                n.nick = nick
                n.setInfo(info)

                # Try to add the new nick (no-op if the nick is empty)
                try:
                    self.nkm.addNode(n)
                except NickError:
                    n.setNoUser()

        # If n isn't in nodes list, then add it
        if not in_nodes:
            self.addNodeToNodesList(n)

        # Expire this node after the expected retransmit
        self.scheduleNodeExpire(n, expire + NODE_EXPIRE_EXTEND)

        # Possibly make this new node an outgoing link
        self.pgm.scheduleMakeNewLinks()

        # Return the node
        return n