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 { if len(tmp) != 2 {
return fmt.Errorf("unable to parse key-value (%v)", kv) return fmt.Errorf("unable to parse key-value (%v)", kv)
} }
k, v := tmp[0], tmp[1] k, v := tmp[0], tmp[1]
switch k { switch k {
case "url": case "url":
e.URL = v e.URL = v
@@ -62,7 +62,7 @@ func (h *RTPInfo) Read(v base.HeaderValue) error {
e.Timestamp = &vi2 e.Timestamp = &vi2
default: 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) { func TestRTPInfoRead(t *testing.T) {

View File

@@ -34,27 +34,28 @@ func (h *Session) Read(v base.HeaderValue) error {
h.Session = parts[0] h.Session = parts[0]
for _, part := range parts[1:] { for _, kv := range parts[1:] {
// remove leading spaces // remove leading spaces
part = strings.TrimLeft(part, " ") kv = strings.TrimLeft(kv, " ")
kv := strings.Split(part, "=") tmp := strings.SplitN(kv, "=", 2)
if len(kv) != 2 { if len(tmp) != 2 {
return fmt.Errorf("invalid value") return fmt.Errorf("unable to parse key-value (%v)", kv)
} }
k, v := tmp[0], tmp[1]
key, strValue := kv[0], kv[1] switch k {
if key != "timeout" { case "timeout":
return fmt.Errorf("invalid key '%s'", key) 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 return nil

View File

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