Browse Source

Allow self-loops in relay connections

May as well
Ian Goldberg 4 years ago
parent
commit
49be93109a
1 changed files with 15 additions and 1 deletions
  1. 15 1
      relay.py

+ 15 - 1
relay.py

@@ -228,6 +228,12 @@ class Relay(network.Server):
         to the peer."""
 
         # Create the linked pair
+        if peer is self.netaddr:
+            # A self-loop?  We'll allow it.
+            peerchannel = Channel()
+            peerchannel.peer = peerchannel
+            return peerchannel
+
         peerchannel = Channel()
         ourchannel = Channel()
         peerchannel.peer = ourchannel
@@ -275,9 +281,17 @@ if __name__ == '__main__':
 
     relays[3].cellrelay.send_msg(RelayRandomHopMsg(30), relays[5].netaddr)
 
-    # See what channels exist
+    # See what channels exist and do a consistency check
     for r in relays:
         print("%s: %s" % (r.netaddr, [ str(k) for k in r.cellrelay.channels.keys()]))
+        raddr = r.netaddr
+        for ad, ch in r.cellrelay.channels.items():
+            if ch.peer.cellrelay.myaddr != ad:
+                print('address mismatch:', raddr, ad, ch.peer.cellrelay.myaddr)
+
+            if ch.peer.cellrelay.channels[raddr].peer is not ch:
+                print('asymmetry:', raddr, ad, ch, ch.peer.cellrelay.channels[raddr].peer)
+
     #relays[3].cellrelay.send_cell(1, network.StringNetMsg("test"), relays[3].consensus.consdict['relays'][5].descdict['addr'])
     #relays[3].cellrelay.send_cell(2, network.StringNetMsg("cell"), relays[3].consensus.consdict['relays'][6].descdict['addr'])
     #relays[3].cellrelay.send_cell(2, network.StringNetMsg("again"), relays[3].consensus.consdict['relays'][1].descdict['addr'])