mirror of
https://github.com/yggdrasil-network/yggdrasil-go.git
synced 2025-04-30 07:05:06 +03:00
Resolve if session doesn't exist when writing to PacketConn
This commit is contained in:
parent
0f19807e16
commit
7b0d315675
2 changed files with 7 additions and 11 deletions
|
@ -1,9 +1,6 @@
|
||||||
package tuntap
|
package tuntap
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"net"
|
|
||||||
|
|
||||||
"github.com/yggdrasil-network/yggdrasil-go/src/address"
|
"github.com/yggdrasil-network/yggdrasil-go/src/address"
|
||||||
"github.com/yggdrasil-network/yggdrasil-go/src/crypto"
|
"github.com/yggdrasil-network/yggdrasil-go/src/crypto"
|
||||||
|
|
||||||
|
@ -169,8 +166,6 @@ func (tun *TunAdapter) _handlePacket(recvd []byte, err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println("Start search for", net.IP(dstAddr[:]).String())
|
|
||||||
|
|
||||||
_, boxPubKey, err = tun.core.Resolve(dstNodeID, dstNodeMask)
|
_, boxPubKey, err = tun.core.Resolve(dstNodeID, dstNodeMask)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
tun.log.Errorln("tun.core.Resolve:", err)
|
tun.log.Errorln("tun.core.Resolve:", err)
|
||||||
|
|
|
@ -67,13 +67,19 @@ func (c *PacketConn) WriteTo(b []byte, addr net.Addr) (int, error) {
|
||||||
if !ok {
|
if !ok {
|
||||||
return 0, errors.New("expected *crypto.BoxPubKey as net.Addr")
|
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
|
var session *sessionInfo
|
||||||
phony.Block(c.sessions.router, func() {
|
phony.Block(c.sessions.router, func() {
|
||||||
var ok bool
|
var ok bool
|
||||||
session, ok = c.sessions.getByTheirPerm(boxPubKey)
|
session, ok = c.sessions.getByTheirPerm(boxPubKey)
|
||||||
if !ok {
|
if !ok {
|
||||||
session = c.sessions.createSession(boxPubKey)
|
c.sessions.router.core.Resolve(nodeID, nodeMask)
|
||||||
|
session, _ = c.sessions.getByTheirPerm(boxPubKey)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
if session == nil {
|
if session == nil {
|
||||||
|
@ -82,11 +88,6 @@ func (c *PacketConn) WriteTo(b []byte, addr net.Addr) (int, error) {
|
||||||
|
|
||||||
err := make(chan error, 1)
|
err := make(chan error, 1)
|
||||||
msg := FlowKeyMessage{Message: b}
|
msg := FlowKeyMessage{Message: b}
|
||||||
nodeID := crypto.GetNodeID(boxPubKey)
|
|
||||||
nodeMask := &crypto.NodeID{}
|
|
||||||
for i := range nodeMask {
|
|
||||||
nodeMask[i] = 0xFF
|
|
||||||
}
|
|
||||||
|
|
||||||
session.Act(c, func() {
|
session.Act(c, func() {
|
||||||
// Check if the packet is small enough to go through this session
|
// Check if the packet is small enough to go through this session
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue