Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use new pion/transport Net interface #471

Merged
merged 5 commits into from
Feb 8, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 26 additions & 23 deletions agent.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ package ice

import (
"context"
"fmt"
"net"
"strings"
"sync"
Expand All @@ -13,8 +14,10 @@ import (
"github.com/pion/logging"
"github.com/pion/mdns"
"github.com/pion/stun"
"github.com/pion/transport/packetio"
"github.com/pion/transport/vnet"
"github.com/pion/transport/v2"
"github.com/pion/transport/v2/packetio"
"github.com/pion/transport/v2/stdnet"
"github.com/pion/transport/v2/vnet"
"golang.org/x/net/proxy"
)

Expand Down Expand Up @@ -123,7 +126,7 @@ type Agent struct {
loggerFactory logging.LoggerFactory
log logging.LeveledLogger

net *vnet.Net
net transport.Net
tcpMux TCPMux
udpMux UDPMux
udpMuxSrflx UniversalUDPMux
Expand Down Expand Up @@ -262,21 +265,6 @@ func NewAgent(config *AgentConfig) (*Agent, error) { //nolint:gocognit
}
log := loggerFactory.NewLogger("ice")

var mDNSConn *mdns.Conn
mDNSConn, mDNSMode, err = createMulticastDNS(mDNSMode, mDNSName, log)
// Opportunistic mDNS: If we can't open the connection, that's ok: we
// can continue without it.
if err != nil {
log.Warnf("Failed to initialize mDNS %s: %v", mDNSName, err)
}
closeMDNSConn := func() {
if mDNSConn != nil {
if mdnsCloseErr := mDNSConn.Close(); mdnsCloseErr != nil {
log.Warnf("Failed to close mDNS: %v", mdnsCloseErr)
}
}
}

startedCtx, startedFn := context.WithCancel(context.Background())

a := &Agent{
Expand Down Expand Up @@ -307,7 +295,6 @@ func NewAgent(config *AgentConfig) (*Agent, error) { //nolint:gocognit

mDNSMode: mDNSMode,
mDNSName: mDNSName,
mDNSConn: mDNSConn,

gatherCandidateCancel: func() {},

Expand All @@ -330,11 +317,27 @@ func NewAgent(config *AgentConfig) (*Agent, error) { //nolint:gocognit
a.udpMuxSrflx = config.UDPMuxSrflx

if a.net == nil {
a.net = vnet.NewNet(nil)
} else if a.net.IsVirtual() {
a.log.Warn("vnet is enabled")
a.net, err = stdnet.NewNet()
if err != nil {
return nil, fmt.Errorf("failed to create network: %w", err)
}
} else if _, isVirtual := a.net.(*vnet.Net); isVirtual {
a.log.Warn("virtual network is enabled")
if a.mDNSMode != MulticastDNSModeDisabled {
a.log.Warn("vnet does not support mDNS yet")
a.log.Warn("virtual network does not support mDNS yet")
}
}

// Opportunistic mDNS: If we can't open the connection, that's ok: we
// can continue without it.
if a.mDNSConn, a.mDNSMode, err = createMulticastDNS(a.net, mDNSMode, mDNSName, log); err != nil {
log.Warnf("Failed to initialize mDNS %s: %v", mDNSName, err)
}
closeMDNSConn := func() {
if a.mDNSConn != nil {
if mdnsCloseErr := a.mDNSConn.Close(); mdnsCloseErr != nil {
log.Warnf("Failed to close mDNS: %v", mdnsCloseErr)
}
}
}

Expand Down
6 changes: 3 additions & 3 deletions agent_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"time"

"github.com/pion/logging"
"github.com/pion/transport/vnet"
"github.com/pion/transport/v2"
"golang.org/x/net/proxy"
)

Expand Down Expand Up @@ -130,8 +130,8 @@ type AgentConfig struct {
RelayAcceptanceMinWait *time.Duration

// Net is the our abstracted network interface for internal development purpose only
// (see github.com/pion/transport/vnet)
Net *vnet.Net
// (see https://github.com/pion/transport)
Net transport.Net

// InterfaceFilter is a function that you can use in order to whitelist or blacklist
// the interfaces which are used to gather ICE candidates.
Expand Down
20 changes: 12 additions & 8 deletions agent_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ import (

"github.com/pion/logging"
"github.com/pion/stun"
"github.com/pion/transport/test"
"github.com/pion/transport/vnet"
"github.com/pion/transport/v2/test"
"github.com/pion/transport/v2/vnet"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
Expand Down Expand Up @@ -349,14 +349,16 @@ func TestConnectivityOnStartup(t *testing.T) {
})
assert.NoError(t, err)

net0 := vnet.NewNet(&vnet.NetConfig{
net0, err := vnet.NewNet(&vnet.NetConfig{
StaticIPs: []string{"192.168.0.1"},
})
assert.NoError(t, err)
assert.NoError(t, wan.AddNet(net0))

net1 := vnet.NewNet(&vnet.NetConfig{
net1, err := vnet.NewNet(&vnet.NetConfig{
StaticIPs: []string{"192.168.0.2"},
})
assert.NoError(t, err)
assert.NoError(t, wan.AddNet(net1))

assert.NoError(t, wan.Start())
Expand All @@ -369,7 +371,6 @@ func TestConnectivityOnStartup(t *testing.T) {
NetworkTypes: supportedNetworkTypes(),
MulticastDNSMode: MulticastDNSModeDisabled,
Net: net0,

KeepaliveInterval: &KeepaliveInterval,
CheckInterval: &KeepaliveInterval,
}
Expand Down Expand Up @@ -1707,9 +1708,10 @@ func TestGetSelectedCandidatePair(t *testing.T) {
})
assert.NoError(t, err)

net := vnet.NewNet(&vnet.NetConfig{
net, err := vnet.NewNet(&vnet.NetConfig{
StaticIPs: []string{"192.168.0.1"},
})
assert.NoError(t, err)
assert.NoError(t, wan.AddNet(net))

assert.NoError(t, wan.Start())
Expand Down Expand Up @@ -1765,14 +1767,16 @@ func TestAcceptAggressiveNomination(t *testing.T) {
})
assert.NoError(t, err)

net0 := vnet.NewNet(&vnet.NetConfig{
net0, err := vnet.NewNet(&vnet.NetConfig{
StaticIPs: []string{"192.168.0.1"},
})
assert.NoError(t, err)
assert.NoError(t, wan.AddNet(net0))

net1 := vnet.NewNet(&vnet.NetConfig{
net1, err := vnet.NewNet(&vnet.NetConfig{
StaticIPs: []string{"192.168.0.2", "192.168.0.3", "192.168.0.4"},
})
assert.NoError(t, err)
assert.NoError(t, wan.AddNet(net1))

assert.NoError(t, wan.Start())
Expand Down
2 changes: 1 addition & 1 deletion agent_udpmux_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
"time"

"github.com/pion/logging"
"github.com/pion/transport/test"
"github.com/pion/transport/v2/test"
"github.com/stretchr/testify/require"
)

Expand Down
1 change: 1 addition & 0 deletions candidate_peer_reflexive.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// Package ice ...
//
//nolint:dupl
package ice

Expand Down
2 changes: 1 addition & 1 deletion candidate_relay_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
"testing"
"time"

"github.com/pion/transport/test"
"github.com/pion/transport/v2/test"
"github.com/pion/turn/v2"
"github.com/stretchr/testify/assert"
)
Expand Down
2 changes: 0 additions & 2 deletions candidate_server_reflexive.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
// Package ice ...
//nolint:dupl
package ice

import "net"
Expand Down
2 changes: 1 addition & 1 deletion candidate_server_reflexive_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
"testing"
"time"

"github.com/pion/transport/test"
"github.com/pion/transport/v2/test"
"github.com/pion/turn/v2"
"github.com/stretchr/testify/assert"
)
Expand Down
33 changes: 24 additions & 9 deletions connectivity_vnet_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ import (

"github.com/pion/logging"
"github.com/pion/stun"
"github.com/pion/transport/test"
"github.com/pion/transport/vnet"
"github.com/pion/transport/v2/test"
"github.com/pion/transport/v2/vnet"
"github.com/pion/turn/v2"
"github.com/stretchr/testify/assert"
)
Expand Down Expand Up @@ -54,9 +54,12 @@ func buildVNet(natType0, natType1 *vnet.NATType) (*virtualNet, error) {
return nil, err
}

wanNet := vnet.NewNet(&vnet.NetConfig{
wanNet, err := vnet.NewNet(&vnet.NetConfig{
StaticIP: vnetSTUNServerIP, // will be assigned to eth0
})
if err != nil {
return nil, err
}

err = wan.AddNet(wanNet)
if err != nil {
Expand All @@ -83,9 +86,13 @@ func buildVNet(natType0, natType1 *vnet.NATType) (*virtualNet, error) {
return nil, err
}

net0 := vnet.NewNet(&vnet.NetConfig{
net0, err := vnet.NewNet(&vnet.NetConfig{
StaticIPs: []string{vnetLocalIPA},
})
if err != nil {
return nil, err
}

err = lan0.AddNet(net0)
if err != nil {
return nil, err
Expand Down Expand Up @@ -116,9 +123,13 @@ func buildVNet(natType0, natType1 *vnet.NATType) (*virtualNet, error) {
return nil, err
}

net1 := vnet.NewNet(&vnet.NetConfig{
net1, err := vnet.NewNet(&vnet.NetConfig{
StaticIPs: []string{vnetLocalIPB},
})
if err != nil {
return nil, err
}

err = lan1.AddNet(net1)
if err != nil {
return nil, err
Expand Down Expand Up @@ -475,14 +486,16 @@ func TestDisconnectedToConnected(t *testing.T) {
return atomic.LoadUint64(&dropAllData) != 1
})

net0 := vnet.NewNet(&vnet.NetConfig{
net0, err := vnet.NewNet(&vnet.NetConfig{
StaticIPs: []string{"192.168.0.1"},
})
assert.NoError(t, err)
assert.NoError(t, wan.AddNet(net0))

net1 := vnet.NewNet(&vnet.NetConfig{
net1, err := vnet.NewNet(&vnet.NetConfig{
StaticIPs: []string{"192.168.0.2"},
})
assert.NoError(t, err)
assert.NoError(t, wan.AddNet(net1))

assert.NoError(t, wan.Start())
Expand Down Expand Up @@ -581,14 +594,16 @@ func TestWriteUseValidPair(t *testing.T) {
return true
})

net0 := vnet.NewNet(&vnet.NetConfig{
net0, err := vnet.NewNet(&vnet.NetConfig{
StaticIPs: []string{"192.168.0.1"},
})
assert.NoError(t, err)
assert.NoError(t, wan.AddNet(net0))

net1 := vnet.NewNet(&vnet.NetConfig{
net1, err := vnet.NewNet(&vnet.NetConfig{
StaticIPs: []string{"192.168.0.2"},
})
assert.NoError(t, err)
assert.NoError(t, wan.AddNet(net1))

assert.NoError(t, wan.Start())
Expand Down
7 changes: 4 additions & 3 deletions examples/ping-pong/main.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// Package main implements a simple example demonstrating a Pion-to-Pion ICE connection
package main

import (
Expand All @@ -14,7 +15,7 @@ import (
"github.com/pion/randutil"
)

//nolint
// nolint:gochecknoglobals
var (
isControlling bool
iceAgent *ice.Agent
Expand Down Expand Up @@ -43,7 +44,7 @@ func remoteCandidate(w http.ResponseWriter, r *http.Request) {
panic(err)
}

if err := iceAgent.AddRemoteCandidate(c); err != nil {
if err := iceAgent.AddRemoteCandidate(c); err != nil { //nolint:contextcheck
panic(err)
}
}
Expand All @@ -69,7 +70,7 @@ func main() { //nolint
http.HandleFunc("/remoteAuth", remoteAuth)
http.HandleFunc("/remoteCandidate", remoteCandidate)
go func() {
if err = http.ListenAndServe(fmt.Sprintf(":%d", localHTTPPort), nil); err != nil {
if err = http.ListenAndServe(fmt.Sprintf(":%d", localHTTPPort), nil); err != nil { //nolint:gosec
panic(err)
}
}()
Expand Down
Loading