mirror of
https://github.com/aler9/gortsplib
synced 2025-10-05 15:16:51 +08:00
support SDPs with spaces in origin (https://github.com/aler9/rtsp-simple-server/issues/127)
This commit is contained in:
@@ -71,7 +71,28 @@ func (s *SessionDescription) unmarshalOrigin(value string) error {
|
|||||||
value += "127.0.0.1"
|
value += "127.0.0.1"
|
||||||
}
|
}
|
||||||
|
|
||||||
fields := strings.Fields(value)
|
// find spaces from end to beginning, to support multiple spaces
|
||||||
|
// in the first field
|
||||||
|
fields := func() []string {
|
||||||
|
var ret []string
|
||||||
|
for len(value) > 0 {
|
||||||
|
i := len(value) - 1
|
||||||
|
for {
|
||||||
|
if i < 0 || len(ret) == 5 {
|
||||||
|
ret = append([]string{value}, ret...)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
if value[i] == ' ' {
|
||||||
|
ret = append([]string{value[i+1:]}, ret...)
|
||||||
|
value = value[:i]
|
||||||
|
break
|
||||||
|
}
|
||||||
|
i--
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret
|
||||||
|
}()
|
||||||
|
|
||||||
if len(fields) != 6 {
|
if len(fields) != 6 {
|
||||||
return fmt.Errorf("%w `o=%v`", errSDPInvalidSyntax, fields)
|
return fmt.Errorf("%w `o=%v`", errSDPInvalidSyntax, fields)
|
||||||
}
|
}
|
||||||
|
@@ -1052,6 +1052,26 @@ var cases = []struct {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"spaces in origin",
|
||||||
|
[]byte("v=0\r\n" +
|
||||||
|
"o=RTSP Session 1 2 IN IP4 0.0.0.0\r\n" +
|
||||||
|
"s=Sony RTSP Server\r\n"),
|
||||||
|
[]byte("v=0\r\n" +
|
||||||
|
"o=RTSP Session 1 2 IN IP4 0.0.0.0\r\n" +
|
||||||
|
"s=Sony RTSP Server\r\n"),
|
||||||
|
SessionDescription{
|
||||||
|
Origin: psdp.Origin{
|
||||||
|
Username: "RTSP Session",
|
||||||
|
SessionID: 1,
|
||||||
|
SessionVersion: 2,
|
||||||
|
NetworkType: "IN",
|
||||||
|
AddressType: "IP4",
|
||||||
|
UnicastAddress: "0.0.0.0",
|
||||||
|
},
|
||||||
|
SessionName: psdp.SessionName("Sony RTSP Server"),
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestUnmarshal(t *testing.T) {
|
func TestUnmarshal(t *testing.T) {
|
||||||
|
Reference in New Issue
Block a user