Files
indra/pkg/relay/send.go
2023-02-27 10:31:28 +00:00

44 lines
1.2 KiB
Go

package relay
import (
"net/netip"
"runtime"
"git-indra.lan/indra-labs/indra/pkg/crypto/nonce"
"git-indra.lan/indra-labs/indra/pkg/util/slice"
)
// Send a message to a peer via their AddrPort.
func (eng *Engine) Send(addr *netip.AddrPort, b slice.Bytes) {
// first search if we already have the node available with connection
// open.
as := addr.String()
eng.ForEachNode(func(n *Node) bool {
if as == n.AddrPort.String() {
_, f, l, _ := runtime.Caller(1)
log.T.F("%s sending message to %v %s:%d",
eng.GetLocalNode().AddrPort.String(), addr, f, l)
n.Transport.Send(b)
return true
}
return false
})
}
// SendWithOneHook is used for onions with only one confirmation hook. Usually
// as returned from PostAcctOnion this is the last, confirmation or response
// layer in an onion.Skins.
func (eng *Engine) SendWithOneHook(ap *netip.AddrPort, res SendData,
responseHook Callback) {
if responseHook == nil {
responseHook = func(_ nonce.ID, _ slice.Bytes) {
log.D.Ln("nil response hook")
}
}
eng.PendingResponses.Add(res.last, len(res.b), res.sessions, res.billable,
res.ret, res.port, responseHook, res.postAcct)
log.T.Ln("sending out onion")
eng.Send(ap, res.b)
}