Browse Source

rtmp client: validate command ID of results

pull/1128/head
aler9 3 years ago
parent
commit
27ae0b9812
  1. 14
      internal/rtmp/conn.go
  2. 2
      internal/rtmp/conn_test.go

14
internal/rtmp/conn.go

@ -132,7 +132,7 @@ func (c *Conn) readCommand() (*message.MsgCommandAMF0, error) { @@ -132,7 +132,7 @@ func (c *Conn) readCommand() (*message.MsgCommandAMF0, error) {
}
}
func (c *Conn) readCommandResult(commandName string, isValid func(*message.MsgCommandAMF0) bool) error {
func (c *Conn) readCommandResult(commandID int, commandName string, isValid func(*message.MsgCommandAMF0) bool) error {
for {
msg, err := c.mrw.Read()
if err != nil {
@ -140,7 +140,7 @@ func (c *Conn) readCommandResult(commandName string, isValid func(*message.MsgCo @@ -140,7 +140,7 @@ func (c *Conn) readCommandResult(commandName string, isValid func(*message.MsgCo
}
if cmd, ok := msg.(*message.MsgCommandAMF0); ok {
if cmd.Name == commandName {
if cmd.CommandID == commandID && cmd.Name == commandName {
if !isValid(cmd) {
return fmt.Errorf("server refused connect request")
}
@ -203,7 +203,7 @@ func (c *Conn) InitializeClient(u *url.URL, isPublishing bool) error { @@ -203,7 +203,7 @@ func (c *Conn) InitializeClient(u *url.URL, isPublishing bool) error {
return err
}
err = c.readCommandResult("_result", resultIsOK1)
err = c.readCommandResult(1, "_result", resultIsOK1)
if err != nil {
return err
}
@ -221,7 +221,7 @@ func (c *Conn) InitializeClient(u *url.URL, isPublishing bool) error { @@ -221,7 +221,7 @@ func (c *Conn) InitializeClient(u *url.URL, isPublishing bool) error {
return err
}
err = c.readCommandResult("_result", resultIsOK2)
err = c.readCommandResult(2, "_result", resultIsOK2)
if err != nil {
return err
}
@ -247,7 +247,7 @@ func (c *Conn) InitializeClient(u *url.URL, isPublishing bool) error { @@ -247,7 +247,7 @@ func (c *Conn) InitializeClient(u *url.URL, isPublishing bool) error {
return err
}
return c.readCommandResult("onStatus", resultIsOK1)
return c.readCommandResult(3, "onStatus", resultIsOK1)
}
err = c.mrw.Write(&message.MsgCommandAMF0{
@ -288,7 +288,7 @@ func (c *Conn) InitializeClient(u *url.URL, isPublishing bool) error { @@ -288,7 +288,7 @@ func (c *Conn) InitializeClient(u *url.URL, isPublishing bool) error {
return err
}
err = c.readCommandResult("_result", resultIsOK2)
err = c.readCommandResult(4, "_result", resultIsOK2)
if err != nil {
return err
}
@ -308,7 +308,7 @@ func (c *Conn) InitializeClient(u *url.URL, isPublishing bool) error { @@ -308,7 +308,7 @@ func (c *Conn) InitializeClient(u *url.URL, isPublishing bool) error {
return err
}
return c.readCommandResult("onStatus", resultIsOK1)
return c.readCommandResult(5, "onStatus", resultIsOK1)
}
// InitializeServer performs the initialization of a server-side connection.

2
internal/rtmp/conn_test.go

@ -141,7 +141,7 @@ func TestInitializeClient(t *testing.T) { @@ -141,7 +141,7 @@ func TestInitializeClient(t *testing.T) {
ChunkStreamID: 5,
MessageStreamID: 0x1000000,
Name: "onStatus",
CommandID: 4,
CommandID: 3,
Arguments: []interface{}{
nil,
flvio.AMFMap{

Loading…
Cancel
Save