packages/hyprspace: grab peers from IPFS patch
This commit is contained in:
parent
9ff9e1df74
commit
aa5d8c9721
2 changed files with 91 additions and 0 deletions
|
@ -0,0 +1,90 @@
|
|||
From 3942aaa7dcfa8cfd2fe110cf2bda66b34ead6539 Mon Sep 17 00:00:00 2001
|
||||
From: Max <max@privatevoid.net>
|
||||
Date: Sun, 25 Sep 2022 01:29:25 +0200
|
||||
Subject: [PATCH] Grab bootstrap peers from IPFS API
|
||||
|
||||
---
|
||||
p2p/node.go | 44 +++++++++++++++++++++++++++++++++++++++++++-
|
||||
1 file changed, 43 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/p2p/node.go b/p2p/node.go
|
||||
index 0c9a250..f5d5292 100644
|
||||
--- a/p2p/node.go
|
||||
+++ b/p2p/node.go
|
||||
@@ -2,8 +2,12 @@ package p2p
|
||||
|
||||
import (
|
||||
"context"
|
||||
+ "encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
+ "io/ioutil"
|
||||
+ "net/http"
|
||||
+ "net/url"
|
||||
"os"
|
||||
"sync"
|
||||
|
||||
@@ -22,6 +26,35 @@ import (
|
||||
// Protocol is a descriptor for the Hyprspace P2P Protocol.
|
||||
const Protocol = "/hyprspace/0.0.1"
|
||||
|
||||
+func getExtraBootstrapNodes(addr ma.Multiaddr) (nodesList []string) {
|
||||
+ nodesList = []string{}
|
||||
+ ip4, err := addr.ValueForProtocol(ma.P_IP4)
|
||||
+ if err != nil {
|
||||
+ return
|
||||
+ }
|
||||
+ port, err := addr.ValueForProtocol(ma.P_TCP)
|
||||
+ if err != nil {
|
||||
+ return
|
||||
+ }
|
||||
+ resp, err := http.PostForm("http://"+ip4+":"+port+"/api/v0/swarm/addrs", url.Values{})
|
||||
+
|
||||
+ defer resp.Body.Close()
|
||||
+
|
||||
+ apiResponse, err := ioutil.ReadAll(resp.Body)
|
||||
+
|
||||
+ if err != nil {
|
||||
+ return
|
||||
+ }
|
||||
+ var obj = map[string]map[string][]string{}
|
||||
+ json.Unmarshal([]byte(apiResponse), &obj)
|
||||
+ for k, v := range obj["Addrs"] {
|
||||
+ for _, addr := range v {
|
||||
+ nodesList = append(nodesList, (addr + "/p2p/" + k))
|
||||
+ }
|
||||
+ }
|
||||
+ return
|
||||
+}
|
||||
+
|
||||
// CreateNode creates an internal Libp2p nodes and returns it and it's DHT Discovery service.
|
||||
func CreateNode(ctx context.Context, inputKey string, port int, handler network.StreamHandler) (node host.Host, dhtOut *dht.IpfsDHT, err error) {
|
||||
// Unmarshal Private Key
|
||||
@@ -34,6 +67,15 @@ func CreateNode(ctx context.Context, inputKey string, port int, handler network.
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
+ extraBootstrapNodes := []string{}
|
||||
+ ipfsApiStr, ok := os.LookupEnv("HYPRSPACE_IPFS_API")
|
||||
+ if ok {
|
||||
+ ipfsApiAddr, err := ma.NewMultiaddr(ipfsApiStr)
|
||||
+ if err == nil {
|
||||
+ fmt.Println("[+] Getting additional peers from IPFS API")
|
||||
+ extraBootstrapNodes = getExtraBootstrapNodes(ipfsApiAddr)
|
||||
+ }
|
||||
+ }
|
||||
|
||||
ip6tcp := fmt.Sprintf("/ip6/::/tcp/%d", port)
|
||||
ip4tcp := fmt.Sprintf("/ip4/0.0.0.0/tcp/%d", port)
|
||||
@@ -74,7 +116,7 @@ func CreateNode(ctx context.Context, inputKey string, port int, handler network.
|
||||
|
||||
// Convert Bootstap Nodes into usable addresses.
|
||||
BootstrapPeers := make(map[peer.ID]*peer.AddrInfo, len(peers))
|
||||
- for _, addrStr := range peers {
|
||||
+ for _, addrStr := range append(peers, extraBootstrapNodes...) {
|
||||
addr, err := ma.NewMultiaddr(addrStr)
|
||||
if err != nil {
|
||||
return node, dhtOut, err
|
||||
--
|
||||
2.37.2
|
||||
|
|
@ -11,6 +11,7 @@ buildGo117Module rec {
|
|||
./0002-Remove-quic-transport-for-Lain-ipfs.patch
|
||||
./0003-Remove-dep-from-go.mod.patch
|
||||
./0004-Use-more-NAT-traversal-features.patch
|
||||
./0005-Grab-bootstrap-peers-from-IPFS-API.patch
|
||||
];
|
||||
|
||||
src = fetchFromGitHub {
|
||||
|
|
Loading…
Reference in a new issue