X-Git-Url: https://git.distorted.org.uk/~mdw/tripe/blobdiff_plain/22b4755242c39bc8e948e4b714bea80433882a11..76a24ae6cece0604e3155b628622a4b425cb77f3:/mon/tripemon.in diff --git a/mon/tripemon.in b/mon/tripemon.in index 413c8abb..4b8dd24f 100644 --- a/mon/tripemon.in +++ b/mon/tripemon.in @@ -293,7 +293,13 @@ class Peer (MonitorObject): def update(me, hunoz = None): """Update the peer, fetching information about it from the server.""" - addr = conn.addr(me.name) + me._setaddr(me, conn.addr(me.name)) + me.ifname = conn.ifname(me.name) + me.__dict__.update(conn.peerinfo(me.name)) + me.changehook.run() + + def _setaddr(me, addr): + """Set the peer's address.""" if addr[0] == 'INET': ipaddr, port = addr[1:] try: @@ -303,8 +309,10 @@ class Peer (MonitorObject): me.addr = 'INET %s:%s' % (ipaddr, port) else: me.addr = ' '.join(addr) - me.ifname = conn.ifname(me.name) - me.__dict__.update(conn.peerinfo(me.name)) + + def setaddr(me, addr): + """Informs the object of a change to its address to ADDR.""" + me._setaddr(addr) me.changehook.run() def setifname(me, newname): @@ -476,6 +484,11 @@ class Monitor (HookClient): me.peers[rest[0]].setifname(rest[2]) except KeyError: pass + elif code == 'NEWADDR': + try: + me.peers[rest[0]].setaddr(rest[1:]) + except KeyError: + pass elif code == 'SVCCLAIM': T.aside(me.services.add, rest[0], rest[1]) if rest[0] == 'connect':