Skip to content

Commit

Permalink
Added exteralIp
Browse files Browse the repository at this point in the history
  • Loading branch information
Yashk767 committed Jul 24, 2023
1 parent c49a571 commit 9252e1f
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 4 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ Connect on:
In the next 3 new terminals run

```
$ ./dht --peer /ip4/192.168.1.20/tcp/58476/p2p/12D3KooWCEsQ9vbkBCgR7gwF1xcqZiNrNkhA57EjUuho48MiypaT
$ ./dht --peer /ip4/192.168.1.20/tcp/58476/p2p/12D3KooWCEsQ9vbkBCgR7gwF1xcqZiNrNkhA57EjUuho48MiypaT --port <port> --externalIp <your_public_ipAddress>
```

You'll see all the nodes are connected to each other.
39 changes: 36 additions & 3 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,17 @@ import (
"fmt"
"github.com/libp2p/go-libp2p"
"github.com/libp2p/go-libp2p/core/host"
"github.com/multiformats/go-multiaddr"
"time"
)

func CreateNode() (host.Host, error) {
node, err := libp2p.New()
func CreateNode(externalIp string, port string) (host.Host, error) {
addressFactory, err := getAddressFactory(externalIp, port)
if err != nil {
return nil, err
}
node, err := libp2p.New(
libp2p.AddrsFactory(addressFactory))
if err != nil {
return nil, err
}
Expand All @@ -22,12 +28,39 @@ func CreateNode() (host.Host, error) {
return node, nil
}

func getAddressFactory(externalIP string, port string) (func([]multiaddr.Multiaddr) []multiaddr.Multiaddr, error) {
var (
externalAddr multiaddr.Multiaddr
err error
)

// binding external IP to libp2p node
if len(externalIP) != 0 {
externalAddr, err = multiaddr.NewMultiaddr(fmt.Sprintf("/ip4/%s/tcp/%s", externalIP, port))
if err != nil {
return nil, fmt.Errorf("fail to create listen with given external IP: %v", err)
}
fmt.Printf("Binding to external IP: %v", externalAddr.String())
}
addressFactory := func(addrs []multiaddr.Multiaddr) []multiaddr.Multiaddr {
if externalAddr != nil {
return []multiaddr.Multiaddr{externalAddr}
}
return addrs
}
return addressFactory, nil
}

func main() {
var discoveryPeers addrList
var externalIp string
var port string
flag.Var(&discoveryPeers, "peer", "Peer multi address for peer discovery")
flag.StringVar(&externalIp, "externalIp", "", "Public IP address of user")
flag.StringVar(&port, "port", "", "Port of user")
flag.Parse()

node, err := CreateNode()
node, err := CreateNode(externalIp, port)
if err != nil {
panic(err)
}
Expand Down

0 comments on commit 9252e1f

Please sign in to comment.