This commit is contained in:
aler9
2021-04-04 12:18:13 +02:00
parent 1a229e1385
commit cbb47e158a
4 changed files with 73 additions and 37 deletions

View File

@@ -39,8 +39,8 @@ func (h *RTPInfo) Read(v base.HeaderValue) error {
if len(tmp) != 2 {
return fmt.Errorf("unable to parse key-value (%v)", kv)
}
k, v := tmp[0], tmp[1]
switch k {
case "url":
e.URL = v
@@ -62,7 +62,7 @@ func (h *RTPInfo) Read(v base.HeaderValue) error {
e.Timestamp = &vi2
default:
return fmt.Errorf("invalid key: %v", k)
// ignore non-standard keys
}
}

View File

@@ -136,6 +136,35 @@ var casesRTPInfo = []struct {
},
},
},
{
"with session",
base.HeaderValue{`url=trackID=1;seq=55664;rtptime=254718369;ssrc=56597976,url=trackID=2;seq=43807;rtptime=1702259566;ssrc=ee839a80`},
base.HeaderValue{`url=trackID=1;seq=55664;rtptime=254718369,url=trackID=2;seq=43807;rtptime=1702259566`},
RTPInfo{
{
URL: "trackID=1",
SequenceNumber: func() *uint16 {
v := uint16(55664)
return &v
}(),
Timestamp: func() *uint32 {
v := uint32(254718369)
return &v
}(),
},
{
URL: "trackID=2",
SequenceNumber: func() *uint16 {
v := uint16(43807)
return &v
}(),
Timestamp: func() *uint32 {
v := uint32(1702259566)
return &v
}(),
},
},
},
}
func TestRTPInfoRead(t *testing.T) {

View File

@@ -34,27 +34,28 @@ func (h *Session) Read(v base.HeaderValue) error {
h.Session = parts[0]
for _, part := range parts[1:] {
for _, kv := range parts[1:] {
// remove leading spaces
part = strings.TrimLeft(part, " ")
kv = strings.TrimLeft(kv, " ")
kv := strings.Split(part, "=")
if len(kv) != 2 {
return fmt.Errorf("invalid value")
tmp := strings.SplitN(kv, "=", 2)
if len(tmp) != 2 {
return fmt.Errorf("unable to parse key-value (%v)", kv)
}
k, v := tmp[0], tmp[1]
key, strValue := kv[0], kv[1]
if key != "timeout" {
return fmt.Errorf("invalid key '%s'", key)
switch k {
case "timeout":
iv, err := strconv.ParseUint(v, 10, 64)
if err != nil {
return err
}
uiv := uint(iv)
h.Timeout = &uiv
default:
// ignore non-standard keys
}
iv, err := strconv.ParseUint(strValue, 10, 64)
if err != nil {
return err
}
uiv := uint(iv)
h.Timeout = &uiv
}
return nil

View File

@@ -130,50 +130,55 @@ func (h *Transport) Read(v base.HeaderValue) error {
// cast is optional, do not return any error
}
for _, t := range parts {
switch {
case strings.HasPrefix(t, "destination="):
v := t[len("destination="):]
for _, kv := range parts {
tmp := strings.SplitN(kv, "=", 2)
if len(tmp) != 2 {
return fmt.Errorf("unable to parse key-value (%v)", kv)
}
k, v := tmp[0], tmp[1]
switch k {
case "destination":
h.Destination = &v
case strings.HasPrefix(t, "ttl="):
v, err := strconv.ParseUint(t[len("ttl="):], 10, 64)
case "ttl":
tmp, err := strconv.ParseUint(v, 10, 64)
if err != nil {
return err
}
vu := uint(v)
vu := uint(tmp)
h.TTL = &vu
case strings.HasPrefix(t, "port="):
ports, err := parsePorts(t[len("port="):])
case "port":
ports, err := parsePorts(v)
if err != nil {
return err
}
h.Ports = ports
case strings.HasPrefix(t, "client_port="):
ports, err := parsePorts(t[len("client_port="):])
case "client_port":
ports, err := parsePorts(v)
if err != nil {
return err
}
h.ClientPorts = ports
case strings.HasPrefix(t, "server_port="):
ports, err := parsePorts(t[len("server_port="):])
case "server_port":
ports, err := parsePorts(v)
if err != nil {
return err
}
h.ServerPorts = ports
case strings.HasPrefix(t, "interleaved="):
ports, err := parsePorts(t[len("interleaved="):])
case "interleaved":
ports, err := parsePorts(v)
if err != nil {
return err
}
h.InterleavedIDs = ports
case strings.HasPrefix(t, "mode="):
str := strings.ToLower(t[len("mode="):])
case "mode":
str := strings.ToLower(v)
str = strings.TrimPrefix(str, "\"")
str = strings.TrimSuffix(str, "\"")
@@ -191,9 +196,10 @@ func (h *Transport) Read(v base.HeaderValue) error {
default:
return fmt.Errorf("invalid transport mode: '%s'", str)
}
}
// ignore non-standard keys
default:
// ignore non-standard keys
}
}
return nil