mirror of
https://github.com/aler9/gortsplib
synced 2025-10-05 15:16:51 +08:00
client: check parameters in request urls
This commit is contained in:
@@ -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{})
|
||||||
|
14
track.go
14
track.go
@@ -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 += "/"
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user