rename Read / Write into Unmarshal / Marshal when needed

Read() / Write() are used to read / write from streams, while
Unmarshal() / Marshal() are used to decode / encode from / to bytes.
This commit is contained in:
aler9
2022-06-27 17:26:00 +02:00
parent e3c9f0c2e6
commit f3b0fc69b4
44 changed files with 569 additions and 559 deletions

View File

@@ -1059,7 +1059,7 @@ func (c *Client) do(req *base.Request, skipResponse bool, allowFrames bool) (*ba
c.OnRequest(req)
}
byts, _ := req.Write()
byts, _ := req.Marshal()
c.conn.SetWriteDeadline(time.Now().Add(c.WriteTimeout))
_, err := c.conn.Write(byts)
@@ -1095,7 +1095,7 @@ func (c *Client) do(req *base.Request, skipResponse bool, allowFrames bool) (*ba
// get session from response
if v, ok := res.Header["Session"]; ok {
var sx headers.Session
err := sx.Read(v)
err := sx.Unmarshal(v)
if err != nil {
return nil, liberrors.ErrClientSessionHeaderInvalid{Err: err}
}
@@ -1242,7 +1242,8 @@ func (c *Client) doDescribe(u *url.URL) (Tracks, *url.URL, *base.Response, error
return nil, nil, nil, liberrors.ErrClientContentTypeUnsupported{CT: ct}
}
tracks, sd, err := ReadTracks(res.Body, true)
var tracks Tracks
sd, err := tracks.Unmarshal(res.Body, true)
if err != nil {
return nil, nil, nil, err
}
@@ -1286,7 +1287,7 @@ func (c *Client) doAnnounce(u *url.URL, tracks Tracks) (*base.Response, error) {
Header: base.Header{
"Content-Type": base.HeaderValue{"application/sdp"},
},
Body: tracks.Write(false),
Body: tracks.Marshal(false),
}, false, false)
if err != nil {
return nil, err
@@ -1449,7 +1450,7 @@ func (c *Client) doSetup(
Method: base.Setup,
URL: trackURL,
Header: base.Header{
"Transport": th.Write(),
"Transport": th.Marshal(),
},
}, false, false)
if err != nil {
@@ -1480,7 +1481,7 @@ func (c *Client) doSetup(
}
var thRes headers.Transport
err = thRes.Read(res.Header["Transport"])
err = thRes.Unmarshal(res.Header["Transport"])
if err != nil {
if transport == TransportUDP {
ct.udpRTPListener.close()
@@ -1685,7 +1686,7 @@ func (c *Client) doPlay(ra *headers.Range, isSwitchingProtocol bool) (*base.Resp
Method: base.Play,
URL: c.baseURL,
Header: base.Header{
"Range": ra.Write(),
"Range": ra.Marshal(),
},
}, false, *c.effectiveTransport == TransportTCP)
if err != nil {
@@ -1864,14 +1865,14 @@ func (c *Client) runWriter() {
if isRTP {
f := rtpFrames[trackID]
f.Payload = payload
n, _ := f.WriteTo(buf)
n, _ := f.MarshalTo(buf)
c.conn.SetWriteDeadline(time.Now().Add(c.WriteTimeout))
c.conn.Write(buf[:n])
} else {
f := rtcpFrames[trackID]
f.Payload = payload
n, _ := f.WriteTo(buf)
n, _ := f.MarshalTo(buf)
c.conn.SetWriteDeadline(time.Now().Add(c.WriteTimeout))
c.conn.Write(buf[:n])

View File

@@ -97,7 +97,7 @@ func TestClientPublishSerial(t *testing.T) {
string(base.Record),
}, ", ")},
},
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -108,7 +108,7 @@ func TestClientPublishSerial(t *testing.T) {
byts, _ = base.Response{
StatusCode: base.StatusOK,
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -118,7 +118,7 @@ func TestClientPublishSerial(t *testing.T) {
require.Equal(t, mustParseURL(scheme+"://localhost:8554/teststream/trackID=0"), req.URL)
var inTH headers.Transport
err = inTH.Read(req.Header["Transport"])
err = inTH.Unmarshal(req.Header["Transport"])
require.NoError(t, err)
var l1 net.PacketConn
@@ -152,9 +152,9 @@ func TestClientPublishSerial(t *testing.T) {
byts, _ = base.Response{
StatusCode: base.StatusOK,
Header: base.Header{
"Transport": th.Write(),
"Transport": th.Marshal(),
},
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -165,7 +165,7 @@ func TestClientPublishSerial(t *testing.T) {
byts, _ = base.Response{
StatusCode: base.StatusOK,
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -199,7 +199,7 @@ func TestClientPublishSerial(t *testing.T) {
byts, _ := base.InterleavedFrame{
Channel: 1,
Payload: testRTCPPacketMarshaled,
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
}
@@ -211,7 +211,7 @@ func TestClientPublishSerial(t *testing.T) {
byts, _ = base.Response{
StatusCode: base.StatusOK,
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
}()
@@ -312,7 +312,7 @@ func TestClientPublishParallel(t *testing.T) {
string(base.Record),
}, ", ")},
},
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -322,7 +322,7 @@ func TestClientPublishParallel(t *testing.T) {
byts, _ = base.Response{
StatusCode: base.StatusOK,
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -331,7 +331,7 @@ func TestClientPublishParallel(t *testing.T) {
require.Equal(t, base.Setup, req.Method)
var inTH headers.Transport
err = inTH.Read(req.Header["Transport"])
err = inTH.Unmarshal(req.Header["Transport"])
require.NoError(t, err)
th := headers.Transport{
@@ -353,9 +353,9 @@ func TestClientPublishParallel(t *testing.T) {
byts, _ = base.Response{
StatusCode: base.StatusOK,
Header: base.Header{
"Transport": th.Write(),
"Transport": th.Marshal(),
},
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -365,7 +365,7 @@ func TestClientPublishParallel(t *testing.T) {
byts, _ = base.Response{
StatusCode: base.StatusOK,
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -375,7 +375,7 @@ func TestClientPublishParallel(t *testing.T) {
byts, _ = base.Response{
StatusCode: base.StatusOK,
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
}()
@@ -461,7 +461,7 @@ func TestClientPublishPauseSerial(t *testing.T) {
string(base.Pause),
}, ", ")},
},
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -471,7 +471,7 @@ func TestClientPublishPauseSerial(t *testing.T) {
byts, _ = base.Response{
StatusCode: base.StatusOK,
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -480,7 +480,7 @@ func TestClientPublishPauseSerial(t *testing.T) {
require.Equal(t, base.Setup, req.Method)
var inTH headers.Transport
err = inTH.Read(req.Header["Transport"])
err = inTH.Unmarshal(req.Header["Transport"])
require.NoError(t, err)
th := headers.Transport{
@@ -502,9 +502,9 @@ func TestClientPublishPauseSerial(t *testing.T) {
byts, _ = base.Response{
StatusCode: base.StatusOK,
Header: base.Header{
"Transport": th.Write(),
"Transport": th.Marshal(),
},
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -514,7 +514,7 @@ func TestClientPublishPauseSerial(t *testing.T) {
byts, _ = base.Response{
StatusCode: base.StatusOK,
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -524,7 +524,7 @@ func TestClientPublishPauseSerial(t *testing.T) {
byts, _ = base.Response{
StatusCode: base.StatusOK,
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -534,7 +534,7 @@ func TestClientPublishPauseSerial(t *testing.T) {
byts, _ = base.Response{
StatusCode: base.StatusOK,
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -544,7 +544,7 @@ func TestClientPublishPauseSerial(t *testing.T) {
byts, _ = base.Response{
StatusCode: base.StatusOK,
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
}()
@@ -620,7 +620,7 @@ func TestClientPublishPauseParallel(t *testing.T) {
string(base.Pause),
}, ", ")},
},
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -630,7 +630,7 @@ func TestClientPublishPauseParallel(t *testing.T) {
byts, _ = base.Response{
StatusCode: base.StatusOK,
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -639,7 +639,7 @@ func TestClientPublishPauseParallel(t *testing.T) {
require.Equal(t, base.Setup, req.Method)
var inTH headers.Transport
err = inTH.Read(req.Header["Transport"])
err = inTH.Unmarshal(req.Header["Transport"])
require.NoError(t, err)
th := headers.Transport{
@@ -661,9 +661,9 @@ func TestClientPublishPauseParallel(t *testing.T) {
byts, _ = base.Response{
StatusCode: base.StatusOK,
Header: base.Header{
"Transport": th.Write(),
"Transport": th.Marshal(),
},
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -673,7 +673,7 @@ func TestClientPublishPauseParallel(t *testing.T) {
byts, _ = base.Response{
StatusCode: base.StatusOK,
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -683,7 +683,7 @@ func TestClientPublishPauseParallel(t *testing.T) {
byts, _ = base.Response{
StatusCode: base.StatusOK,
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
}()
@@ -764,7 +764,7 @@ func TestClientPublishAutomaticProtocol(t *testing.T) {
string(base.Record),
}, ", ")},
},
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -775,7 +775,7 @@ func TestClientPublishAutomaticProtocol(t *testing.T) {
byts, _ = base.Response{
StatusCode: base.StatusOK,
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -785,7 +785,7 @@ func TestClientPublishAutomaticProtocol(t *testing.T) {
byts, _ = base.Response{
StatusCode: base.StatusUnsupportedTransport,
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -794,7 +794,7 @@ func TestClientPublishAutomaticProtocol(t *testing.T) {
require.Equal(t, base.Setup, req.Method)
var inTH headers.Transport
err = inTH.Read(req.Header["Transport"])
err = inTH.Unmarshal(req.Header["Transport"])
require.NoError(t, err)
require.Equal(t, headers.TransportProtocolTCP, inTH.Protocol)
@@ -810,9 +810,9 @@ func TestClientPublishAutomaticProtocol(t *testing.T) {
byts, _ = base.Response{
StatusCode: base.StatusOK,
Header: base.Header{
"Transport": th.Write(),
"Transport": th.Marshal(),
},
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -823,7 +823,7 @@ func TestClientPublishAutomaticProtocol(t *testing.T) {
byts, _ = base.Response{
StatusCode: base.StatusOK,
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -842,7 +842,7 @@ func TestClientPublishAutomaticProtocol(t *testing.T) {
byts, _ = base.Response{
StatusCode: base.StatusOK,
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
}()
@@ -894,7 +894,7 @@ func TestClientPublishRTCPReport(t *testing.T) {
string(base.Record),
}, ", ")},
},
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -904,7 +904,7 @@ func TestClientPublishRTCPReport(t *testing.T) {
byts, _ = base.Response{
StatusCode: base.StatusOK,
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -913,7 +913,7 @@ func TestClientPublishRTCPReport(t *testing.T) {
require.Equal(t, base.Setup, req.Method)
var inTH headers.Transport
err = inTH.Read(req.Header["Transport"])
err = inTH.Unmarshal(req.Header["Transport"])
require.NoError(t, err)
l1, err := net.ListenPacket("udp", "localhost:34556")
@@ -935,9 +935,9 @@ func TestClientPublishRTCPReport(t *testing.T) {
Protocol: headers.TransportProtocolUDP,
ClientPorts: inTH.ClientPorts,
ServerPorts: &[2]int{34556, 34557},
}.Write(),
}.Marshal(),
},
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -947,7 +947,7 @@ func TestClientPublishRTCPReport(t *testing.T) {
byts, _ = base.Response{
StatusCode: base.StatusOK,
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -981,7 +981,7 @@ func TestClientPublishRTCPReport(t *testing.T) {
byts, _ = base.Response{
StatusCode: base.StatusOK,
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
}()
@@ -1045,7 +1045,7 @@ func TestClientPublishIgnoreTCPRTPPackets(t *testing.T) {
string(base.Record),
}, ", ")},
},
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -1055,7 +1055,7 @@ func TestClientPublishIgnoreTCPRTPPackets(t *testing.T) {
byts, _ = base.Response{
StatusCode: base.StatusOK,
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -1064,7 +1064,7 @@ func TestClientPublishIgnoreTCPRTPPackets(t *testing.T) {
require.Equal(t, base.Setup, req.Method)
var inTH headers.Transport
err = inTH.Read(req.Header["Transport"])
err = inTH.Unmarshal(req.Header["Transport"])
require.NoError(t, err)
th := headers.Transport{
@@ -1079,9 +1079,9 @@ func TestClientPublishIgnoreTCPRTPPackets(t *testing.T) {
byts, _ = base.Response{
StatusCode: base.StatusOK,
Header: base.Header{
"Transport": th.Write(),
"Transport": th.Marshal(),
},
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -1091,21 +1091,21 @@ func TestClientPublishIgnoreTCPRTPPackets(t *testing.T) {
byts, _ = base.Response{
StatusCode: base.StatusOK,
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
byts, _ = base.InterleavedFrame{
Channel: 0,
Payload: testRTPPacketMarshaled,
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
byts, _ = base.InterleavedFrame{
Channel: 1,
Payload: testRTCPPacketMarshaled,
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -1115,7 +1115,7 @@ func TestClientPublishIgnoreTCPRTPPackets(t *testing.T) {
byts, _ = base.Response{
StatusCode: base.StatusOK,
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
}()

File diff suppressed because it is too large Load Diff

View File

@@ -108,7 +108,7 @@ func TestClientSession(t *testing.T) {
}, ", ")},
"Session": base.HeaderValue{"123456"},
},
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -133,8 +133,8 @@ func TestClientSession(t *testing.T) {
"Content-Type": base.HeaderValue{"application/sdp"},
"Session": base.HeaderValue{"123456"},
},
Body: tracks.Write(false),
}.Write()
Body: tracks.Marshal(false),
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
}()
@@ -178,7 +178,7 @@ func TestClientAuth(t *testing.T) {
string(base.Describe),
}, ", ")},
},
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -193,7 +193,7 @@ func TestClientAuth(t *testing.T) {
Header: base.Header{
"WWW-Authenticate": v.Header(),
},
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -218,8 +218,8 @@ func TestClientAuth(t *testing.T) {
Header: base.Header{
"Content-Type": base.HeaderValue{"application/sdp"},
},
Body: tracks.Write(false),
}.Write()
Body: tracks.Marshal(false),
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
}()
@@ -263,7 +263,7 @@ func TestClientDescribeCharset(t *testing.T) {
string(base.Describe),
}, ", ")},
},
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -284,8 +284,8 @@ func TestClientDescribeCharset(t *testing.T) {
"Content-Type": base.HeaderValue{"application/sdp; charset=utf-8"},
"Content-Base": base.HeaderValue{"rtsp://localhost:8554/teststream/"},
},
Body: Tracks{track1}.Write(false),
}.Write()
Body: Tracks{track1}.Marshal(false),
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
}()

View File

@@ -143,7 +143,7 @@ func (e *mpegtsEncoder) encode(nalus [][]byte, pts time.Duration) error {
}
// encode into Annex-B
annexb, err := h264.AnnexBEncode(filteredNALUs)
annexb, err := h264.AnnexBMarshal(filteredNALUs)
if err != nil {
return err
}

View File

@@ -12,27 +12,29 @@ type ADTSPacket struct {
AU []byte
}
// DecodeADTS decodes an ADTS stream into ADTS packets.
func DecodeADTS(buf []byte) ([]*ADTSPacket, error) {
// ADTSPackets is a group od ADTS packets.
type ADTSPackets []*ADTSPacket
// Unmarshal decodes an ADTS stream into ADTS packets.
func (ps *ADTSPackets) Unmarshal(buf []byte) error {
// refs: https://wiki.multimedia.cx/index.php/ADTS
var ret []*ADTSPacket
bl := len(buf)
pos := 0
for {
if (bl - pos) < 8 {
return nil, fmt.Errorf("invalid length")
return fmt.Errorf("invalid length")
}
syncWord := (uint16(buf[pos]) << 4) | (uint16(buf[pos+1]) >> 4)
if syncWord != 0xfff {
return nil, fmt.Errorf("invalid syncword")
return fmt.Errorf("invalid syncword")
}
protectionAbsent := buf[pos+1] & 0x01
if protectionAbsent != 1 {
return nil, fmt.Errorf("CRC is not supported")
return fmt.Errorf("CRC is not supported")
}
pkt := &ADTSPacket{}
@@ -41,7 +43,7 @@ func DecodeADTS(buf []byte) ([]*ADTSPacket, error) {
switch pkt.Type {
case MPEG4AudioTypeAACLC:
default:
return nil, fmt.Errorf("unsupported audio type: %d", pkt.Type)
return fmt.Errorf("unsupported audio type: %d", pkt.Type)
}
sampleRateIndex := (buf[pos+2] >> 2) & 0x0F
@@ -50,7 +52,7 @@ func DecodeADTS(buf []byte) ([]*ADTSPacket, error) {
pkt.SampleRate = sampleRates[sampleRateIndex]
default:
return nil, fmt.Errorf("invalid sample rate index: %d", sampleRateIndex)
return fmt.Errorf("invalid sample rate index: %d", sampleRateIndex)
}
channelConfig := ((buf[pos+2] & 0x01) << 2) | ((buf[pos+3] >> 6) & 0x03)
@@ -62,52 +64,52 @@ func DecodeADTS(buf []byte) ([]*ADTSPacket, error) {
pkt.ChannelCount = 8
default:
return nil, fmt.Errorf("invalid channel configuration: %d", channelConfig)
return fmt.Errorf("invalid channel configuration: %d", channelConfig)
}
frameLen := int(((uint16(buf[pos+3])&0x03)<<11)|
(uint16(buf[pos+4])<<3)|
((uint16(buf[pos+5])>>5)&0x07)) - 7
if frameLen > MaxAccessUnitSize {
return nil, fmt.Errorf("AU size (%d) is too big (maximum is %d)", frameLen, MaxAccessUnitSize)
return fmt.Errorf("AU size (%d) is too big (maximum is %d)", frameLen, MaxAccessUnitSize)
}
frameCount := buf[pos+6] & 0x03
if frameCount != 0 {
return nil, fmt.Errorf("frame count greater than 1 is not supported")
return fmt.Errorf("frame count greater than 1 is not supported")
}
if len(buf[pos+7:]) < frameLen {
return nil, fmt.Errorf("invalid frame length")
return fmt.Errorf("invalid frame length")
}
pkt.AU = buf[pos+7 : pos+7+frameLen]
pos += 7 + frameLen
ret = append(ret, pkt)
*ps = append(*ps, pkt)
if (bl - pos) == 0 {
break
}
}
return ret, nil
return nil
}
func encodeADTSSize(pkts []*ADTSPacket) int {
func (ps ADTSPackets) marshalSize() int {
n := 0
for _, pkt := range pkts {
for _, pkt := range ps {
n += 7 + len(pkt.AU)
}
return n
}
// EncodeADTS encodes ADTS packets into an ADTS stream.
func EncodeADTS(pkts []*ADTSPacket) ([]byte, error) {
buf := make([]byte, encodeADTSSize(pkts))
// Marshal encodes ADTS packets into an ADTS stream.
func (ps ADTSPackets) Marshal() ([]byte, error) {
buf := make([]byte, ps.marshalSize())
pos := 0
for _, pkt := range pkts {
for _, pkt := range ps {
sampleRateIndex, ok := reverseSampleRates[pkt.SampleRate]
if !ok {
return nil, fmt.Errorf("invalid sample rate: %d", pkt.SampleRate)

View File

@@ -9,12 +9,12 @@ import (
var casesADTS = []struct {
name string
byts []byte
pkts []*ADTSPacket
pkts ADTSPackets
}{
{
"single",
[]byte{0xff, 0xf1, 0x4c, 0x80, 0x1, 0x3f, 0xfc, 0xaa, 0xbb},
[]*ADTSPacket{
ADTSPackets{
{
Type: 2,
SampleRate: 48000,
@@ -30,7 +30,7 @@ var casesADTS = []struct {
0xbb, 0xff, 0xf1, 0x4c, 0x80, 0x1, 0x3f, 0xfc,
0xcc, 0xdd,
},
[]*ADTSPacket{
ADTSPackets{
{
Type: 2,
SampleRate: 44100,
@@ -47,27 +47,28 @@ var casesADTS = []struct {
},
}
func TestDecodeADTS(t *testing.T) {
func TestADTSUnmarshal(t *testing.T) {
for _, ca := range casesADTS {
t.Run(ca.name, func(t *testing.T) {
pkts, err := DecodeADTS(ca.byts)
var pkts ADTSPackets
err := pkts.Unmarshal(ca.byts)
require.NoError(t, err)
require.Equal(t, ca.pkts, pkts)
})
}
}
func TestEncodeADTS(t *testing.T) {
func TestADTSMarshal(t *testing.T) {
for _, ca := range casesADTS {
t.Run(ca.name, func(t *testing.T) {
byts, err := EncodeADTS(ca.pkts)
byts, err := ca.pkts.Marshal()
require.NoError(t, err)
require.Equal(t, ca.byts, byts)
})
}
}
func TestDecodeADTSErrors(t *testing.T) {
func TestADTSUnmarshalErrors(t *testing.T) {
for _, ca := range []struct {
name string
byts []byte
@@ -115,7 +116,8 @@ func TestDecodeADTSErrors(t *testing.T) {
},
} {
t.Run(ca.name, func(t *testing.T) {
_, err := DecodeADTS(ca.byts)
var pkts ADTSPackets
err := pkts.Unmarshal(ca.byts)
require.EqualError(t, err, ca.err)
})
}

View File

@@ -30,7 +30,7 @@ func NewSender(v base.HeaderValue, user string, pass string) (*Sender, error) {
return ""
}(); v0 != "" {
var auth headers.Authenticate
err := auth.Read(base.HeaderValue{v0})
err := auth.Unmarshal(base.HeaderValue{v0})
if err != nil {
return nil, err
}
@@ -61,7 +61,7 @@ func NewSender(v base.HeaderValue, user string, pass string) (*Sender, error) {
return ""
}(); v0 != "" {
var auth headers.Authenticate
err := auth.Read(base.HeaderValue{v0})
err := auth.Unmarshal(base.HeaderValue{v0})
if err != nil {
return nil, err
}
@@ -112,5 +112,5 @@ func (se *Sender) AddAuthorization(req *base.Request) {
req.Header = make(base.Header)
}
req.Header["Authorization"] = h.Write()
req.Header["Authorization"] = h.Marshal()
}

View File

@@ -99,14 +99,14 @@ func (va *Validator) Header() base.HeaderValue {
ret = append(ret, (&headers.Authenticate{
Method: headers.AuthBasic,
Realm: &va.realm,
}).Write()...)
}).Marshal()...)
case headers.AuthDigest:
ret = append(ret, headers.Authenticate{
Method: headers.AuthDigest,
Realm: &va.realm,
Nonce: &va.nonce,
}.Write()...)
}.Marshal()...)
}
}
return ret
@@ -115,7 +115,7 @@ func (va *Validator) Header() base.HeaderValue {
// ValidateRequest validates a request sent by a client.
func (va *Validator) ValidateRequest(req *base.Request) error {
var auth headers.Authorization
err := auth.Read(req.Header["Authorization"])
err := auth.Unmarshal(req.Header["Authorization"])
if err != nil {
return err
}

View File

@@ -39,16 +39,16 @@ func (b *body) read(header Header, rb *bufio.Reader) error {
return nil
}
func (b body) writeSize() int {
func (b body) marshalSize() int {
return len(b)
}
func (b body) writeTo(buf []byte) int {
func (b body) marshalTo(buf []byte) int {
return copy(buf, b)
}
func (b body) write() []byte {
buf := make([]byte, b.writeSize())
b.writeTo(buf)
func (b body) marshal() []byte {
buf := make([]byte, b.marshalSize())
b.marshalTo(buf)
return buf
}

View File

@@ -73,10 +73,10 @@ func TestBodyReadErrors(t *testing.T) {
}
}
func TestBodyWrite(t *testing.T) {
func TestBodyMarshal(t *testing.T) {
for _, ca := range casesBody {
t.Run(ca.name, func(t *testing.T) {
buf := body(ca.byts).write()
buf := body(ca.byts).marshal()
require.Equal(t, ca.byts, buf)
})
}

View File

@@ -97,7 +97,7 @@ func (h *Header) read(rb *bufio.Reader) error {
return nil
}
func (h Header) writeSize() int {
func (h Header) marshalSize() int {
// sort headers by key
// in order to obtain deterministic results
keys := make([]string, len(h))
@@ -119,7 +119,7 @@ func (h Header) writeSize() int {
return n
}
func (h Header) writeTo(buf []byte) int {
func (h Header) marshalTo(buf []byte) int {
// sort headers by key
// in order to obtain deterministic results
keys := make([]string, len(h))
@@ -141,8 +141,8 @@ func (h Header) writeTo(buf []byte) int {
return pos
}
func (h Header) write() []byte {
buf := make([]byte, h.writeSize())
h.writeTo(buf)
func (h Header) marshal() []byte {
buf := make([]byte, h.marshalSize())
h.marshalTo(buf)
return buf
}

View File

@@ -176,7 +176,7 @@ func TestHeaderReadErrors(t *testing.T) {
func TestHeaderWrite(t *testing.T) {
for _, ca := range casesHeader {
t.Run(ca.name, func(t *testing.T) {
buf := ca.header.write()
buf := ca.header.marshal()
require.Equal(t, ca.enc, buf)
})
}

View File

@@ -77,7 +77,7 @@ type InterleavedFrame struct {
Payload []byte
}
// Read reads an interleaved frame.
// Read decodes an interleaved frame.
func (f *InterleavedFrame) Read(maxPayloadSize int, br *bufio.Reader) error {
var header [4]byte
_, err := io.ReadFull(br, header[:])
@@ -105,13 +105,13 @@ func (f *InterleavedFrame) Read(maxPayloadSize int, br *bufio.Reader) error {
return nil
}
// WriteSize returns the size of an InterleavedFrame.
func (f InterleavedFrame) WriteSize() int {
// MarshalSize returns the size of an InterleavedFrame.
func (f InterleavedFrame) MarshalSize() int {
return 4 + len(f.Payload)
}
// WriteTo writes an InterleavedFrame.
func (f InterleavedFrame) WriteTo(buf []byte) (int, error) {
// MarshalTo writes an InterleavedFrame.
func (f InterleavedFrame) MarshalTo(buf []byte) (int, error) {
pos := 0
pos += copy(buf[pos:], []byte{0x24, byte(f.Channel)})
@@ -124,9 +124,9 @@ func (f InterleavedFrame) WriteTo(buf []byte) (int, error) {
return pos, nil
}
// Write writes an InterleavedFrame.
func (f InterleavedFrame) Write() ([]byte, error) {
buf := make([]byte, f.WriteSize())
_, err := f.WriteTo(buf)
// Marshal writes an InterleavedFrame.
func (f InterleavedFrame) Marshal() ([]byte, error) {
buf := make([]byte, f.MarshalSize())
_, err := f.MarshalTo(buf)
return buf, err
}

View File

@@ -79,10 +79,10 @@ func TestInterleavedFrameReadErrors(t *testing.T) {
}
}
func TestInterleavedFrameWrite(t *testing.T) {
func TestInterleavedFrameMarshal(t *testing.T) {
for _, ca := range casesInterleavedFrame {
t.Run(ca.name, func(t *testing.T) {
buf, err := ca.dec.Write()
buf, err := ca.dec.Marshal()
require.NoError(t, err)
require.Equal(t, ca.enc, buf)
})

View File

@@ -117,8 +117,8 @@ func (req *Request) ReadIgnoreFrames(maxPayloadSize int, rb *bufio.Reader) error
}
}
// WriteSize returns the size of a Request.
func (req Request) WriteSize() int {
// MarshalSize returns the size of a Request.
func (req Request) MarshalSize() int {
n := 0
urStr := req.URL.CloneWithoutCredentials().String()
@@ -128,15 +128,15 @@ func (req Request) WriteSize() int {
req.Header["Content-Length"] = HeaderValue{strconv.FormatInt(int64(len(req.Body)), 10)}
}
n += req.Header.writeSize()
n += req.Header.marshalSize()
n += body(req.Body).writeSize()
n += body(req.Body).marshalSize()
return n
}
// WriteTo writes a Request.
func (req Request) WriteTo(buf []byte) (int, error) {
// MarshalTo writes a Request.
func (req Request) MarshalTo(buf []byte) (int, error) {
pos := 0
urStr := req.URL.CloneWithoutCredentials().String()
@@ -146,22 +146,22 @@ func (req Request) WriteTo(buf []byte) (int, error) {
req.Header["Content-Length"] = HeaderValue{strconv.FormatInt(int64(len(req.Body)), 10)}
}
pos += req.Header.writeTo(buf[pos:])
pos += req.Header.marshalTo(buf[pos:])
pos += body(req.Body).writeTo(buf[pos:])
pos += body(req.Body).marshalTo(buf[pos:])
return pos, nil
}
// Write writes a Request.
func (req Request) Write() ([]byte, error) {
buf := make([]byte, req.WriteSize())
_, err := req.WriteTo(buf)
// Marshal writes a Request.
func (req Request) Marshal() ([]byte, error) {
buf := make([]byte, req.MarshalSize())
_, err := req.MarshalTo(buf)
return buf, err
}
// String implements fmt.Stringer.
func (req Request) String() string {
buf, _ := req.Write()
buf, _ := req.Marshal()
return string(buf)
}

View File

@@ -228,10 +228,10 @@ func TestRequestReadErrors(t *testing.T) {
}
}
func TestRequestWrite(t *testing.T) {
func TestRequestMarshal(t *testing.T) {
for _, ca := range casesRequest {
t.Run(ca.name, func(t *testing.T) {
buf, err := ca.req.Write()
buf, err := ca.req.Marshal()
require.NoError(t, err)
require.Equal(t, ca.byts, buf)
})

View File

@@ -201,8 +201,8 @@ func (res *Response) ReadIgnoreFrames(maxPayloadSize int, rb *bufio.Reader) erro
}
}
// WriteSize returns the size of a Response.
func (res Response) WriteSize() int {
// MarshalSize returns the size of a Response.
func (res Response) MarshalSize() int {
n := 0
if res.StatusMessage == "" {
@@ -219,15 +219,15 @@ func (res Response) WriteSize() int {
res.Header["Content-Length"] = HeaderValue{strconv.FormatInt(int64(len(res.Body)), 10)}
}
n += res.Header.writeSize()
n += res.Header.marshalSize()
n += body(res.Body).writeSize()
n += body(res.Body).marshalSize()
return n
}
// WriteTo writes a Response.
func (res Response) WriteTo(buf []byte) (int, error) {
// MarshalTo writes a Response.
func (res Response) MarshalTo(buf []byte) (int, error) {
if res.StatusMessage == "" {
if status, ok := statusMessages[res.StatusCode]; ok {
res.StatusMessage = status
@@ -244,22 +244,22 @@ func (res Response) WriteTo(buf []byte) (int, error) {
res.Header["Content-Length"] = HeaderValue{strconv.FormatInt(int64(len(res.Body)), 10)}
}
pos += res.Header.writeTo(buf[pos:])
pos += res.Header.marshalTo(buf[pos:])
pos += body(res.Body).writeTo(buf[pos:])
pos += body(res.Body).marshalTo(buf[pos:])
return pos, nil
}
// Write writes a Response.
func (res Response) Write() ([]byte, error) {
buf := make([]byte, res.WriteSize())
_, err := res.WriteTo(buf)
// Marshal writes a Response.
func (res Response) Marshal() ([]byte, error) {
buf := make([]byte, res.MarshalSize())
_, err := res.MarshalTo(buf)
return buf, err
}
// String implements fmt.Stringer.
func (res Response) String() string {
buf, _ := res.Write()
buf, _ := res.Marshal()
return string(buf)
}

View File

@@ -175,17 +175,17 @@ func TestResponseReadErrors(t *testing.T) {
}
}
func TestResponseWrite(t *testing.T) {
func TestResponseMarshal(t *testing.T) {
for _, c := range casesResponse {
t.Run(c.name, func(t *testing.T) {
buf, err := c.res.Write()
buf, err := c.res.Marshal()
require.NoError(t, err)
require.Equal(t, c.byts, buf)
})
}
}
func TestResponseWriteAutoFillStatus(t *testing.T) {
func TestResponseMarshalAutoFillStatus(t *testing.T) {
res := &Response{
StatusCode: StatusMethodNotAllowed,
Header: Header{
@@ -207,7 +207,7 @@ func TestResponseWriteAutoFillStatus(t *testing.T) {
"\r\n",
)
buf, err := res.Write()
buf, err := res.Marshal()
require.NoError(t, err)
require.Equal(t, byts, buf)
}

View File

@@ -4,8 +4,8 @@ import (
"fmt"
)
// AnnexBDecode decodes NALUs from the Annex-B stream format.
func AnnexBDecode(byts []byte) ([][]byte, error) {
// AnnexBUnmarshal decodes NALUs from the Annex-B stream format.
func AnnexBUnmarshal(byts []byte) ([][]byte, error) {
bl := len(byts)
zeroCount := 0
@@ -73,7 +73,7 @@ outer:
return ret, nil
}
func annexBEncodeSize(nalus [][]byte) int {
func annexBMarshalSize(nalus [][]byte) int {
n := 0
for _, nalu := range nalus {
n += 4 + len(nalu)
@@ -81,9 +81,9 @@ func annexBEncodeSize(nalus [][]byte) int {
return n
}
// AnnexBEncode encodes NALUs into the Annex-B stream format.
func AnnexBEncode(nalus [][]byte) ([]byte, error) {
buf := make([]byte, annexBEncodeSize(nalus))
// AnnexBMarshal encodes NALUs into the Annex-B stream format.
func AnnexBMarshal(nalus [][]byte) ([]byte, error) {
buf := make([]byte, annexBMarshalSize(nalus))
pos := 0
for _, nalu := range nalus {

View File

@@ -65,27 +65,27 @@ var casesAnnexB = []struct {
},
}
func TestAnnexBDecode(t *testing.T) {
func TestAnnexBUnmarshal(t *testing.T) {
for _, ca := range casesAnnexB {
t.Run(ca.name, func(t *testing.T) {
dec, err := AnnexBDecode(ca.encin)
dec, err := AnnexBUnmarshal(ca.encin)
require.NoError(t, err)
require.Equal(t, ca.dec, dec)
})
}
}
func TestAnnexBEncode(t *testing.T) {
func TestAnnexBMarshal(t *testing.T) {
for _, ca := range casesAnnexB {
t.Run(ca.name, func(t *testing.T) {
enc, err := AnnexBEncode(ca.dec)
enc, err := AnnexBMarshal(ca.dec)
require.NoError(t, err)
require.Equal(t, ca.encout, enc)
})
}
}
func TestAnnexBDecodeError(t *testing.T) {
func TestAnnexBUnmarshalError(t *testing.T) {
for _, ca := range []struct {
name string
enc []byte
@@ -118,7 +118,7 @@ func TestAnnexBDecodeError(t *testing.T) {
},
} {
t.Run(ca.name, func(t *testing.T) {
_, err := AnnexBDecode(ca.enc)
_, err := AnnexBUnmarshal(ca.enc)
require.EqualError(t, err, ca.err)
})
}

View File

@@ -5,8 +5,8 @@ import (
"fmt"
)
// AVCCDecode decodes NALUs from the AVCC stream format.
func AVCCDecode(buf []byte) ([][]byte, error) {
// AVCCUnmarshal decodes NALUs from the AVCC stream format.
func AVCCUnmarshal(buf []byte) ([][]byte, error) {
bl := len(buf)
pos := 0
var ret [][]byte
@@ -38,7 +38,7 @@ func AVCCDecode(buf []byte) ([][]byte, error) {
return ret, nil
}
func avccEncodeSize(nalus [][]byte) int {
func avccMarshalSize(nalus [][]byte) int {
n := 0
for _, nalu := range nalus {
n += 4 + len(nalu)
@@ -46,9 +46,9 @@ func avccEncodeSize(nalus [][]byte) int {
return n
}
// AVCCEncode encodes NALUs into the AVCC stream format.
func AVCCEncode(nalus [][]byte) ([]byte, error) {
buf := make([]byte, avccEncodeSize(nalus))
// AVCCMarshal encodes NALUs into the AVCC stream format.
func AVCCMarshal(nalus [][]byte) ([]byte, error) {
buf := make([]byte, avccMarshalSize(nalus))
pos := 0
for _, nalu := range nalus {

View File

@@ -39,27 +39,27 @@ var casesAVCC = []struct {
},
}
func TestAVCCDecode(t *testing.T) {
func TestAVCCUnmarshal(t *testing.T) {
for _, ca := range casesAVCC {
t.Run(ca.name, func(t *testing.T) {
dec, err := AVCCDecode(ca.enc)
dec, err := AVCCUnmarshal(ca.enc)
require.NoError(t, err)
require.Equal(t, ca.dec, dec)
})
}
}
func TestAVCCEncode(t *testing.T) {
func TestAVCCMarshal(t *testing.T) {
for _, ca := range casesAVCC {
t.Run(ca.name, func(t *testing.T) {
enc, err := AVCCEncode(ca.dec)
enc, err := AVCCMarshal(ca.dec)
require.NoError(t, err)
require.Equal(t, ca.enc, enc)
})
}
}
func TestAVCCDecodeError(t *testing.T) {
func TestAVCCUnmarshalError(t *testing.T) {
for _, ca := range []struct {
name string
enc []byte
@@ -78,7 +78,7 @@ func TestAVCCDecodeError(t *testing.T) {
},
} {
t.Run(ca.name, func(t *testing.T) {
_, err := AVCCDecode(ca.enc)
_, err := AVCCUnmarshal(ca.enc)
require.Error(t, err)
})
}

View File

@@ -49,8 +49,8 @@ type Authenticate struct {
Algorithm *string
}
// Read decodes an Authenticate or a WWW-Authenticate header.
func (h *Authenticate) Read(v base.HeaderValue) error {
// Unmarshal decodes an Authenticate or a WWW-Authenticate header.
func (h *Authenticate) Unmarshal(v base.HeaderValue) error {
if len(v) == 0 {
return fmt.Errorf("value not provided")
}
@@ -116,8 +116,8 @@ func (h *Authenticate) Read(v base.HeaderValue) error {
return nil
}
// Write encodes an Authenticate or a WWW-Authenticate header.
func (h Authenticate) Write() base.HeaderValue {
// Marshal encodes an Authenticate or a WWW-Authenticate header.
func (h Authenticate) Marshal() base.HeaderValue {
ret := ""
switch h.Method {

View File

@@ -178,18 +178,18 @@ var casesAuthenticate = []struct {
},
}
func TestAuthenticateRead(t *testing.T) {
func TestAuthenticateUnmarshal(t *testing.T) {
for _, ca := range casesAuthenticate {
t.Run(ca.name, func(t *testing.T) {
var h Authenticate
err := h.Read(ca.vin)
err := h.Unmarshal(ca.vin)
require.NoError(t, err)
require.Equal(t, ca.h, h)
})
}
}
func TestAutenticatehReadErrors(t *testing.T) {
func TestAutenticatehUnmarshalErrors(t *testing.T) {
for _, ca := range []struct {
name string
hv base.HeaderValue
@@ -223,16 +223,16 @@ func TestAutenticatehReadErrors(t *testing.T) {
} {
t.Run(ca.name, func(t *testing.T) {
var h Authenticate
err := h.Read(ca.hv)
err := h.Unmarshal(ca.hv)
require.EqualError(t, err, ca.err)
})
}
}
func TestAuthenticateWrite(t *testing.T) {
func TestAuthenticateMarshal(t *testing.T) {
for _, ca := range casesAuthenticate {
t.Run(ca.name, func(t *testing.T) {
vout := ca.h.Write()
vout := ca.h.Marshal()
require.Equal(t, ca.vout, vout)
})
}

View File

@@ -23,8 +23,8 @@ type Authorization struct {
DigestValues Authenticate
}
// Read decodes an Authorization header.
func (h *Authorization) Read(v base.HeaderValue) error {
// Unmarshal decodes an Authorization header.
func (h *Authorization) Unmarshal(v base.HeaderValue) error {
if len(v) == 0 {
return fmt.Errorf("value not provided")
}
@@ -57,7 +57,7 @@ func (h *Authorization) Read(v base.HeaderValue) error {
h.Method = AuthDigest
var vals Authenticate
err := vals.Read(base.HeaderValue{v0})
err := vals.Unmarshal(base.HeaderValue{v0})
if err != nil {
return err
}
@@ -71,8 +71,8 @@ func (h *Authorization) Read(v base.HeaderValue) error {
return nil
}
// Write encodes an Authorization header.
func (h Authorization) Write() base.HeaderValue {
// Marshal encodes an Authorization header.
func (h Authorization) Marshal() base.HeaderValue {
switch h.Method {
case AuthBasic:
response := base64.StdEncoding.EncodeToString([]byte(h.BasicUser + ":" + h.BasicPass))
@@ -80,6 +80,6 @@ func (h Authorization) Write() base.HeaderValue {
return base.HeaderValue{"Basic " + response}
default: // AuthDigest
return h.DigestValues.Write()
return h.DigestValues.Marshal()
}
}

View File

@@ -49,18 +49,18 @@ var casesAuthorization = []struct {
},
}
func TestAuthorizationRead(t *testing.T) {
func TestAuthorizationUnmarshal(t *testing.T) {
for _, ca := range casesAuthorization {
t.Run(ca.name, func(t *testing.T) {
var h Authorization
err := h.Read(ca.vin)
err := h.Unmarshal(ca.vin)
require.NoError(t, err)
require.Equal(t, ca.h, h)
})
}
}
func TestAuthorizationReadErrors(t *testing.T) {
func TestAuthorizationUnmarshalErrors(t *testing.T) {
for _, ca := range []struct {
name string
hv base.HeaderValue
@@ -99,16 +99,16 @@ func TestAuthorizationReadErrors(t *testing.T) {
} {
t.Run(ca.name, func(t *testing.T) {
var h Authorization
err := h.Read(ca.hv)
err := h.Unmarshal(ca.hv)
require.EqualError(t, err, ca.err)
})
}
}
func TestAuthorizationWrite(t *testing.T) {
func TestAuthorizationMarshal(t *testing.T) {
for _, ca := range casesAuthorization {
t.Run(ca.name, func(t *testing.T) {
vout := ca.h.Write()
vout := ca.h.Marshal()
require.Equal(t, ca.vout, vout)
})
}

View File

@@ -25,7 +25,7 @@ type RangeSMPTETime struct {
Subframe uint
}
func (t *RangeSMPTETime) read(s string) error {
func (t *RangeSMPTETime) unmarshal(s string) error {
parts := strings.Split(s, ":")
if len(parts) != 3 && len(parts) != 4 {
return fmt.Errorf("invalid SMPTE time (%v)", s)
@@ -77,7 +77,7 @@ func (t *RangeSMPTETime) read(s string) error {
return nil
}
func (t RangeSMPTETime) write() string {
func (t RangeSMPTETime) marshal() string {
d := uint64(t.Time.Seconds())
hours := d / 3600
d %= 3600
@@ -103,15 +103,15 @@ type RangeSMPTE struct {
End *RangeSMPTETime
}
func (r *RangeSMPTE) read(start string, end string) error {
err := r.Start.read(start)
func (r *RangeSMPTE) unmarshal(start string, end string) error {
err := r.Start.unmarshal(start)
if err != nil {
return err
}
if end != "" {
var v RangeSMPTETime
err := v.read(end)
err := v.unmarshal(end)
if err != nil {
return err
}
@@ -121,10 +121,10 @@ func (r *RangeSMPTE) read(start string, end string) error {
return nil
}
func (r RangeSMPTE) write() string {
ret := "smpte=" + r.Start.write() + "-"
func (r RangeSMPTE) marshal() string {
ret := "smpte=" + r.Start.marshal() + "-"
if r.End != nil {
ret += r.End.write()
ret += r.End.marshal()
}
return ret
}
@@ -132,7 +132,7 @@ func (r RangeSMPTE) write() string {
// RangeNPTTime is a time expressed in NPT unit.
type RangeNPTTime time.Duration
func (t *RangeNPTTime) read(s string) error {
func (t *RangeNPTTime) unmarshal(s string) error {
parts := strings.Split(s, ":")
if len(parts) > 3 {
return fmt.Errorf("invalid NPT time (%v)", s)
@@ -170,7 +170,7 @@ func (t *RangeNPTTime) read(s string) error {
return nil
}
func (t RangeNPTTime) write() string {
func (t RangeNPTTime) marshal() string {
return strconv.FormatFloat(time.Duration(t).Seconds(), 'f', -1, 64)
}
@@ -180,15 +180,15 @@ type RangeNPT struct {
End *RangeNPTTime
}
func (r *RangeNPT) read(start string, end string) error {
err := r.Start.read(start)
func (r *RangeNPT) unmarshal(start string, end string) error {
err := r.Start.unmarshal(start)
if err != nil {
return err
}
if end != "" {
var v RangeNPTTime
err := v.read(end)
err := v.unmarshal(end)
if err != nil {
return err
}
@@ -198,10 +198,10 @@ func (r *RangeNPT) read(start string, end string) error {
return nil
}
func (r RangeNPT) write() string {
ret := "npt=" + r.Start.write() + "-"
func (r RangeNPT) marshal() string {
ret := "npt=" + r.Start.marshal() + "-"
if r.End != nil {
ret += r.End.write()
ret += r.End.marshal()
}
return ret
}
@@ -209,7 +209,7 @@ func (r RangeNPT) write() string {
// RangeUTCTime is a time expressed in UTC unit.
type RangeUTCTime time.Time
func (t *RangeUTCTime) read(s string) error {
func (t *RangeUTCTime) unmarshal(s string) error {
tmp, err := time.Parse("20060102T150405Z", s)
if err != nil {
return err
@@ -219,7 +219,7 @@ func (t *RangeUTCTime) read(s string) error {
return nil
}
func (t RangeUTCTime) write() string {
func (t RangeUTCTime) marshal() string {
return time.Time(t).Format("20060102T150405Z")
}
@@ -229,15 +229,15 @@ type RangeUTC struct {
End *RangeUTCTime
}
func (r *RangeUTC) read(start string, end string) error {
err := r.Start.read(start)
func (r *RangeUTC) unmarshal(start string, end string) error {
err := r.Start.unmarshal(start)
if err != nil {
return err
}
if end != "" {
var v RangeUTCTime
err := v.read(end)
err := v.unmarshal(end)
if err != nil {
return err
}
@@ -247,10 +247,10 @@ func (r *RangeUTC) read(start string, end string) error {
return nil
}
func (r RangeUTC) write() string {
ret := "clock=" + r.Start.write() + "-"
func (r RangeUTC) marshal() string {
ret := "clock=" + r.Start.marshal() + "-"
if r.End != nil {
ret += r.End.write()
ret += r.End.marshal()
}
return ret
}
@@ -260,17 +260,17 @@ func (r RangeUTC) write() string {
// - RangeNPT
// - RangeUTC
type RangeValue interface {
read(string, string) error
write() string
unmarshal(string, string) error
marshal() string
}
func rangeValueRead(s RangeValue, v string) error {
func rangeValueUnmarshal(s RangeValue, v string) error {
parts := strings.Split(v, "-")
if len(parts) != 2 {
return fmt.Errorf("invalid value (%v)", v)
}
return s.read(parts[0], parts[1])
return s.unmarshal(parts[0], parts[1])
}
// Range is a Range header.
@@ -282,8 +282,8 @@ type Range struct {
Time *RangeUTCTime
}
// Read decodes a Range header.
func (h *Range) Read(v base.HeaderValue) error {
// Unmarshal decodes a Range header.
func (h *Range) Unmarshal(v base.HeaderValue) error {
if len(v) == 0 {
return fmt.Errorf("value not provided")
}
@@ -305,7 +305,7 @@ func (h *Range) Read(v base.HeaderValue) error {
switch k {
case "smpte":
s := &RangeSMPTE{}
err := rangeValueRead(s, v)
err := rangeValueUnmarshal(s, v)
if err != nil {
return err
}
@@ -315,7 +315,7 @@ func (h *Range) Read(v base.HeaderValue) error {
case "npt":
s := &RangeNPT{}
err := rangeValueRead(s, v)
err := rangeValueUnmarshal(s, v)
if err != nil {
return err
}
@@ -325,7 +325,7 @@ func (h *Range) Read(v base.HeaderValue) error {
case "clock":
s := &RangeUTC{}
err := rangeValueRead(s, v)
err := rangeValueUnmarshal(s, v)
if err != nil {
return err
}
@@ -335,7 +335,7 @@ func (h *Range) Read(v base.HeaderValue) error {
case "time":
t := &RangeUTCTime{}
err := t.read(v)
err := t.unmarshal(v)
if err != nil {
return err
}
@@ -351,11 +351,11 @@ func (h *Range) Read(v base.HeaderValue) error {
return nil
}
// Write encodes a Range header.
func (h Range) Write() base.HeaderValue {
v := h.Value.write()
// Marshal encodes a Range header.
func (h Range) Marshal() base.HeaderValue {
v := h.Value.marshal()
if h.Time != nil {
v += ";time=" + h.Time.write()
v += ";time=" + h.Time.marshal()
}
return base.HeaderValue{v}
}

View File

@@ -121,18 +121,18 @@ var casesRange = []struct {
},
}
func TestRangeRead(t *testing.T) {
func TestRangeUnmarshal(t *testing.T) {
for _, ca := range casesRange {
t.Run(ca.name, func(t *testing.T) {
var h Range
err := h.Read(ca.vin)
err := h.Unmarshal(ca.vin)
require.NoError(t, err)
require.Equal(t, ca.h, h)
})
}
}
func TestRangeReadErrors(t *testing.T) {
func TestRangeUnmarshalErrors(t *testing.T) {
for _, ca := range []struct {
name string
hv base.HeaderValue
@@ -256,16 +256,16 @@ func TestRangeReadErrors(t *testing.T) {
} {
t.Run(ca.name, func(t *testing.T) {
var h Range
err := h.Read(ca.hv)
err := h.Unmarshal(ca.hv)
require.EqualError(t, err, ca.err)
})
}
}
func TestRangeWrite(t *testing.T) {
func TestRangeMarshal(t *testing.T) {
for _, ca := range casesRange {
t.Run(ca.name, func(t *testing.T) {
req := ca.h.Write()
req := ca.h.Marshal()
require.Equal(t, ca.vout, req)
})
}

View File

@@ -18,8 +18,8 @@ type RTPInfoEntry struct {
// RTPInfo is a RTP-Info header.
type RTPInfo []*RTPInfoEntry
// Read decodes a RTP-Info header.
func (h *RTPInfo) Read(v base.HeaderValue) error {
// Unmarshal decodes a RTP-Info header.
func (h *RTPInfo) Unmarshal(v base.HeaderValue) error {
if len(v) == 0 {
return fmt.Errorf("value not provided")
}
@@ -75,8 +75,8 @@ func (h *RTPInfo) Read(v base.HeaderValue) error {
return nil
}
// Write encodes a RTP-Info header.
func (h RTPInfo) Write() base.HeaderValue {
// Marshal encodes a RTP-Info header.
func (h RTPInfo) Marshal() base.HeaderValue {
rets := make([]string, len(h))
for i, e := range h {

View File

@@ -173,18 +173,18 @@ var casesRTPInfo = []struct {
},
}
func TestRTPInfoRead(t *testing.T) {
func TestRTPInfoUnmarshal(t *testing.T) {
for _, ca := range casesRTPInfo {
t.Run(ca.name, func(t *testing.T) {
var h RTPInfo
err := h.Read(ca.vin)
err := h.Unmarshal(ca.vin)
require.NoError(t, err)
require.Equal(t, ca.h, h)
})
}
}
func TestRTPInfoReadErrors(t *testing.T) {
func TestRTPInfoUnmarshalErrors(t *testing.T) {
for _, ca := range []struct {
name string
hv base.HeaderValue
@@ -223,16 +223,16 @@ func TestRTPInfoReadErrors(t *testing.T) {
} {
t.Run(ca.name, func(t *testing.T) {
var h RTPInfo
err := h.Read(ca.hv)
err := h.Unmarshal(ca.hv)
require.EqualError(t, err, ca.err)
})
}
}
func TestRTPInfoWrite(t *testing.T) {
func TestRTPInfoMarshal(t *testing.T) {
for _, ca := range casesRTPInfo {
t.Run(ca.name, func(t *testing.T) {
req := ca.h.Write()
req := ca.h.Marshal()
require.Equal(t, ca.vout, req)
})
}

View File

@@ -17,8 +17,8 @@ type Session struct {
Timeout *uint
}
// Read decodes a Session header.
func (h *Session) Read(v base.HeaderValue) error {
// Unmarshal decodes a Session header.
func (h *Session) Unmarshal(v base.HeaderValue) error {
if len(v) == 0 {
return fmt.Errorf("value not provided")
}
@@ -59,8 +59,8 @@ func (h *Session) Read(v base.HeaderValue) error {
return nil
}
// Write encodes a Session header.
func (h Session) Write() base.HeaderValue {
// Marshal encodes a Session header.
func (h Session) Marshal() base.HeaderValue {
ret := h.Session
if h.Timeout != nil {

View File

@@ -48,18 +48,18 @@ var casesSession = []struct {
},
}
func TestSessionRead(t *testing.T) {
func TestSessionUnmarshal(t *testing.T) {
for _, ca := range casesSession {
t.Run(ca.name, func(t *testing.T) {
var h Session
err := h.Read(ca.vin)
err := h.Unmarshal(ca.vin)
require.NoError(t, err)
require.Equal(t, ca.h, h)
})
}
}
func TestSessionReadErrors(t *testing.T) {
func TestSessionUnmarshalErrors(t *testing.T) {
for _, ca := range []struct {
name string
hv base.HeaderValue
@@ -88,16 +88,16 @@ func TestSessionReadErrors(t *testing.T) {
} {
t.Run(ca.name, func(t *testing.T) {
var h Session
err := h.Read(ca.hv)
err := h.Unmarshal(ca.hv)
require.EqualError(t, err, ca.err)
})
}
}
func TestSessionWrite(t *testing.T) {
func TestSessionMarshal(t *testing.T) {
for _, ca := range casesSession {
t.Run(ca.name, func(t *testing.T) {
req := ca.h.Write()
req := ca.h.Marshal()
require.Equal(t, ca.vout, req)
})
}

View File

@@ -104,8 +104,8 @@ func parsePorts(val string) (*[2]int, error) {
return &[2]int{0, 0}, fmt.Errorf("invalid ports (%v)", val)
}
// Read decodes a Transport header.
func (h *Transport) Read(v base.HeaderValue) error {
// Unmarshal decodes a Transport header.
func (h *Transport) Unmarshal(v base.HeaderValue) error {
if len(v) == 0 {
return fmt.Errorf("value not provided")
}
@@ -258,8 +258,8 @@ func (h *Transport) Read(v base.HeaderValue) error {
return nil
}
// Write encodes a Transport header
func (h Transport) Write() base.HeaderValue {
// Marshal encodes a Transport header
func (h Transport) Marshal() base.HeaderValue {
var rets []string
if h.Protocol == TransportProtocolUDP {

View File

@@ -218,18 +218,18 @@ var casesTransport = []struct {
},
}
func TestTransportRead(t *testing.T) {
func TestTransportUnmarshal(t *testing.T) {
for _, ca := range casesTransport {
t.Run(ca.name, func(t *testing.T) {
var h Transport
err := h.Read(ca.vin)
err := h.Unmarshal(ca.vin)
require.NoError(t, err)
require.Equal(t, ca.h, h)
})
}
}
func TestTransportReadErrors(t *testing.T) {
func TestTransportUnmarshalErrors(t *testing.T) {
for _, ca := range []struct {
name string
hv base.HeaderValue
@@ -318,16 +318,16 @@ func TestTransportReadErrors(t *testing.T) {
} {
t.Run(ca.name, func(t *testing.T) {
var h Transport
err := h.Read(ca.hv)
err := h.Unmarshal(ca.hv)
require.EqualError(t, err, ca.err)
})
}
}
func TestTransportWrite(t *testing.T) {
func TestTransportMarshal(t *testing.T) {
for _, ca := range casesTransport {
t.Run(ca.name, func(t *testing.T) {
req := ca.h.Write()
req := ca.h.Marshal()
require.Equal(t, ca.vout, req)
})
}

View File

@@ -82,7 +82,8 @@ func (d *Decoder) Decode(pkt *rtp.Packet) ([][]byte, time.Duration, error) {
au := payload[:dataLens[0]]
pkts, err := aac.DecodeADTS(au)
var pkts aac.ADTSPackets
err := pkts.Unmarshal(au)
if err != nil {
return nil, 0, fmt.Errorf("unable to decode ADTS: %s", err)
}
@@ -111,7 +112,8 @@ func (d *Decoder) Decode(pkt *rtp.Packet) ([][]byte, time.Duration, error) {
if !d.firstPacketParsed {
if len(aus) == 1 && len(aus[0]) >= 2 {
if aus[0][0] == 0xFF && (aus[0][1]&0xF0) == 0xF0 {
pkts, err := aac.DecodeADTS(aus[0])
var pkts aac.ADTSPackets
err := pkts.Unmarshal(aus[0])
if err == nil && len(pkts) == 1 {
d.adtsMode = true
aus[0] = pkts[0].AU

View File

@@ -285,7 +285,7 @@ func TestServerPublishSetupPath(t *testing.T) {
URL: mustParseURL(ca.url),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": th.Write(),
"Transport": th.Marshal(),
},
})
require.NoError(t, err)
@@ -341,7 +341,7 @@ func TestServerPublishErrorSetupDifferentPaths(t *testing.T) {
"CSeq": base.HeaderValue{"1"},
"Content-Type": base.HeaderValue{"application/sdp"},
},
Body: tracks.Write(false),
Body: tracks.Marshal(false),
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
@@ -364,7 +364,7 @@ func TestServerPublishErrorSetupDifferentPaths(t *testing.T) {
URL: mustParseURL("rtsp://localhost:8554/test2stream/trackID=0"),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": th.Write(),
"Transport": th.Marshal(),
},
})
require.NoError(t, err)
@@ -421,7 +421,7 @@ func TestServerPublishErrorSetupTrackTwice(t *testing.T) {
"CSeq": base.HeaderValue{"1"},
"Content-Type": base.HeaderValue{"application/sdp"},
},
Body: tracks.Write(false),
Body: tracks.Marshal(false),
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
@@ -444,14 +444,14 @@ func TestServerPublishErrorSetupTrackTwice(t *testing.T) {
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": th.Write(),
"Transport": th.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
var sx headers.Session
err = sx.Read(res.Header["Session"])
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
res, err = writeReqReadRes(conn, br, base.Request{
@@ -459,7 +459,7 @@ func TestServerPublishErrorSetupTrackTwice(t *testing.T) {
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
Header: base.Header{
"CSeq": base.HeaderValue{"3"},
"Transport": th.Write(),
"Transport": th.Marshal(),
"Session": base.HeaderValue{sx.Session},
},
})
@@ -528,7 +528,7 @@ func TestServerPublishErrorRecordPartialTracks(t *testing.T) {
"CSeq": base.HeaderValue{"1"},
"Content-Type": base.HeaderValue{"application/sdp"},
},
Body: tracks.Write(false),
Body: tracks.Marshal(false),
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
@@ -551,14 +551,14 @@ func TestServerPublishErrorRecordPartialTracks(t *testing.T) {
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": th.Write(),
"Transport": th.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
var sx headers.Session
err = sx.Read(res.Header["Session"])
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
res, err = writeReqReadRes(conn, br, base.Request{
@@ -679,7 +679,7 @@ func TestServerPublish(t *testing.T) {
"CSeq": base.HeaderValue{"1"},
"Content-Type": base.HeaderValue{"application/sdp"},
},
Body: tracks.Write(false),
Body: tracks.Marshal(false),
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
@@ -721,18 +721,18 @@ func TestServerPublish(t *testing.T) {
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": inTH.Write(),
"Transport": inTH.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
var sx headers.Session
err = sx.Read(res.Header["Session"])
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
var th headers.Transport
err = th.Read(res.Header["Transport"])
err = th.Unmarshal(res.Header["Transport"])
require.NoError(t, err)
res, err = writeReqReadRes(conn, br, base.Request{
@@ -786,14 +786,14 @@ func TestServerPublish(t *testing.T) {
byts, _ := base.InterleavedFrame{
Channel: 0,
Payload: testRTPPacketMarshaled,
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
byts, _ = base.InterleavedFrame{
Channel: 1,
Payload: testRTCPPacketMarshaled,
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
}
@@ -883,7 +883,7 @@ func TestServerPublishErrorInvalidProtocol(t *testing.T) {
"CSeq": base.HeaderValue{"1"},
"Content-Type": base.HeaderValue{"application/sdp"},
},
Body: tracks.Write(false),
Body: tracks.Marshal(false),
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
@@ -906,18 +906,18 @@ func TestServerPublishErrorInvalidProtocol(t *testing.T) {
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": inTH.Write(),
"Transport": inTH.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
var sx headers.Session
err = sx.Read(res.Header["Session"])
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
var th headers.Transport
err = th.Read(res.Header["Transport"])
err = th.Unmarshal(res.Header["Transport"])
require.NoError(t, err)
res, err = writeReqReadRes(conn, br, base.Request{
@@ -934,7 +934,7 @@ func TestServerPublishErrorInvalidProtocol(t *testing.T) {
byts, _ := base.InterleavedFrame{
Channel: 0,
Payload: []byte{0x01, 0x02, 0x03, 0x04},
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
}
@@ -989,7 +989,7 @@ func TestServerPublishRTCPReport(t *testing.T) {
"CSeq": base.HeaderValue{"1"},
"Content-Type": base.HeaderValue{"application/sdp"},
},
Body: tracks.Write(false),
Body: tracks.Marshal(false),
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
@@ -1018,18 +1018,18 @@ func TestServerPublishRTCPReport(t *testing.T) {
}(),
Protocol: headers.TransportProtocolUDP,
ClientPorts: &[2]int{34556, 34557},
}.Write(),
}.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
var sx headers.Session
err = sx.Read(res.Header["Session"])
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
var th headers.Transport
err = th.Read(res.Header["Transport"])
err = th.Unmarshal(res.Header["Transport"])
require.NoError(t, err)
res, err = writeReqReadRes(conn, br, base.Request{
@@ -1166,7 +1166,7 @@ func TestServerPublishTimeout(t *testing.T) {
"CSeq": base.HeaderValue{"1"},
"Content-Type": base.HeaderValue{"application/sdp"},
},
Body: tracks.Write(false),
Body: tracks.Marshal(false),
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
@@ -1195,18 +1195,18 @@ func TestServerPublishTimeout(t *testing.T) {
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": inTH.Write(),
"Transport": inTH.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
var sx headers.Session
err = sx.Read(res.Header["Session"])
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
var th headers.Transport
err = th.Read(res.Header["Transport"])
err = th.Unmarshal(res.Header["Transport"])
require.NoError(t, err)
res, err = writeReqReadRes(conn, br, base.Request{
@@ -1295,7 +1295,7 @@ func TestServerPublishWithoutTeardown(t *testing.T) {
"CSeq": base.HeaderValue{"1"},
"Content-Type": base.HeaderValue{"application/sdp"},
},
Body: tracks.Write(false),
Body: tracks.Marshal(false),
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
@@ -1324,18 +1324,18 @@ func TestServerPublishWithoutTeardown(t *testing.T) {
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": inTH.Write(),
"Transport": inTH.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
var sx headers.Session
err = sx.Read(res.Header["Session"])
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
var th headers.Transport
err = th.Read(res.Header["Transport"])
err = th.Unmarshal(res.Header["Transport"])
require.NoError(t, err)
res, err = writeReqReadRes(conn, br, base.Request{
@@ -1416,7 +1416,7 @@ func TestServerPublishUDPChangeConn(t *testing.T) {
"CSeq": base.HeaderValue{"1"},
"Content-Type": base.HeaderValue{"application/sdp"},
},
Body: tracks.Write(false),
Body: tracks.Marshal(false),
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
@@ -1439,14 +1439,14 @@ func TestServerPublishUDPChangeConn(t *testing.T) {
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": inTH.Write(),
"Transport": inTH.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
var sx headers.Session
err = sx.Read(res.Header["Session"])
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
res, err = writeReqReadRes(conn, br, base.Request{

View File

@@ -141,7 +141,7 @@ func TestServerReadSetupPath(t *testing.T) {
URL: mustParseURL(ca.url),
Header: base.Header{
"CSeq": base.HeaderValue{"1"},
"Transport": th.Write(),
"Transport": th.Marshal(),
},
})
require.NoError(t, err)
@@ -223,7 +223,7 @@ func TestServerReadSetupErrors(t *testing.T) {
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
Header: base.Header{
"CSeq": base.HeaderValue{"1"},
"Transport": th.Write(),
"Transport": th.Marshal(),
},
})
@@ -233,7 +233,7 @@ func TestServerReadSetupErrors(t *testing.T) {
require.Equal(t, base.StatusOK, res.StatusCode)
var sx headers.Session
err = sx.Read(res.Header["Session"])
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
th.InterleavedIDs = &[2]int{2, 3}
@@ -242,7 +242,7 @@ func TestServerReadSetupErrors(t *testing.T) {
URL: mustParseURL("rtsp://localhost:8554/test12stream/trackID=1"),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": th.Write(),
"Transport": th.Marshal(),
"Session": base.HeaderValue{sx.Session},
},
})
@@ -254,7 +254,7 @@ func TestServerReadSetupErrors(t *testing.T) {
require.Equal(t, base.StatusOK, res.StatusCode)
var sx headers.Session
err = sx.Read(res.Header["Session"])
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
th.InterleavedIDs = &[2]int{2, 3}
@@ -263,7 +263,7 @@ func TestServerReadSetupErrors(t *testing.T) {
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": th.Write(),
"Transport": th.Marshal(),
"Session": base.HeaderValue{sx.Session},
},
})
@@ -429,14 +429,14 @@ func TestServerRead(t *testing.T) {
URL: mustParseURL("rtsp://" + listenIP + ":8554/teststream/trackID=0"),
Header: base.Header{
"CSeq": base.HeaderValue{"1"},
"Transport": inTH.Write(),
"Transport": inTH.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
var th headers.Transport
err = th.Read(res.Header["Transport"])
err = th.Unmarshal(res.Header["Transport"])
require.NoError(t, err)
var l1 net.PacketConn
@@ -495,7 +495,7 @@ func TestServerRead(t *testing.T) {
<-sessionOpened
var sx headers.Session
err = sx.Read(res.Header["Session"])
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
res, err = writeReqReadRes(conn, br, base.Request{
@@ -585,7 +585,7 @@ func TestServerRead(t *testing.T) {
byts, _ := base.InterleavedFrame{
Channel: 5,
Payload: testRTCPPacketMarshaled,
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
<-framesReceived
@@ -692,7 +692,7 @@ func TestServerReadRTCPReport(t *testing.T) {
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
Header: base.Header{
"CSeq": base.HeaderValue{"1"},
"Transport": inTH.Write(),
"Transport": inTH.Marshal(),
},
})
require.NoError(t, err)
@@ -707,7 +707,7 @@ func TestServerReadRTCPReport(t *testing.T) {
defer l2.Close()
var sx headers.Session
err = sx.Read(res.Header["Session"])
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
res, err = writeReqReadRes(conn, br, base.Request{
@@ -879,14 +879,14 @@ func TestServerReadTCPResponseBeforeFrames(t *testing.T) {
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}.Write(),
}.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
var sx headers.Session
err = sx.Read(res.Header["Session"])
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
res, err = writeReqReadRes(conn, br, base.Request{
@@ -958,14 +958,14 @@ func TestServerReadPlayPlay(t *testing.T) {
return &v
}(),
ClientPorts: &[2]int{30450, 30451},
}.Write(),
}.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
var sx headers.Session
err = sx.Read(res.Header["Session"])
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
res, err = writeReqReadRes(conn, br, base.Request{
@@ -1074,14 +1074,14 @@ func TestServerReadPlayPausePlay(t *testing.T) {
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}.Write(),
}.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
var sx headers.Session
err = sx.Read(res.Header["Session"])
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
res, err = writeReqReadRes(conn, br, base.Request{
@@ -1197,14 +1197,14 @@ func TestServerReadPlayPausePause(t *testing.T) {
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}.Write(),
}.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
var sx headers.Session
err = sx.Read(res.Header["Session"])
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
res, err = writeReqReadRes(conn, br, base.Request{
@@ -1225,7 +1225,7 @@ func TestServerReadPlayPausePause(t *testing.T) {
"CSeq": base.HeaderValue{"2"},
"Session": base.HeaderValue{sx.Session},
},
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -1240,7 +1240,7 @@ func TestServerReadPlayPausePause(t *testing.T) {
"CSeq": base.HeaderValue{"2"},
"Session": base.HeaderValue{sx.Session},
},
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -1338,14 +1338,14 @@ func TestServerReadTimeout(t *testing.T) {
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
Header: base.Header{
"CSeq": base.HeaderValue{"1"},
"Transport": inTH.Write(),
"Transport": inTH.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
var sx headers.Session
err = sx.Read(res.Header["Session"])
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
res, err = writeReqReadRes(conn, br, base.Request{
@@ -1449,14 +1449,14 @@ func TestServerReadWithoutTeardown(t *testing.T) {
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
Header: base.Header{
"CSeq": base.HeaderValue{"1"},
"Transport": inTH.Write(),
"Transport": inTH.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
var sx headers.Session
err = sx.Read(res.Header["Session"])
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
res, err = writeReqReadRes(conn, br, base.Request{
@@ -1541,14 +1541,14 @@ func TestServerReadUDPChangeConn(t *testing.T) {
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
Header: base.Header{
"CSeq": base.HeaderValue{"1"},
"Transport": inTH.Write(),
"Transport": inTH.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
var sx headers.Session
err = sx.Read(res.Header["Session"])
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
res, err = writeReqReadRes(conn, br, base.Request{
@@ -1649,14 +1649,14 @@ func TestServerReadPartialTracks(t *testing.T) {
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=1"),
Header: base.Header{
"CSeq": base.HeaderValue{"1"},
"Transport": inTH.Write(),
"Transport": inTH.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
var sx headers.Session
err = sx.Read(res.Header["Session"])
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
res, err = writeReqReadRes(conn, br, base.Request{
@@ -1704,14 +1704,14 @@ func TestServerReadAdditionalInfos(t *testing.T) {
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
Header: base.Header{
"CSeq": base.HeaderValue{"1"},
"Transport": inTH.Write(),
"Transport": inTH.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
var th headers.Transport
err = th.Read(res.Header["Transport"])
err = th.Unmarshal(res.Header["Transport"])
require.NoError(t, err)
ssrcs[0] = th.SSRC
@@ -1729,7 +1729,7 @@ func TestServerReadAdditionalInfos(t *testing.T) {
}
var sx headers.Session
err = sx.Read(res.Header["Session"])
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
res, err = writeReqReadRes(conn, br, base.Request{
@@ -1737,7 +1737,7 @@ func TestServerReadAdditionalInfos(t *testing.T) {
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=1"),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": inTH.Write(),
"Transport": inTH.Marshal(),
"Session": base.HeaderValue{sx.Session},
},
})
@@ -1745,7 +1745,7 @@ func TestServerReadAdditionalInfos(t *testing.T) {
require.Equal(t, base.StatusOK, res.StatusCode)
th = headers.Transport{}
err = th.Read(res.Header["Transport"])
err = th.Unmarshal(res.Header["Transport"])
require.NoError(t, err)
ssrcs[1] = th.SSRC
@@ -1761,7 +1761,7 @@ func TestServerReadAdditionalInfos(t *testing.T) {
require.Equal(t, base.StatusOK, res.StatusCode)
var ri headers.RTPInfo
err = ri.Read(res.Header["RTP-Info"])
err = ri.Unmarshal(res.Header["RTP-Info"])
require.NoError(t, err)
return &ri, ssrcs
@@ -1936,14 +1936,14 @@ func TestServerReadErrorUDPSamePorts(t *testing.T) {
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
Header: base.Header{
"CSeq": base.HeaderValue{"1"},
"Transport": inTH.Write(),
"Transport": inTH.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
var sx headers.Session
err = sx.Read(res.Header["Session"])
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
res, err = writeReqReadRes(conn, br, base.Request{
@@ -1982,7 +1982,7 @@ func TestServerReadErrorUDPSamePorts(t *testing.T) {
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
Header: base.Header{
"CSeq": base.HeaderValue{"1"},
"Transport": inTH.Write(),
"Transport": inTH.Marshal(),
},
})
require.NoError(t, err)

View File

@@ -71,7 +71,7 @@ func writeReqReadRes(conn net.Conn,
br *bufio.Reader,
req base.Request,
) (*base.Response, error) {
byts, _ := req.Write()
byts, _ := req.Marshal()
_, err := conn.Write(byts)
if err != nil {
return nil, err
@@ -406,14 +406,14 @@ func TestServerErrorTCPTwoConnOneSession(t *testing.T) {
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}.Write(),
}.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
var sx headers.Session
err = sx.Read(res.Header["Session"])
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
res, err = writeReqReadRes(conn1, br1, base.Request{
@@ -448,7 +448,7 @@ func TestServerErrorTCPTwoConnOneSession(t *testing.T) {
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}.Write(),
}.Marshal(),
"Session": base.HeaderValue{sx.Session},
},
})
@@ -512,14 +512,14 @@ func TestServerErrorTCPOneConnTwoSessions(t *testing.T) {
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}.Write(),
}.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
var sx headers.Session
err = sx.Read(res.Header["Session"])
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
res, err = writeReqReadRes(conn, br, base.Request{
@@ -549,7 +549,7 @@ func TestServerErrorTCPOneConnTwoSessions(t *testing.T) {
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}.Write(),
}.Marshal(),
},
})
require.NoError(t, err)
@@ -717,9 +717,9 @@ func TestServerSessionClose(t *testing.T) {
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}.Write(),
}.Marshal(),
},
}.Write()
}.Marshal()
_, err = conn.Write(byts)
require.NoError(t, err)
@@ -786,7 +786,7 @@ func TestServerSessionAutoClose(t *testing.T) {
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}.Write(),
}.Marshal(),
},
})
require.NoError(t, err)
@@ -873,7 +873,7 @@ func TestServerErrorInvalidPath(t *testing.T) {
"CSeq": base.HeaderValue{"1"},
"Content-Type": base.HeaderValue{"application/sdp"},
},
Body: tracks.Write(false),
Body: tracks.Marshal(false),
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
@@ -901,14 +901,14 @@ func TestServerErrorInvalidPath(t *testing.T) {
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}.Write(),
}.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
var sx headers.Session
err = sx.Read(res.Header["Session"])
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
sxID = sx.Session
@@ -989,7 +989,7 @@ func TestServerAuth(t *testing.T) {
"CSeq": base.HeaderValue{"1"},
"Content-Type": base.HeaderValue{"application/sdp"},
},
Body: Tracks{track}.Write(false),
Body: Tracks{track}.Marshal(false),
}
res, err := writeReqReadRes(conn, br, req)

View File

@@ -428,7 +428,7 @@ func (sc *ServerConn) handleRequest(req *base.Request) (*base.Response, error) {
}
if stream != nil {
res.Body = stream.Tracks().Write(multicast)
res.Body = stream.Tracks().Marshal(multicast)
}
}
@@ -543,7 +543,7 @@ func (sc *ServerConn) handleRequestOuter(req *base.Request) error {
h.OnResponse(sc, res)
}
byts, _ := res.Write()
byts, _ := res.Marshal()
sc.conn.SetWriteDeadline(time.Now().Add(sc.s.WriteTimeout))
sc.conn.Write(byts)

View File

@@ -362,7 +362,7 @@ func (ss *ServerSession) runInner() error {
}
return nil
}(),
}.Write()
}.Marshal()
}
// after a TEARDOWN, session must be unpaired with the connection
@@ -501,7 +501,8 @@ func (ss *ServerSession) handleRequest(sc *ServerConn, req *base.Request) (*base
}, liberrors.ErrServerContentTypeUnsupported{CT: ct}
}
tracks, _, err := ReadTracks(req.Body, false)
var tracks Tracks
_, err = tracks.Unmarshal(req.Body, false)
if err != nil {
return &base.Response{
StatusCode: base.StatusBadRequest,
@@ -568,7 +569,7 @@ func (ss *ServerSession) handleRequest(sc *ServerConn, req *base.Request) (*base
}
var inTH headers.Transport
err = inTH.Read(req.Header["Transport"])
err = inTH.Unmarshal(req.Header["Transport"])
if err != nil {
return &base.Response{
StatusCode: base.StatusBadRequest,
@@ -783,7 +784,7 @@ func (ss *ServerSession) handleRequest(sc *ServerConn, req *base.Request) (*base
ss.setuppedTracks[trackID] = sst
res.Header["Transport"] = th.Write()
res.Header["Transport"] = th.Marshal()
return res, err
@@ -910,7 +911,7 @@ func (ss *ServerSession) handleRequest(sc *ServerConn, req *base.Request) (*base
if res.Header == nil {
res.Header = make(base.Header)
}
res.Header["RTP-Info"] = ri.Write()
res.Header["RTP-Info"] = ri.Marshal()
}
return res, err
@@ -1182,14 +1183,14 @@ func (ss *ServerSession) runWriter() {
if isRTP {
f := rtpFrames[trackID]
f.Payload = payload
n, _ := f.WriteTo(buf)
n, _ := f.MarshalTo(buf)
ss.tcpConn.conn.SetWriteDeadline(time.Now().Add(ss.s.WriteTimeout))
ss.tcpConn.conn.Write(buf[:n])
} else {
f := rtcpFrames[trackID]
f.Payload = payload
n, _ := f.WriteTo(buf)
n, _ := f.MarshalTo(buf)
ss.tcpConn.conn.SetWriteDeadline(time.Now().Add(ss.s.WriteTimeout))
ss.tcpConn.conn.Write(buf[:n])

View File

@@ -840,7 +840,8 @@ func TestTrackURL(t *testing.T) {
},
} {
t.Run(ca.name, func(t *testing.T) {
tracks, _, err := ReadTracks(ca.sdp, false)
var tracks Tracks
_, err := tracks.Unmarshal(ca.sdp, false)
require.NoError(t, err)
ur, err := tracks[0].url(ca.baseURL)
require.NoError(t, err)

View File

@@ -13,16 +13,15 @@ import (
// Tracks is a list of tracks.
type Tracks []Track
// ReadTracks decodes tracks from the SDP format.
// It returns the tracks and the decoded SDP.
func ReadTracks(byts []byte, skipGenericTracksWithoutClockRate bool) (Tracks, *sdp.SessionDescription, error) {
// Unmarshal decodes tracks from the SDP format. It returns the decoded SDP.
func (ts *Tracks) Unmarshal(byts []byte, skipGenericTracksWithoutClockRate bool) (*sdp.SessionDescription, error) {
var sd sdp.SessionDescription
err := sd.Unmarshal(byts)
if err != nil {
return nil, nil, err
return nil, err
}
var tracks Tracks //nolint:prealloc
*ts = nil
for i, md := range sd.MediaDescriptions {
t, err := newTrackFromMediaDescription(md)
@@ -31,17 +30,17 @@ func ReadTracks(byts []byte, skipGenericTracksWithoutClockRate bool) (Tracks, *s
strings.HasPrefix(err.Error(), "unable to get clock rate") {
continue
}
return nil, nil, fmt.Errorf("unable to parse track %d: %s", i+1, err)
return nil, fmt.Errorf("unable to parse track %d: %s", i+1, err)
}
tracks = append(tracks, t)
*ts = append(*ts, t)
}
if len(tracks) == 0 {
return nil, nil, fmt.Errorf("no valid tracks found")
if *ts == nil {
return nil, fmt.Errorf("no valid tracks found")
}
return tracks, &sd, nil
return &sd, nil
}
func (ts Tracks) clone() Tracks {
@@ -58,8 +57,8 @@ func (ts Tracks) setControls() {
}
}
// Write encodes tracks in the SDP format.
func (ts Tracks) Write(multicast bool) []byte {
// Marshal encodes tracks in the SDP format.
func (ts Tracks) Marshal(multicast bool) []byte {
address := "0.0.0.0"
if multicast {
address = "224.1.0.0"

View File

@@ -35,7 +35,8 @@ func TestTracksReadErrors(t *testing.T) {
},
} {
t.Run(ca.name, func(t *testing.T) {
_, _, err := ReadTracks(ca.sdp, false)
var tracks Tracks
_, err := tracks.Unmarshal(ca.sdp, false)
require.EqualError(t, err, ca.err)
})
}
@@ -67,7 +68,8 @@ func TestTracksReadSkipGenericTracksWithoutClockRate(t *testing.T) {
"m=application 42508 RTP/AVP 107\r\n" +
"b=AS:8\r\n")
tracks, _, err := ReadTracks(sdp, true)
var tracks Tracks
_, err := tracks.Unmarshal(sdp, true)
require.NoError(t, err)
require.Equal(t, Tracks{
&TrackH264{