34 lines
952 B
Go
34 lines
952 B
Go
package relay
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/davecgh/go-spew/spew"
|
|
|
|
"git-indra.lan/indra-labs/indra/pkg/onion/session"
|
|
"git-indra.lan/indra-labs/indra/pkg/types"
|
|
"git-indra.lan/indra-labs/indra/pkg/util/slice"
|
|
)
|
|
|
|
func (eng *Engine) session(on *session.Layer, b slice.Bytes,
|
|
c *slice.Cursor, prev types.Onion) {
|
|
|
|
log.T.C(func() string {
|
|
return fmt.Sprint("incoming session",
|
|
spew.Sdump(on.PreimageHash()))
|
|
})
|
|
pi := eng.FindPendingPreimage(on.PreimageHash())
|
|
if pi != nil {
|
|
// We need to delete this first in case somehow two such
|
|
// messages arrive at the same time, and we end up with
|
|
// duplicate sessions.
|
|
eng.DeletePendingPayment(pi.Preimage)
|
|
log.D.F("Adding session %s to %s", pi.ID, eng.GetLocalNodeAddress())
|
|
eng.AddSession(NewSession(pi.ID,
|
|
eng.GetLocalNode(), pi.Amount, on.Header, on.Payload, on.Hop))
|
|
eng.handleMessage(BudgeUp(b, *c), on)
|
|
} else {
|
|
log.E.Ln("dropping session message without payment")
|
|
}
|
|
}
|