From c0d492592e388eab741b0a36705e299f6cee5356 Mon Sep 17 00:00:00 2001 From: nickname32 <41116859+nickname32@users.noreply.github.com> Date: Sun, 30 Aug 2020 21:42:38 +0300 Subject: [PATCH] Added Makefile --- .gitignore | 6 +-- cmd/Makefile | 77 ++++++++++++++++++++++++++++++++ cmd/build-all.sh | 4 -- cmd/build-and-zip-all-targets.sh | 39 ---------------- cmd/build.sh | 12 ----- cmd/cli/main.go | 1 + forwarder.go | 66 ++++++++++++++------------- go.mod | 3 ++ protdial.go | 4 +- 9 files changed, 120 insertions(+), 92 deletions(-) create mode 100644 cmd/Makefile delete mode 100755 cmd/build-all.sh delete mode 100755 cmd/build-and-zip-all-targets.sh delete mode 100755 cmd/build.sh diff --git a/.gitignore b/.gitignore index ca6e134..24ea6f9 100644 --- a/.gitignore +++ b/.gitignore @@ -5,10 +5,8 @@ *.so *.dylib -# Project builds -/cmd/tui-builds -/cmd/gui-builds -/cmd/cli-builds +# Binary builds +/cmd/builds # Test binary, built with `go test -c` *.test diff --git a/cmd/Makefile b/cmd/Makefile new file mode 100644 index 0000000..9e7c174 --- /dev/null +++ b/cmd/Makefile @@ -0,0 +1,77 @@ +GOCMD=go + +TARGET_OS=$$($(GOCMD) env GOOS) +TARGET_ARCH=$$($(GOCMD) env GOARCH) +TARGET_UI=tui +BINARY_NAME=P2P-Forwarder +BUILDS_DIRECTORY=$(PWD)/builds + +CFLAGS=-w -O3 +export CGO_CFLAGS=$(CFLAGS) +export CGO_CPPFLAGS=$(CFLAGS) +export CGO_CXXFLAGS=$(CFLAGS) +export CGO_FFLAGS=$(CFLAGS) +export CGO_LDFLAGS=$(CFLAGS) + +# build builds a binary +# +# arguments: +# 1 - "cli" or "tui" +# 2 - GOOS +# 3 - GOARCH +# 4 - out +define build + GOOS="$(2)" GOARCH="$(3)" $(GOCMD) build -gcflags="all=-trimpath='$(HOME)'" -asmflags="all=-trimpath='$(HOME)'" -ldflags="-s -w" -o "$(4)" github.com/nickname32/p2p-forwarder/cmd/$(1) +endef + +# build builds a binary and zips it +# +# arguments: +# 1 - "cli" or "tui" +# 2 - GOOS +# 3 - GOARCH +define build-and-zip + $(call build,$(1),$(2),$(3),$(BUILDS_DIRECTORY)/$(BINARY_NAME)-$(1)) + cd $(BUILDS_DIRECTORY); zip "./$(BINARY_NAME)-$(1)_$(2)_$(3).zip" "./$(BINARY_NAME)-$(1)" +endef + +# build-and-zip-all-targets builds and zips binary for all targets +# 1 - "cli" or "tui" +define build-and-zip-all-targets + $(call build-and-zip,$(1),darwin,386) + $(call build-and-zip,$(1),darwin,amd64) + + $(call build-and-zip,$(1),linux,386) + $(call build-and-zip,$(1),linux,amd64) + $(call build-and-zip,$(1),linux,arm) + $(call build-and-zip,$(1),linux,arm64) + + -rm $(BUILDS_DIRECTORY)/$(BINARY_NAME) + + $(call build,$(1),windows,386,$(BUILDS_DIRECTORY)/$(BINARY_NAME)-$(1).exe) + cd $(BUILDS_DIRECTORY); zip "./$(BINARY_NAME)-$(1)_windows_386.zip" "./$(BINARY_NAME)-$(1).exe" + $(call build,$(1),windows,amd64,$(BUILDS_DIRECTORY)/$(BINARY_NAME)-$(1).exe) + cd $(BUILDS_DIRECTORY); zip "./$(BINARY_NAME)-$(1)_windows_amd64.zip" "./$(BINARY_NAME)-$(1).exe" + + -rm $(2)/$(BINARY_NAME)-$(1).exe +endef + +all: + $(call build-and-zip-all-targets,tui) + $(call build-and-zip-all-targets,cli) + +build: + $(call build,$(TARGET_UI),$(TARGET_OS),$(TARGET_ARCH),$(BUILDS_DIRECTORY)/$(BINARY_NAME)-$(TARGET_UI)) + +clean: + $(GOCMD) clean + +run: run-tui + +run-tui: + cd ./tui; $(GOCMD) run main.go $(ARGS) +run-cli: + cd ./tui; $(GOCMD) run main.go $(ARGS) + +deps: + $(GOCMD) get diff --git a/cmd/build-all.sh b/cmd/build-all.sh deleted file mode 100755 index 71e2330..0000000 --- a/cmd/build-all.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -./build-and-zip-all-targets.sh ./tui ./tui-builds "P2P_Forwarder_tui" -./build-and-zip-all-targets.sh ./cli ./cli-builds "P2P_Forwarder_cli" diff --git a/cmd/build-and-zip-all-targets.sh b/cmd/build-and-zip-all-targets.sh deleted file mode 100755 index 008fa6a..0000000 --- a/cmd/build-and-zip-all-targets.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/sh - -SOURCE_PATH=$(realpath "$1") -BUILDS_PATH=$(realpath "$2") -FILENAME=$3 - -MAIN_PATH=$PWD - -rm -r "$BUILDS_PATH" - -build() { - if [ "$1" = "windows" ]; then - cd "$SOURCE_PATH" - "$MAIN_PATH/build.sh" "$1" "$2" "$BUILDS_PATH/$FILENAME.exe" - cd "$BUILDS_PATH" - zip "./${FILENAME}_$1_$2.zip" "./$FILENAME.exe" - cd "$MAIN_PATH" - else - cd "$SOURCE_PATH" - "$MAIN_PATH/build.sh" "$1" "$2" "$BUILDS_PATH/$FILENAME" - cd "$BUILDS_PATH" - zip "./${FILENAME}_$1_$2.zip" "./$FILENAME" - cd "$MAIN_PATH" - fi -} - -build windows 386 -build windows amd64 - -build darwin 386 -build darwin amd64 - -build linux 386 -build linux amd64 -build linux arm -build linux arm64 - -rm "$BUILDS_PATH/$FILENAME.exe" -rm "$BUILDS_PATH/$FILENAME" diff --git a/cmd/build.sh b/cmd/build.sh deleted file mode 100755 index 49d1635..0000000 --- a/cmd/build.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -export CFLAGS='-w -O3' -export CGO_CFLAGS="$CFLAGS" -export CGO_CPPFLAGS="$CFLAGS" -export CGO_CXXFLAGS="$CFLAGS" -export CGO_FFLAGS="$CFLAGS" -export CGO_LDFLAGS="$CFLAGS" - -echo "Building for '$1':'$2' to '$3'" - -GOOS="$1" GOARCH="$2" go build -o "$3" -gcflags="all=-trimpath=$HOME" -asmflags="all=-trimpath=$HOME" -ldflags="-s -w" diff --git a/cmd/cli/main.go b/cmd/cli/main.go index b47e6b6..72c6f77 100644 --- a/cmd/cli/main.go +++ b/cmd/cli/main.go @@ -140,6 +140,7 @@ loop: } } } + func shutdown() { zap.L().Info("Shutdown...") diff --git a/forwarder.go b/forwarder.go index dcec920..8a25014 100644 --- a/forwarder.go +++ b/forwarder.go @@ -18,6 +18,9 @@ import ( noise "github.com/libp2p/go-libp2p-noise" libp2pquic "github.com/libp2p/go-libp2p-quic-transport" routing "github.com/libp2p/go-libp2p-routing" + libp2ptls "github.com/libp2p/go-libp2p-tls" + "github.com/libp2p/go-tcp-transport" + websocket "github.com/libp2p/go-ws-transport" "github.com/sparkymat/appdir" ) @@ -74,14 +77,6 @@ func NewForwarder() (*Forwarder, context.CancelFunc, error) { return nil, nil, err } - // This connects to public bootstrappers - for _, addr := range dht.DefaultBootstrapPeers { - pi, _ := peer.AddrInfoFromP2pAddr(addr) - // We ignore errors as some bootstrap peers may be down - // and that is fine. - h.Connect(ctx, *pi) - } - f := &Forwarder{ host: h, @@ -161,51 +156,60 @@ func createLibp2pHost(ctx context.Context, priv crypto.PrivKey) (host.Host, erro var d *dht.IpfsDHT h, err := libp2p.New(ctx, - // Use the keypair libp2p.Identity(priv), - // Multiple listen addresses + + libp2p.Transport(libp2pquic.NewTransport), + libp2p.Transport(tcp.NewTCPTransport), + libp2p.Transport(websocket.New), + + libp2p.DefaultMuxers, + + libp2p.Security(noise.ID, noise.New), + libp2p.Security(libp2ptls.ID, libp2ptls.New), + libp2p.ListenAddrStrings( "/ip4/0.0.0.0/udp/0/quic", "/ip6/::/udp/0/quic", - ), - libp2p.DefaultListenAddrs, - // support Noise connections - libp2p.Security(noise.ID, noise.New), - // support any other default transports (secio, tls) - libp2p.DefaultSecurity, - // support QUIC - libp2p.Transport(libp2pquic.NewTransport), - // support any other default transports (TCP) - libp2p.DefaultTransports, - libp2p.DefaultMuxers, + "/ip4/0.0.0.0/tcp/0", + "/ip6/::/tcp/0", + ), - // Let's prevent our peer from having too many - // connections by attaching a connection manager. libp2p.ConnectionManager(connmgr.NewConnManager( 100, // Lowwater 400, // HighWater, time.Minute, // GracePeriod )), - libp2p.EnableNATService(), - // Attempt to open ports using uPNP for NATed hosts. + libp2p.NATPortMap(), - // Let this host use the DHT to find other hosts - libp2p.Routing(func(h host.Host) (routing.PeerRouting, error) { - var err error - d, err = dht.New(ctx, h, dht.BootstrapPeers(dht.GetDefaultBootstrapPeerAddrInfos()...)) - return d, err - }), + + libp2p.EnableNATService(), + libp2p.EnableAutoRelay(), libp2p.EnableRelay(relay.OptActive), libp2p.DefaultStaticRelays(), libp2p.DefaultPeerstore, + + libp2p.Routing(func(h host.Host) (routing.PeerRouting, error) { + var err error + d, err = dht.New(ctx, h, dht.BootstrapPeers(dht.GetDefaultBootstrapPeerAddrInfos()...)) + return d, err + }), ) if err != nil { return nil, err } + // This connects to public bootstrappers + for _, addr := range dht.DefaultBootstrapPeers { + pi, err := peer.AddrInfoFromP2pAddr(addr) + if err != nil { + panic(err) + } + h.Connect(ctx, *pi) + } + err = d.Bootstrap(ctx) if err != nil { return nil, err diff --git a/go.mod b/go.mod index 7ee3e8a..536de39 100644 --- a/go.mod +++ b/go.mod @@ -14,6 +14,9 @@ require ( github.com/libp2p/go-libp2p-noise v0.1.1 github.com/libp2p/go-libp2p-quic-transport v0.8.0 github.com/libp2p/go-libp2p-routing v0.1.0 + github.com/libp2p/go-libp2p-tls v0.1.3 + github.com/libp2p/go-tcp-transport v0.2.1 + github.com/libp2p/go-ws-transport v0.3.1 github.com/mattn/go-runewidth v0.0.9 // indirect github.com/nsf/termbox-go v0.0.0-20200418040025-38ba6e5628f1 // indirect github.com/sparkymat/appdir v0.0.0-20190803090504-1c2ab64aee87 diff --git a/protdial.go b/protdial.go index 850e642..d6f8ea0 100644 --- a/protdial.go +++ b/protdial.go @@ -124,7 +124,7 @@ func (f *Forwarder) dialTCP(ctx context.Context, peerid peer.ID, protocolType by } } - addressstr := "tcp:" + listenip + ":" + strconv.Itoa(lport) + " -> " + strconv.FormatUint(uint64(port), 10) + addressstr := "tcp:" + listenip + ":" + strconv.Itoa(lport) + " -> " + "tcp:" + strconv.FormatUint(uint64(port), 10) onInfoFn("Listening " + addressstr) @@ -213,7 +213,7 @@ func (f *Forwarder) dialUDP(ctx context.Context, peerid peer.ID, protocolType by } } - addressstr := "udp:" + listenip + ":" + strconv.Itoa(lport) + " -> " + strconv.FormatUint(uint64(port), 10) + addressstr := "udp:" + listenip + ":" + strconv.Itoa(lport) + " -> " + "udp:" + strconv.FormatUint(uint64(port), 10) onInfoFn("Listening " + addressstr)