mirror of
https://github.com/aler9/gortsplib
synced 2025-10-05 23:26:54 +08:00
update golangci-lint
This commit is contained in:
2
.github/workflows/lint.yml
vendored
2
.github/workflows/lint.yml
vendored
@@ -15,7 +15,7 @@ jobs:
|
|||||||
|
|
||||||
- uses: golangci/golangci-lint-action@v2
|
- uses: golangci/golangci-lint-action@v2
|
||||||
with:
|
with:
|
||||||
version: v1.38
|
version: v1.40
|
||||||
|
|
||||||
go-mod-tidy:
|
go-mod-tidy:
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-20.04
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
linters:
|
linters:
|
||||||
enable:
|
enable:
|
||||||
- bodyclose
|
- bodyclose
|
||||||
|
- dupl
|
||||||
- exportloopref
|
- exportloopref
|
||||||
- gochecknoinits
|
- gochecknoinits
|
||||||
- gocritic
|
- gocritic
|
||||||
@@ -12,6 +13,7 @@ linters:
|
|||||||
- lll
|
- lll
|
||||||
- prealloc
|
- prealloc
|
||||||
- unconvert
|
- unconvert
|
||||||
|
- whitespace
|
||||||
disable:
|
disable:
|
||||||
- errcheck
|
- errcheck
|
||||||
|
|
||||||
|
4
Makefile
4
Makefile
@@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
BASE_IMAGE = amd64/golang:1.17-alpine3.13
|
BASE_IMAGE = amd64/golang:1.17-alpine3.13
|
||||||
LINT_IMAGE = golangci/golangci-lint:v1.38.0
|
LINT_IMAGE = golangci/golangci-lint:v1.40
|
||||||
|
|
||||||
.PHONY: $(shell ls)
|
.PHONY: $(shell ls)
|
||||||
|
|
||||||
@@ -36,7 +36,7 @@ export DOCKERFILE_FORMAT
|
|||||||
format:
|
format:
|
||||||
echo "$$DOCKERFILE_FORMAT" | docker build -q . -f - -t temp
|
echo "$$DOCKERFILE_FORMAT" | docker build -q . -f - -t temp
|
||||||
docker run --rm -it -v $(PWD):/s -w /s temp \
|
docker run --rm -it -v $(PWD):/s -w /s temp \
|
||||||
sh -c "find . -type f -name '*.go' | xargs gofumpt -l -w"
|
sh -c "gofumpt -l -w ."
|
||||||
|
|
||||||
define DOCKERFILE_TEST
|
define DOCKERFILE_TEST
|
||||||
FROM $(BASE_IMAGE)
|
FROM $(BASE_IMAGE)
|
||||||
|
@@ -83,7 +83,6 @@ func TestClientPublishSerial(t *testing.T) {
|
|||||||
th.Protocol = headers.TransportProtocolUDP
|
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 = headers.TransportProtocolTCP
|
th.Protocol = headers.TransportProtocolTCP
|
||||||
th.InterleavedIDs = inTH.InterleavedIDs
|
th.InterleavedIDs = inTH.InterleavedIDs
|
||||||
@@ -125,7 +124,6 @@ func TestClientPublishSerial(t *testing.T) {
|
|||||||
n, _, err := l1.ReadFrom(buf)
|
n, _, err := l1.ReadFrom(buf)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, []byte{0x01, 0x02, 0x03, 0x04}, buf[:n])
|
require.Equal(t, []byte{0x01, 0x02, 0x03, 0x04}, buf[:n])
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
var f base.InterleavedFrame
|
var f base.InterleavedFrame
|
||||||
f.Payload = make([]byte, 2048)
|
f.Payload = make([]byte, 2048)
|
||||||
@@ -269,7 +267,6 @@ func TestClientPublishParallel(t *testing.T) {
|
|||||||
th.Protocol = headers.TransportProtocolUDP
|
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 = headers.TransportProtocolTCP
|
th.Protocol = headers.TransportProtocolTCP
|
||||||
th.InterleavedIDs = inTH.InterleavedIDs
|
th.InterleavedIDs = inTH.InterleavedIDs
|
||||||
@@ -409,7 +406,6 @@ func TestClientPublishPauseSerial(t *testing.T) {
|
|||||||
th.Protocol = headers.TransportProtocolUDP
|
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 = headers.TransportProtocolTCP
|
th.Protocol = headers.TransportProtocolTCP
|
||||||
th.InterleavedIDs = inTH.InterleavedIDs
|
th.InterleavedIDs = inTH.InterleavedIDs
|
||||||
@@ -565,7 +561,6 @@ func TestClientPublishPauseParallel(t *testing.T) {
|
|||||||
th.Protocol = headers.TransportProtocolUDP
|
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 = headers.TransportProtocolTCP
|
th.Protocol = headers.TransportProtocolTCP
|
||||||
th.InterleavedIDs = inTH.InterleavedIDs
|
th.InterleavedIDs = inTH.InterleavedIDs
|
||||||
|
@@ -184,7 +184,6 @@ func TestClientRead(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
l = tls.NewListener(l, &tls.Config{Certificates: []tls.Certificate{cert}})
|
l = tls.NewListener(l, &tls.Config{Certificates: []tls.Certificate{cert}})
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
scheme = "rtsp"
|
scheme = "rtsp"
|
||||||
}
|
}
|
||||||
@@ -1527,7 +1526,6 @@ func TestClientReadPause(t *testing.T) {
|
|||||||
th.Protocol = headers.TransportProtocolUDP
|
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 = headers.TransportProtocolTCP
|
th.Protocol = headers.TransportProtocolTCP
|
||||||
th.InterleavedIDs = inTH.InterleavedIDs
|
th.InterleavedIDs = inTH.InterleavedIDs
|
||||||
@@ -1894,7 +1892,6 @@ func TestClientReadErrorTimeout(t *testing.T) {
|
|||||||
th.Protocol = headers.TransportProtocolUDP
|
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 = headers.TransportProtocolTCP
|
th.Protocol = headers.TransportProtocolTCP
|
||||||
th.InterleavedIDs = inTH.InterleavedIDs
|
th.InterleavedIDs = inTH.InterleavedIDs
|
||||||
|
@@ -571,7 +571,6 @@ func (cc *ClientConn) runBackgroundPlayUDP() error {
|
|||||||
checkStreamInitial = false
|
checkStreamInitial = false
|
||||||
checkStreamTicker.Stop()
|
checkStreamTicker.Stop()
|
||||||
checkStreamTicker = time.NewTicker(clientConnCheckStreamPeriod)
|
checkStreamTicker = time.NewTicker(clientConnCheckStreamPeriod)
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
inTimeout := func() bool {
|
inTimeout := func() bool {
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
@@ -1024,7 +1023,6 @@ func (cc *ClientConn) doDescribe(u *base.URL) (Tracks, *base.URL, *base.Response
|
|||||||
res.StatusCode >= base.StatusMovedPermanently &&
|
res.StatusCode >= base.StatusMovedPermanently &&
|
||||||
res.StatusCode <= base.StatusUseProxy &&
|
res.StatusCode <= base.StatusUseProxy &&
|
||||||
len(res.Header["Location"]) == 1 {
|
len(res.Header["Location"]) == 1 {
|
||||||
|
|
||||||
cc.reset(false)
|
cc.reset(false)
|
||||||
|
|
||||||
u, err := base.ParseURL(res.Header["Location"][0])
|
u, err := base.ParseURL(res.Header["Location"][0])
|
||||||
@@ -1303,7 +1301,6 @@ func (cc *ClientConn) doSetup(
|
|||||||
if res.StatusCode == base.StatusUnsupportedTransport &&
|
if res.StatusCode == base.StatusUnsupportedTransport &&
|
||||||
cc.protocol == nil &&
|
cc.protocol == nil &&
|
||||||
cc.c.Transport == nil {
|
cc.c.Transport == nil {
|
||||||
|
|
||||||
v := TransportTCP
|
v := TransportTCP
|
||||||
cc.protocol = &v
|
cc.protocol = &v
|
||||||
|
|
||||||
|
@@ -65,7 +65,6 @@ func (t *RangeSMPTETime) read(s string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
t.Subframe = uint(tmp)
|
t.Subframe = uint(tmp)
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
tmp, err := strconv.ParseUint(parts[0], 10, 64)
|
tmp, err := strconv.ParseUint(parts[0], 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@@ -18,6 +18,44 @@ import (
|
|||||||
"github.com/aler9/gortsplib/pkg/headers"
|
"github.com/aler9/gortsplib/pkg/headers"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func invalidURLAnnounceReq(t *testing.T, control string) base.Request {
|
||||||
|
return base.Request{
|
||||||
|
Method: base.Announce,
|
||||||
|
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
||||||
|
Header: base.Header{
|
||||||
|
"CSeq": base.HeaderValue{"1"},
|
||||||
|
"Content-Type": base.HeaderValue{"application/sdp"},
|
||||||
|
},
|
||||||
|
Body: func() []byte {
|
||||||
|
track, err := NewTrackH264(96, &TrackConfigH264{[]byte{0x01, 0x02, 0x03, 0x04}, []byte{0x01, 0x02, 0x03, 0x04}})
|
||||||
|
require.NoError(t, err)
|
||||||
|
track.Media.Attributes = append(track.Media.Attributes, psdp.Attribute{
|
||||||
|
Key: "control",
|
||||||
|
Value: control,
|
||||||
|
})
|
||||||
|
|
||||||
|
sout := &psdp.SessionDescription{
|
||||||
|
SessionName: psdp.SessionName("Stream"),
|
||||||
|
Origin: psdp.Origin{
|
||||||
|
Username: "-",
|
||||||
|
NetworkType: "IN",
|
||||||
|
AddressType: "IP4",
|
||||||
|
UnicastAddress: "127.0.0.1",
|
||||||
|
},
|
||||||
|
TimeDescriptions: []psdp.TimeDescription{
|
||||||
|
{Timing: psdp.Timing{0, 0}}, //nolint:govet
|
||||||
|
},
|
||||||
|
MediaDescriptions: []*psdp.MediaDescription{
|
||||||
|
track.Media,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
byts, _ := sout.Marshal()
|
||||||
|
return byts
|
||||||
|
}(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestServerPublishErrorAnnounce(t *testing.T) {
|
func TestServerPublishErrorAnnounce(t *testing.T) {
|
||||||
for _, ca := range []struct {
|
for _, ca := range []struct {
|
||||||
name string
|
name string
|
||||||
@@ -92,119 +130,17 @@ func TestServerPublishErrorAnnounce(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"invalid URL 1",
|
"invalid URL 1",
|
||||||
base.Request{
|
invalidURLAnnounceReq(t, "rtsp:// aaaaa"),
|
||||||
Method: base.Announce,
|
|
||||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
|
||||||
Header: base.Header{
|
|
||||||
"CSeq": base.HeaderValue{"1"},
|
|
||||||
"Content-Type": base.HeaderValue{"application/sdp"},
|
|
||||||
},
|
|
||||||
Body: func() []byte {
|
|
||||||
track, err := NewTrackH264(96, &TrackConfigH264{[]byte{0x01, 0x02, 0x03, 0x04}, []byte{0x01, 0x02, 0x03, 0x04}})
|
|
||||||
require.NoError(t, err)
|
|
||||||
track.Media.Attributes = append(track.Media.Attributes, psdp.Attribute{
|
|
||||||
Key: "control",
|
|
||||||
Value: "rtsp:// aaaaa",
|
|
||||||
})
|
|
||||||
|
|
||||||
sout := &psdp.SessionDescription{
|
|
||||||
SessionName: psdp.SessionName("Stream"),
|
|
||||||
Origin: psdp.Origin{
|
|
||||||
Username: "-",
|
|
||||||
NetworkType: "IN",
|
|
||||||
AddressType: "IP4",
|
|
||||||
UnicastAddress: "127.0.0.1",
|
|
||||||
},
|
|
||||||
TimeDescriptions: []psdp.TimeDescription{
|
|
||||||
{Timing: psdp.Timing{0, 0}}, //nolint:govet
|
|
||||||
},
|
|
||||||
MediaDescriptions: []*psdp.MediaDescription{
|
|
||||||
track.Media,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
byts, _ := sout.Marshal()
|
|
||||||
return byts
|
|
||||||
}(),
|
|
||||||
},
|
|
||||||
"unable to generate track URL",
|
"unable to generate track URL",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"invalid URL 2",
|
"invalid URL 2",
|
||||||
base.Request{
|
invalidURLAnnounceReq(t, "rtsp://host"),
|
||||||
Method: base.Announce,
|
|
||||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
|
||||||
Header: base.Header{
|
|
||||||
"CSeq": base.HeaderValue{"1"},
|
|
||||||
"Content-Type": base.HeaderValue{"application/sdp"},
|
|
||||||
},
|
|
||||||
Body: func() []byte {
|
|
||||||
track, err := NewTrackH264(96, &TrackConfigH264{[]byte{0x01, 0x02, 0x03, 0x04}, []byte{0x01, 0x02, 0x03, 0x04}})
|
|
||||||
require.NoError(t, err)
|
|
||||||
track.Media.Attributes = append(track.Media.Attributes, psdp.Attribute{
|
|
||||||
Key: "control",
|
|
||||||
Value: "rtsp://host",
|
|
||||||
})
|
|
||||||
|
|
||||||
sout := &psdp.SessionDescription{
|
|
||||||
SessionName: psdp.SessionName("Stream"),
|
|
||||||
Origin: psdp.Origin{
|
|
||||||
Username: "-",
|
|
||||||
NetworkType: "IN",
|
|
||||||
AddressType: "IP4",
|
|
||||||
UnicastAddress: "127.0.0.1",
|
|
||||||
},
|
|
||||||
TimeDescriptions: []psdp.TimeDescription{
|
|
||||||
{Timing: psdp.Timing{0, 0}}, //nolint:govet
|
|
||||||
},
|
|
||||||
MediaDescriptions: []*psdp.MediaDescription{
|
|
||||||
track.Media,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
byts, _ := sout.Marshal()
|
|
||||||
return byts
|
|
||||||
}(),
|
|
||||||
},
|
|
||||||
"invalid track URL (rtsp://localhost:8554)",
|
"invalid track URL (rtsp://localhost:8554)",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"invalid URL 3",
|
"invalid URL 3",
|
||||||
base.Request{
|
invalidURLAnnounceReq(t, "rtsp://host/otherpath"),
|
||||||
Method: base.Announce,
|
|
||||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
|
||||||
Header: base.Header{
|
|
||||||
"CSeq": base.HeaderValue{"1"},
|
|
||||||
"Content-Type": base.HeaderValue{"application/sdp"},
|
|
||||||
},
|
|
||||||
Body: func() []byte {
|
|
||||||
track, err := NewTrackH264(96, &TrackConfigH264{[]byte{0x01, 0x02, 0x03, 0x04}, []byte{0x01, 0x02, 0x03, 0x04}})
|
|
||||||
require.NoError(t, err)
|
|
||||||
track.Media.Attributes = append(track.Media.Attributes, psdp.Attribute{
|
|
||||||
Key: "control",
|
|
||||||
Value: "rtsp://host/otherpath",
|
|
||||||
})
|
|
||||||
|
|
||||||
sout := &psdp.SessionDescription{
|
|
||||||
SessionName: psdp.SessionName("Stream"),
|
|
||||||
Origin: psdp.Origin{
|
|
||||||
Username: "-",
|
|
||||||
NetworkType: "IN",
|
|
||||||
AddressType: "IP4",
|
|
||||||
UnicastAddress: "127.0.0.1",
|
|
||||||
},
|
|
||||||
TimeDescriptions: []psdp.TimeDescription{
|
|
||||||
{Timing: psdp.Timing{0, 0}}, //nolint:govet
|
|
||||||
},
|
|
||||||
MediaDescriptions: []*psdp.MediaDescription{
|
|
||||||
track.Media,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
byts, _ := sout.Marshal()
|
|
||||||
return byts
|
|
||||||
}(),
|
|
||||||
},
|
|
||||||
"invalid track path: must begin with 'teststream', but is 'otherpath'",
|
"invalid track path: must begin with 'teststream', but is 'otherpath'",
|
||||||
},
|
},
|
||||||
} {
|
} {
|
||||||
@@ -847,7 +783,6 @@ func TestServerPublish(t *testing.T) {
|
|||||||
IP: net.ParseIP("127.0.0.1"),
|
IP: net.ParseIP("127.0.0.1"),
|
||||||
Port: th.ServerPorts[1],
|
Port: th.ServerPorts[1],
|
||||||
})
|
})
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
err = base.InterleavedFrame{
|
err = base.InterleavedFrame{
|
||||||
Channel: 0,
|
Channel: 0,
|
||||||
@@ -873,7 +808,6 @@ func TestServerPublish(t *testing.T) {
|
|||||||
n, _, err := l2.ReadFrom(buf)
|
n, _, err := l2.ReadFrom(buf)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, []byte{0x09, 0x0A, 0x0B, 0x0C}, buf[:n])
|
require.Equal(t, []byte{0x09, 0x0A, 0x0B, 0x0C}, buf[:n])
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
var f base.InterleavedFrame
|
var f base.InterleavedFrame
|
||||||
f.Payload = make([]byte, 2048)
|
f.Payload = make([]byte, 2048)
|
||||||
|
@@ -142,7 +142,9 @@ func TestServerReadSetupPath(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestServerReadErrorSetupDifferentPaths(t *testing.T) {
|
func TestServerReadSetupErrors(t *testing.T) {
|
||||||
|
for _, ca := range []string{"different paths", "double setup"} {
|
||||||
|
t.Run(ca, func(t *testing.T) {
|
||||||
connClosed := make(chan struct{})
|
connClosed := make(chan struct{})
|
||||||
|
|
||||||
track, err := NewTrackH264(96, &TrackConfigH264{[]byte{0x01, 0x02, 0x03, 0x04}, []byte{0x01, 0x02, 0x03, 0x04}})
|
track, err := NewTrackH264(96, &TrackConfigH264{[]byte{0x01, 0x02, 0x03, 0x04}, []byte{0x01, 0x02, 0x03, 0x04}})
|
||||||
@@ -153,7 +155,11 @@ func TestServerReadErrorSetupDifferentPaths(t *testing.T) {
|
|||||||
s := &Server{
|
s := &Server{
|
||||||
Handler: &testServerHandler{
|
Handler: &testServerHandler{
|
||||||
onConnClose: func(ctx *ServerHandlerOnConnCloseCtx) {
|
onConnClose: func(ctx *ServerHandlerOnConnCloseCtx) {
|
||||||
|
if ca == "different paths" {
|
||||||
require.Equal(t, "can't setup tracks with different paths", ctx.Error.Error())
|
require.Equal(t, "can't setup tracks with different paths", ctx.Error.Error())
|
||||||
|
} else {
|
||||||
|
require.Equal(t, "track 0 has already been setup", ctx.Error.Error())
|
||||||
|
}
|
||||||
close(connClosed)
|
close(connClosed)
|
||||||
},
|
},
|
||||||
onSetup: func(ctx *ServerHandlerOnSetupCtx) (*base.Response, *ServerStream, error) {
|
onSetup: func(ctx *ServerHandlerOnSetupCtx) (*base.Response, *ServerStream, error) {
|
||||||
@@ -186,6 +192,7 @@ func TestServerReadErrorSetupDifferentPaths(t *testing.T) {
|
|||||||
InterleavedIDs: &[2]int{0, 1},
|
InterleavedIDs: &[2]int{0, 1},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ca == "different paths" {
|
||||||
res, err := writeReqReadRes(bconn, base.Request{
|
res, err := writeReqReadRes(bconn, base.Request{
|
||||||
Method: base.Setup,
|
Method: base.Setup,
|
||||||
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
||||||
@@ -210,54 +217,7 @@ func TestServerReadErrorSetupDifferentPaths(t *testing.T) {
|
|||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, base.StatusBadRequest, res.StatusCode)
|
require.Equal(t, base.StatusBadRequest, res.StatusCode)
|
||||||
|
} else {
|
||||||
<-connClosed
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestServerReadErrorSetupTrackTwice(t *testing.T) {
|
|
||||||
connClosed := make(chan struct{})
|
|
||||||
|
|
||||||
track, err := NewTrackH264(96, &TrackConfigH264{[]byte{0x01, 0x02, 0x03, 0x04}, []byte{0x01, 0x02, 0x03, 0x04}})
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
stream := NewServerStream(Tracks{track})
|
|
||||||
|
|
||||||
s := &Server{
|
|
||||||
Handler: &testServerHandler{
|
|
||||||
onConnClose: func(ctx *ServerHandlerOnConnCloseCtx) {
|
|
||||||
require.Equal(t, "track 0 has already been setup", ctx.Error.Error())
|
|
||||||
close(connClosed)
|
|
||||||
},
|
|
||||||
onSetup: func(ctx *ServerHandlerOnSetupCtx) (*base.Response, *ServerStream, error) {
|
|
||||||
return &base.Response{
|
|
||||||
StatusCode: base.StatusOK,
|
|
||||||
}, stream, nil
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
err = s.Start("localhost:8554")
|
|
||||||
require.NoError(t, err)
|
|
||||||
defer s.Close()
|
|
||||||
|
|
||||||
conn, err := net.Dial("tcp", "localhost:8554")
|
|
||||||
require.NoError(t, err)
|
|
||||||
defer conn.Close()
|
|
||||||
bconn := bufio.NewReadWriter(bufio.NewReader(conn), bufio.NewWriter(conn))
|
|
||||||
|
|
||||||
th := &headers.Transport{
|
|
||||||
Protocol: headers.TransportProtocolTCP,
|
|
||||||
Delivery: func() *headers.TransportDelivery {
|
|
||||||
v := headers.TransportDeliveryUnicast
|
|
||||||
return &v
|
|
||||||
}(),
|
|
||||||
Mode: func() *headers.TransportMode {
|
|
||||||
v := headers.TransportModePlay
|
|
||||||
return &v
|
|
||||||
}(),
|
|
||||||
InterleavedIDs: &[2]int{0, 1},
|
|
||||||
}
|
|
||||||
|
|
||||||
res, err := writeReqReadRes(bconn, base.Request{
|
res, err := writeReqReadRes(bconn, base.Request{
|
||||||
Method: base.Setup,
|
Method: base.Setup,
|
||||||
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
||||||
@@ -282,8 +242,11 @@ func TestServerReadErrorSetupTrackTwice(t *testing.T) {
|
|||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, base.StatusBadRequest, res.StatusCode)
|
require.Equal(t, base.StatusBadRequest, res.StatusCode)
|
||||||
|
}
|
||||||
|
|
||||||
<-connClosed
|
<-connClosed
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestServerRead(t *testing.T) {
|
func TestServerRead(t *testing.T) {
|
||||||
|
@@ -409,7 +409,6 @@ func TestServerHighLevelPublishRead(t *testing.T) {
|
|||||||
cert, err := tls.X509KeyPair(serverCert, serverKey)
|
cert, err := tls.X509KeyPair(serverCert, serverKey)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
s.TLSConfig = &tls.Config{Certificates: []tls.Certificate{cert}}
|
s.TLSConfig = &tls.Config{Certificates: []tls.Certificate{cert}}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
proto = "rtsp"
|
proto = "rtsp"
|
||||||
s.UDPRTPAddress = "127.0.0.1:8000"
|
s.UDPRTPAddress = "127.0.0.1:8000"
|
||||||
|
@@ -191,7 +191,6 @@ func (sc *ServerConn) run() {
|
|||||||
return liberrors.ErrServerTerminated{}
|
return liberrors.ErrServerTerminated{}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
err := req.Read(sc.br)
|
err := req.Read(sc.br)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -522,7 +521,6 @@ func (sc *ServerConn) handleRequestOuter(req *base.Request) error {
|
|||||||
// start background write
|
// start background write
|
||||||
sc.tcpFrameBackgroundWriteDone = make(chan struct{})
|
sc.tcpFrameBackgroundWriteDone = make(chan struct{})
|
||||||
go sc.tcpFrameBackgroundWrite()
|
go sc.tcpFrameBackgroundWrite()
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if sc.tcpFrameIsRecording {
|
if sc.tcpFrameIsRecording {
|
||||||
sc.tcpFrameTimeout = false
|
sc.tcpFrameTimeout = false
|
||||||
|
@@ -294,7 +294,6 @@ func (ss *ServerSession) run() {
|
|||||||
if (ss.state != ServerSessionStatePublish &&
|
if (ss.state != ServerSessionStatePublish &&
|
||||||
ss.state != ServerSessionStateRead) ||
|
ss.state != ServerSessionStateRead) ||
|
||||||
*ss.setuppedTransport == TransportTCP {
|
*ss.setuppedTransport == TransportTCP {
|
||||||
|
|
||||||
// close if there are no associated connections
|
// close if there are no associated connections
|
||||||
if len(ss.conns) == 0 {
|
if len(ss.conns) == 0 {
|
||||||
return liberrors.ErrServerSessionNoAssociatedConns{}
|
return liberrors.ErrServerSessionNoAssociatedConns{}
|
||||||
|
Reference in New Issue
Block a user