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)
require.NoError(t, err)
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{
StatusCode: base.StatusOK,
@@ -218,27 +218,30 @@ func TestClientRead(t *testing.T) {
req, err = readRequest(bconn.Reader)
require.NoError(t, err)
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}})
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{
StatusCode: base.StatusOK,
Header: base.Header{
"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)
require.NoError(t, err)
req, err = readRequest(bconn.Reader)
require.NoError(t, err)
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
err = inTH.Read(req.Header["Transport"])
@@ -319,7 +322,7 @@ func TestClientRead(t *testing.T) {
req, err = readRequest(bconn.Reader)
require.NoError(t, err)
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"])
err = base.Response{
@@ -380,7 +383,7 @@ func TestClientRead(t *testing.T) {
req, err = readRequest(bconn.Reader)
require.NoError(t, err)
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{
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)
done := make(chan struct{})

View File

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