@cryptotaxi247 / kubo / commits / ba5940e61

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 }