From b4810106ceeb87836472120d9f63fdc7b8e9e7df Mon Sep 17 00:00:00 2001 From: l0k18 Date: Mon, 19 Jun 2023 11:54:09 +0100 Subject: [PATCH] Refactor to PayChan, use Mgr() method and unexport manager, ad load ad. --- pkg/engine/{ => ads}/ads.go | 25 +++++++++++--- pkg/engine/eng_senders.go | 54 +++++++++++++++---------------- pkg/engine/eng_sessions.go | 20 ++++++------ pkg/engine/engine.go | 52 ++++++++++++++++------------- pkg/engine/engine_test.go | 22 ++++++------- pkg/engine/fail_test.go | 20 ++++++------ pkg/engine/mock.go | 10 +++--- pkg/engine/node/node.go | 4 +-- pkg/engine/payments/payments.go | 10 +++--- pkg/engine/peerstore_test.go | 12 +++---- pkg/engine/reply.go | 2 +- pkg/engine/sendgetbalance_test.go | 6 ++-- pkg/engine/sess/sessionmanager.go | 6 ++-- 13 files changed, 133 insertions(+), 110 deletions(-) rename pkg/engine/{ => ads}/ads.go (74%) diff --git a/pkg/engine/ads.go b/pkg/engine/ads/ads.go similarity index 74% rename from pkg/engine/ads.go rename to pkg/engine/ads/ads.go index 42146e0a..85db937a 100644 --- a/pkg/engine/ads.go +++ b/pkg/engine/ads/ads.go @@ -1,23 +1,31 @@ -package engine +package ads import ( "github.com/indra-labs/indra/pkg/crypto/nonce" "github.com/indra-labs/indra/pkg/engine/node" "github.com/indra-labs/indra/pkg/onions/adaddress" + "github.com/indra-labs/indra/pkg/onions/adload" "github.com/indra-labs/indra/pkg/onions/adpeer" "github.com/indra-labs/indra/pkg/onions/adproto" "github.com/indra-labs/indra/pkg/onions/adservices" + log2 "github.com/indra-labs/indra/pkg/proc/log" "github.com/indra-labs/indra/pkg/util/multi" "github.com/multiformats/go-multiaddr" "time" ) +var ( + log = log2.GetLogger() + fails = log.E.Chk +) + const DefaultAdExpiry = time.Hour * 24 * 7 // one week type NodeAds struct { Peer adpeer.Ad Address adaddress.Ad Services adservices.Ad + Load adload.Ad } func GetMultiaddr(n *node.Node) (ma multiaddr.Multiaddr, e error) { @@ -28,20 +36,19 @@ func GetMultiaddr(n *node.Node) (ma multiaddr.Multiaddr, e error) { return } -func GenerateAds(n *node.Node) (na *NodeAds, e error) { +func GenerateAds(n *node.Node, load byte) (na *NodeAds, e error) { expiry := time.Now().Add(DefaultAdExpiry) var svcs []adservices.Service for i := range n.Services { svcs = append(svcs, adservices.Service{ Port: n.Services[i].Port, - RelayRate: uint32(n.Services[i].RelayRate), + RelayRate: n.Services[i].RelayRate, }) } var ma multiaddr.Multiaddr - if ma, e = multi.AddrFromAddrPort(*n.AddrPort); fails(e) { + if ma, e = GetMultiaddr(n); fails(e) { return } - ma = multi.AddKeyToMultiaddr(ma, n.Identity.Pub) na = &NodeAds{ Peer: adpeer.Ad{ Ad: adproto.Ad{ @@ -67,6 +74,14 @@ func GenerateAds(n *node.Node) (na *NodeAds, e error) { }, Services: svcs, }, + Load: adload.Ad{ + Ad: adproto.Ad{ + ID: nonce.NewID(), + Key: n.Identity.Pub, + Expiry: time.Now().Add(time.Minute * 10), + }, + Load: load, + }, } return } diff --git a/pkg/engine/eng_senders.go b/pkg/engine/eng_senders.go index 856bac02..6eecc836 100644 --- a/pkg/engine/eng_senders.go +++ b/pkg/engine/eng_senders.go @@ -29,12 +29,12 @@ func (ng *Engine) SendExit(port uint16, msg slice.Bytes, id nonce.ID, s := make(sessions.Sessions, len(hops)) s[2] = bob s[5] = alice - se := ng.Manager.SelectHops(hops, s, "exit") + se := ng.Mgr().SelectHops(hops, s, "exit") var c sessions.Circuit copy(c[:], se) o := MakeExit(exit.ExitParams{port, msg, id, bob, alice, c, ng.KeySet}) - res := PostAcctOnion(ng.Manager, o) - ng.Manager.SendWithOneHook(c[0].Node.AddrPort, res, hook, ng.Responses) + res := PostAcctOnion(ng.Mgr(), o) + ng.Mgr().SendWithOneHook(c[0].Node.AddrPort, res, hook, ng.Responses) } func (ng *Engine) SendGetBalance(alice, bob *sessions.Data, hook responses.Callback) { @@ -42,14 +42,14 @@ func (ng *Engine) SendGetBalance(alice, bob *sessions.Data, hook responses.Callb s := make(sessions.Sessions, len(hops)) s[2] = bob s[5] = alice - se := ng.Manager.SelectHops(hops, s, "sendgetbalance") + se := ng.Mgr().SelectHops(hops, s, "sendgetbalance") var c sessions.Circuit copy(c[:], se) o := MakeGetBalance(getbalance.GetBalanceParams{alice.ID, alice, bob, c, ng.KeySet}) log.D.S("sending out getbalance onion", o) - res := PostAcctOnion(ng.Manager, o) - ng.Manager.SendWithOneHook(c[0].Node.AddrPort, res, hook, ng.Responses) + res := PostAcctOnion(ng.Mgr(), o) + ng.Mgr().SendWithOneHook(c[0].Node.AddrPort, res, hook, ng.Responses) } func (ng *Engine) SendHiddenService(id nonce.ID, key *crypto.Prv, @@ -60,18 +60,18 @@ func (ng *Engine) SendHiddenService(id nonce.ID, key *crypto.Prv, hops := sess.StandardCircuit() s := make(sessions.Sessions, len(hops)) s[2] = alice - se := ng.Manager.SelectHops(hops, s, "sendhiddenservice") + se := ng.Mgr().SelectHops(hops, s, "sendhiddenservice") var c sessions.Circuit copy(c[:], se[:len(c)]) in = adintro.New(id, key, alice.Node.AddrPort, relayRate, port, expiry) o := MakeHiddenService(in, alice, bob, c, ng.KeySet) log.D.F("%s sending out hidden service onion %s", - ng.Manager.GetLocalNodeAddressString(), + ng.Mgr().GetLocalNodeAddressString(), color.Yellow.Sprint(alice.Node.AddrPort.String())) - res := PostAcctOnion(ng.Manager, o) + res := PostAcctOnion(ng.Mgr(), o) ng.GetHidden().AddHiddenService(svc, key, in, - ng.Manager.GetLocalNodeAddressString()) - ng.Manager.SendWithOneHook(c[0].Node.AddrPort, res, hook, ng.Responses) + ng.Mgr().GetLocalNodeAddressString()) + ng.Mgr().SendWithOneHook(c[0].Node.AddrPort, res, hook, ng.Responses) return } @@ -97,24 +97,24 @@ func (ng *Engine) SendIntroQuery(id nonce.ID, hsk *crypto.Pub, s := make(sessions.Sessions, len(hops)) s[2] = bob s[5] = alice - se := ng.Manager.SelectHops(hops, s, "sendintroquery") + se := ng.Mgr().SelectHops(hops, s, "sendintroquery") var c sessions.Circuit copy(c[:], se) o := MakeIntroQuery(id, hsk, bob, alice, c, ng.KeySet) - res := PostAcctOnion(ng.Manager, o) + res := PostAcctOnion(ng.Mgr(), o) log.D.Ln(res.ID) - ng.Manager.SendWithOneHook(c[0].Node.AddrPort, res, fn, ng.Responses) + ng.Mgr().SendWithOneHook(c[0].Node.AddrPort, res, fn, ng.Responses) } func (ng *Engine) SendMessage(mp *message.Message, hook responses.Callback) (id nonce.ID) { // Add another two hops for security against unmasking. preHops := []byte{0, 1} - oo := ng.Manager.SelectHops(preHops, mp.Forwards[:], "sendmessage") + oo := ng.Mgr().SelectHops(preHops, mp.Forwards[:], "sendmessage") mp.Forwards = [2]*sessions.Data{oo[0], oo[1]} o := []ont.Onion{mp} - res := PostAcctOnion(ng.Manager, o) + res := PostAcctOnion(ng.Mgr(), o) log.D.Ln("sending out message onion") - ng.Manager.SendWithOneHook(mp.Forwards[0].Node.AddrPort, res, hook, + ng.Mgr().SendWithOneHook(mp.Forwards[0].Node.AddrPort, res, hook, ng.Responses) return res.ID } @@ -123,20 +123,20 @@ func (ng *Engine) SendPing(c sessions.Circuit, hook responses.Callback) { hops := sess.StandardCircuit() s := make(sessions.Sessions, len(hops)) copy(s, c[:]) - se := ng.Manager.SelectHops(hops, s, "sendping") + se := ng.Mgr().SelectHops(hops, s, "sendping") copy(c[:], se) id := nonce.NewID() o := Ping(id, se[len(se)-1], c, ng.KeySet) - res := PostAcctOnion(ng.Manager, o) - ng.Manager.SendWithOneHook(c[0].Node.AddrPort, res, hook, ng.Responses) + res := PostAcctOnion(ng.Mgr(), o) + ng.Mgr().SendWithOneHook(c[0].Node.AddrPort, res, hook, ng.Responses) } func (ng *Engine) SendRoute(k *crypto.Pub, ap *netip.AddrPort, hook responses.Callback) { - ng.Manager.FindNodeByAddrPort(ap) + ng.Mgr().FindNodeByAddrPort(ap) var ss *sessions.Data - ng.Manager.IterateSessions(func(s *sessions.Data) bool { + ng.Mgr().IterateSessions(func(s *sessions.Data) bool { if s.Node.AddrPort.String() == ap.String() { ss = s return true @@ -144,20 +144,20 @@ func (ng *Engine) SendRoute(k *crypto.Pub, ap *netip.AddrPort, return false }) if ss == nil { - log.E.Ln(ng.Manager.GetLocalNodeAddressString(), + log.E.Ln(ng.Mgr().GetLocalNodeAddressString(), "could not find session for address", ap.String()) return } - log.D.Ln(ng.Manager.GetLocalNodeAddressString(), "sending route", + log.D.Ln(ng.Mgr().GetLocalNodeAddressString(), "sending route", k.ToBased32Abbreviated()) hops := sess.StandardCircuit() s := make(sessions.Sessions, len(hops)) s[2] = ss - se := ng.Manager.SelectHops(hops, s, "sendroute") + se := ng.Mgr().SelectHops(hops, s, "sendroute") var c sessions.Circuit copy(c[:], se) o := MakeRoute(nonce.NewID(), k, ng.KeySet, se[5], c[2], c) - res := PostAcctOnion(ng.Manager, o) + res := PostAcctOnion(ng.Mgr(), o) log.D.Ln("sending out route request onion") - ng.Manager.SendWithOneHook(c[0].Node.AddrPort, res, hook, ng.Responses) + ng.Mgr().SendWithOneHook(c[0].Node.AddrPort, res, hook, ng.Responses) } diff --git a/pkg/engine/eng_sessions.go b/pkg/engine/eng_sessions.go index d9aa3d2d..0cd75369 100644 --- a/pkg/engine/eng_sessions.go +++ b/pkg/engine/eng_sessions.go @@ -18,7 +18,7 @@ import ( func (ng *Engine) BuyNewSessions(amount lnwire.MilliSatoshi, fn func()) (e error) { var nodes [5]*node.Node - nodes = ng.Manager.SelectUnusedCircuit() + nodes = ng.Mgr().SelectUnusedCircuit() for i := range nodes { if nodes[i] == nil { e = fmt.Errorf("failed to find nodes %d", i) @@ -27,7 +27,7 @@ func (ng *Engine) BuyNewSessions(amount lnwire.MilliSatoshi, } // Get a random return hop session (index 5). var returnSession *sessions.Data - returnHops := ng.Manager.GetSessionsAtHop(5) + returnHops := ng.Mgr().GetSessionsAtHop(5) if len(returnHops) > 1 { cryptorand.Shuffle(len(returnHops), func(i, j int) { returnHops[i], returnHops[j] = returnHops[j], returnHops[i] @@ -45,7 +45,7 @@ func (ng *Engine) BuyNewSessions(amount lnwire.MilliSatoshi, var pendingConfirms int for i := range nodes { confirmChans[i] = nodes[i]. - Chan.Send(amount, s[i].ID, s[i].PreimageHash()) + PayChan.Send(amount, s[i].ID, s[i].PreimageHash()) pendingConfirms++ } var success bool @@ -78,12 +78,12 @@ func (ng *Engine) BuyNewSessions(amount lnwire.MilliSatoshi, } // todo: handle payment failures! o := MakeSession(conf, s, returnSession, nodes[:], ng.KeySet) - res := PostAcctOnion(ng.Manager, o) - ng.Manager.SendWithOneHook(nodes[0].AddrPort, res, func(id nonce.ID, + res := PostAcctOnion(ng.Mgr(), o) + ng.Mgr().SendWithOneHook(nodes[0].AddrPort, res, func(id nonce.ID, ifc interface{}, b slice.Bytes) (e error) { - ng.Manager.Lock() - defer ng.Manager.Unlock() + ng.Mgr().Lock() + defer ng.Mgr().Unlock() var ss [5]*sessions.Data for i := range nodes { log.D.F("confirming and storing session at hop %d %s for %s with"+ @@ -93,9 +93,9 @@ func (ng *Engine) BuyNewSessions(amount lnwire.MilliSatoshi, amount) ss[i] = sessions.NewSessionData(s[i].ID, nodes[i], amount, s[i].Header, s[i].Payload, byte(i)) - ng.Manager.Add(ss[i]) - ng.Manager.Sessions = append(ng.Manager.Sessions, ss[i]) - ng.Manager.PendingPayments.Delete(s[i].PreimageHash()) + ng.Mgr().Add(ss[i]) + ng.Mgr().Sessions = append(ng.manager.Sessions, ss[i]) + ng.Mgr().PendingPayments.Delete(s[i].PreimageHash()) } fn() return diff --git a/pkg/engine/engine.go b/pkg/engine/engine.go index 6369eaae..7791db60 100644 --- a/pkg/engine/engine.go +++ b/pkg/engine/engine.go @@ -4,6 +4,7 @@ import ( "context" "github.com/indra-labs/indra/pkg/crypto" "github.com/indra-labs/indra/pkg/crypto/nonce" + "github.com/indra-labs/indra/pkg/engine/ads" "github.com/indra-labs/indra/pkg/engine/node" "github.com/indra-labs/indra/pkg/engine/responses" "github.com/indra-labs/indra/pkg/engine/sess" @@ -33,8 +34,9 @@ type ( Engine struct { ctx context.Context cancel func() - Responses *responses.Pending - Manager *sess.Manager + Responses *responses.Pending + manager *sess.Manager + NodeAds *ads.NodeAds Listener *transport.Listener PubSub *pubsub.PubSub topic *pubsub.Topic @@ -67,7 +69,7 @@ func (ng *Engine) GetLoad() byte { return byte(ng.Load.Load()) } func (ng *Engine) HandleMessage(s *splice.Splice, pr ont.Onion) { log.D.F("%s handling received message", - ng.Manager.GetLocalNodeAddressString()) + ng.Mgr().GetLocalNodeAddressString()) s.SetCursor(0) s.Segments = s.Segments[:0] on := reg.Recognise(s) @@ -92,7 +94,7 @@ func (ng *Engine) HandleMessage(s *splice.Splice, pr ont.Onion) { func (ng *Engine) Handler() (out bool) { log.T.C(func() string { - return ng.Manager.GetLocalNodeAddressString() + " awaiting message" + return ng.Mgr().GetLocalNodeAddressString() + " awaiting message" }) var prev ont.Onion select { @@ -105,13 +107,13 @@ func (ng *Engine) Handler() (out bool) { log.D.Ln("new connection inbound (TODO):", c.Host.Addrs()) _ = c }() - case b := <-ng.Manager.ReceiveToLocalNode(): + case b := <-ng.Mgr().ReceiveToLocalNode(): s := splice.Load(b, slice.NewCursor()) ng.HandleMessage(s, prev) - case p := <-ng.Manager.GetLocalNode().Chan.Receive(): + case p := <-ng.Mgr().GetLocalNode().PayChan.Receive(): log.D.F("incoming payment for %s: %v", p.ID, p.Amount) topUp := false - ng.Manager.IterateSessions(func(s *sessions.Data) bool { + ng.Mgr().IterateSessions(func(s *sessions.Data) bool { if s.Preimage == p.Preimage { s.IncSats(p.Amount, false, "top-up") topUp = true @@ -121,7 +123,7 @@ func (ng *Engine) Handler() (out bool) { return false }) if !topUp { - ng.Manager.AddPendingPayment(p) + ng.Mgr().AddPendingPayment(p) log.T.F("awaiting session keys for preimage %s session Keys %s", p.Preimage, p.ID) } @@ -129,21 +131,21 @@ func (ng *Engine) Handler() (out bool) { // a timeout on the lnd node returning the success to trigger this. p.ConfirmChan <- true case <-ng.Pause: - log.D.Ln("pausing", ng.Manager.GetLocalNodeAddressString()) + log.D.Ln("pausing", ng.Mgr().GetLocalNodeAddressString()) // For testing purposes we need to halt this Handler and discard channel // messages. out: for { select { - case <-ng.Manager.GetLocalNode().Chan.Receive(): + case <-ng.Mgr().GetLocalNode().PayChan.Receive(): log.D.Ln("discarding payments while in pause") - case <-ng.Manager.ReceiveToLocalNode(): + case <-ng.Mgr().ReceiveToLocalNode(): log.D.Ln("discarding messages while in pause") case <-ng.ctx.Done(): break out case <-ng.Pause: // This will then resume to the top level select. - log.D.Ln("unpausing", ng.Manager.GetLocalNodeAddressString()) + log.D.Ln("unpausing", ng.Mgr().GetLocalNodeAddressString()) break out } } @@ -153,14 +155,14 @@ func (ng *Engine) Handler() (out bool) { func (ng *Engine) Keyset() *crypto.KeySet { return ng.KeySet } func (ng *Engine) WaitForShutdown() <-chan struct{} { return ng.ctx.Done() } -func (ng *Engine) Mgr() *sess.Manager { return ng.Manager } +func (ng *Engine) Mgr() *sess.Manager { return ng.manager } func (ng *Engine) Pending() *responses.Pending { return ng.Responses } func (ng *Engine) SetLoad(load byte) { ng.Load.Store(uint32(load)) } // Shutdown triggers the shutdown of the client and the Cleanup before // finishing. func (ng *Engine) Shutdown() { - log.T.Ln("shutting down", ng.Manager.GetLocalNodeAddress().String()) + log.T.Ln("shutting down", ng.Mgr().GetLocalNodeAddress().String()) if ng.ShuttingDown.Load() { return } @@ -184,7 +186,7 @@ func (ng *Engine) Start() { } // New creates a new Engine according to the Params given. -func New(p Params) (c *Engine, e error) { +func New(p Params) (ng *Engine, e error) { p.Node.Transport = p.Transport p.Node.Identity = p.Keys var ks *crypto.KeySet @@ -192,34 +194,40 @@ func New(p Params) (c *Engine, e error) { return } ctx, cancel := context.WithCancel(context.Background()) - c = &Engine{ + ng = &Engine{ ctx: ctx, cancel: cancel, Responses: &responses.Pending{}, KeySet: ks, Listener: p.Listener, - Manager: sess.NewSessionManager(), + manager: sess.NewSessionManager(), h: hidden.NewHiddenrouting(), Pause: qu.T(), } if p.Listener != nil && p.Listener.Host != nil { - if c.PubSub, e = pubsub.NewGossipSub(ctx, p.Listener.Host); fails(e) { + if ng.PubSub, e = pubsub.NewGossipSub(ctx, p.Listener.Host); fails(e) { cancel() return } - if c.topic, e = c.PubSub.Join(PubSubTopic); fails(e) { + if ng.topic, e = ng.PubSub.Join(PubSubTopic); fails(e) { + cancel() return } - if c.sub, e = c.topic.Subscribe(); fails(e) { + if ng.sub, e = ng.topic.Subscribe(); fails(e) { + cancel() return } log.T.Ln("subscribed to", PubSubTopic, "topic on gossip network") } - c.Manager.AddNodes(append([]*node.Node{p.Node}, p.Nodes...)...) + if ng.NodeAds, e = ads.GenerateAds(p.Node, 25); fails(e) { + cancel() + return + } + ng.Mgr().AddNodes(append([]*node.Node{p.Node}, p.Nodes...)...) // Add return sessions for receiving responses, ideally more of these // will be generated during operation and rotated out over time. for i := 0; i < p.NReturnSessions; i++ { - c.Manager.AddSession(sessions.NewSessionData(nonce.NewID(), p.Node, 0, + ng.Mgr().AddSession(sessions.NewSessionData(nonce.NewID(), p.Node, 0, nil, nil, 5)) } return diff --git a/pkg/engine/engine_test.go b/pkg/engine/engine_test.go index 12edf677..10dbc6ac 100644 --- a/pkg/engine/engine_test.go +++ b/pkg/engine/engine_test.go @@ -35,12 +35,12 @@ func TestClient_SendExit(t *testing.T) { t.FailNow() } client := clients[0] - log.D.Ln("client", client.Manager.GetLocalNodeAddressString()) + log.D.Ln("client", client.Mgr().GetLocalNodeAddressString()) // set up forwarding port service const port = 3455 sim := transport.NewByteChan(0) for i := range clients { - e = clients[i].Manager.AddServiceToLocalNode(&services.Service{ + e = clients[i].Mgr().AddServiceToLocalNode(&services.Service{ Port: port, Transport: sim, RelayRate: 58000, @@ -66,7 +66,7 @@ func TestClient_SendExit(t *testing.T) { t.Error("Exit test failed") }() out: - for i := 3; i < len(clients[0].Manager.Sessions)-1; i++ { + for i := 3; i < len(clients[0].Mgr().Sessions)-1; i++ { wg.Add(1) var msg slice.Bytes if msg, _, e = tests.GenMessage(64, "request"); fails(e) { @@ -80,8 +80,8 @@ out: t.Error(e) t.FailNow() } - bob := clients[0].Manager.Sessions[i] - returnHops := client.Manager.GetSessionsAtHop(5) + bob := clients[0].Mgr().Sessions[i] + returnHops := client.Mgr().GetSessionsAtHop(5) var alice *sessions.Data if len(returnHops) > 1 { cryptorand.Shuffle(len(returnHops), func(i, j int) { @@ -105,7 +105,7 @@ out: }) bb := <-clients[3].Mgr().GetLocalNode().ReceiveFrom(port) log.T.S(bb.ToBytes()) - if e = clients[3].Manager.SendFromLocalNode(port, respMsg); fails(e) { + if e = clients[3].Mgr().SendFromLocalNode(port, respMsg); fails(e) { t.Error("fail send") } log.T.Ln("response sent") @@ -151,11 +151,11 @@ func TestClient_SendPing(t *testing.T) { t.Error("SendPing test failed") }() out: - for i := 3; i < len(clients[0].Manager.Sessions)-1; i++ { + for i := 3; i < len(clients[0].Mgr().Sessions)-1; i++ { wg.Add(1) var c sessions.Circuit - sess := clients[0].Manager.Sessions[i] - c[sess.Hop] = clients[0].Manager.Sessions[i] + sess := clients[0].Mgr().Sessions[i] + c[sess.Hop] = clients[0].Mgr().Sessions[i] clients[0].SendPing(c, func(id nonce.ID, ifc interface{}, b slice.Bytes) (e error) { log.D.Ln("success") @@ -219,8 +219,8 @@ func TestClient_SendSessionKeys(t *testing.T) { counter.Dec() } wg.Wait() - for j := range clients[0].Manager.CircuitCache { - log.D.F("%d %s %v", i, j, clients[0].Manager.CircuitCache[j]) + for j := range clients[0].Mgr().CircuitCache { + log.D.F("%d %s %v", i, j, clients[0].Mgr().CircuitCache[j]) } quit.Q() } diff --git a/pkg/engine/fail_test.go b/pkg/engine/fail_test.go index e6192ec1..1fe502a3 100644 --- a/pkg/engine/fail_test.go +++ b/pkg/engine/fail_test.go @@ -44,7 +44,7 @@ func TestEngine_Message(t *testing.T) { t.FailNow() } client := clients[0] - log.D.Ln("client", client.Manager.GetLocalNodeAddressString()) + log.D.Ln("client", client.Mgr().GetLocalNodeAddressString()) // Start up the clients. for _, v := range clients { go v.Start() @@ -89,9 +89,9 @@ func TestEngine_Message(t *testing.T) { } id := nonce.NewID() _ = id - introducerHops := client.Manager.GetSessionsAtHop(2) + introducerHops := client.Mgr().GetSessionsAtHop(2) var introducer *sessions.Data - returnHops := client.Manager.GetSessionsAtHop(5) + returnHops := client.Mgr().GetSessionsAtHop(5) var returner *sessions.Data _ = returner if len(introducerHops) > 1 { @@ -112,7 +112,7 @@ func TestEngine_Message(t *testing.T) { returner = returnHops[0] log.D.Ln("getting sessions for introducer...") for i := range clients { - if introducer.Node.ID == clients[i].Manager.GetLocalNode().ID { + if introducer.Node.ID == clients[i].Mgr().GetLocalNode().ID { for j := 0; j < nCircuits; j++ { wg.Add(1) counter.Inc() @@ -217,7 +217,7 @@ func TestEngine_Route(t *testing.T) { t.FailNow() } client := clients[0] - log.W.Ln("client", client.Manager.GetLocalNodeAddressString()) + log.W.Ln("client", client.Mgr().GetLocalNodeAddressString()) // Start up the clients. for _, v := range clients { go v.Start() @@ -262,9 +262,9 @@ func TestEngine_Route(t *testing.T) { } id := nonce.NewID() _ = id - introducerHops := client.Manager.GetSessionsAtHop(2) + introducerHops := client.Mgr().GetSessionsAtHop(2) var introducer *sessions.Data - returnHops := client.Manager.GetSessionsAtHop(5) + returnHops := client.Mgr().GetSessionsAtHop(5) var returner *sessions.Data _ = returner if len(introducerHops) > 1 { @@ -286,7 +286,7 @@ func TestEngine_Route(t *testing.T) { const localPort = 25234 log.D.Ln("getting sessions for introducer...") for i := range clients { - if introducer.Node.ID == clients[i].Manager.GetLocalNode().ID { + if introducer.Node.ID == clients[i].Mgr().GetLocalNode().ID { for j := 0; j < nCircuits; j++ { wg.Add(1) counter.Inc() @@ -397,8 +397,8 @@ func TestEngine_SendHiddenService(t *testing.T) { return } id := nonce.NewID() - introducerHops := clients[0].Manager.GetSessionsAtHop(2) - returnHops := clients[0].Manager.GetSessionsAtHop(5) + introducerHops := clients[0].Mgr().GetSessionsAtHop(2) + returnHops := clients[0].Mgr().GetSessionsAtHop(5) var introducer *sessions.Data if len(introducerHops) > 1 { cryptorand.Shuffle(len(introducerHops), func(i, j int) { diff --git a/pkg/engine/mock.go b/pkg/engine/mock.go index a518399d..f6dd719c 100644 --- a/pkg/engine/mock.go +++ b/pkg/engine/mock.go @@ -60,8 +60,8 @@ func createNMockCircuits(inclSessions bool, nCircuits int, }); fails(e) { return } - cl[i].Manager.SetLocalNodeAddress(nodes[i].AddrPort) - cl[i].Manager.SetLocalNode(nodes[i]) + cl[i].Mgr().SetLocalNodeAddress(nodes[i].AddrPort) + cl[i].Mgr().SetLocalNode(nodes[i]) if inclSessions { // Create a session for all but the first. if i > 0 { @@ -69,11 +69,11 @@ func createNMockCircuits(inclSessions bool, nCircuits int, 1<<16, nil, nil, byte((i-1)/nCircuits)) // AddIntro session to node, so it will be able to relay if it // gets a message with the key. - cl[i].Manager.AddSession(ss[i-1]) + cl[i].Mgr().AddSession(ss[i-1]) // we need a copy for the node so the balance adjustments don't // double up. s := *ss[i-1] - cl[0].Manager.AddSession(&s) + cl[0].Mgr().AddSession(&s) } } } @@ -83,7 +83,7 @@ func createNMockCircuits(inclSessions bool, nCircuits int, if i == j { continue } - cl[i].Manager.AddNodes(nodes[j]) + cl[i].Mgr().AddNodes(nodes[j]) } } return diff --git a/pkg/engine/node/node.go b/pkg/engine/node/node.go index f6215f1c..13c494c5 100644 --- a/pkg/engine/node/node.go +++ b/pkg/engine/node/node.go @@ -31,7 +31,7 @@ type Node struct { Identity *crypto.Keys RelayRate uint32 // Base relay price mSAT/Mb. Services services.Services // Services offered by this peer. - payments.Chan + payments.PayChan Transport tpt.Transport } @@ -45,7 +45,7 @@ func NewNode(addr *netip.AddrPort, keys *crypto.Keys, tpt tpt.Transport, AddrPort: addr, Identity: keys, RelayRate: relayRate, - Chan: make(payments.Chan, PaymentChanBuffers), + PayChan: make(payments.PayChan, PaymentChanBuffers), Transport: tpt, } return diff --git a/pkg/engine/payments/payments.go b/pkg/engine/payments/payments.go index fa295619..f17ac595 100644 --- a/pkg/engine/payments/payments.go +++ b/pkg/engine/payments/payments.go @@ -11,7 +11,7 @@ func (p PendingPayments) Add(np *Payment) (pp PendingPayments) { } type ( - Chan chan *Payment + PayChan chan *Payment Payment struct { ID nonce.ID Preimage sha256.Hash @@ -53,11 +53,11 @@ func (p PendingPayments) FindPreimage(pi sha256.Hash) (pp *Payment) { return } -// Receive waits on receiving a Payment on a Chan. -func (pc Chan) Receive() <-chan *Payment { return pc } +// Receive waits on receiving a Payment on a PayChan. +func (pc PayChan) Receive() <-chan *Payment { return pc } -// Send a payment on the Chan. -func (pc Chan) Send(amount lnwire.MilliSatoshi, +// Send a payment on the PayChan. +func (pc PayChan) Send(amount lnwire.MilliSatoshi, id nonce.ID, preimage sha256.Hash) (confirmChan chan bool) { confirmChan = make(chan bool) pc <- &Payment{ diff --git a/pkg/engine/peerstore_test.go b/pkg/engine/peerstore_test.go index 12cbb862..8adca689 100644 --- a/pkg/engine/peerstore_test.go +++ b/pkg/engine/peerstore_test.go @@ -44,7 +44,7 @@ func TestEngine_PeerStore(t *testing.T) { } time.Sleep(time.Second) newAddressAd := adaddress.New(nonce.NewID(), - engines[0].Manager.GetLocalNodeIdentityPrv(), + engines[0].Mgr().GetLocalNodeIdentityPrv(), engines[0].Listener.Host.Addrs()[0], time.Now().Add(time.Hour*24*7)) sa := splice.New(newAddressAd.Len()) @@ -56,8 +56,8 @@ func TestEngine_PeerStore(t *testing.T) { } time.Sleep(time.Second) newIntroAd := adintro.New(nonce.NewID(), - engines[0].Manager.GetLocalNodeIdentityPrv(), - engines[0].Manager.GetLocalNodeAddress(), + engines[0].Mgr().GetLocalNodeIdentityPrv(), + engines[0].Mgr().GetLocalNodeAddress(), 20000, 443, time.Now().Add(time.Hour*24*7)) si := splice.New(newIntroAd.Len()) @@ -69,7 +69,7 @@ func TestEngine_PeerStore(t *testing.T) { } time.Sleep(time.Second) newLoadAd := adload.New(nonce.NewID(), - engines[0].Manager.GetLocalNodeIdentityPrv(), + engines[0].Mgr().GetLocalNodeIdentityPrv(), 17, time.Now().Add(time.Hour*24*7)) sl := splice.New(newLoadAd.Len()) @@ -81,7 +81,7 @@ func TestEngine_PeerStore(t *testing.T) { } time.Sleep(time.Second) newPeerAd := adpeer.New(nonce.NewID(), - engines[0].Manager.GetLocalNodeIdentityPrv(), + engines[0].Mgr().GetLocalNodeIdentityPrv(), 20000, time.Now().Add(time.Hour*24*7)) log.D.S("peer ad", newPeerAd) @@ -94,7 +94,7 @@ func TestEngine_PeerStore(t *testing.T) { } time.Sleep(time.Second * 1) newServiceAd := adservices.New(nonce.NewID(), - engines[0].Manager.GetLocalNodeIdentityPrv(), + engines[0].Mgr().GetLocalNodeIdentityPrv(), []adservices.Service{{20000, 54321}}, time.Now().Add(time.Hour*24*7)) ss := splice.New(newServiceAd.Len()) diff --git a/pkg/engine/reply.go b/pkg/engine/reply.go index 5e550121..4b5111c9 100644 --- a/pkg/engine/reply.go +++ b/pkg/engine/reply.go @@ -13,7 +13,7 @@ func MakeReplyHeader(ng *Engine) (returnHeader *hidden.ReplyHeader) { rvKeys := ng.KeySet.Next3() hops := []byte{3, 4, 5} s := make(sessions.Sessions, len(hops)) - ng.Manager.SelectHops(hops, s, "make message reply header") + ng.Mgr().SelectHops(hops, s, "make message reply header") rt := &exit.Routing{ Sessions: [3]*sessions.Data{s[0], s[1], s[2]}, Keys: crypto.Privs{rvKeys[0], rvKeys[1], rvKeys[2]}, diff --git a/pkg/engine/sendgetbalance_test.go b/pkg/engine/sendgetbalance_test.go index 160cda80..304eb7fa 100644 --- a/pkg/engine/sendgetbalance_test.go +++ b/pkg/engine/sendgetbalance_test.go @@ -27,7 +27,7 @@ func TestClient_SendGetBalance(t *testing.T) { t.FailNow() } client := clients[0] - log.D.Ln("client", client.Manager.GetLocalNodeAddressString()) + log.D.Ln("client", client.Mgr().GetLocalNodeAddressString()) // Start up the clients. for _, v := range clients { go v.Start() @@ -46,7 +46,7 @@ func TestClient_SendGetBalance(t *testing.T) { }() i := 0 wg.Add(1) - returnHops := client.Manager.GetSessionsAtHop(5) + returnHops := client.Mgr().GetSessionsAtHop(5) var returner *sessions.Data if len(returnHops) > 1 { cryptorand.Shuffle(len(returnHops), func(i, j int) { @@ -55,7 +55,7 @@ func TestClient_SendGetBalance(t *testing.T) { }) } returner = returnHops[0] - clients[0].SendGetBalance(returner, clients[0].Manager.Sessions[i], + clients[0].SendGetBalance(returner, clients[0].Mgr().Sessions[i], func(cf nonce.ID, ifc interface{}, b slice.Bytes) (e error) { log.I.Ln("success") wg.Done() diff --git a/pkg/engine/sess/sessionmanager.go b/pkg/engine/sess/sessionmanager.go index a3941c9a..ff530bf6 100644 --- a/pkg/engine/sess/sessionmanager.go +++ b/pkg/engine/sess/sessionmanager.go @@ -399,9 +399,9 @@ func (sm *Manager) GetLocalNodeIdentityPrv() (ident *crypto.Prv) { return sm.GetLocalNode().Identity.Prv } -// GetLocalNodePaymentChan returns the engine's local Node Chan. -func (sm *Manager) GetLocalNodePaymentChan() payments.Chan { - return sm.nodes[0].Chan +// GetLocalNodePaymentChan returns the engine's local Node PayChan. +func (sm *Manager) GetLocalNodePaymentChan() payments.PayChan { + return sm.nodes[0].PayChan } // GetLocalNodeRelayRate returns the relay rate for the local node.