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