mirror of
				https://github.com/yggdrasil-network/yggdrasil-go.git
				synced 2025-11-04 11:15:07 +03:00 
			
		
		
		
	have listener return a net.Conn, adjust yggdrasil.Conn to match this interface
This commit is contained in:
		
							parent
							
								
									d307ad4c91
								
							
						
					
					
						commit
						cb40874f97
					
				
					 4 changed files with 12 additions and 11 deletions
				
			
		| 
						 | 
				
			
			@ -93,7 +93,7 @@ func (s *tunConn) _read(bs []byte) (err error) {
 | 
			
		|||
			skip = true
 | 
			
		||||
		} else if key, err := s.tun.ckr.getPublicKeyForAddress(srcAddr, addrlen); err == nil {
 | 
			
		||||
			srcNodeID := crypto.GetNodeID(&key)
 | 
			
		||||
			if s.conn.RemoteAddr() == *srcNodeID {
 | 
			
		||||
			if *s.conn.RemoteAddr().(*crypto.NodeID) == *srcNodeID {
 | 
			
		||||
				// This is the one allowed CKR case, where source and destination addresses are both good
 | 
			
		||||
			} else {
 | 
			
		||||
				// The CKR key associated with this address doesn't match the sender's NodeID
 | 
			
		||||
| 
						 | 
				
			
			@ -170,7 +170,7 @@ func (s *tunConn) _write(bs []byte) (err error) {
 | 
			
		|||
			skip = true
 | 
			
		||||
		} else if key, err := s.tun.ckr.getPublicKeyForAddress(dstAddr, addrlen); err == nil {
 | 
			
		||||
			dstNodeID := crypto.GetNodeID(&key)
 | 
			
		||||
			if s.conn.RemoteAddr() == *dstNodeID {
 | 
			
		||||
			if *s.conn.RemoteAddr().(*crypto.NodeID) == *dstNodeID {
 | 
			
		||||
				// This is the one allowed CKR case, where source and destination addresses are both good
 | 
			
		||||
			} else {
 | 
			
		||||
				// The CKR key associated with this address doesn't match the sender's NodeID
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -219,7 +219,7 @@ func (tun *TunAdapter) handler() error {
 | 
			
		|||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		phony.Block(tun, func() {
 | 
			
		||||
			if _, err := tun._wrap(conn); err != nil {
 | 
			
		||||
			if _, err := tun._wrap(conn.(*yggdrasil.Conn)); err != nil {
 | 
			
		||||
				// Something went wrong when storing the connection, typically that
 | 
			
		||||
				// something already exists for this address or subnet
 | 
			
		||||
				tun.log.Debugln("TUN/TAP handler wrap:", err)
 | 
			
		||||
| 
						 | 
				
			
			@ -237,9 +237,9 @@ func (tun *TunAdapter) _wrap(conn *yggdrasil.Conn) (c *tunConn, err error) {
 | 
			
		|||
	}
 | 
			
		||||
	c = &s
 | 
			
		||||
	// Get the remote address and subnet of the other side
 | 
			
		||||
	remoteNodeID := conn.RemoteAddr()
 | 
			
		||||
	s.addr = *address.AddrForNodeID(&remoteNodeID)
 | 
			
		||||
	s.snet = *address.SubnetForNodeID(&remoteNodeID)
 | 
			
		||||
	remoteNodeID := conn.RemoteAddr().(*crypto.NodeID)
 | 
			
		||||
	s.addr = *address.AddrForNodeID(remoteNodeID)
 | 
			
		||||
	s.snet = *address.SubnetForNodeID(remoteNodeID)
 | 
			
		||||
	// Work out if this is already a destination we already know about
 | 
			
		||||
	atc, aok := tun.addrToConn[s.addr]
 | 
			
		||||
	stc, sok := tun.subnetToConn[s.snet]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,7 @@ package yggdrasil
 | 
			
		|||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"net"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/yggdrasil-network/yggdrasil-go/src/crypto"
 | 
			
		||||
| 
						 | 
				
			
			@ -348,14 +349,14 @@ func (c *Conn) Close() (err error) {
 | 
			
		|||
 | 
			
		||||
// LocalAddr returns the complete node ID of the local side of the connection.
 | 
			
		||||
// This is always going to return your own node's node ID.
 | 
			
		||||
func (c *Conn) LocalAddr() crypto.NodeID {
 | 
			
		||||
	return *crypto.GetNodeID(&c.core.boxPub)
 | 
			
		||||
func (c *Conn) LocalAddr() net.Addr {
 | 
			
		||||
	return crypto.GetNodeID(&c.core.boxPub)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// RemoteAddr returns the complete node ID of the remote side of the connection.
 | 
			
		||||
func (c *Conn) RemoteAddr() crypto.NodeID {
 | 
			
		||||
func (c *Conn) RemoteAddr() net.Addr {
 | 
			
		||||
	// RemoteAddr is set during the dial or accept, and isn't changed, so it's safe to access directly
 | 
			
		||||
	return *c.nodeID
 | 
			
		||||
	return c.nodeID
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SetDeadline is equivalent to calling both SetReadDeadline and
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,7 +13,7 @@ type Listener struct {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
// Accept blocks until a new incoming session is received
 | 
			
		||||
func (l *Listener) Accept() (*Conn, error) {
 | 
			
		||||
func (l *Listener) Accept() (net.Conn, error) {
 | 
			
		||||
	select {
 | 
			
		||||
	case c, ok := <-l.conn:
 | 
			
		||||
		if !ok {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue