Files
indra/pkg/p2p/service.go
l0k18 a2bac60a30 encryption added to tests that didn't refactor correctly
note about encryption and why it must be

test datastore now using same settings as seed

badger options extracted from storage for test and other uses

one place it was missing

all using badger/v3 now

peer database entry count implemented

fixed stray incorrect refactorings

added expiry to interface, now propagates correctly

eliminated type switch with extending of interface

Access to badger View and Update now in Engine

Datastore now available via Listener
2023-08-01 10:50:29 +01:00

105 lines
2.3 KiB
Go

package p2p
import (
"context"
"crypto/rand"
"github.com/indra-labs/indra/pkg/cfg"
"github.com/indra-labs/indra/pkg/crypto/sha256"
"github.com/indra-labs/indra/pkg/engine/transport"
"github.com/indra-labs/indra/pkg/interrupt"
"github.com/indra-labs/indra/pkg/p2p/metrics"
"github.com/libp2p/go-libp2p/core/crypto"
"github.com/libp2p/go-libp2p/core/host"
"github.com/spf13/viper"
"time"
"github.com/multiformats/go-multiaddr"
"github.com/indra-labs/indra"
crypto2 "github.com/indra-labs/indra/pkg/crypto"
)
var (
userAgent = "/indra:" + indra.SemVer + "/"
privKey crypto.PrivKey
p2pHost host.Host
seedAddresses []multiaddr.Multiaddr
listenAddresses []multiaddr.Multiaddr
netParams *cfg.Params
)
func init() {
seedAddresses = []multiaddr.Multiaddr{}
listenAddresses = []multiaddr.Multiaddr{}
}
// Run is the main entrypoint for the seed p2p service.
func Run() {
// storage.Update(func(txn *badger.Txn) error {
// txn.Delete([]byte(storeKeyKey))
// return nil
// })
configure()
var e error
netParams = cfg.SelectNetworkParams(viper.GetString("network"))
dataPath := viper.GetString("data-dir")
var pkr []byte
if pkr, e = privKey.Raw(); check(e) {
return
}
var ctx context.Context
var cancel context.CancelFunc
ctx, cancel = context.WithCancel(context.Background())
interrupt.AddHandler(cancel)
pkk := crypto2.PrvKeyFromBytes(pkr)
keys := crypto2.MakeKeys(pkk)
var l []*transport.Listener
var la []string
for i := range listenAddresses {
la = append(la, listenAddresses[i].String())
}
var list *transport.Listener
secret := sha256.New()
rand.Read(secret[:])
store, closer := transport.BadgerStore(dataPath, secret[:])
if store == nil {
panic("could not open database")
}
list, e = transport.NewListener(netParams.GetSeedsMultiAddrStrings(),
la, keys, store, closer, ctx, transport.DefaultMTU, cancel)
l = append(l, list)
p2pHost = list.Host
log.I.Ln("starting p2p server")
log.I.Ln("host id:")
log.I.Ln("-", p2pHost.ID())
log.I.Ln("p2p listeners:")
log.I.Ln("-", p2pHost.Addrs())
metrics.SetInterval(30 * time.Second)
metrics.HostStatus(ctx, p2pHost)
isReadyChan <- true
}
func Shutdown() (err error) {
log.I.Ln("shutting down p2p server")
if p2pHost != nil {
if err = p2pHost.Close(); check(err) {
// continue
}
}
log.I.Ln("- p2p server shutdown complete")
return
}