From 4ba9c958b4262d2ab703f80e308e492d43fdb1b5 Mon Sep 17 00:00:00 2001 From: braginini Date: Thu, 15 Apr 2021 21:20:12 +0200 Subject: [PATCH] chore: init Wireguard connection of a peer on creation --- engine/agent.go | 30 ++++++++++++++---------------- engine/engine.go | 7 +++---- 2 files changed, 17 insertions(+), 20 deletions(-) diff --git a/engine/agent.go b/engine/agent.go index 4708f72f6..4554d63c5 100644 --- a/engine/agent.go +++ b/engine/agent.go @@ -36,6 +36,18 @@ type PeerAgent struct { func NewPeerAgent(localKey string, remoteKey string, stunTurnURLS []*ice.URL, wgAddr string, signal *signal.Client, wgIface string) (*PeerAgent, error) { + // connect to local Wireguard instance + wgConn, err := net.Dial("udp", wgAddr) + if err != nil { + log.Fatalf("failed dialing to local Wireguard port %s", err) + return nil, err + } + // add local proxy connection as a Wireguard peer + err = iface.UpdatePeer(wgIface, remoteKey, "0.0.0.0/0", 15*time.Second, wgConn.LocalAddr().String()) + if err != nil { + log.Errorf("error while configuring Wireguard peer [%s] %s", remoteKey, err.Error()) + } + // init ICE Agent iceAgent, err := ice.NewAgent(&ice.AgentConfig{ NetworkTypes: []ice.NetworkType{ice.NetworkTypeUDP4}, @@ -51,7 +63,7 @@ func NewPeerAgent(localKey string, remoteKey string, stunTurnURLS []*ice.URL, wg iceAgent: iceAgent, wgAddr: wgAddr, conn: nil, - wgConn: nil, + wgConn: wgConn, signal: signal, wgIface: wgIface, } @@ -120,22 +132,8 @@ func (pa *PeerAgent) proxyToLocalWireguard() { // - proxy all incoming data from the remote peer to local Wireguard func (pa *PeerAgent) OpenConnection(initiator bool) error { - // connect to local Wireguard instance - wgConn, err := net.Dial("udp", pa.wgAddr) - if err != nil { - log.Fatalf("failed dialing to local Wireguard port %s", err) - return err - } - pa.wgConn = wgConn - - // add local proxy connection as a Wireguard peer - err = iface.UpdatePeer(pa.wgIface, pa.RemoteKey, "0.0.0.0/0", 15*time.Second, wgConn.LocalAddr().String()) - if err != nil { - log.Errorf("error while configuring Wireguard peer [%s] %s", pa.RemoteKey, err.Error()) - } - // start gathering candidates - err = pa.iceAgent.GatherCandidates() + err := pa.iceAgent.GatherCandidates() if err != nil { return err } diff --git a/engine/engine.go b/engine/engine.go index 16bd99a6b..39d064de3 100644 --- a/engine/engine.go +++ b/engine/engine.go @@ -113,8 +113,7 @@ func (e *Engine) receiveSignal(localKey string) { Pwd: cred.Pwd, }, sProto.Message_ANSWER) - //notify the remote peer of our credentials - err = peerAgent.signal.Send(answer) + err = e.signal.Send(answer) if err != nil { return err } @@ -154,9 +153,9 @@ func (e *Engine) handle(msg *sProto.Message, peerAgent *PeerAgent, initiator boo go func() { - err := peerAgent.OpenConnection(initiator) + err = peerAgent.OpenConnection(initiator) if err != nil { - log.Errorf("error opening connection ot remote peer %s", msg.Key) + log.Errorf("error opening connection to remote peer %s %s", msg.Key, err) } }()