rename StreamProtocol and StreamDelivery into TransportProtocol and TransportDelivery

This commit is contained in:
aler9
2021-10-22 17:59:36 +02:00
parent 320c1b6f2c
commit 61c39f9062
14 changed files with 293 additions and 329 deletions

View File

@@ -73,19 +73,19 @@ func TestClientPublishSerial(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
th := headers.Transport{ th := headers.Transport{
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
} }
if transport == "udp" { if transport == "udp" {
th.Protocol = base.StreamProtocolUDP th.Protocol = headers.TransportProtocolUDP
th.ServerPorts = &[2]int{34556, 34557} th.ServerPorts = &[2]int{34556, 34557}
th.ClientPorts = inTH.ClientPorts th.ClientPorts = inTH.ClientPorts
} else { } else {
th.Protocol = base.StreamProtocolTCP th.Protocol = headers.TransportProtocolTCP
th.InterleavedIDs = inTH.InterleavedIDs th.InterleavedIDs = inTH.InterleavedIDs
} }
@@ -259,19 +259,19 @@ func TestClientPublishParallel(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
th := headers.Transport{ th := headers.Transport{
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
} }
if transport == "udp" { if transport == "udp" {
th.Protocol = base.StreamProtocolUDP th.Protocol = headers.TransportProtocolUDP
th.ServerPorts = &[2]int{34556, 34557} th.ServerPorts = &[2]int{34556, 34557}
th.ClientPorts = inTH.ClientPorts th.ClientPorts = inTH.ClientPorts
} else { } else {
th.Protocol = base.StreamProtocolTCP th.Protocol = headers.TransportProtocolTCP
th.InterleavedIDs = inTH.InterleavedIDs th.InterleavedIDs = inTH.InterleavedIDs
} }
@@ -399,19 +399,19 @@ func TestClientPublishPauseSerial(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
th := headers.Transport{ th := headers.Transport{
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
} }
if transport == "udp" { if transport == "udp" {
th.Protocol = base.StreamProtocolUDP th.Protocol = headers.TransportProtocolUDP
th.ServerPorts = &[2]int{34556, 34557} th.ServerPorts = &[2]int{34556, 34557}
th.ClientPorts = inTH.ClientPorts th.ClientPorts = inTH.ClientPorts
} else { } else {
th.Protocol = base.StreamProtocolTCP th.Protocol = headers.TransportProtocolTCP
th.InterleavedIDs = inTH.InterleavedIDs th.InterleavedIDs = inTH.InterleavedIDs
} }
@@ -555,19 +555,19 @@ func TestClientPublishPauseParallel(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
th := headers.Transport{ th := headers.Transport{
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
} }
if transport == "udp" { if transport == "udp" {
th.Protocol = base.StreamProtocolUDP th.Protocol = headers.TransportProtocolUDP
th.ServerPorts = &[2]int{34556, 34557} th.ServerPorts = &[2]int{34556, 34557}
th.ClientPorts = inTH.ClientPorts th.ClientPorts = inTH.ClientPorts
} else { } else {
th.Protocol = base.StreamProtocolTCP th.Protocol = headers.TransportProtocolTCP
th.InterleavedIDs = inTH.InterleavedIDs th.InterleavedIDs = inTH.InterleavedIDs
} }
@@ -701,14 +701,14 @@ func TestClientPublishAutomaticProtocol(t *testing.T) {
var inTH headers.Transport var inTH headers.Transport
err = inTH.Read(req.Header["Transport"]) err = inTH.Read(req.Header["Transport"])
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, base.StreamProtocolTCP, inTH.Protocol) require.Equal(t, headers.TransportProtocolTCP, inTH.Protocol)
th := headers.Transport{ th := headers.Transport{
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Protocol: base.StreamProtocolTCP, Protocol: headers.TransportProtocolTCP,
InterleavedIDs: &[2]int{0, 1}, InterleavedIDs: &[2]int{0, 1},
} }
@@ -809,11 +809,11 @@ func TestClientPublishRTCPReport(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
th := headers.Transport{ th := headers.Transport{
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Protocol: base.StreamProtocolTCP, Protocol: headers.TransportProtocolTCP,
InterleavedIDs: inTH.InterleavedIDs, InterleavedIDs: inTH.InterleavedIDs,
} }

View File

@@ -90,11 +90,11 @@ func TestClientReadTracks(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
th := headers.Transport{ th := headers.Transport{
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Protocol: base.StreamProtocolUDP, Protocol: headers.TransportProtocolUDP,
ClientPorts: inTH.ClientPorts, ClientPorts: inTH.ClientPorts,
ServerPorts: &[2]int{34556 + i*2, 34557 + i*2}, ServerPorts: &[2]int{34556 + i*2, 34557 + i*2},
} }
@@ -252,9 +252,9 @@ func TestClientRead(t *testing.T) {
switch transport { switch transport {
case "udp": case "udp":
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
th.Delivery = &v th.Delivery = &v
th.Protocol = base.StreamProtocolUDP th.Protocol = headers.TransportProtocolUDP
th.ClientPorts = inTH.ClientPorts th.ClientPorts = inTH.ClientPorts
th.ServerPorts = &[2]int{34556, 34557} th.ServerPorts = &[2]int{34556, 34557}
@@ -267,9 +267,9 @@ func TestClientRead(t *testing.T) {
defer l2.Close() defer l2.Close()
case "multicast": case "multicast":
v := base.StreamDeliveryMulticast v := headers.TransportDeliveryMulticast
th.Delivery = &v th.Delivery = &v
th.Protocol = base.StreamProtocolUDP th.Protocol = headers.TransportProtocolUDP
v2 := net.ParseIP("224.1.0.1") v2 := net.ParseIP("224.1.0.1")
th.Destination = &v2 th.Destination = &v2
th.Ports = &[2]int{25000, 25001} th.Ports = &[2]int{25000, 25001}
@@ -303,9 +303,9 @@ func TestClientRead(t *testing.T) {
} }
case "tcp", "tls": case "tcp", "tls":
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
th.Delivery = &v th.Delivery = &v
th.Protocol = base.StreamProtocolTCP th.Protocol = headers.TransportProtocolTCP
th.InterleavedIDs = &[2]int{0, 1} th.InterleavedIDs = &[2]int{0, 1}
} }
@@ -492,11 +492,11 @@ func TestClientReadPartial(t *testing.T) {
require.Equal(t, &[2]int{0, 1}, inTH.InterleavedIDs) require.Equal(t, &[2]int{0, 1}, inTH.InterleavedIDs)
th := headers.Transport{ th := headers.Transport{
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Protocol: base.StreamProtocolTCP, Protocol: headers.TransportProtocolTCP,
InterleavedIDs: inTH.InterleavedIDs, InterleavedIDs: inTH.InterleavedIDs,
} }
@@ -635,11 +635,11 @@ func TestClientReadNoContentBase(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
th := headers.Transport{ th := headers.Transport{
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Protocol: base.StreamProtocolUDP, Protocol: headers.TransportProtocolUDP,
ClientPorts: inTH.ClientPorts, ClientPorts: inTH.ClientPorts,
ServerPorts: &[2]int{34556, 34557}, ServerPorts: &[2]int{34556, 34557},
} }
@@ -746,9 +746,9 @@ func TestClientReadAnyPort(t *testing.T) {
StatusCode: base.StatusOK, StatusCode: base.StatusOK,
Header: base.Header{ Header: base.Header{
"Transport": headers.Transport{ "Transport": headers.Transport{
Protocol: base.StreamProtocolUDP, Protocol: headers.TransportProtocolUDP,
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
ClientPorts: th.ClientPorts, ClientPorts: th.ClientPorts,
@@ -878,15 +878,15 @@ func TestClientReadAutomaticProtocol(t *testing.T) {
var inTH headers.Transport var inTH headers.Transport
err = inTH.Read(req.Header["Transport"]) err = inTH.Read(req.Header["Transport"])
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, base.StreamProtocolTCP, inTH.Protocol) require.Equal(t, headers.TransportProtocolTCP, inTH.Protocol)
err = base.Response{ err = base.Response{
StatusCode: base.StatusOK, StatusCode: base.StatusOK,
Header: base.Header{ Header: base.Header{
"Transport": headers.Transport{ "Transport": headers.Transport{
Protocol: base.StreamProtocolTCP, Protocol: headers.TransportProtocolTCP,
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
InterleavedIDs: &[2]int{0, 1}, InterleavedIDs: &[2]int{0, 1},
@@ -1004,11 +1004,11 @@ func TestClientReadAutomaticProtocol(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
th := headers.Transport{ th := headers.Transport{
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Protocol: base.StreamProtocolUDP, Protocol: headers.TransportProtocolUDP,
ServerPorts: &[2]int{34556, 34557}, ServerPorts: &[2]int{34556, 34557},
ClientPorts: inTH.ClientPorts, ClientPorts: inTH.ClientPorts,
} }
@@ -1072,11 +1072,11 @@ func TestClientReadAutomaticProtocol(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
th = headers.Transport{ th = headers.Transport{
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Protocol: base.StreamProtocolTCP, Protocol: headers.TransportProtocolTCP,
InterleavedIDs: inTH.InterleavedIDs, InterleavedIDs: inTH.InterleavedIDs,
} }
@@ -1197,11 +1197,11 @@ func TestClientReadDifferentInterleavedIDs(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
th := headers.Transport{ th := headers.Transport{
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Protocol: base.StreamProtocolTCP, Protocol: headers.TransportProtocolTCP,
InterleavedIDs: &[2]int{2, 3}, InterleavedIDs: &[2]int{2, 3},
} }
@@ -1361,9 +1361,9 @@ func TestClientReadRedirect(t *testing.T) {
StatusCode: base.StatusOK, StatusCode: base.StatusOK,
Header: base.Header{ Header: base.Header{
"Transport": headers.Transport{ "Transport": headers.Transport{
Protocol: base.StreamProtocolUDP, Protocol: headers.TransportProtocolUDP,
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
ClientPorts: th.ClientPorts, ClientPorts: th.ClientPorts,
@@ -1420,7 +1420,7 @@ func TestClientReadPause(t *testing.T) {
defer close(writerDone) defer close(writerDone)
var l1 net.PacketConn var l1 net.PacketConn
if inTH.Protocol == base.StreamProtocolUDP { if inTH.Protocol == headers.TransportProtocolUDP {
var err error var err error
l1, err = net.ListenPacket("udp", "localhost:34556") l1, err = net.ListenPacket("udp", "localhost:34556")
require.NoError(t, err) require.NoError(t, err)
@@ -1433,7 +1433,7 @@ func TestClientReadPause(t *testing.T) {
for { for {
select { select {
case <-t.C: case <-t.C:
if inTH.Protocol == base.StreamProtocolUDP { if inTH.Protocol == headers.TransportProtocolUDP {
l1.WriteTo([]byte("\x00\x00\x00\x00"), &net.UDPAddr{ l1.WriteTo([]byte("\x00\x00\x00\x00"), &net.UDPAddr{
IP: net.ParseIP("127.0.0.1"), IP: net.ParseIP("127.0.0.1"),
Port: inTH.ClientPorts[0], Port: inTH.ClientPorts[0],
@@ -1517,19 +1517,19 @@ func TestClientReadPause(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
th := headers.Transport{ th := headers.Transport{
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
} }
if transport == "udp" { if transport == "udp" {
th.Protocol = base.StreamProtocolUDP th.Protocol = headers.TransportProtocolUDP
th.ServerPorts = &[2]int{34556, 34557} th.ServerPorts = &[2]int{34556, 34557}
th.ClientPorts = inTH.ClientPorts th.ClientPorts = inTH.ClientPorts
} else { } else {
th.Protocol = base.StreamProtocolTCP th.Protocol = headers.TransportProtocolTCP
th.InterleavedIDs = inTH.InterleavedIDs th.InterleavedIDs = inTH.InterleavedIDs
} }
@@ -1706,9 +1706,9 @@ func TestClientReadRTCPReport(t *testing.T) {
StatusCode: base.StatusOK, StatusCode: base.StatusOK,
Header: base.Header{ Header: base.Header{
"Transport": headers.Transport{ "Transport": headers.Transport{
Protocol: base.StreamProtocolTCP, Protocol: headers.TransportProtocolTCP,
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
ClientPorts: th.ClientPorts, ClientPorts: th.ClientPorts,
@@ -1878,8 +1878,8 @@ func TestClientReadErrorTimeout(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
th := headers.Transport{ th := headers.Transport{
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
} }
@@ -1891,12 +1891,12 @@ func TestClientReadErrorTimeout(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
defer l1.Close() defer l1.Close()
th.Protocol = base.StreamProtocolUDP th.Protocol = headers.TransportProtocolUDP
th.ServerPorts = &[2]int{34556, 34557} th.ServerPorts = &[2]int{34556, 34557}
th.ClientPorts = inTH.ClientPorts th.ClientPorts = inTH.ClientPorts
} else { } else {
th.Protocol = base.StreamProtocolTCP th.Protocol = headers.TransportProtocolTCP
th.InterleavedIDs = inTH.InterleavedIDs th.InterleavedIDs = inTH.InterleavedIDs
} }
@@ -2035,12 +2035,12 @@ func TestClientReadIgnoreTCPInvalidTrack(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
th := headers.Transport{ th := headers.Transport{
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
} }
th.Protocol = base.StreamProtocolTCP th.Protocol = headers.TransportProtocolTCP
th.InterleavedIDs = inTH.InterleavedIDs th.InterleavedIDs = inTH.InterleavedIDs
err = base.Response{ err = base.Response{
@@ -2165,11 +2165,11 @@ func TestClientReadSeek(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
th := headers.Transport{ th := headers.Transport{
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Protocol: base.StreamProtocolTCP, Protocol: headers.TransportProtocolTCP,
InterleavedIDs: inTH.InterleavedIDs, InterleavedIDs: inTH.InterleavedIDs,
} }

View File

@@ -1249,23 +1249,23 @@ func (cc *ClientConn) doSetup(
rtpListener, rtcpListener = newClientConnUDPListenerPair(cc) rtpListener, rtcpListener = newClientConnUDPListenerPair(cc)
} }
v1 := base.StreamDeliveryUnicast v1 := headers.TransportDeliveryUnicast
th.Delivery = &v1 th.Delivery = &v1
th.Protocol = base.StreamProtocolUDP th.Protocol = headers.TransportProtocolUDP
th.ClientPorts = &[2]int{ th.ClientPorts = &[2]int{
rtpListener.port(), rtpListener.port(),
rtcpListener.port(), rtcpListener.port(),
} }
case TransportUDPMulticast: case TransportUDPMulticast:
v1 := base.StreamDeliveryMulticast v1 := headers.TransportDeliveryMulticast
th.Delivery = &v1 th.Delivery = &v1
th.Protocol = base.StreamProtocolUDP th.Protocol = headers.TransportProtocolUDP
case TransportTCP: case TransportTCP:
v1 := base.StreamDeliveryUnicast v1 := headers.TransportDeliveryUnicast
th.Delivery = &v1 th.Delivery = &v1
th.Protocol = base.StreamProtocolTCP th.Protocol = headers.TransportProtocolTCP
th.InterleavedIDs = &[2]int{(trackID * 2), (trackID * 2) + 1} th.InterleavedIDs = &[2]int{(trackID * 2), (trackID * 2) + 1}
} }
@@ -1325,7 +1325,7 @@ func (cc *ClientConn) doSetup(
switch proto { switch proto {
case TransportUDP: case TransportUDP:
if thRes.Delivery != nil && *thRes.Delivery != base.StreamDeliveryUnicast { if thRes.Delivery != nil && *thRes.Delivery != headers.TransportDeliveryUnicast {
return nil, liberrors.ErrClientTransportHeaderInvalidDelivery{} return nil, liberrors.ErrClientTransportHeaderInvalidDelivery{}
} }
@@ -1338,7 +1338,7 @@ func (cc *ClientConn) doSetup(
} }
case TransportUDPMulticast: case TransportUDPMulticast:
if thRes.Delivery == nil || *thRes.Delivery != base.StreamDeliveryMulticast { if thRes.Delivery == nil || *thRes.Delivery != headers.TransportDeliveryMulticast {
return nil, liberrors.ErrClientTransportHeaderInvalidDelivery{} return nil, liberrors.ErrClientTransportHeaderInvalidDelivery{}
} }
@@ -1364,7 +1364,7 @@ func (cc *ClientConn) doSetup(
} }
case TransportTCP: case TransportTCP:
if thRes.Delivery != nil && *thRes.Delivery != base.StreamDeliveryUnicast { if thRes.Delivery != nil && *thRes.Delivery != headers.TransportDeliveryUnicast {
return nil, liberrors.ErrClientTransportHeaderInvalidDelivery{} return nil, liberrors.ErrClientTransportHeaderInvalidDelivery{}
} }

View File

@@ -1,73 +0,0 @@
package base
// StreamProtocol is the protocol of a stream.
type StreamProtocol int
const (
// StreamProtocolUDP means that the stream uses the UDP protocol
StreamProtocolUDP StreamProtocol = iota
// StreamProtocolTCP means that the stream uses the TCP protocol
StreamProtocolTCP
)
var streamProtocolLabels = map[StreamProtocol]string{
StreamProtocolUDP: "UDP",
StreamProtocolTCP: "TCP",
}
// String implements fmt.Stringer.
func (sp StreamProtocol) String() string {
if l, ok := streamProtocolLabels[sp]; ok {
return l
}
return "unknown"
}
// StreamDelivery is the delivery method of a stream.
type StreamDelivery int
const (
// StreamDeliveryUnicast means that the stream is unicasted
StreamDeliveryUnicast StreamDelivery = iota
// StreamDeliveryMulticast means that the stream is multicasted
StreamDeliveryMulticast
)
var streamDeliveryLabels = map[StreamDelivery]string{
StreamDeliveryUnicast: "unicast",
StreamDeliveryMulticast: "multicast",
}
// String implements fmt.Stringer.
func (sc StreamDelivery) String() string {
if l, ok := streamDeliveryLabels[sc]; ok {
return l
}
return "unknown"
}
// StreamType is the stream type.
type StreamType int
const (
// StreamTypeRTP means that the stream contains RTP packets
StreamTypeRTP StreamType = iota
// StreamTypeRTCP means that the stream contains RTCP packets
StreamTypeRTCP
)
var streamTypeLabels = map[StreamType]string{
StreamTypeRTP: "RTP",
StreamTypeRTCP: "RTCP",
}
// String implements fmt.Stringer
func (st StreamType) String() string {
if l, ok := streamTypeLabels[st]; ok {
return l
}
return "unknown"
}

View File

@@ -1,18 +0,0 @@
package base
import (
"testing"
"github.com/stretchr/testify/require"
)
func TestDefs(t *testing.T) {
require.NotEqual(t, "unknown", StreamProtocolUDP.String())
require.Equal(t, "unknown", StreamProtocol(4).String())
require.NotEqual(t, "unknown", StreamDeliveryUnicast.String())
require.Equal(t, "unknown", StreamDelivery(4).String())
require.NotEqual(t, "unknown", StreamTypeRTP.String())
require.Equal(t, "unknown", StreamType(4).String())
}

25
pkg/base/streamtype.go Normal file
View File

@@ -0,0 +1,25 @@
package base
// StreamType is a stream type.
type StreamType int
const (
// StreamTypeRTP means that the stream contains RTP packets
StreamTypeRTP StreamType = iota
// StreamTypeRTCP means that the stream contains RTCP packets
StreamTypeRTCP
)
var streamTypeLabels = map[StreamType]string{
StreamTypeRTP: "RTP",
StreamTypeRTCP: "RTCP",
}
// String implements fmt.Stringer
func (st StreamType) String() string {
if l, ok := streamTypeLabels[st]; ok {
return l
}
return "unknown"
}

View File

@@ -0,0 +1,12 @@
package base
import (
"testing"
"github.com/stretchr/testify/require"
)
func TestStreamType(t *testing.T) {
require.NotEqual(t, "unknown", StreamTypeRTP.String())
require.Equal(t, "unknown", StreamType(4).String())
}

View File

@@ -11,6 +11,24 @@ import (
"github.com/aler9/gortsplib/pkg/base" "github.com/aler9/gortsplib/pkg/base"
) )
// TransportProtocol is a transport protocol.
type TransportProtocol int
// standard transport protocols.
const (
TransportProtocolUDP TransportProtocol = iota
TransportProtocolTCP
)
// TransportDelivery is a delivery method.
type TransportDelivery int
// standard transport delivery methods.
const (
TransportDeliveryUnicast TransportDelivery = iota
TransportDeliveryMulticast
)
// TransportMode is a transport mode. // TransportMode is a transport mode.
type TransportMode int type TransportMode int
@@ -25,10 +43,10 @@ const (
// Transport is a Transport header. // Transport is a Transport header.
type Transport struct { type Transport struct {
// protocol of the stream // protocol of the stream
Protocol base.StreamProtocol Protocol TransportProtocol
// (optional) delivery method of the stream // (optional) delivery method of the stream
Delivery *base.StreamDelivery Delivery *TransportDelivery
// (optional) destination IP // (optional) destination IP
Destination *net.IP Destination *net.IP
@@ -107,19 +125,19 @@ func (h *Transport) Read(v base.HeaderValue) error {
switch k { switch k {
case "RTP/AVP", "RTP/AVP/UDP": case "RTP/AVP", "RTP/AVP/UDP":
h.Protocol = base.StreamProtocolUDP h.Protocol = TransportProtocolUDP
protocolFound = true protocolFound = true
case "RTP/AVP/TCP": case "RTP/AVP/TCP":
h.Protocol = base.StreamProtocolTCP h.Protocol = TransportProtocolTCP
protocolFound = true protocolFound = true
case "unicast": case "unicast":
v := base.StreamDeliveryUnicast v := TransportDeliveryUnicast
h.Delivery = &v h.Delivery = &v
case "multicast": case "multicast":
v := base.StreamDeliveryMulticast v := TransportDeliveryMulticast
h.Delivery = &v h.Delivery = &v
case "destination": case "destination":
@@ -221,14 +239,14 @@ func (h *Transport) Read(v base.HeaderValue) error {
func (h Transport) Write() base.HeaderValue { func (h Transport) Write() base.HeaderValue {
var rets []string var rets []string
if h.Protocol == base.StreamProtocolUDP { if h.Protocol == TransportProtocolUDP {
rets = append(rets, "RTP/AVP") rets = append(rets, "RTP/AVP")
} else { } else {
rets = append(rets, "RTP/AVP/TCP") rets = append(rets, "RTP/AVP/TCP")
} }
if h.Delivery != nil { if h.Delivery != nil {
if *h.Delivery == base.StreamDeliveryUnicast { if *h.Delivery == TransportDeliveryUnicast {
rets = append(rets, "unicast") rets = append(rets, "unicast")
} else { } else {
rets = append(rets, "multicast") rets = append(rets, "multicast")

View File

@@ -20,9 +20,9 @@ var casesTransport = []struct {
base.HeaderValue{`RTP/AVP;unicast;client_port=3456-3457;mode="PLAY"`}, base.HeaderValue{`RTP/AVP;unicast;client_port=3456-3457;mode="PLAY"`},
base.HeaderValue{`RTP/AVP;unicast;client_port=3456-3457;mode=play`}, base.HeaderValue{`RTP/AVP;unicast;client_port=3456-3457;mode=play`},
Transport{ Transport{
Protocol: base.StreamProtocolUDP, Protocol: TransportProtocolUDP,
Delivery: func() *base.StreamDelivery { Delivery: func() *TransportDelivery {
v := base.StreamDeliveryUnicast v := TransportDeliveryUnicast
return &v return &v
}(), }(),
ClientPorts: &[2]int{3456, 3457}, ClientPorts: &[2]int{3456, 3457},
@@ -37,9 +37,9 @@ var casesTransport = []struct {
base.HeaderValue{`RTP/AVP/UDP;unicast;client_port=3056-3057;server_port=5000-5001`}, base.HeaderValue{`RTP/AVP/UDP;unicast;client_port=3056-3057;server_port=5000-5001`},
base.HeaderValue{`RTP/AVP;unicast;client_port=3056-3057;server_port=5000-5001`}, base.HeaderValue{`RTP/AVP;unicast;client_port=3056-3057;server_port=5000-5001`},
Transport{ Transport{
Protocol: base.StreamProtocolUDP, Protocol: TransportProtocolUDP,
Delivery: func() *base.StreamDelivery { Delivery: func() *TransportDelivery {
v := base.StreamDeliveryUnicast v := TransportDeliveryUnicast
return &v return &v
}(), }(),
ClientPorts: &[2]int{3056, 3057}, ClientPorts: &[2]int{3056, 3057},
@@ -51,9 +51,9 @@ var casesTransport = []struct {
base.HeaderValue{`RTP/AVP;multicast;destination=225.219.201.15;port=7000-7001;ttl=127`}, base.HeaderValue{`RTP/AVP;multicast;destination=225.219.201.15;port=7000-7001;ttl=127`},
base.HeaderValue{`RTP/AVP;multicast;destination=225.219.201.15;port=7000-7001;ttl=127`}, base.HeaderValue{`RTP/AVP;multicast;destination=225.219.201.15;port=7000-7001;ttl=127`},
Transport{ Transport{
Protocol: base.StreamProtocolUDP, Protocol: TransportProtocolUDP,
Delivery: func() *base.StreamDelivery { Delivery: func() *TransportDelivery {
v := base.StreamDeliveryMulticast v := TransportDeliveryMulticast
return &v return &v
}(), }(),
Destination: func() *net.IP { Destination: func() *net.IP {
@@ -72,7 +72,7 @@ var casesTransport = []struct {
base.HeaderValue{`RTP/AVP/TCP;interleaved=0-1`}, base.HeaderValue{`RTP/AVP/TCP;interleaved=0-1`},
base.HeaderValue{`RTP/AVP/TCP;interleaved=0-1`}, base.HeaderValue{`RTP/AVP/TCP;interleaved=0-1`},
Transport{ Transport{
Protocol: base.StreamProtocolTCP, Protocol: TransportProtocolTCP,
InterleavedIDs: &[2]int{0, 1}, InterleavedIDs: &[2]int{0, 1},
}, },
}, },
@@ -81,9 +81,9 @@ var casesTransport = []struct {
base.HeaderValue{`RTP/AVP/UDP;unicast;server_port=8052;client_port=14186;ssrc=0B6020AD;mode=PLAY`}, base.HeaderValue{`RTP/AVP/UDP;unicast;server_port=8052;client_port=14186;ssrc=0B6020AD;mode=PLAY`},
base.HeaderValue{`RTP/AVP;unicast;client_port=14186-14187;server_port=8052-8053;ssrc=0B6020AD;mode=play`}, base.HeaderValue{`RTP/AVP;unicast;client_port=14186-14187;server_port=8052-8053;ssrc=0B6020AD;mode=play`},
Transport{ Transport{
Protocol: base.StreamProtocolUDP, Protocol: TransportProtocolUDP,
Delivery: func() *base.StreamDelivery { Delivery: func() *TransportDelivery {
v := base.StreamDeliveryUnicast v := TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *TransportMode { Mode: func() *TransportMode {
@@ -103,9 +103,9 @@ var casesTransport = []struct {
base.HeaderValue{`RTP/AVP/UDP;unicast;mode=receive;source=localhost;client_port=14186-14187;server_port=5000-5001`}, base.HeaderValue{`RTP/AVP/UDP;unicast;mode=receive;source=localhost;client_port=14186-14187;server_port=5000-5001`},
base.HeaderValue{`RTP/AVP;unicast;client_port=14186-14187;server_port=5000-5001;mode=record`}, base.HeaderValue{`RTP/AVP;unicast;client_port=14186-14187;server_port=5000-5001;mode=record`},
Transport{ Transport{
Protocol: base.StreamProtocolUDP, Protocol: TransportProtocolUDP,
Delivery: func() *base.StreamDelivery { Delivery: func() *TransportDelivery {
v := base.StreamDeliveryUnicast v := TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *TransportMode { Mode: func() *TransportMode {
@@ -121,9 +121,9 @@ var casesTransport = []struct {
base.HeaderValue{`client_port=3456-3457;RTP/AVP;mode="PLAY";unicast`}, base.HeaderValue{`client_port=3456-3457;RTP/AVP;mode="PLAY";unicast`},
base.HeaderValue{`RTP/AVP;unicast;client_port=3456-3457;mode=play`}, base.HeaderValue{`RTP/AVP;unicast;client_port=3456-3457;mode=play`},
Transport{ Transport{
Protocol: base.StreamProtocolUDP, Protocol: TransportProtocolUDP,
Delivery: func() *base.StreamDelivery { Delivery: func() *TransportDelivery {
v := base.StreamDeliveryUnicast v := TransportDeliveryUnicast
return &v return &v
}(), }(),
ClientPorts: &[2]int{3456, 3457}, ClientPorts: &[2]int{3456, 3457},
@@ -138,9 +138,9 @@ var casesTransport = []struct {
base.HeaderValue{`RTP/AVP/UDP;unicast;client_port=14186;server_port=8052;ssrc=4317f;mode=play`}, base.HeaderValue{`RTP/AVP/UDP;unicast;client_port=14186;server_port=8052;ssrc=4317f;mode=play`},
base.HeaderValue{`RTP/AVP;unicast;client_port=14186-14187;server_port=8052-8053;ssrc=0004317F;mode=play`}, base.HeaderValue{`RTP/AVP;unicast;client_port=14186-14187;server_port=8052-8053;ssrc=0004317F;mode=play`},
Transport{ Transport{
Protocol: base.StreamProtocolUDP, Protocol: TransportProtocolUDP,
Delivery: func() *base.StreamDelivery { Delivery: func() *TransportDelivery {
v := base.StreamDeliveryUnicast v := TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *TransportMode { Mode: func() *TransportMode {

View File

@@ -358,9 +358,9 @@ func TestServerPublishSetupPath(t *testing.T) {
require.Equal(t, base.StatusOK, res.StatusCode) require.Equal(t, base.StatusOK, res.StatusCode)
th := &headers.Transport{ th := &headers.Transport{
Protocol: base.StreamProtocolTCP, Protocol: headers.TransportProtocolTCP,
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {
@@ -439,9 +439,9 @@ func TestServerPublishErrorSetupDifferentPaths(t *testing.T) {
require.Equal(t, base.StatusOK, res.StatusCode) require.Equal(t, base.StatusOK, res.StatusCode)
th := &headers.Transport{ th := &headers.Transport{
Protocol: base.StreamProtocolTCP, Protocol: headers.TransportProtocolTCP,
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {
@@ -521,9 +521,9 @@ func TestServerPublishErrorSetupTrackTwice(t *testing.T) {
require.Equal(t, base.StatusOK, res.StatusCode) require.Equal(t, base.StatusOK, res.StatusCode)
th := &headers.Transport{ th := &headers.Transport{
Protocol: base.StreamProtocolTCP, Protocol: headers.TransportProtocolTCP,
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {
@@ -623,9 +623,9 @@ func TestServerPublishErrorRecordPartialTracks(t *testing.T) {
require.Equal(t, base.StatusOK, res.StatusCode) require.Equal(t, base.StatusOK, res.StatusCode)
th := &headers.Transport{ th := &headers.Transport{
Protocol: base.StreamProtocolTCP, Protocol: headers.TransportProtocolTCP,
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {
@@ -775,8 +775,8 @@ func TestServerPublish(t *testing.T) {
<-sessionOpened <-sessionOpened
inTH := &headers.Transport{ inTH := &headers.Transport{
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {
@@ -786,10 +786,10 @@ func TestServerPublish(t *testing.T) {
} }
if transport == "udp" { if transport == "udp" {
inTH.Protocol = base.StreamProtocolUDP inTH.Protocol = headers.TransportProtocolUDP
inTH.ClientPorts = &[2]int{35466, 35467} inTH.ClientPorts = &[2]int{35466, 35467}
} else { } else {
inTH.Protocol = base.StreamProtocolTCP inTH.Protocol = headers.TransportProtocolTCP
inTH.InterleavedIDs = &[2]int{0, 1} inTH.InterleavedIDs = &[2]int{0, 1}
} }
@@ -961,15 +961,15 @@ func TestServerPublishErrorInvalidProtocol(t *testing.T) {
require.Equal(t, base.StatusOK, res.StatusCode) require.Equal(t, base.StatusOK, res.StatusCode)
inTH := &headers.Transport{ inTH := &headers.Transport{
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {
v := headers.TransportModeRecord v := headers.TransportModeRecord
return &v return &v
}(), }(),
Protocol: base.StreamProtocolUDP, Protocol: headers.TransportProtocolUDP,
ClientPorts: &[2]int{35466, 35467}, ClientPorts: &[2]int{35466, 35467},
} }
@@ -1062,15 +1062,15 @@ func TestServerPublishRTCPReport(t *testing.T) {
require.Equal(t, base.StatusOK, res.StatusCode) require.Equal(t, base.StatusOK, res.StatusCode)
inTH := &headers.Transport{ inTH := &headers.Transport{
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {
v := headers.TransportModeRecord v := headers.TransportModeRecord
return &v return &v
}(), }(),
Protocol: base.StreamProtocolTCP, Protocol: headers.TransportProtocolTCP,
InterleavedIDs: &[2]int{0, 1}, InterleavedIDs: &[2]int{0, 1},
} }
@@ -1221,8 +1221,8 @@ func TestServerPublishTimeout(t *testing.T) {
require.Equal(t, base.StatusOK, res.StatusCode) require.Equal(t, base.StatusOK, res.StatusCode)
inTH := &headers.Transport{ inTH := &headers.Transport{
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {
@@ -1232,10 +1232,10 @@ func TestServerPublishTimeout(t *testing.T) {
} }
if transport == "udp" { if transport == "udp" {
inTH.Protocol = base.StreamProtocolUDP inTH.Protocol = headers.TransportProtocolUDP
inTH.ClientPorts = &[2]int{35466, 35467} inTH.ClientPorts = &[2]int{35466, 35467}
} else { } else {
inTH.Protocol = base.StreamProtocolTCP inTH.Protocol = headers.TransportProtocolTCP
inTH.InterleavedIDs = &[2]int{0, 1} inTH.InterleavedIDs = &[2]int{0, 1}
} }
@@ -1348,8 +1348,8 @@ func TestServerPublishWithoutTeardown(t *testing.T) {
require.Equal(t, base.StatusOK, res.StatusCode) require.Equal(t, base.StatusOK, res.StatusCode)
inTH := &headers.Transport{ inTH := &headers.Transport{
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {
@@ -1359,10 +1359,10 @@ func TestServerPublishWithoutTeardown(t *testing.T) {
} }
if transport == "udp" { if transport == "udp" {
inTH.Protocol = base.StreamProtocolUDP inTH.Protocol = headers.TransportProtocolUDP
inTH.ClientPorts = &[2]int{35466, 35467} inTH.ClientPorts = &[2]int{35466, 35467}
} else { } else {
inTH.Protocol = base.StreamProtocolTCP inTH.Protocol = headers.TransportProtocolTCP
inTH.InterleavedIDs = &[2]int{0, 1} inTH.InterleavedIDs = &[2]int{0, 1}
} }
@@ -1467,15 +1467,15 @@ func TestServerPublishUDPChangeConn(t *testing.T) {
require.Equal(t, base.StatusOK, res.StatusCode) require.Equal(t, base.StatusOK, res.StatusCode)
inTH := &headers.Transport{ inTH := &headers.Transport{
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {
v := headers.TransportModeRecord v := headers.TransportModeRecord
return &v return &v
}(), }(),
Protocol: base.StreamProtocolUDP, Protocol: headers.TransportProtocolUDP,
ClientPorts: &[2]int{35466, 35467}, ClientPorts: &[2]int{35466, 35467},
} }

View File

@@ -116,9 +116,9 @@ func TestServerReadSetupPath(t *testing.T) {
bconn := bufio.NewReadWriter(bufio.NewReader(conn), bufio.NewWriter(conn)) bconn := bufio.NewReadWriter(bufio.NewReader(conn), bufio.NewWriter(conn))
th := &headers.Transport{ th := &headers.Transport{
Protocol: base.StreamProtocolTCP, Protocol: headers.TransportProtocolTCP,
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {
@@ -174,9 +174,9 @@ func TestServerReadErrorSetupDifferentPaths(t *testing.T) {
bconn := bufio.NewReadWriter(bufio.NewReader(conn), bufio.NewWriter(conn)) bconn := bufio.NewReadWriter(bufio.NewReader(conn), bufio.NewWriter(conn))
th := &headers.Transport{ th := &headers.Transport{
Protocol: base.StreamProtocolTCP, Protocol: headers.TransportProtocolTCP,
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {
@@ -246,9 +246,9 @@ func TestServerReadErrorSetupTrackTwice(t *testing.T) {
bconn := bufio.NewReadWriter(bufio.NewReader(conn), bufio.NewWriter(conn)) bconn := bufio.NewReadWriter(bufio.NewReader(conn), bufio.NewWriter(conn))
th := &headers.Transport{ th := &headers.Transport{
Protocol: base.StreamProtocolTCP, Protocol: headers.TransportProtocolTCP,
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {
@@ -399,20 +399,20 @@ func TestServerRead(t *testing.T) {
switch transport { switch transport {
case "udp": case "udp":
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
inTH.Delivery = &v inTH.Delivery = &v
inTH.Protocol = base.StreamProtocolUDP inTH.Protocol = headers.TransportProtocolUDP
inTH.ClientPorts = &[2]int{35466, 35467} inTH.ClientPorts = &[2]int{35466, 35467}
case "multicast": case "multicast":
v := base.StreamDeliveryMulticast v := headers.TransportDeliveryMulticast
inTH.Delivery = &v inTH.Delivery = &v
inTH.Protocol = base.StreamProtocolUDP inTH.Protocol = headers.TransportProtocolUDP
default: default:
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
inTH.Delivery = &v inTH.Delivery = &v
inTH.Protocol = base.StreamProtocolTCP inTH.Protocol = headers.TransportProtocolTCP
inTH.InterleavedIDs = &[2]int{4, 5} inTH.InterleavedIDs = &[2]int{4, 5}
} }
@@ -433,16 +433,16 @@ func TestServerRead(t *testing.T) {
switch transport { switch transport {
case "udp": case "udp":
require.Equal(t, base.StreamProtocolUDP, th.Protocol) require.Equal(t, headers.TransportProtocolUDP, th.Protocol)
require.Equal(t, base.StreamDeliveryUnicast, *th.Delivery) require.Equal(t, headers.TransportDeliveryUnicast, *th.Delivery)
case "multicast": case "multicast":
require.Equal(t, base.StreamProtocolUDP, th.Protocol) require.Equal(t, headers.TransportProtocolUDP, th.Protocol)
require.Equal(t, base.StreamDeliveryMulticast, *th.Delivery) require.Equal(t, headers.TransportDeliveryMulticast, *th.Delivery)
default: default:
require.Equal(t, base.StreamProtocolTCP, th.Protocol) require.Equal(t, headers.TransportProtocolTCP, th.Protocol)
require.Equal(t, base.StreamDeliveryUnicast, *th.Delivery) require.Equal(t, headers.TransportDeliveryUnicast, *th.Delivery)
} }
<-sessionOpened <-sessionOpened
@@ -666,9 +666,9 @@ func TestServerReadTCPResponseBeforeFrames(t *testing.T) {
Header: base.Header{ Header: base.Header{
"CSeq": base.HeaderValue{"1"}, "CSeq": base.HeaderValue{"1"},
"Transport": headers.Transport{ "Transport": headers.Transport{
Protocol: base.StreamProtocolTCP, Protocol: headers.TransportProtocolTCP,
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {
@@ -737,9 +737,9 @@ func TestServerReadPlayPlay(t *testing.T) {
Header: base.Header{ Header: base.Header{
"CSeq": base.HeaderValue{"1"}, "CSeq": base.HeaderValue{"1"},
"Transport": headers.Transport{ "Transport": headers.Transport{
Protocol: base.StreamProtocolUDP, Protocol: headers.TransportProtocolUDP,
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {
@@ -844,9 +844,9 @@ func TestServerReadPlayPausePlay(t *testing.T) {
Header: base.Header{ Header: base.Header{
"CSeq": base.HeaderValue{"1"}, "CSeq": base.HeaderValue{"1"},
"Transport": headers.Transport{ "Transport": headers.Transport{
Protocol: base.StreamProtocolTCP, Protocol: headers.TransportProtocolTCP,
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {
@@ -958,9 +958,9 @@ func TestServerReadPlayPausePause(t *testing.T) {
Header: base.Header{ Header: base.Header{
"CSeq": base.HeaderValue{"1"}, "CSeq": base.HeaderValue{"1"},
"Transport": headers.Transport{ "Transport": headers.Transport{
Protocol: base.StreamProtocolTCP, Protocol: headers.TransportProtocolTCP,
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {
@@ -1065,8 +1065,8 @@ func TestServerReadTimeout(t *testing.T) {
bconn := bufio.NewReadWriter(bufio.NewReader(nconn), bufio.NewWriter(nconn)) bconn := bufio.NewReadWriter(bufio.NewReader(nconn), bufio.NewWriter(nconn))
inTH := &headers.Transport{ inTH := &headers.Transport{
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {
@@ -1075,7 +1075,7 @@ func TestServerReadTimeout(t *testing.T) {
}(), }(),
} }
inTH.Protocol = base.StreamProtocolUDP inTH.Protocol = headers.TransportProtocolUDP
inTH.ClientPorts = &[2]int{35466, 35467} inTH.ClientPorts = &[2]int{35466, 35467}
res, err := writeReqReadRes(bconn, base.Request{ res, err := writeReqReadRes(bconn, base.Request{
@@ -1162,8 +1162,8 @@ func TestServerReadWithoutTeardown(t *testing.T) {
bconn := bufio.NewReadWriter(bufio.NewReader(nconn), bufio.NewWriter(nconn)) bconn := bufio.NewReadWriter(bufio.NewReader(nconn), bufio.NewWriter(nconn))
inTH := &headers.Transport{ inTH := &headers.Transport{
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {
@@ -1173,10 +1173,10 @@ func TestServerReadWithoutTeardown(t *testing.T) {
} }
if transport == "udp" { if transport == "udp" {
inTH.Protocol = base.StreamProtocolUDP inTH.Protocol = headers.TransportProtocolUDP
inTH.ClientPorts = &[2]int{35466, 35467} inTH.ClientPorts = &[2]int{35466, 35467}
} else { } else {
inTH.Protocol = base.StreamProtocolTCP inTH.Protocol = headers.TransportProtocolTCP
inTH.InterleavedIDs = &[2]int{0, 1} inTH.InterleavedIDs = &[2]int{0, 1}
} }
@@ -1253,15 +1253,15 @@ func TestServerReadUDPChangeConn(t *testing.T) {
bconn := bufio.NewReadWriter(bufio.NewReader(conn), bufio.NewWriter(conn)) bconn := bufio.NewReadWriter(bufio.NewReader(conn), bufio.NewWriter(conn))
inTH := &headers.Transport{ inTH := &headers.Transport{
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {
v := headers.TransportModePlay v := headers.TransportModePlay
return &v return &v
}(), }(),
Protocol: base.StreamProtocolUDP, Protocol: headers.TransportProtocolUDP,
ClientPorts: &[2]int{35466, 35467}, ClientPorts: &[2]int{35466, 35467},
} }
@@ -1344,15 +1344,15 @@ func TestServerReadErrorUDPSamePorts(t *testing.T) {
bconn := bufio.NewReadWriter(bufio.NewReader(conn), bufio.NewWriter(conn)) bconn := bufio.NewReadWriter(bufio.NewReader(conn), bufio.NewWriter(conn))
inTH := &headers.Transport{ inTH := &headers.Transport{
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {
v := headers.TransportModePlay v := headers.TransportModePlay
return &v return &v
}(), }(),
Protocol: base.StreamProtocolUDP, Protocol: headers.TransportProtocolUDP,
ClientPorts: &[2]int{35466, 35467}, ClientPorts: &[2]int{35466, 35467},
} }
@@ -1386,15 +1386,15 @@ func TestServerReadErrorUDPSamePorts(t *testing.T) {
bconn := bufio.NewReadWriter(bufio.NewReader(conn), bufio.NewWriter(conn)) bconn := bufio.NewReadWriter(bufio.NewReader(conn), bufio.NewWriter(conn))
inTH := &headers.Transport{ inTH := &headers.Transport{
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {
v := headers.TransportModePlay v := headers.TransportModePlay
return &v return &v
}(), }(),
Protocol: base.StreamProtocolUDP, Protocol: headers.TransportProtocolUDP,
ClientPorts: &[2]int{35466, 35467}, ClientPorts: &[2]int{35466, 35467},
} }
@@ -1448,15 +1448,15 @@ func TestServerReadNonSetuppedPath(t *testing.T) {
bconn := bufio.NewReadWriter(bufio.NewReader(conn), bufio.NewWriter(conn)) bconn := bufio.NewReadWriter(bufio.NewReader(conn), bufio.NewWriter(conn))
inTH := &headers.Transport{ inTH := &headers.Transport{
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {
v := headers.TransportModePlay v := headers.TransportModePlay
return &v return &v
}(), }(),
Protocol: base.StreamProtocolTCP, Protocol: headers.TransportProtocolTCP,
InterleavedIDs: &[2]int{0, 1}, InterleavedIDs: &[2]int{0, 1},
} }
@@ -1500,15 +1500,15 @@ func TestServerReadAdditionalInfos(t *testing.T) {
ssrcs := make([]*uint32, 2) ssrcs := make([]*uint32, 2)
inTH := &headers.Transport{ inTH := &headers.Transport{
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {
v := headers.TransportModePlay v := headers.TransportModePlay
return &v return &v
}(), }(),
Protocol: base.StreamProtocolTCP, Protocol: headers.TransportProtocolTCP,
InterleavedIDs: &[2]int{0, 1}, InterleavedIDs: &[2]int{0, 1},
} }
@@ -1529,15 +1529,15 @@ func TestServerReadAdditionalInfos(t *testing.T) {
ssrcs[0] = th.SSRC ssrcs[0] = th.SSRC
inTH = &headers.Transport{ inTH = &headers.Transport{
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {
v := headers.TransportModePlay v := headers.TransportModePlay
return &v return &v
}(), }(),
Protocol: base.StreamProtocolTCP, Protocol: headers.TransportProtocolTCP,
InterleavedIDs: &[2]int{2, 3}, InterleavedIDs: &[2]int{2, 3},
} }

View File

@@ -700,9 +700,9 @@ func TestServerErrorTCPTwoConnOneSession(t *testing.T) {
Header: base.Header{ Header: base.Header{
"CSeq": base.HeaderValue{"1"}, "CSeq": base.HeaderValue{"1"},
"Transport": headers.Transport{ "Transport": headers.Transport{
Protocol: base.StreamProtocolTCP, Protocol: headers.TransportProtocolTCP,
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {
@@ -738,9 +738,9 @@ func TestServerErrorTCPTwoConnOneSession(t *testing.T) {
Header: base.Header{ Header: base.Header{
"CSeq": base.HeaderValue{"1"}, "CSeq": base.HeaderValue{"1"},
"Transport": headers.Transport{ "Transport": headers.Transport{
Protocol: base.StreamProtocolTCP, Protocol: headers.TransportProtocolTCP,
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {
@@ -797,9 +797,9 @@ func TestServerErrorTCPOneConnTwoSessions(t *testing.T) {
Header: base.Header{ Header: base.Header{
"CSeq": base.HeaderValue{"1"}, "CSeq": base.HeaderValue{"1"},
"Transport": headers.Transport{ "Transport": headers.Transport{
Protocol: base.StreamProtocolTCP, Protocol: headers.TransportProtocolTCP,
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {
@@ -830,9 +830,9 @@ func TestServerErrorTCPOneConnTwoSessions(t *testing.T) {
Header: base.Header{ Header: base.Header{
"CSeq": base.HeaderValue{"3"}, "CSeq": base.HeaderValue{"3"},
"Transport": headers.Transport{ "Transport": headers.Transport{
Protocol: base.StreamProtocolTCP, Protocol: headers.TransportProtocolTCP,
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {
@@ -995,9 +995,9 @@ func TestServerSessionClose(t *testing.T) {
Header: base.Header{ Header: base.Header{
"CSeq": base.HeaderValue{"1"}, "CSeq": base.HeaderValue{"1"},
"Transport": headers.Transport{ "Transport": headers.Transport{
Protocol: base.StreamProtocolTCP, Protocol: headers.TransportProtocolTCP,
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {
@@ -1048,9 +1048,9 @@ func TestServerSessionAutoClose(t *testing.T) {
Header: base.Header{ Header: base.Header{
"CSeq": base.HeaderValue{"1"}, "CSeq": base.HeaderValue{"1"},
"Transport": headers.Transport{ "Transport": headers.Transport{
Protocol: base.StreamProtocolTCP, Protocol: headers.TransportProtocolTCP,
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {
@@ -1156,9 +1156,9 @@ func TestServerErrorInvalidPath(t *testing.T) {
"CSeq": base.HeaderValue{"2"}, "CSeq": base.HeaderValue{"2"},
"Session": base.HeaderValue{sxID}, "Session": base.HeaderValue{sxID},
"Transport": headers.Transport{ "Transport": headers.Transport{
Protocol: base.StreamProtocolTCP, Protocol: headers.TransportProtocolTCP,
Delivery: func() *base.StreamDelivery { Delivery: func() *headers.TransportDelivery {
v := base.StreamDeliveryUnicast v := headers.TransportDeliveryUnicast
return &v return &v
}(), }(),
Mode: func() *headers.TransportMode { Mode: func() *headers.TransportMode {

View File

@@ -76,22 +76,22 @@ func setupGetTrackIDPathQuery(
} }
func setupGetTransport(th headers.Transport) (Transport, bool) { func setupGetTransport(th headers.Transport) (Transport, bool) {
delivery := func() base.StreamDelivery { delivery := func() headers.TransportDelivery {
if th.Delivery != nil { if th.Delivery != nil {
return *th.Delivery return *th.Delivery
} }
return base.StreamDeliveryUnicast return headers.TransportDeliveryUnicast
}() }()
switch th.Protocol { switch th.Protocol {
case base.StreamProtocolUDP: case headers.TransportProtocolUDP:
if delivery == base.StreamDeliveryUnicast { if delivery == headers.TransportDeliveryUnicast {
return TransportUDP, true return TransportUDP, true
} }
return TransportUDPMulticast, true return TransportUDPMulticast, true
default: // TCP default: // TCP
if delivery != base.StreamDeliveryUnicast { if delivery != headers.TransportDeliveryUnicast {
return 0, false return 0, false
} }
return TransportTCP, true return TransportTCP, true
@@ -696,15 +696,15 @@ func (ss *ServerSession) handleRequest(sc *ServerConn, req *base.Request) (*base
sst.udpRTPPort = inTH.ClientPorts[0] sst.udpRTPPort = inTH.ClientPorts[0]
sst.udpRTCPPort = inTH.ClientPorts[1] sst.udpRTCPPort = inTH.ClientPorts[1]
th.Protocol = base.StreamProtocolUDP th.Protocol = headers.TransportProtocolUDP
de := base.StreamDeliveryUnicast de := headers.TransportDeliveryUnicast
th.Delivery = &de th.Delivery = &de
th.ClientPorts = inTH.ClientPorts th.ClientPorts = inTH.ClientPorts
th.ServerPorts = &[2]int{sc.s.udpRTPListener.port(), sc.s.udpRTCPListener.port()} th.ServerPorts = &[2]int{sc.s.udpRTPListener.port(), sc.s.udpRTCPListener.port()}
case TransportUDPMulticast: case TransportUDPMulticast:
th.Protocol = base.StreamProtocolUDP th.Protocol = headers.TransportProtocolUDP
de := base.StreamDeliveryMulticast de := headers.TransportDeliveryMulticast
th.Delivery = &de th.Delivery = &de
v := uint(127) v := uint(127)
th.TTL = &v th.TTL = &v
@@ -724,8 +724,8 @@ func (ss *ServerSession) handleRequest(sc *ServerConn, req *base.Request) (*base
ss.setuppedTracksByChannel[inTH.InterleavedIDs[0]] = trackID ss.setuppedTracksByChannel[inTH.InterleavedIDs[0]] = trackID
th.Protocol = base.StreamProtocolTCP th.Protocol = headers.TransportProtocolTCP
de := base.StreamDeliveryUnicast de := headers.TransportDeliveryUnicast
th.Delivery = &de th.Delivery = &de
th.InterleavedIDs = inTH.InterleavedIDs th.InterleavedIDs = inTH.InterleavedIDs
} }