diff --git a/clientconn.go b/clientconn.go index 2782aabc..93ebc772 100644 --- a/clientconn.go +++ b/clientconn.go @@ -524,7 +524,7 @@ func (c *ClientConn) Setup(mode headers.TransportMode, track *Track, th.ClientPorts = &[2]int{rtpPort, rtcpPort} } else { - th.InterleavedIds = &[2]int{(track.ID * 2), (track.ID * 2) + 1} + th.InterleavedIDs = &[2]int{(track.ID * 2), (track.ID * 2) + 1} } trackURL, err := track.URL() @@ -605,11 +605,11 @@ func (c *ClientConn) Setup(mode headers.TransportMode, track *Track, } } - } else if thRes.InterleavedIds == nil || - thRes.InterleavedIds[0] != th.InterleavedIds[0] || - thRes.InterleavedIds[1] != th.InterleavedIds[1] { + } else if thRes.InterleavedIDs == nil || + thRes.InterleavedIDs[0] != th.InterleavedIDs[0] || + thRes.InterleavedIDs[1] != th.InterleavedIDs[1] { return nil, fmt.Errorf("transport header does not have interleaved ids %v (%s)", - *th.InterleavedIds, res.Header["Transport"]) + *th.InterleavedIDs, res.Header["Transport"]) } clockRate, _ := track.ClockRate() diff --git a/clientconnpublish_test.go b/clientconnpublish_test.go index b19572eb..74eda5b7 100644 --- a/clientconnpublish_test.go +++ b/clientconnpublish_test.go @@ -80,7 +80,7 @@ func TestClientConnPublishSerial(t *testing.T) { } else { th.Protocol = StreamProtocolTCP - th.InterleavedIds = inTH.InterleavedIds + th.InterleavedIDs = inTH.InterleavedIDs } err = base.Response{ @@ -211,7 +211,7 @@ func TestClientConnPublishParallel(t *testing.T) { } else { th.Protocol = StreamProtocolTCP - th.InterleavedIds = inTH.InterleavedIds + th.InterleavedIDs = inTH.InterleavedIDs } err = base.Response{ @@ -354,7 +354,7 @@ func TestClientConnPublishPauseSerial(t *testing.T) { } else { th.Protocol = StreamProtocolTCP - th.InterleavedIds = inTH.InterleavedIds + th.InterleavedIDs = inTH.InterleavedIDs } err = base.Response{ @@ -514,7 +514,7 @@ func TestClientConnPublishPauseParallel(t *testing.T) { } else { th.Protocol = StreamProtocolTCP - th.InterleavedIds = inTH.InterleavedIds + th.InterleavedIDs = inTH.InterleavedIDs } err = base.Response{ diff --git a/clientconnread_test.go b/clientconnread_test.go index 84f2d305..7e5e08df 100644 --- a/clientconnread_test.go +++ b/clientconnread_test.go @@ -134,7 +134,7 @@ func TestClientConnRead(t *testing.T) { return &v }(), ClientPorts: th.ClientPorts, - InterleavedIds: &[2]int{0, 1}, + InterleavedIDs: &[2]int{0, 1}, }.Write(), }, }.Write(bconn.Writer) @@ -395,7 +395,7 @@ func TestClientConnReadAutomaticProtocol(t *testing.T) { v := base.StreamDeliveryUnicast return &v }(), - InterleavedIds: &[2]int{0, 1}, + InterleavedIDs: &[2]int{0, 1}, }.Write(), }, }.Write(bconn.Writer) @@ -690,7 +690,7 @@ func TestClientConnReadPause(t *testing.T) { } else { th.Protocol = StreamProtocolTCP - th.InterleavedIds = inTH.InterleavedIds + th.InterleavedIDs = inTH.InterleavedIDs } err = base.Response{ diff --git a/pkg/headers/transport.go b/pkg/headers/transport.go index a85d33d6..bae24e3a 100644 --- a/pkg/headers/transport.go +++ b/pkg/headers/transport.go @@ -55,7 +55,7 @@ type Transport struct { ServerPorts *[2]int // (optional) interleaved frame ids - InterleavedIds *[2]int + InterleavedIDs *[2]int // (optional) mode Mode *TransportMode @@ -170,7 +170,7 @@ func (h *Transport) Read(v base.HeaderValue) error { if err != nil { return err } - h.InterleavedIds = ports + h.InterleavedIDs = ports case strings.HasPrefix(t, "mode="): str := strings.ToLower(t[len("mode="):]) @@ -227,8 +227,8 @@ func (h Transport) Write() base.HeaderValue { rets = append(rets, "server_port="+strconv.FormatInt(int64(ports[0]), 10)+"-"+strconv.FormatInt(int64(ports[1]), 10)) } - if h.InterleavedIds != nil { - ports := *h.InterleavedIds + if h.InterleavedIDs != nil { + ports := *h.InterleavedIDs rets = append(rets, "interleaved="+strconv.FormatInt(int64(ports[0]), 10)+"-"+strconv.FormatInt(int64(ports[1]), 10)) } diff --git a/pkg/headers/transport_test.go b/pkg/headers/transport_test.go index 0fef2846..3eca0e88 100644 --- a/pkg/headers/transport_test.go +++ b/pkg/headers/transport_test.go @@ -72,7 +72,7 @@ var casesTransport = []struct { base.HeaderValue{`RTP/AVP/TCP;interleaved=0-1`}, Transport{ Protocol: base.StreamProtocolTCP, - InterleavedIds: &[2]int{0, 1}, + InterleavedIDs: &[2]int{0, 1}, }, }, { diff --git a/serverconn.go b/serverconn.go index 0d560578..dbb5fac1 100644 --- a/serverconn.go +++ b/serverconn.go @@ -3,7 +3,6 @@ package gortsplib import ( "bufio" "crypto/tls" - "errors" "fmt" "net" "strconv" @@ -25,11 +24,166 @@ const ( serverConnReceiverReportInterval = 10 * time.Second ) -// server errors. -var ( - ErrServerTeardown = errors.New("teardown") - errServerCSeqMissing = errors.New("CSeq is missing") -) +// ErrServerTeardown is returned in case of a teardown request. +type ErrServerTeardown struct{} + +// Error implements the error interface. +func (e ErrServerTeardown) Error() string { + return "teardown" +} + +// ErrServerCSeqMissing is returned in case the CSeq is missing. +type ErrServerCSeqMissing struct{} + +// Error implements the error interface. +func (e ErrServerCSeqMissing) Error() string { + return "CSeq is missing" +} + +// ErrServerWrongState is returned in case of a wrong client state. +type ErrServerWrongState struct { + allowedList []ServerConnState + state ServerConnState +} + +// Error implements the error interface. +func (e ErrServerWrongState) Error() string { + return fmt.Sprintf("must be in state %v, while is in state %v", + e.allowedList, e.state) +} + +// ErrServerNoPath is returned in case the path can't be retrieved. +type ErrServerNoPath struct{} + +// Error implements the error interface. +func (e ErrServerNoPath) Error() string { + return "RTSP path can't be retrieved" +} + +// ErrServerContentTypeMissing is returned in case the Content-Type header is missing. +type ErrServerContentTypeMissing struct{} + +// Error implements the error interface. +func (e ErrServerContentTypeMissing) Error() string { + return "Content-Type header is missing" +} + +// ErrServerContentTypeUnsupported is returned in case the Content-Type header is unsupported. +type ErrServerContentTypeUnsupported struct { + ct base.HeaderValue +} + +// Error implements the error interface. +func (e ErrServerContentTypeUnsupported) Error() string { + return fmt.Sprintf("unsupported Content-Type header '%s'", e.ct) +} + +// ErrServerSDPInvalid is returned in case the SDP is invalid. +type ErrServerSDPInvalid struct { + err error +} + +// Error implements the error interface. +func (e ErrServerSDPInvalid) Error() string { + return fmt.Sprintf("invalid SDP: %v", e.err) +} + +// ErrServerSDPNoTracksDefined is returned in case the SDP has no tracks defined. +type ErrServerSDPNoTracksDefined struct{} + +// Error implements the error interface. +func (e ErrServerSDPNoTracksDefined) Error() string { + return "no tracks defined in the SDP" +} + +// ErrServerTransportHeaderInvalid is returned in case the transport header is invalid. +type ErrServerTransportHeaderInvalid struct { + err error +} + +// Error implements the error interface. +func (e ErrServerTransportHeaderInvalid) Error() string { + return fmt.Sprintf("invalid transport header: %v", e.err) +} + +// ErrServerTrackAlreadySetup is returned in case a track has already been setup. +type ErrServerTrackAlreadySetup struct { + trackID int +} + +// Error implements the error interface. +func (e ErrServerTrackAlreadySetup) Error() string { + return fmt.Sprintf("track %d has already been setup", e.trackID) +} + +// ErrServerTransportHeaderWrongMode is returned in case the transport header contains a wrong mode. +type ErrServerTransportHeaderWrongMode struct { + mode *headers.TransportMode +} + +// Error implements the error interface. +func (e ErrServerTransportHeaderWrongMode) Error() string { + return fmt.Sprintf("transport header contains a wrong mode (%v)", e.mode) +} + +// ErrServerTransportHeaderNoClientPorts is returned in case the transport header doesn't contain client ports. +type ErrServerTransportHeaderNoClientPorts struct{} + +// Error implements the error interface. +func (e ErrServerTransportHeaderNoClientPorts) Error() string { + return "transport header does not contain client ports" +} + +// ErrServerTransportHeaderNoInterleavedIDs is returned in case the transport header doesn't contain interleaved IDs. +type ErrServerTransportHeaderNoInterleavedIDs struct{} + +// Error implements the error interface. +func (e ErrServerTransportHeaderNoInterleavedIDs) Error() string { + return "transport header does not contain interleaved ids" +} + +// ErrServerTransportHeaderWrongInterleavedIDs is returned in case the transport header contains wrong interleaved IDs. +type ErrServerTransportHeaderWrongInterleavedIDs struct { + expected [2]int + value [2]int +} + +// Error implements the error interface. +func (e ErrServerTransportHeaderWrongInterleavedIDs) Error() string { + return fmt.Sprintf("wrong interleaved ids, expected %v, got %v", e.expected, e.value) +} + +// ErrServerTracksDifferentProtocols is returned in case the client is trying to setup tracks with different protocols. +type ErrServerTracksDifferentProtocols struct{} + +// Error implements the error interface. +func (e ErrServerTracksDifferentProtocols) Error() string { + return "can't setup tracks with different protocols" +} + +// ErrServerNoTracksSetup is returned in case no tracks have been setup. +type ErrServerNoTracksSetup struct{} + +// Error implements the error interface. +func (e ErrServerNoTracksSetup) Error() string { + return "no tracks have been setup" +} + +// ErrServerNotAllAnnouncedTracksSetup is returned in case not all announced tracks have been setup. +type ErrServerNotAllAnnouncedTracksSetup struct{} + +// Error implements the error interface. +func (e ErrServerNotAllAnnouncedTracksSetup) Error() string { + return "not all announced tracks have been setup" +} + +// ErrServerNoUDPPacketsRecently is returned when no UDP packets have been received recently. +type ErrServerNoUDPPacketsRecently struct{} + +// Error implements the error interface. +func (e ErrServerNoUDPPacketsRecently) Error() string { + return "no UDP packets received recently (maybe there's a firewall/NAT in between)" +} func stringsReverseIndex(s, substr string) int { for i := len(s) - 1 - len(substr); i >= 0; i-- { @@ -47,7 +201,7 @@ func setupGetTrackIDPathQuery(url *base.URL, pathAndQuery, ok := url.RTSPPathAndQuery() if !ok { - return 0, "", "", fmt.Errorf("invalid URL (%s)", url) + return 0, "", "", ErrServerNoPath{} } if thMode == nil || *thMode == headers.TransportModePlay { @@ -356,9 +510,6 @@ func (sc *ServerConn) backgroundWrite() { case *base.Response: sc.nconn.SetWriteDeadline(time.Now().Add(sc.conf.WriteTimeout)) w.Write(sc.bw) - - default: - panic(fmt.Errorf("unsupported type: %T", what)) } } } @@ -374,8 +525,7 @@ func (sc *ServerConn) checkState(allowed map[ServerConnState]struct{}) error { allowedList[i] = a i++ } - return fmt.Errorf("must be in state %v, while is in state %v", - allowedList, sc.state) + return ErrServerWrongState{allowedList, sc.state} } // NetConn returns the underlying net.Conn. @@ -467,7 +617,7 @@ func (sc *ServerConn) handleRequest(req *base.Request) (*base.Response, error) { return &base.Response{ StatusCode: base.StatusBadRequest, Header: base.Header{}, - }, errServerCSeqMissing + }, ErrServerCSeqMissing{} } if sc.readHandlers.OnRequest != nil { @@ -481,7 +631,7 @@ func (sc *ServerConn) handleRequest(req *base.Request) (*base.Response, error) { if !ok { return &base.Response{ StatusCode: base.StatusBadRequest, - }, fmt.Errorf("invalid URL (%s)", req.URL) + }, ErrServerNoPath{} } path, query := base.PathSplitQuery(pathAndQuery) @@ -540,7 +690,7 @@ func (sc *ServerConn) handleRequest(req *base.Request) (*base.Response, error) { if !ok { return &base.Response{ StatusCode: base.StatusBadRequest, - }, fmt.Errorf("invalid URL (%s)", req.URL) + }, ErrServerNoPath{} } path, query := base.PathSplitQuery(pathAndQuery) @@ -579,33 +729,33 @@ func (sc *ServerConn) handleRequest(req *base.Request) (*base.Response, error) { if !ok || len(ct) != 1 { return &base.Response{ StatusCode: base.StatusBadRequest, - }, errors.New("Content-Type header is missing") + }, ErrServerContentTypeMissing{} } if ct[0] != "application/sdp" { return &base.Response{ StatusCode: base.StatusBadRequest, - }, fmt.Errorf("unsupported Content-Type '%s'", ct) + }, ErrServerContentTypeUnsupported{ct} } tracks, err := ReadTracks(req.Body, req.URL) if err != nil { return &base.Response{ StatusCode: base.StatusBadRequest, - }, fmt.Errorf("invalid SDP: %s", err) + }, ErrServerSDPInvalid{err} } if len(tracks) == 0 { return &base.Response{ StatusCode: base.StatusBadRequest, - }, errors.New("no tracks defined") + }, ErrServerSDPNoTracksDefined{} } pathAndQuery, ok := req.URL.RTSPPath() if !ok { return &base.Response{ StatusCode: base.StatusBadRequest, - }, fmt.Errorf("invalid URL (%s)", req.URL) + }, ErrServerNoPath{} } path, query := base.PathSplitQuery(pathAndQuery) @@ -679,7 +829,7 @@ func (sc *ServerConn) handleRequest(req *base.Request) (*base.Response, error) { if err != nil { return &base.Response{ StatusCode: base.StatusBadRequest, - }, fmt.Errorf("transport header: %s", err) + }, ErrServerTransportHeaderInvalid{err} } if th.Delivery != nil && *th.Delivery == base.StreamDeliveryMulticast { @@ -699,7 +849,7 @@ func (sc *ServerConn) handleRequest(req *base.Request) (*base.Response, error) { if _, ok := sc.setuppedTracks[trackID]; ok { return &base.Response{ StatusCode: base.StatusBadRequest, - }, fmt.Errorf("track %d has already been setup", trackID) + }, ErrServerTrackAlreadySetup{trackID} } switch sc.state { @@ -707,14 +857,14 @@ func (sc *ServerConn) handleRequest(req *base.Request) (*base.Response, error) { if th.Mode != nil && *th.Mode != headers.TransportModePlay { return &base.Response{ StatusCode: base.StatusBadRequest, - }, fmt.Errorf("transport header must contain mode=play or not contain a mode") + }, ErrServerTransportHeaderWrongMode{th.Mode} } default: // record if th.Mode == nil || *th.Mode != headers.TransportModeRecord { return &base.Response{ StatusCode: base.StatusBadRequest, - }, fmt.Errorf("transport header does not contain mode=record") + }, ErrServerTransportHeaderWrongMode{th.Mode} } } @@ -728,29 +878,29 @@ func (sc *ServerConn) handleRequest(req *base.Request) (*base.Response, error) { if th.ClientPorts == nil { return &base.Response{ StatusCode: base.StatusBadRequest, - }, fmt.Errorf("transport header does not have valid client ports (%v)", req.Header["Transport"]) + }, ErrServerTransportHeaderNoClientPorts{} } } else { - if th.InterleavedIds == nil { + if th.InterleavedIDs == nil { return &base.Response{ StatusCode: base.StatusBadRequest, - }, fmt.Errorf("transport header does not contain the interleaved field") + }, ErrServerTransportHeaderNoInterleavedIDs{} } - if th.InterleavedIds[0] != (trackID*2) || - th.InterleavedIds[1] != (1+trackID*2) { + if th.InterleavedIDs[0] != (trackID*2) || + th.InterleavedIDs[1] != (1+trackID*2) { return &base.Response{ StatusCode: base.StatusBadRequest, - }, fmt.Errorf("wrong interleaved ids, expected [%v %v], got %v", - (trackID * 2), (1 + trackID*2), *th.InterleavedIds) + }, ErrServerTransportHeaderWrongInterleavedIDs{ + [2]int{(trackID * 2), (1 + trackID*2)}, *th.InterleavedIDs} } } if sc.setupProtocol != nil && *sc.setupProtocol != th.Protocol { return &base.Response{ StatusCode: base.StatusBadRequest, - }, fmt.Errorf("can't setup tracks with different protocols") + }, ErrServerTracksDifferentProtocols{} } res, err := sc.readHandlers.OnSetup(&ServerConnSetupCtx{ @@ -795,7 +945,7 @@ func (sc *ServerConn) handleRequest(req *base.Request) (*base.Response, error) { } res.Header["Transport"] = headers.Transport{ Protocol: StreamProtocolTCP, - InterleavedIds: th.InterleavedIds, + InterleavedIDs: th.InterleavedIDs, }.Write() } } @@ -837,14 +987,14 @@ func (sc *ServerConn) handleRequest(req *base.Request) (*base.Response, error) { if len(sc.setuppedTracks) == 0 { return &base.Response{ StatusCode: base.StatusBadRequest, - }, fmt.Errorf("no tracks have been setup") + }, ErrServerNoTracksSetup{} } pathAndQuery, ok := req.URL.RTSPPath() if !ok { return &base.Response{ StatusCode: base.StatusBadRequest, - }, fmt.Errorf("invalid URL (%s)", req.URL) + }, ErrServerNoPath{} } // path can end with a slash due to Content-Base, remove it @@ -880,20 +1030,20 @@ func (sc *ServerConn) handleRequest(req *base.Request) (*base.Response, error) { if len(sc.setuppedTracks) == 0 { return &base.Response{ StatusCode: base.StatusBadRequest, - }, fmt.Errorf("no tracks have been setup") + }, ErrServerNoTracksSetup{} } if len(sc.setuppedTracks) != len(sc.announcedTracks) { return &base.Response{ StatusCode: base.StatusBadRequest, - }, fmt.Errorf("not all announced tracks have been setup") + }, ErrServerNotAllAnnouncedTracksSetup{} } pathAndQuery, ok := req.URL.RTSPPath() if !ok { return &base.Response{ StatusCode: base.StatusBadRequest, - }, fmt.Errorf("invalid URL (%s)", req.URL) + }, ErrServerNoPath{} } // path can end with a slash due to Content-Base, remove it @@ -933,7 +1083,7 @@ func (sc *ServerConn) handleRequest(req *base.Request) (*base.Response, error) { if !ok { return &base.Response{ StatusCode: base.StatusBadRequest, - }, fmt.Errorf("invalid URL (%s)", req.URL) + }, ErrServerNoPath{} } // path can end with a slash due to Content-Base, remove it @@ -968,7 +1118,7 @@ func (sc *ServerConn) handleRequest(req *base.Request) (*base.Response, error) { if !ok { return &base.Response{ StatusCode: base.StatusBadRequest, - }, fmt.Errorf("invalid URL (%s)", req.URL) + }, ErrServerNoPath{} } path, query := base.PathSplitQuery(pathAndQuery) @@ -995,7 +1145,7 @@ func (sc *ServerConn) handleRequest(req *base.Request) (*base.Response, error) { if !ok { return &base.Response{ StatusCode: base.StatusBadRequest, - }, fmt.Errorf("invalid URL (%s)", req.URL) + }, ErrServerNoPath{} } path, query := base.PathSplitQuery(pathAndQuery) @@ -1013,7 +1163,7 @@ func (sc *ServerConn) handleRequest(req *base.Request) (*base.Response, error) { if !ok { return &base.Response{ StatusCode: base.StatusBadRequest, - }, fmt.Errorf("invalid URL (%s)", req.URL) + }, ErrServerNoPath{} } path, query := base.PathSplitQuery(pathAndQuery) @@ -1027,7 +1177,7 @@ func (sc *ServerConn) handleRequest(req *base.Request) (*base.Response, error) { return &base.Response{ StatusCode: base.StatusOK, - }, ErrServerTeardown + }, ErrServerTeardown{} } return &base.Response{ @@ -1046,7 +1196,7 @@ func (sc *ServerConn) backgroundRead() error { } // add cseq - if err != errServerCSeqMissing { + if _, ok := err.(ErrServerCSeqMissing); !ok { res.Header["CSeq"] = req.Header["CSeq"] } @@ -1136,7 +1286,7 @@ outer: err := req.Read(sc.br) if err != nil { if atomic.LoadInt32(&sc.udpTimeout) == 1 { - errRet = fmt.Errorf("no UDP packets received recently (maybe there's a firewall/NAT in between)") + errRet = ErrServerNoUDPPacketsRecently{} } else { errRet = err } diff --git a/serverconn_test.go b/serverconn_test.go index ebc2b9ea..14df2755 100644 --- a/serverconn_test.go +++ b/serverconn_test.go @@ -202,8 +202,10 @@ func (ts *testServ) handleConn(conn *ServerConn) { OnRecord: onRecord, OnFrame: onFrame, }) - if err != io.EOF && err != ErrServerTeardown { - fmt.Println("ERR", err) + if err != io.EOF { + if _, ok := err.(ErrServerTeardown); !ok { + fmt.Println("ERR", err) + } } ts.mutex.Lock() @@ -464,7 +466,8 @@ func TestServerConnTeardownResponse(t *testing.T) { defer conn.Close() err = <-conn.Read(ServerConnReadHandlers{}) - require.Equal(t, ErrServerTeardown, err) + _, ok := err.(ErrServerTeardown) + require.Equal(t, true, ok) }() conn, err := net.Dial("tcp", "localhost:8554") diff --git a/serverconnpublish_test.go b/serverconnpublish_test.go index 8b5d3b2d..4a3d6b25 100644 --- a/serverconnpublish_test.go +++ b/serverconnpublish_test.go @@ -161,7 +161,7 @@ func TestServerConnPublishSetupPath(t *testing.T) { v := headers.TransportModeRecord return &v }(), - InterleavedIds: &[2]int{0, 1}, + InterleavedIDs: &[2]int{0, 1}, } err = base.Request{ @@ -262,7 +262,7 @@ func TestServerConnPublishSetupDifferentPaths(t *testing.T) { v := headers.TransportModeRecord return &v }(), - InterleavedIds: &[2]int{0, 1}, + InterleavedIDs: &[2]int{0, 1}, } err = base.Request{ @@ -360,7 +360,7 @@ func TestServerConnPublishSetupDouble(t *testing.T) { v := headers.TransportModeRecord return &v }(), - InterleavedIds: &[2]int{0, 1}, + InterleavedIDs: &[2]int{0, 1}, } err = base.Request{ @@ -482,7 +482,7 @@ func TestServerConnPublishRecordPartialTracks(t *testing.T) { v := headers.TransportModeRecord return &v }(), - InterleavedIds: &[2]int{0, 1}, + InterleavedIDs: &[2]int{0, 1}, } err = base.Request{ @@ -632,7 +632,7 @@ func TestServerConnPublishReceivePackets(t *testing.T) { inTH.ClientPorts = &[2]int{35466, 35467} } else { inTH.Protocol = StreamProtocolTCP - inTH.InterleavedIds = &[2]int{0, 1} + inTH.InterleavedIDs = &[2]int{0, 1} } err = base.Request{ diff --git a/serverconnread_test.go b/serverconnread_test.go index 08a3e13f..d3c6910f 100644 --- a/serverconnread_test.go +++ b/serverconnread_test.go @@ -104,7 +104,7 @@ func TestServerConnReadSetupPath(t *testing.T) { v := headers.TransportModePlay return &v }(), - InterleavedIds: &[2]int{ca.trackID * 2, (ca.trackID * 2) + 1}, + InterleavedIDs: &[2]int{ca.trackID * 2, (ca.trackID * 2) + 1}, } err = base.Request{ @@ -172,7 +172,7 @@ func TestServerConnReadSetupDifferentPaths(t *testing.T) { v := headers.TransportModePlay return &v }(), - InterleavedIds: &[2]int{0, 1}, + InterleavedIDs: &[2]int{0, 1}, } err = base.Request{ @@ -190,7 +190,7 @@ func TestServerConnReadSetupDifferentPaths(t *testing.T) { require.NoError(t, err) require.Equal(t, base.StatusOK, res.StatusCode) - th.InterleavedIds = &[2]int{2, 3} + th.InterleavedIDs = &[2]int{2, 3} err = base.Request{ Method: base.Setup, @@ -253,7 +253,7 @@ func TestServerConnReadSetupDouble(t *testing.T) { v := headers.TransportModePlay return &v }(), - InterleavedIds: &[2]int{0, 1}, + InterleavedIDs: &[2]int{0, 1}, } err = base.Request{ @@ -271,7 +271,7 @@ func TestServerConnReadSetupDouble(t *testing.T) { require.NoError(t, err) require.Equal(t, base.StatusOK, res.StatusCode) - th.InterleavedIds = &[2]int{2, 3} + th.InterleavedIDs = &[2]int{2, 3} err = base.Request{ Method: base.Setup, @@ -364,7 +364,7 @@ func TestServerConnReadReceivePackets(t *testing.T) { inTH.ClientPorts = &[2]int{35466, 35467} } else { inTH.Protocol = StreamProtocolTCP - inTH.InterleavedIds = &[2]int{0, 1} + inTH.InterleavedIDs = &[2]int{0, 1} } err = base.Request{ @@ -501,7 +501,7 @@ func TestServerConnReadTCPResponseBeforeFrames(t *testing.T) { v := headers.TransportModePlay return &v }(), - InterleavedIds: &[2]int{0, 1}, + InterleavedIDs: &[2]int{0, 1}, }.Write(), }, }.Write(bconn.Writer) @@ -606,7 +606,7 @@ func TestServerConnReadPlayMultiple(t *testing.T) { v := headers.TransportModePlay return &v }(), - InterleavedIds: &[2]int{0, 1}, + InterleavedIDs: &[2]int{0, 1}, }.Write(), }, }.Write(bconn.Writer) @@ -725,7 +725,7 @@ func TestServerConnReadPauseMultiple(t *testing.T) { v := headers.TransportModePlay return &v }(), - InterleavedIds: &[2]int{0, 1}, + InterleavedIDs: &[2]int{0, 1}, }.Write(), }, }.Write(bconn.Writer)