client: check parameters in request urls

This commit is contained in:
aler9
2021-11-03 18:08:16 +01:00
parent 78bfa5d6a8
commit ccb8c932a3
2 changed files with 19 additions and 16 deletions

View File

@@ -201,7 +201,7 @@ func TestClientRead(t *testing.T) {
req, err := readRequest(bconn.Reader) req, err := readRequest(bconn.Reader)
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, base.Options, req.Method) require.Equal(t, base.Options, req.Method)
require.Equal(t, mustParseURL(scheme+"://"+listenIP+":8554/teststream"), req.URL) require.Equal(t, mustParseURL(scheme+"://"+listenIP+":8554/test/stream?param=value"), req.URL)
err = base.Response{ err = base.Response{
StatusCode: base.StatusOK, StatusCode: base.StatusOK,
@@ -218,27 +218,30 @@ func TestClientRead(t *testing.T) {
req, err = readRequest(bconn.Reader) req, err = readRequest(bconn.Reader)
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, base.Describe, req.Method) require.Equal(t, base.Describe, req.Method)
require.Equal(t, mustParseURL(scheme+"://"+listenIP+":8554/teststream"), req.URL) require.Equal(t, mustParseURL(scheme+"://"+listenIP+":8554/test/stream?param=value"), req.URL)
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}})
require.NoError(t, err) require.NoError(t, err)
tracks := cloneAndClearTracks(Tracks{track}) track.Media.Attributes = append(track.Media.Attributes, psdp.Attribute{
Key: "control",
Value: "trackID=0",
})
err = base.Response{ err = base.Response{
StatusCode: base.StatusOK, StatusCode: base.StatusOK,
Header: base.Header{ Header: base.Header{
"Content-Type": base.HeaderValue{"application/sdp"}, "Content-Type": base.HeaderValue{"application/sdp"},
"Content-Base": base.HeaderValue{scheme + "://" + listenIP + ":8554/teststream/"}, "Content-Base": base.HeaderValue{scheme + "://" + listenIP + ":8554/test/stream?param=value/"},
}, },
Body: tracks.Write(), Body: Tracks{track}.Write(),
}.Write(bconn.Writer) }.Write(bconn.Writer)
require.NoError(t, err) require.NoError(t, err)
req, err = readRequest(bconn.Reader) req, err = readRequest(bconn.Reader)
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, base.Setup, req.Method) require.Equal(t, base.Setup, req.Method)
require.Equal(t, mustParseURL(scheme+"://"+listenIP+":8554/teststream/trackID=0"), req.URL) require.Equal(t, mustParseURL(scheme+"://"+listenIP+":8554/test/stream?param=value/trackID=0"), req.URL)
var inTH headers.Transport var inTH headers.Transport
err = inTH.Read(req.Header["Transport"]) err = inTH.Read(req.Header["Transport"])
@@ -319,7 +322,7 @@ func TestClientRead(t *testing.T) {
req, err = readRequest(bconn.Reader) req, err = readRequest(bconn.Reader)
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, base.Play, req.Method) require.Equal(t, base.Play, req.Method)
require.Equal(t, mustParseURL(scheme+"://"+listenIP+":8554/teststream/"), req.URL) require.Equal(t, mustParseURL(scheme+"://"+listenIP+":8554/test/stream?param=value/"), req.URL)
require.Equal(t, base.HeaderValue{"npt=0-"}, req.Header["Range"]) require.Equal(t, base.HeaderValue{"npt=0-"}, req.Header["Range"])
err = base.Response{ err = base.Response{
@@ -380,7 +383,7 @@ func TestClientRead(t *testing.T) {
req, err = readRequest(bconn.Reader) req, err = readRequest(bconn.Reader)
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, base.Teardown, req.Method) require.Equal(t, base.Teardown, req.Method)
require.Equal(t, mustParseURL(scheme+"://"+listenIP+":8554/teststream/"), req.URL) require.Equal(t, mustParseURL(scheme+"://"+listenIP+":8554/test/stream?param=value/"), req.URL)
err = base.Response{ err = base.Response{
StatusCode: base.StatusOK, StatusCode: base.StatusOK,
@@ -406,7 +409,7 @@ func TestClientRead(t *testing.T) {
}(), }(),
} }
conn, err := c.DialRead(scheme + "://" + listenIP + ":8554/teststream") conn, err := c.DialRead(scheme + "://" + listenIP + ":8554/test/stream?param=value")
require.NoError(t, err) require.NoError(t, err)
done := make(chan struct{}) done := make(chan struct{})

View File

@@ -27,9 +27,9 @@ func (t *Track) hasControlAttribute() bool {
} }
// URL returns the track URL. // URL returns the track URL.
func (t *Track) URL(baseURL *base.URL) (*base.URL, error) { func (t *Track) URL(contentBase *base.URL) (*base.URL, error) {
if baseURL == nil { if contentBase == nil {
return nil, fmt.Errorf("empty base URL") return nil, fmt.Errorf("no Content-Base header provided")
} }
controlAttr := func() string { controlAttr := func() string {
@@ -43,7 +43,7 @@ func (t *Track) URL(baseURL *base.URL) (*base.URL, error) {
// no control attribute, use base URL // no control attribute, use base URL
if controlAttr == "" { if controlAttr == "" {
return baseURL, nil return contentBase, nil
} }
// control attribute contains an absolute path // control attribute contains an absolute path
@@ -54,8 +54,8 @@ func (t *Track) URL(baseURL *base.URL) (*base.URL, error) {
} }
// copy host and credentials // copy host and credentials
ur.Host = baseURL.Host ur.Host = contentBase.Host
ur.User = baseURL.User ur.User = contentBase.User
return ur, nil return ur, nil
} }
@@ -63,7 +63,7 @@ func (t *Track) URL(baseURL *base.URL) (*base.URL, error) {
// insert the control attribute at the end of the URL // insert the control attribute at the end of the URL
// if there's a query, insert it after the query // if there's a query, insert it after the query
// otherwise insert it after the path // otherwise insert it after the path
strURL := baseURL.String() strURL := contentBase.String()
if controlAttr[0] != '?' && !strings.HasSuffix(strURL, "/") { if controlAttr[0] != '?' && !strings.HasSuffix(strURL, "/") {
strURL += "/" strURL += "/"
} }