diff --git a/src/yggdrasil/awdl.go b/src/yggdrasil/awdl.go index da10d585..84cd3fbf 100644 --- a/src/yggdrasil/awdl.go +++ b/src/yggdrasil/awdl.go @@ -74,9 +74,24 @@ func (l *awdl) shutdown(identity string) { func (ai *awdlInterface) handler() { for { + /*timerInterval := tcp_ping_interval + timer := time.NewTimer(timerInterval) + defer timer.Stop()*/ select { case p := <-ai.peer.linkOut: ai.send <- p + continue + default: + } + /*timer.Stop() + select { + case <-timer.C: + default: + } + timer.Reset(timerInterval)*/ + select { + //case _ = <-timer.C: + // ai.send <- nil case r := <-ai.recv: // traffic received from AWDL ai.peer.handlePacket(r) case <-ai.shutdown: diff --git a/src/yggdrasil/mobile.go b/src/yggdrasil/mobile.go index 36a98eab..44886f8b 100644 --- a/src/yggdrasil/mobile.go +++ b/src/yggdrasil/mobile.go @@ -4,6 +4,7 @@ package yggdrasil import ( "encoding/json" + "errors" "log" "os" "regexp" @@ -100,3 +101,19 @@ func (c *Core) AWDLCreateInterface(boxPubKey []byte, sigPubKey []byte, name stri copy(sig[:crypto.SigPubKeyLen], sigPubKey[:]) c.awdl.create(&box, &sig, name) } + +func (c *Core) AWDLRecvPacket(identity string) ([]byte, error) { + if intf := c.awdl.getInterface(identity); intf != nil { + return <-intf.recv, nil + } + return nil, errors.New("identity not known: " + identity) +} + +func (c *Core) AWDLSendPacket(identity string, buf []byte) error { + packet := append(util.GetBytes(), buf[:]...) + if intf := c.awdl.getInterface(identity); intf != nil { + intf.send <- packet + return nil + } + return errors.New("identity not known: " + identity) +}