integrate circuit-relay transport
- enabled by default, so that we can dial/receive dials - /p2p-circuit/QmId address is not announced; filtered at host with AddrsFactory - use case is manual swarm connect with relay address License: MIT Signed-off-by: vyzo <vyzo@hackzen.org>
vyzo committed
Jul 26, 2017 at 14:13 UTC
ba5940e617b1cc754649826d1ff74183f67f1273
3 files changed
+42
-2
core/core.go
+34
-1
@@ -56,6 +56,7 @@ import (
56
logging "gx/ipfs/QmSpJByNKFX1sCsHBEp3R73FL4NF6FnQTEGyNAXHm2GS52/go-log"
57
b58 "gx/ipfs/QmT8rehPR3F6bmwL6zjUN8XpiDBFFpMP2myPdC6ApsWfJf/go-base58"
58
cid "gx/ipfs/QmTprEaAA2A9bst5XH7exuyi5KzNMK3SEDNN8rBDnKWcUS/go-cid"
59
+ circuit "gx/ipfs/QmVEPsD9h95ToAC7NJpYopFcXyjVJm35xV4tw43J5JdCnL/go-libp2p-circuit"
60
ds "gx/ipfs/QmVSase1JP7cq9QkPT46oNwdp9pT6kBkG3oqS14y3QcZjG/go-datastore"
61
metrics "gx/ipfs/QmVjRAPfRtResCMCE4eBqr4Beoa6A89P1YweG9wUS6RqUL/go-libp2p-metrics"
62
ma "gx/ipfs/QmXY77cVe7rVRQXZZQRioukUM7aRW3BTcAgJe12MCtb3Ji/go-multiaddr"
@@ -221,9 +222,12 @@ func (n *IpfsNode) startOnlineServices(ctx context.Context, routingOption Routin
222
hostopts := &ConstructPeerHostOpts{
223
AddrsFactory: addrsFactory,
224
DisableNatPortMap: cfg.Swarm.DisableNatPortMap,
225
+ DisableRelay: cfg.Swarm.DisableRelay,
226
+ EnableRelayHop: cfg.Swarm.EnableRelayHop,
227
}
228
peerhost, err := hostOption(ctx, n.Identity, n.Peerstore, n.Reporter,
229
addrfilter, tpt, protec, hostopts)
230
+
231
if err != nil {
232
return err
233
}
@@ -783,8 +787,10 @@ func listenAddresses(cfg *config.Config) ([]ma.Multiaddr, error) {
787
}
788
789
type ConstructPeerHostOpts struct {
786
- DisableNatPortMap bool
790
AddrsFactory p2pbhost.AddrsFactory
791
+ DisableNatPortMap bool
792
+ DisableRelay bool
793
+ EnableRelayHop bool
794
}
795
796
type HostOption func(ctx context.Context, id peer.ID, ps pstore.Peerstore, bwr metrics.Reporter, fs []*net.IPNet, tpt smux.Transport, protc ipnet.Protector, opts *ConstructPeerHostOpts) (p2phost.Host, error)
@@ -814,8 +820,35 @@ func constructPeerHost(ctx context.Context, id peer.ID, ps pstore.Peerstore, bwr
820
hostOpts = append(hostOpts, opts.AddrsFactory)
821
}
822
823
+ if !opts.DisableRelay {
824
+ filterRelayAddr := func(addrs []ma.Multiaddr) []ma.Multiaddr {
825
+ var raddrs []ma.Multiaddr
826
+ for _, addr := range addrs {
827
+ _, err := addr.ValueForProtocol(circuit.P_CIRCUIT)
828
+ if err == nil {
829
+ continue
830
+ }
831
+ raddrs = append(raddrs, addr)
832
+ }
833
+ return raddrs
834
+ }
835
+ hostOpts = append(hostOpts, p2pbhost.AddrsFactory(filterRelayAddr))
836
+ }
837
+
838
host := p2pbhost.New(network, hostOpts...)
839
840
+ if !opts.DisableRelay {
841
+ var relayOpts []circuit.RelayOpt
842
+ if opts.EnableRelayHop {
843
+ relayOpts = append(relayOpts, circuit.OptHop)
844
+ }
845
+
846
+ err := circuit.AddRelayTransport(ctx, host, relayOpts...)
847
+ if err != nil {
848
+ return nil, err
849
+ }
850
+ }
851
+
852
return host, nil
853
}
854
package.json
+6
-1
@@ -451,6 +451,12 @@
451
"hash": "QmQBB2dQLmQHJgs2gqZ3iqL2XiuCtUCvXzWt5kMXDf5Zcr",
452
"name": "go-maddr-filter",
453
"version": "1.1.4"
454
+ },
455
+ {
456
+ "author": "vyzo",
457
+ "hash": "QmVEPsD9h95ToAC7NJpYopFcXyjVJm35xV4tw43J5JdCnL",
458
+ "name": "go-libp2p-circuit",
459
+ "version": "1.1.1"
460
}
461
],
462
"gxVersion": "0.10.0",
@@ -459,4 +465,3 @@
465
"name": "go-ipfs",
466
"version": "0.4.11-dev"
467
}
462
-
repo/config/swarm.go
+2
@@ -4,4 +4,6 @@ type SwarmConfig struct {
4
AddrFilters []string
5
DisableBandwidthMetrics bool
6
DisableNatPortMap bool
7
+ DisableRelay bool
8
+ EnableRelayHop bool
9
}