Resolve if session doesn't exist when writing to PacketConn

This commit is contained in:
Neil Alexander 2020-07-02 13:32:22 +01:00
parent 0f19807e16
commit 7b0d315675
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944
2 changed files with 7 additions and 11 deletions

View file

@ -1,9 +1,6 @@
package tuntap
import (
"fmt"
"net"
"github.com/yggdrasil-network/yggdrasil-go/src/address"
"github.com/yggdrasil-network/yggdrasil-go/src/crypto"
@ -169,8 +166,6 @@ func (tun *TunAdapter) _handlePacket(recvd []byte, err error) {
return
}
fmt.Println("Start search for", net.IP(dstAddr[:]).String())
_, boxPubKey, err = tun.core.Resolve(dstNodeID, dstNodeMask)
if err != nil {
tun.log.Errorln("tun.core.Resolve:", err)

View file

@ -67,13 +67,19 @@ func (c *PacketConn) WriteTo(b []byte, addr net.Addr) (int, error) {
if !ok {
return 0, errors.New("expected *crypto.BoxPubKey as net.Addr")
}
nodeID := crypto.GetNodeID(boxPubKey)
nodeMask := &crypto.NodeID{}
for i := range nodeMask {
nodeMask[i] = 0xFF
}
var session *sessionInfo
phony.Block(c.sessions.router, func() {
var ok bool
session, ok = c.sessions.getByTheirPerm(boxPubKey)
if !ok {
session = c.sessions.createSession(boxPubKey)
c.sessions.router.core.Resolve(nodeID, nodeMask)
session, _ = c.sessions.getByTheirPerm(boxPubKey)
}
})
if session == nil {
@ -82,11 +88,6 @@ func (c *PacketConn) WriteTo(b []byte, addr net.Addr) (int, error) {
err := make(chan error, 1)
msg := FlowKeyMessage{Message: b}
nodeID := crypto.GetNodeID(boxPubKey)
nodeMask := &crypto.NodeID{}
for i := range nodeMask {
nodeMask[i] = 0xFF
}
session.Act(c, func() {
// Check if the packet is small enough to go through this session