mirror of
				https://github.com/yggdrasil-network/yggdrasil-go.git
				synced 2025-11-04 03:05:07 +03:00 
			
		
		
		
	Check link-local in tcp.go, track direction in link.go, fix compile error for mobile.go
This commit is contained in:
		
							parent
							
								
									ec5f7d9879
								
							
						
					
					
						commit
						43f798e82e
					
				
					 5 changed files with 25 additions and 24 deletions
				
			
		| 
						 | 
				
			
			@ -54,14 +54,14 @@ func (a *awdl) init(l *link) error {
 | 
			
		|||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (a *awdl) create(name, local, remote string) (*awdlInterface, error) {
 | 
			
		||||
func (a *awdl) create(name, local, remote string, incoming bool) (*awdlInterface, error) {
 | 
			
		||||
	rwc := awdlReadWriteCloser{
 | 
			
		||||
		fromAWDL: make(chan []byte, 1),
 | 
			
		||||
		toAWDL:   make(chan []byte, 1),
 | 
			
		||||
	}
 | 
			
		||||
	s := stream{}
 | 
			
		||||
	s.init(rwc)
 | 
			
		||||
	linkif, err := a.link.create(&s, name, "awdl", local, remote)
 | 
			
		||||
	linkif, err := a.link.create(&s, name, "awdl", local, remote, incoming, true)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -40,12 +40,14 @@ type linkInterfaceMsgIO interface {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
type linkInterface struct {
 | 
			
		||||
	name   string
 | 
			
		||||
	link   *link
 | 
			
		||||
	peer   *peer
 | 
			
		||||
	msgIO  linkInterfaceMsgIO
 | 
			
		||||
	info   linkInfo
 | 
			
		||||
	closed chan struct{}
 | 
			
		||||
	name     string
 | 
			
		||||
	link     *link
 | 
			
		||||
	peer     *peer
 | 
			
		||||
	msgIO    linkInterfaceMsgIO
 | 
			
		||||
	info     linkInfo
 | 
			
		||||
	incoming bool
 | 
			
		||||
	force    bool
 | 
			
		||||
	closed   chan struct{}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (l *link) init(c *Core) error {
 | 
			
		||||
| 
						 | 
				
			
			@ -62,7 +64,7 @@ func (l *link) init(c *Core) error {
 | 
			
		|||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (l *link) create(msgIO linkInterfaceMsgIO, name, linkType, local, remote string) (*linkInterface, error) {
 | 
			
		||||
func (l *link) create(msgIO linkInterfaceMsgIO, name, linkType, local, remote string, incoming, force bool) (*linkInterface, error) {
 | 
			
		||||
	// Technically anything unique would work for names, but lets pick something human readable, just for debugging
 | 
			
		||||
	intf := linkInterface{
 | 
			
		||||
		name:  name,
 | 
			
		||||
| 
						 | 
				
			
			@ -73,6 +75,8 @@ func (l *link) create(msgIO linkInterfaceMsgIO, name, linkType, local, remote st
 | 
			
		|||
			local:    local,
 | 
			
		||||
			remote:   remote,
 | 
			
		||||
		},
 | 
			
		||||
		incoming: incoming,
 | 
			
		||||
		force:    force,
 | 
			
		||||
	}
 | 
			
		||||
	//l.interfaces[intf.name] = &intf
 | 
			
		||||
	//go intf.start()
 | 
			
		||||
| 
						 | 
				
			
			@ -106,7 +110,7 @@ func (intf *linkInterface) handler() error {
 | 
			
		|||
		return errors.New("failed to connect: wrong version")
 | 
			
		||||
	}
 | 
			
		||||
	// Check if we're authorized to connect to this key / IP
 | 
			
		||||
	if !intf.link.core.peers.isAllowedEncryptionPublicKey(&meta.box) {
 | 
			
		||||
	if !intf.force && !intf.link.core.peers.isAllowedEncryptionPublicKey(&meta.box) {
 | 
			
		||||
		intf.link.core.log.Debugf("%s connection to %s forbidden: AllowedEncryptionPublicKeys does not contain key %s",
 | 
			
		||||
			strings.ToUpper(intf.info.linkType), intf.info.remote, hex.EncodeToString(meta.box[:]))
 | 
			
		||||
		intf.msgIO.close()
 | 
			
		||||
| 
						 | 
				
			
			@ -154,19 +158,14 @@ func (intf *linkInterface) handler() error {
 | 
			
		|||
		out <- msg
 | 
			
		||||
	}
 | 
			
		||||
	intf.peer.linkOut = make(chan []byte, 1)
 | 
			
		||||
	intf.peer.close = func() {
 | 
			
		||||
		intf.msgIO.close()
 | 
			
		||||
		// Make output
 | 
			
		||||
		themAddr := address.AddrForNodeID(crypto.GetNodeID(&intf.info.box))
 | 
			
		||||
		themAddrString := net.IP(themAddr[:]).String()
 | 
			
		||||
		themString := fmt.Sprintf("%s@%s", themAddrString, intf.info.remote)
 | 
			
		||||
		intf.link.core.log.Infof("Disconnected %s: %s, source %s",
 | 
			
		||||
			strings.ToUpper(intf.info.linkType), themString, intf.info.local)
 | 
			
		||||
	}
 | 
			
		||||
	// Make output
 | 
			
		||||
	themAddr := address.AddrForNodeID(crypto.GetNodeID(&intf.info.box))
 | 
			
		||||
	themAddrString := net.IP(themAddr[:]).String()
 | 
			
		||||
	themString := fmt.Sprintf("%s@%s", themAddrString, intf.info.remote)
 | 
			
		||||
	intf.peer.close = func() {
 | 
			
		||||
		intf.msgIO.close()
 | 
			
		||||
		intf.link.core.log.Infof("Disconnected %s: %s, source %s",
 | 
			
		||||
			strings.ToUpper(intf.info.linkType), themString, intf.info.local)
 | 
			
		||||
	}
 | 
			
		||||
	intf.link.core.log.Infof("Connected %s: %s, source %s",
 | 
			
		||||
		strings.ToUpper(intf.info.linkType), themString, intf.info.local)
 | 
			
		||||
	// Start the link loop
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,10 +5,11 @@ package yggdrasil
 | 
			
		|||
import (
 | 
			
		||||
	"encoding/hex"
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"log"
 | 
			
		||||
	"os"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/gologme/log"
 | 
			
		||||
 | 
			
		||||
	hjson "github.com/hjson/hjson-go"
 | 
			
		||||
	"github.com/mitchellh/mapstructure"
 | 
			
		||||
	"github.com/yggdrasil-network/yggdrasil-go/src/config"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,8 +29,8 @@ func (nsl MobileLogger) Write(p []byte) (n int, err error) {
 | 
			
		|||
	return len(p), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *Core) AWDLCreateInterface(name, local, remote string) error {
 | 
			
		||||
	if intf, err := c.link.awdl.create(name, local, remote); err != nil || intf == nil {
 | 
			
		||||
func (c *Core) AWDLCreateInterface(name, local, remote string, incoming bool) error {
 | 
			
		||||
	if intf, err := c.link.awdl.create(name, local, remote, incoming); err != nil || intf == nil {
 | 
			
		||||
		c.log.Println("c.link.awdl.create:", err)
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -284,8 +284,9 @@ func (iface *tcpInterface) handler(sock net.Conn, incoming bool) {
 | 
			
		|||
	stream.init(sock)
 | 
			
		||||
	local, _, _ := net.SplitHostPort(sock.LocalAddr().String())
 | 
			
		||||
	remote, _, _ := net.SplitHostPort(sock.RemoteAddr().String())
 | 
			
		||||
	remotelinklocal := net.ParseIP(remote).IsLinkLocalUnicast()
 | 
			
		||||
	name := "tcp://" + sock.RemoteAddr().String()
 | 
			
		||||
	link, err := iface.core.link.create(&stream, name, "tcp", local, remote)
 | 
			
		||||
	link, err := iface.core.link.create(&stream, name, "tcp", local, remote, incoming, remotelinklocal)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		iface.core.log.Println(err)
 | 
			
		||||
		panic(err)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue