mirror of
https://github.com/aler9/gortsplib
synced 2025-10-10 09:30:11 +08:00
client: call Options() automatically
This commit is contained in:
28
client.go
28
client.go
@@ -208,6 +208,7 @@ type Client struct {
|
|||||||
session string
|
session string
|
||||||
sender *auth.Sender
|
sender *auth.Sender
|
||||||
cseq int
|
cseq int
|
||||||
|
optionsSent bool
|
||||||
useGetParameter bool
|
useGetParameter bool
|
||||||
lastDescribeURL *base.URL
|
lastDescribeURL *base.URL
|
||||||
streamBaseURL *base.URL
|
streamBaseURL *base.URL
|
||||||
@@ -338,12 +339,6 @@ func (c *Client) StartReading(address string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = c.Options(u)
|
|
||||||
if err != nil {
|
|
||||||
c.Close()
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
tracks, baseURL, _, err := c.Describe(u)
|
tracks, baseURL, _, err := c.Describe(u)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Close()
|
c.Close()
|
||||||
@@ -376,12 +371,6 @@ func (c *Client) StartPublishing(address string, tracks Tracks) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = c.Options(u)
|
|
||||||
if err != nil {
|
|
||||||
c.Close()
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err = c.Announce(u, tracks)
|
_, err = c.Announce(u, tracks)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Close()
|
c.Close()
|
||||||
@@ -627,6 +616,7 @@ func (c *Client) reset() {
|
|||||||
c.session = ""
|
c.session = ""
|
||||||
c.sender = nil
|
c.sender = nil
|
||||||
c.cseq = 0
|
c.cseq = 0
|
||||||
|
c.optionsSent = false
|
||||||
c.useGetParameter = false
|
c.useGetParameter = false
|
||||||
c.streamBaseURL = nil
|
c.streamBaseURL = nil
|
||||||
c.protocol = nil
|
c.protocol = nil
|
||||||
@@ -939,6 +929,13 @@ func (c *Client) do(req *base.Request, skipResponse bool, allowFrames bool) (*ba
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !c.optionsSent && req.Method != base.Options {
|
||||||
|
_, err := c.doOptions(req.URL)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if req.Header == nil {
|
if req.Header == nil {
|
||||||
req.Header = make(base.Header)
|
req.Header = make(base.Header)
|
||||||
}
|
}
|
||||||
@@ -1063,6 +1060,8 @@ func (c *Client) doOptions(u *base.URL) (*base.Response, error) {
|
|||||||
return nil, liberrors.ErrClientBadStatusCode{Code: res.StatusCode, Message: res.StatusMessage}
|
return nil, liberrors.ErrClientBadStatusCode{Code: res.StatusCode, Message: res.StatusMessage}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
c.optionsSent = true
|
||||||
|
|
||||||
c.useGetParameter = func() bool {
|
c.useGetParameter = func() bool {
|
||||||
pub, ok := res.Header["Public"]
|
pub, ok := res.Header["Public"]
|
||||||
if !ok || len(pub) != 1 {
|
if !ok || len(pub) != 1 {
|
||||||
@@ -1130,11 +1129,6 @@ func (c *Client) doDescribe(u *base.URL) (Tracks, *base.URL, *base.Response, err
|
|||||||
c.scheme = u.Scheme
|
c.scheme = u.Scheme
|
||||||
c.host = u.Host
|
c.host = u.Host
|
||||||
|
|
||||||
_, err = c.doOptions(u)
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return c.doDescribe(u)
|
return c.doDescribe(u)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -580,6 +580,23 @@ func TestClientReadPartial(t *testing.T) {
|
|||||||
|
|
||||||
req, err := readRequest(br)
|
req, err := readRequest(br)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, base.Options, req.Method)
|
||||||
|
|
||||||
|
base.Response{
|
||||||
|
StatusCode: base.StatusOK,
|
||||||
|
Header: base.Header{
|
||||||
|
"Public": base.HeaderValue{strings.Join([]string{
|
||||||
|
string(base.Describe),
|
||||||
|
string(base.Setup),
|
||||||
|
string(base.Play),
|
||||||
|
}, ", ")},
|
||||||
|
},
|
||||||
|
}.Write(&bb)
|
||||||
|
_, err = conn.Write(bb.Bytes())
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
req, err = readRequest(br)
|
||||||
|
require.NoError(t, err)
|
||||||
require.Equal(t, base.Describe, req.Method)
|
require.Equal(t, base.Describe, req.Method)
|
||||||
require.Equal(t, mustParseURL("rtsp://"+listenIP+":8554/teststream"), req.URL)
|
require.Equal(t, mustParseURL("rtsp://"+listenIP+":8554/teststream"), req.URL)
|
||||||
|
|
||||||
@@ -1222,6 +1239,23 @@ func TestClientReadAutomaticProtocol(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
br = bufio.NewReader(conn)
|
br = bufio.NewReader(conn)
|
||||||
|
|
||||||
|
req, err = readRequest(br)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, base.Options, req.Method)
|
||||||
|
|
||||||
|
base.Response{
|
||||||
|
StatusCode: base.StatusOK,
|
||||||
|
Header: base.Header{
|
||||||
|
"Public": base.HeaderValue{strings.Join([]string{
|
||||||
|
string(base.Describe),
|
||||||
|
string(base.Setup),
|
||||||
|
string(base.Play),
|
||||||
|
}, ", ")},
|
||||||
|
},
|
||||||
|
}.Write(&bb)
|
||||||
|
_, err = conn.Write(bb.Bytes())
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
req, err = readRequest(br)
|
req, err = readRequest(br)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, base.Describe, req.Method)
|
require.Equal(t, base.Describe, req.Method)
|
||||||
@@ -2463,9 +2497,6 @@ func TestClientReadSeek(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer c.Close()
|
defer c.Close()
|
||||||
|
|
||||||
_, err = c.Options(u)
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
tracks, baseURL, _, err := c.Describe(u)
|
tracks, baseURL, _, err := c.Describe(u)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
@@ -147,9 +147,6 @@ func TestClientSession(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer c.Close()
|
defer c.Close()
|
||||||
|
|
||||||
_, err = c.Options(u)
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
_, _, _, err = c.Describe(u)
|
_, _, _, err = c.Describe(u)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
@@ -233,9 +230,6 @@ func TestClientAuth(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer c.Close()
|
defer c.Close()
|
||||||
|
|
||||||
_, err = c.Options(u)
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
_, _, _, err = c.Describe(u)
|
_, _, _, err = c.Describe(u)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
@@ -300,9 +294,6 @@ func TestClientDescribeCharset(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer c.Close()
|
defer c.Close()
|
||||||
|
|
||||||
_, err = c.Options(u)
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
_, _, _, err = c.Describe(u)
|
_, _, _, err = c.Describe(u)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
@@ -25,11 +25,6 @@ func main() {
|
|||||||
}
|
}
|
||||||
defer c.Close()
|
defer c.Close()
|
||||||
|
|
||||||
_, err = c.Options(u)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
tracks, _, _, err := c.Describe(u)
|
tracks, _, _, err := c.Describe(u)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
|
@@ -30,12 +30,6 @@ func main() {
|
|||||||
}
|
}
|
||||||
defer c.Close()
|
defer c.Close()
|
||||||
|
|
||||||
// get available methods
|
|
||||||
_, err = c.Options(u)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// find published tracks
|
// find published tracks
|
||||||
tracks, baseURL, _, err := c.Describe(u)
|
tracks, baseURL, _, err := c.Describe(u)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@@ -56,12 +56,6 @@ func main() {
|
|||||||
}
|
}
|
||||||
defer c.Close()
|
defer c.Close()
|
||||||
|
|
||||||
// get available methods
|
|
||||||
_, err = c.Options(u)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// find published tracks
|
// find published tracks
|
||||||
tracks, baseURL, _, err := c.Describe(u)
|
tracks, baseURL, _, err := c.Describe(u)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@@ -28,12 +28,6 @@ func main() {
|
|||||||
}
|
}
|
||||||
defer c.Close()
|
defer c.Close()
|
||||||
|
|
||||||
// get available methods
|
|
||||||
_, err = c.Options(u)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// find published tracks
|
// find published tracks
|
||||||
tracks, baseURL, _, err := c.Describe(u)
|
tracks, baseURL, _, err := c.Describe(u)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@@ -33,12 +33,6 @@ func main() {
|
|||||||
}
|
}
|
||||||
defer c.Close()
|
defer c.Close()
|
||||||
|
|
||||||
// get available methods
|
|
||||||
_, err = c.Options(u)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// find published tracks
|
// find published tracks
|
||||||
tracks, baseURL, _, err := c.Describe(u)
|
tracks, baseURL, _, err := c.Describe(u)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@@ -37,11 +37,6 @@ func main() {
|
|||||||
}
|
}
|
||||||
defer c.Close()
|
defer c.Close()
|
||||||
|
|
||||||
_, err = c.Options(u)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
tracks, baseURL, _, err := c.Describe(u)
|
tracks, baseURL, _, err := c.Describe(u)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
|
@@ -28,12 +28,6 @@ func main() {
|
|||||||
}
|
}
|
||||||
defer reader.Close()
|
defer reader.Close()
|
||||||
|
|
||||||
// get available methods
|
|
||||||
_, err = reader.Options(sourceURL)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// find published tracks
|
// find published tracks
|
||||||
tracks, baseURL, _, err := reader.Describe(sourceURL)
|
tracks, baseURL, _, err := reader.Describe(sourceURL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Reference in New Issue
Block a user