Browse Source

enable errcheck (#2201)

pull/2204/head
Alessandro Ros 2 years ago committed by GitHub
parent
commit
659f19f8bb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 40
      .golangci.yml
  2. 6
      internal/conf/conf.go
  3. 3
      internal/conf/env/env.go
  4. 4
      internal/confwatcher/confwatcher.go
  5. 4
      internal/core/api.go
  6. 27
      internal/core/api_test.go
  7. 2
      internal/core/core.go
  8. 2
      internal/core/hls_http_server.go
  9. 3
      internal/core/hls_manager_test.go
  10. 8
      internal/core/hls_source_test.go
  11. 4
      internal/core/metrics.go
  12. 36
      internal/core/rtmp_conn.go
  13. 22
      internal/core/rtmp_listener.go
  14. 6
      internal/core/rtsp_source_test.go
  15. 42
      internal/core/srt_listener.go
  16. 8
      internal/core/srt_server_test.go
  17. 8
      internal/core/srt_source_test.go
  18. 8
      internal/core/udp_source_test.go
  19. 2
      internal/core/webrtc_http_server.go
  20. 5
      internal/core/webrtc_manager_test.go
  21. 34
      internal/core/webrtc_outgoing_track.go
  22. 2
      internal/externalcmd/cmd_unix.go
  23. 3
      internal/formatprocessor/generic_test.go
  24. 22
      internal/formatprocessor/h264_test.go
  25. 26
      internal/formatprocessor/h265_test.go
  26. 2
      internal/httpserv/handler_logger.go
  27. 2
      internal/logger/destination_file.go
  28. 2
      internal/logger/destination_stdout.go
  29. 3
      internal/rtmp/bytecounter/writer_test.go
  30. 2
      internal/rtmp/conn_test.go
  31. 5
      internal/rtmp/message/readwriter.go
  32. 2
      internal/rtmp/rawmessage/reader.go
  33. 2
      internal/webrtcpc/pc.go
  34. 12
      internal/websocket/serverconn.go
  35. 5
      internal/websocket/serverconn_test.go
  36. 2
      internal/whip/link_header.go

40
.golangci.yml

@ -15,13 +15,49 @@ linters: @@ -15,13 +15,49 @@ linters:
- unconvert
- wastedassign
- whitespace
disable:
- errcheck
issues:
exclude-use-default: false
linters-settings:
errcheck:
exclude-functions:
- io.Copy
- (io.Closer).Close
- (io.Writer).Write
- (hash.Hash).Write
- (net.Conn).Close
- (net.Conn).SetReadDeadline
- (net.Conn).SetWriteDeadline
- (*net.TCPConn).SetKeepAlive
- (*net.TCPConn).SetKeepAlivePeriod
- (*net.TCPConn).SetNoDelay
- (net.Listener).Close
- (net.PacketConn).Close
- (net.PacketConn).SetReadDeadline
- (net.PacketConn).SetWriteDeadline
- (net/http.ResponseWriter).Write
- (*net/http.Server).Serve
- (*net/http.Server).ServeTLS
- (*net/http.Server).Shutdown
- os.Chdir
- os.Mkdir
- os.MkdirAll
- os.Remove
- os.RemoveAll
- os.Setenv
- os.Unsetenv
- (*os.File).WriteString
- (*os.File).Close
- (github.com/datarhei/gosrt.Conn).Close
- (github.com/datarhei/gosrt.Conn).SetReadDeadline
- (github.com/datarhei/gosrt.Conn).SetWriteDeadline
- (*github.com/bluenviron/gortsplib/v3.Client).Close
- (*github.com/bluenviron/gortsplib/v3.Server).Close
- (*github.com/bluenviron/gortsplib/v3.ServerSession).Close
- (*github.com/bluenviron/gortsplib/v3.ServerStream).Close
- (*github.com/bluenviron/gortsplib/v3.ServerConn).Close
govet:
enable-all: true
disable:

6
internal/conf/conf.go

@ -45,7 +45,8 @@ func loadFromFile(fpath string, conf *Conf) (bool, error) { @@ -45,7 +45,8 @@ func loadFromFile(fpath string, conf *Conf) (bool, error) {
// other configuration files are not
if fpath == "mediamtx.yml" || fpath == "rtsp-simple-server.yml" {
if _, err := os.Stat(fpath); errors.Is(err, os.ErrNotExist) {
conf.UnmarshalJSON(nil) // load defaults
// load defaults
conf.UnmarshalJSON(nil) //nolint:errcheck
return false, nil
}
}
@ -294,7 +295,8 @@ func (conf *Conf) Check() error { @@ -294,7 +295,8 @@ func (conf *Conf) Check() error {
pconf := conf.Paths[name]
if pconf == nil {
pconf = &PathConf{}
pconf.UnmarshalJSON(nil) // fill defaults
// load defaults
pconf.UnmarshalJSON(nil) //nolint:errcheck
conf.Paths[name] = pconf
}

3
internal/conf/env/env.go vendored

@ -117,7 +117,8 @@ func loadEnvInternal(env map[string]string, prefix string, rv reflect.Value) err @@ -117,7 +117,8 @@ func loadEnvInternal(env map[string]string, prefix string, rv reflect.Value) err
if nv == zero {
nv = reflect.New(rt.Elem().Elem())
if unm, ok := nv.Interface().(json.Unmarshaler); ok {
unm.UnmarshalJSON(nil) // load defaults
// load defaults
unm.UnmarshalJSON(nil) //nolint:errcheck
}
rv.SetMapIndex(reflect.ValueOf(mapKeyLower), nv)
}

4
internal/confwatcher/confwatcher.go

@ -51,7 +51,7 @@ func New(confPath string) (*ConfWatcher, error) { @@ -51,7 +51,7 @@ func New(confPath string) (*ConfWatcher, error) {
err = inner.Add(parentPath)
if err != nil {
inner.Close()
inner.Close() //nolint:errcheck
return nil, err
}
@ -120,7 +120,7 @@ outer: @@ -120,7 +120,7 @@ outer:
}
close(w.signal)
w.inner.Close()
w.inner.Close() //nolint:errcheck
}
// Watch returns a channel that is called after the configuration file has changed.

4
internal/core/api.go

@ -236,7 +236,7 @@ func newAPI( @@ -236,7 +236,7 @@ func newAPI(
}
router := gin.New()
router.SetTrustedProxies(nil)
router.SetTrustedProxies(nil) //nolint:errcheck
group := router.Group("/")
@ -387,7 +387,7 @@ func (a *api) onConfigPathsAdd(ctx *gin.Context) { @@ -387,7 +387,7 @@ func (a *api) onConfigPathsAdd(ctx *gin.Context) {
newConfPath := &conf.PathConf{}
// load default values
newConfPath.UnmarshalJSON([]byte("{}"))
newConfPath.UnmarshalJSON([]byte("{}")) //nolint:errcheck
fillStruct(newConfPath, in)

27
internal/core/api_test.go

@ -265,13 +265,14 @@ func TestAPIPathsList(t *testing.T) { @@ -265,13 +265,14 @@ func TestAPIPathsList(t *testing.T) {
require.NoError(t, err)
defer source.Close()
source.WritePacketRTP(media0, &rtp.Packet{
err = source.WritePacketRTP(media0, &rtp.Packet{
Header: rtp.Header{
Version: 2,
PayloadType: 96,
},
Payload: []byte{0x01, 0x02, 0x03, 0x04},
})
require.NoError(t, err)
var out pathList
httpRequest(t, hc, http.MethodGet, "http://localhost:9997/v2/paths/list", nil, &out)
@ -618,7 +619,7 @@ func TestAPIProtocolList(t *testing.T) { @@ -618,7 +619,7 @@ func TestAPIProtocolList(t *testing.T) {
0x00, 0x00, 0x03, 0x00, 0xf0, 0x3c, 0x60, 0xc9, 0x20,
},*/
source.WritePacketRTP(medi, &rtp.Packet{
err = source.WritePacketRTP(medi, &rtp.Packet{
Header: rtp.Header{
Version: 2,
Marker: true,
@ -632,6 +633,7 @@ func TestAPIProtocolList(t *testing.T) { @@ -632,6 +633,7 @@ func TestAPIProtocolList(t *testing.T) {
0x05,
},
})
require.NoError(t, err)
}
}()
@ -654,7 +656,7 @@ func TestAPIProtocolList(t *testing.T) { @@ -654,7 +656,7 @@ func TestAPIProtocolList(t *testing.T) {
time.Sleep(500 * time.Millisecond)
source.WritePacketRTP(medi, &rtp.Packet{
err = source.WritePacketRTP(medi, &rtp.Packet{
Header: rtp.Header{
Version: 2,
Marker: true,
@ -665,6 +667,7 @@ func TestAPIProtocolList(t *testing.T) { @@ -665,6 +667,7 @@ func TestAPIProtocolList(t *testing.T) {
},
Payload: []byte{0x01, 0x02, 0x03, 0x04},
})
require.NoError(t, err)
<-c.incomingTrack
@ -686,7 +689,9 @@ func TestAPIProtocolList(t *testing.T) { @@ -686,7 +689,9 @@ func TestAPIProtocolList(t *testing.T) {
err = w.WriteH26x(track, 0, 0, true, [][]byte{{1}})
require.NoError(t, err)
bw.Flush()
err = bw.Flush()
require.NoError(t, err)
time.Sleep(500 * time.Millisecond)
}
@ -898,7 +903,7 @@ func TestAPIProtocolGet(t *testing.T) { @@ -898,7 +903,7 @@ func TestAPIProtocolGet(t *testing.T) {
0x00, 0x00, 0x03, 0x00, 0xf0, 0x3c, 0x60, 0xc9, 0x20,
},*/
source.WritePacketRTP(medi, &rtp.Packet{
err := source.WritePacketRTP(medi, &rtp.Packet{
Header: rtp.Header{
Version: 2,
Marker: true,
@ -912,6 +917,7 @@ func TestAPIProtocolGet(t *testing.T) { @@ -912,6 +917,7 @@ func TestAPIProtocolGet(t *testing.T) {
0x05,
},
})
require.NoError(t, err)
}
}()
@ -934,7 +940,7 @@ func TestAPIProtocolGet(t *testing.T) { @@ -934,7 +940,7 @@ func TestAPIProtocolGet(t *testing.T) {
time.Sleep(500 * time.Millisecond)
source.WritePacketRTP(medi, &rtp.Packet{
err = source.WritePacketRTP(medi, &rtp.Packet{
Header: rtp.Header{
Version: 2,
Marker: true,
@ -945,6 +951,7 @@ func TestAPIProtocolGet(t *testing.T) { @@ -945,6 +951,7 @@ func TestAPIProtocolGet(t *testing.T) {
},
Payload: []byte{0x01, 0x02, 0x03, 0x04},
})
require.NoError(t, err)
<-c.incomingTrack
@ -966,7 +973,9 @@ func TestAPIProtocolGet(t *testing.T) { @@ -966,7 +973,9 @@ func TestAPIProtocolGet(t *testing.T) {
err = w.WriteH26x(track, 0, 0, true, [][]byte{{1}})
require.NoError(t, err)
bw.Flush()
err = bw.Flush()
require.NoError(t, err)
time.Sleep(500 * time.Millisecond)
}
@ -1237,9 +1246,9 @@ func TestAPIProtocolKick(t *testing.T) { @@ -1237,9 +1246,9 @@ func TestAPIProtocolKick(t *testing.T) {
err = w.WriteH26x(track, 0, 0, true, [][]byte{{1}})
require.NoError(t, err)
bw.Flush()
// time.Sleep(500 * time.Millisecond)
err = bw.Flush()
require.NoError(t, err)
}
var pa string

2
internal/core/core.go

@ -206,7 +206,7 @@ func (p *Core) createResources(initial bool) error { @@ -206,7 +206,7 @@ func (p *Core) createResources(initial bool) error {
// on Linux, try to raise the number of file descriptors that can be opened
// to allow the maximum possible number of clients
// do not check for errors
rlimit.Raise()
rlimit.Raise() //nolint:errcheck
gin.SetMode(gin.ReleaseMode)

2
internal/core/hls_http_server.go

@ -63,7 +63,7 @@ func newHLSHTTPServer( //nolint:dupl @@ -63,7 +63,7 @@ func newHLSHTTPServer( //nolint:dupl
}
router := gin.New()
router.SetTrustedProxies(trustedProxies.ToTrustedProxies())
router.SetTrustedProxies(trustedProxies.ToTrustedProxies()) //nolint:errcheck
router.NoRoute(s.onRequest)

3
internal/core/hls_manager_test.go

@ -143,7 +143,7 @@ func TestHLSRead(t *testing.T) { @@ -143,7 +143,7 @@ func TestHLSRead(t *testing.T) {
time.Sleep(500 * time.Millisecond)
for i := 0; i < 2; i++ {
source.WritePacketRTP(medi, &rtp.Packet{
err = source.WritePacketRTP(medi, &rtp.Packet{
Header: rtp.Header{
Version: 2,
Marker: true,
@ -156,6 +156,7 @@ func TestHLSRead(t *testing.T) { @@ -156,6 +156,7 @@ func TestHLSRead(t *testing.T) {
0x05, 0x02, 0x03, 0x04, // IDR
},
})
require.NoError(t, err)
}
hc := &http.Client{Transport: &http.Transport{}}

8
internal/core/hls_source_test.go

@ -87,7 +87,7 @@ func (ts *testHLSManager) onSegment1(ctx *gin.Context) { @@ -87,7 +87,7 @@ func (ts *testHLSManager) onSegment1(ctx *gin.Context) {
w := mpegts.NewWriter(ctx.Writer, []*mpegts.Track{track1, track2})
w.WriteMPEG4Audio(track2, 1*90000, [][]byte{{1, 2, 3, 4}})
w.WriteMPEG4Audio(track2, 1*90000, [][]byte{{1, 2, 3, 4}}) //nolint:errcheck
}
func (ts *testHLSManager) onSegment2(ctx *gin.Context) {
@ -97,14 +97,14 @@ func (ts *testHLSManager) onSegment2(ctx *gin.Context) { @@ -97,14 +97,14 @@ func (ts *testHLSManager) onSegment2(ctx *gin.Context) {
w := mpegts.NewWriter(ctx.Writer, []*mpegts.Track{track1, track2})
w.WriteH26x(track1, 2*90000, 2*90000, true, [][]byte{
w.WriteH26x(track1, 2*90000, 2*90000, true, [][]byte{ //nolint:errcheck
{7, 1, 2, 3}, // SPS
{8}, // PPS
})
w.WriteMPEG4Audio(track2, 2*90000, [][]byte{{1, 2, 3, 4}})
w.WriteMPEG4Audio(track2, 2*90000, [][]byte{{1, 2, 3, 4}}) //nolint:errcheck
w.WriteH26x(track1, 2*90000, 2*90000, true, [][]byte{
w.WriteH26x(track1, 2*90000, 2*90000, true, [][]byte{ //nolint:errcheck
{5}, // IDR
})
}

4
internal/core/metrics.go

@ -45,7 +45,7 @@ func newMetrics( @@ -45,7 +45,7 @@ func newMetrics(
}
router := gin.New()
router.SetTrustedProxies(nil)
router.SetTrustedProxies(nil) //nolint:errcheck
router.GET("/metrics", m.onMetrics)
@ -215,7 +215,7 @@ func (m *metrics) onMetrics(ctx *gin.Context) { @@ -215,7 +215,7 @@ func (m *metrics) onMetrics(ctx *gin.Context) {
}
ctx.Writer.WriteHeader(http.StatusOK)
io.WriteString(ctx.Writer, out)
io.WriteString(ctx.Writer, out) //nolint:errcheck
}
// pathManagerSet is called by pathManager.

36
internal/core/rtmp_conn.go

@ -164,23 +164,7 @@ func (c *rtmpConn) run() { @@ -164,23 +164,7 @@ func (c *rtmpConn) run() {
}()
}
err := func() error {
readerErr := make(chan error)
go func() {
readerErr <- c.runReader()
}()
select {
case err := <-readerErr:
c.nconn.Close()
return err
case <-c.ctx.Done():
c.nconn.Close()
<-readerErr
return errors.New("terminated")
}
}()
err := c.runInner()
c.ctxCancel()
@ -189,6 +173,24 @@ func (c *rtmpConn) run() { @@ -189,6 +173,24 @@ func (c *rtmpConn) run() {
c.Log(logger.Info, "closed (%v)", err)
}
func (c *rtmpConn) runInner() error {
readerErr := make(chan error)
go func() {
readerErr <- c.runReader()
}()
select {
case err := <-readerErr:
c.nconn.Close()
return err
case <-c.ctx.Done():
c.nconn.Close()
<-readerErr
return errors.New("terminated")
}
}
func (c *rtmpConn) runReader() error {
c.nconn.SetReadDeadline(time.Now().Add(time.Duration(c.readTimeout)))
c.nconn.SetWriteDeadline(time.Now().Add(time.Duration(c.writeTimeout)))

22
internal/core/rtmp_listener.go

@ -31,16 +31,18 @@ func newRTMPListener( @@ -31,16 +31,18 @@ func newRTMPListener(
func (l *rtmpListener) run() {
defer l.wg.Done()
err := func() error {
for {
conn, err := l.ln.Accept()
if err != nil {
return err
}
l.parent.newConn(conn)
}
}()
err := l.runInner()
l.parent.acceptError(err)
}
func (l *rtmpListener) runInner() error {
for {
conn, err := l.ln.Accept()
if err != nil {
return err
}
l.parent.newConn(conn)
}
}

6
internal/core/rtsp_source_test.go

@ -117,7 +117,7 @@ func TestRTSPSource(t *testing.T) { @@ -117,7 +117,7 @@ func TestRTSPSource(t *testing.T) {
err = s.Start()
require.NoError(t, err)
defer s.Wait()
defer s.Wait() //nolint:errcheck
defer s.Close()
if source == "udp" || source == "tcp" {
@ -212,7 +212,7 @@ func TestRTSPSourceNoPassword(t *testing.T) { @@ -212,7 +212,7 @@ func TestRTSPSourceNoPassword(t *testing.T) {
}
err = s.Start()
require.NoError(t, err)
defer s.Wait()
defer s.Wait() //nolint:errcheck
defer s.Close()
p, ok := newInstance("rtmp: no\n" +
@ -268,7 +268,7 @@ func TestRTSPSourceRange(t *testing.T) { @@ -268,7 +268,7 @@ func TestRTSPSourceRange(t *testing.T) {
}
err := s.Start()
require.NoError(t, err)
defer s.Wait()
defer s.Wait() //nolint:errcheck
defer s.Close()
var addConf string

42
internal/core/srt_listener.go

@ -32,29 +32,31 @@ func newSRTListener( @@ -32,29 +32,31 @@ func newSRTListener(
func (l *srtListener) run() {
defer l.wg.Done()
err := func() error {
for {
var sconn *srtConn
conn, _, err := l.ln.Accept(func(req srt.ConnRequest) srt.ConnType {
sconn = l.parent.newConnRequest(req)
if sconn == nil {
return srt.REJECT
}
// currently it's the same to return SUBSCRIBE or PUBLISH
return srt.SUBSCRIBE
})
if err != nil {
return err
}
err := l.runInner()
l.parent.acceptError(err)
}
if conn == nil {
continue
func (l *srtListener) runInner() error {
for {
var sconn *srtConn
conn, _, err := l.ln.Accept(func(req srt.ConnRequest) srt.ConnType {
sconn = l.parent.newConnRequest(req)
if sconn == nil {
return srt.REJECT
}
sconn.setConn(conn)
// currently it's the same to return SUBSCRIBE or PUBLISH
return srt.SUBSCRIBE
})
if err != nil {
return err
}
}()
l.parent.acceptError(err)
if conn == nil {
continue
}
sconn.setConn(conn)
}
}

8
internal/core/srt_server_test.go

@ -50,7 +50,9 @@ func TestSRTServer(t *testing.T) { @@ -50,7 +50,9 @@ func TestSRTServer(t *testing.T) {
},
})
require.NoError(t, err)
bw.Flush()
err = bw.Flush()
require.NoError(t, err)
time.Sleep(500 * time.Millisecond)
@ -71,7 +73,9 @@ func TestSRTServer(t *testing.T) { @@ -71,7 +73,9 @@ func TestSRTServer(t *testing.T) {
},
})
require.NoError(t, err)
bw.Flush()
err = bw.Flush()
require.NoError(t, err)
r, err := mpegts.NewReader(reader)
require.NoError(t, err)

8
internal/core/srt_source_test.go

@ -51,13 +51,17 @@ func TestSRTSource(t *testing.T) { @@ -51,13 +51,17 @@ func TestSRTSource(t *testing.T) {
},
})
require.NoError(t, err)
bw.Flush()
err = bw.Flush()
require.NoError(t, err)
<-connected
err = w.WriteH26x(track, 0, 0, true, [][]byte{{5, 2}})
require.NoError(t, err)
bw.Flush()
err = bw.Flush()
require.NoError(t, err)
<-done
}()

8
internal/core/udp_source_test.go

@ -55,13 +55,17 @@ func TestUDPSource(t *testing.T) { @@ -55,13 +55,17 @@ func TestUDPSource(t *testing.T) {
},
})
require.NoError(t, err)
bw.Flush()
err = bw.Flush()
require.NoError(t, err)
<-connected
err = w.WriteH26x(track, 0, 0, true, [][]byte{{5, 2}})
require.NoError(t, err)
bw.Flush()
err = bw.Flush()
require.NoError(t, err)
}()
medias, baseURL, _, err := c.Describe(u)

2
internal/core/webrtc_http_server.go

@ -67,7 +67,7 @@ func newWebRTCHTTPServer( //nolint:dupl @@ -67,7 +67,7 @@ func newWebRTCHTTPServer( //nolint:dupl
}
router := gin.New()
router.SetTrustedProxies(trustedProxies.ToTrustedProxies())
router.SetTrustedProxies(trustedProxies.ToTrustedProxies()) //nolint:errcheck
router.NoRoute(s.onRequest)
network, address := restrictNetwork("tcp", address)

5
internal/core/webrtc_manager_test.go

@ -242,7 +242,7 @@ func TestWebRTCRead(t *testing.T) { @@ -242,7 +242,7 @@ func TestWebRTCRead(t *testing.T) {
time.Sleep(500 * time.Millisecond)
source.WritePacketRTP(medi, &rtp.Packet{
err = source.WritePacketRTP(medi, &rtp.Packet{
Header: rtp.Header{
Version: 2,
Marker: true,
@ -253,6 +253,7 @@ func TestWebRTCRead(t *testing.T) { @@ -253,6 +253,7 @@ func TestWebRTCRead(t *testing.T) {
},
Payload: []byte{3},
})
require.NoError(t, err)
trak := <-c.incomingTrack
@ -289,7 +290,7 @@ func TestWebRTCReadNotFound(t *testing.T) { @@ -289,7 +290,7 @@ func TestWebRTCReadNotFound(t *testing.T) {
ICEServers: iceServers,
})
require.NoError(t, err)
defer pc.Close()
defer pc.Close() //nolint:errcheck
_, err = pc.AddTransceiverFromKind(webrtc.RTPCodecTypeVideo)
require.NoError(t, err)

34
internal/core/webrtc_outgoing_track.go

@ -47,7 +47,10 @@ func newWebRTCOutgoingTrackVideo(medias media.Medias) (*webRTCOutgoingTrack, err @@ -47,7 +47,10 @@ func newWebRTCOutgoingTrackVideo(medias media.Medias) (*webRTCOutgoingTrack, err
PayloadType: 105,
PayloadMaxSize: webrtcPayloadMaxSize,
}
encoder.Init()
err = encoder.Init()
if err != nil {
return nil, err
}
return &webRTCOutgoingTrack{
media: videoMedia,
@ -66,7 +69,7 @@ func newWebRTCOutgoingTrackVideo(medias media.Medias) (*webRTCOutgoingTrack, err @@ -66,7 +69,7 @@ func newWebRTCOutgoingTrackVideo(medias media.Medias) (*webRTCOutgoingTrack, err
}
for _, pkt := range packets {
webRTCTrak.WriteRTP(pkt)
webRTCTrak.WriteRTP(pkt) //nolint:errcheck
}
return nil
@ -94,7 +97,10 @@ func newWebRTCOutgoingTrackVideo(medias media.Medias) (*webRTCOutgoingTrack, err @@ -94,7 +97,10 @@ func newWebRTCOutgoingTrackVideo(medias media.Medias) (*webRTCOutgoingTrack, err
PayloadType: 96,
PayloadMaxSize: webrtcPayloadMaxSize,
}
encoder.Init()
err = encoder.Init()
if err != nil {
return nil, err
}
return &webRTCOutgoingTrack{
media: videoMedia,
@ -113,7 +119,7 @@ func newWebRTCOutgoingTrackVideo(medias media.Medias) (*webRTCOutgoingTrack, err @@ -113,7 +119,7 @@ func newWebRTCOutgoingTrackVideo(medias media.Medias) (*webRTCOutgoingTrack, err
}
for _, pkt := range packets {
webRTCTrak.WriteRTP(pkt)
webRTCTrak.WriteRTP(pkt) //nolint:errcheck
}
return nil
@ -141,7 +147,10 @@ func newWebRTCOutgoingTrackVideo(medias media.Medias) (*webRTCOutgoingTrack, err @@ -141,7 +147,10 @@ func newWebRTCOutgoingTrackVideo(medias media.Medias) (*webRTCOutgoingTrack, err
PayloadType: 96,
PayloadMaxSize: webrtcPayloadMaxSize,
}
encoder.Init()
err = encoder.Init()
if err != nil {
return nil, err
}
return &webRTCOutgoingTrack{
media: videoMedia,
@ -160,7 +169,7 @@ func newWebRTCOutgoingTrackVideo(medias media.Medias) (*webRTCOutgoingTrack, err @@ -160,7 +169,7 @@ func newWebRTCOutgoingTrackVideo(medias media.Medias) (*webRTCOutgoingTrack, err
}
for _, pkt := range packets {
webRTCTrak.WriteRTP(pkt)
webRTCTrak.WriteRTP(pkt) //nolint:errcheck
}
return nil
@ -188,7 +197,10 @@ func newWebRTCOutgoingTrackVideo(medias media.Medias) (*webRTCOutgoingTrack, err @@ -188,7 +197,10 @@ func newWebRTCOutgoingTrackVideo(medias media.Medias) (*webRTCOutgoingTrack, err
PayloadType: 96,
PayloadMaxSize: webrtcPayloadMaxSize,
}
encoder.Init()
err = encoder.Init()
if err != nil {
return nil, err
}
var lastPTS time.Duration
firstNALUReceived := false
@ -220,7 +232,7 @@ func newWebRTCOutgoingTrackVideo(medias media.Medias) (*webRTCOutgoingTrack, err @@ -220,7 +232,7 @@ func newWebRTCOutgoingTrackVideo(medias media.Medias) (*webRTCOutgoingTrack, err
}
for _, pkt := range packets {
webRTCTrak.WriteRTP(pkt)
webRTCTrak.WriteRTP(pkt) //nolint:errcheck
}
return nil
@ -255,7 +267,7 @@ func newWebRTCOutgoingTrackAudio(medias media.Medias) (*webRTCOutgoingTrack, err @@ -255,7 +267,7 @@ func newWebRTCOutgoingTrackAudio(medias media.Medias) (*webRTCOutgoingTrack, err
track: webRTCTrak,
cb: func(unit formatprocessor.Unit) error {
for _, pkt := range unit.GetRTPPackets() {
webRTCTrak.WriteRTP(pkt)
webRTCTrak.WriteRTP(pkt) //nolint:errcheck
}
return nil
@ -285,7 +297,7 @@ func newWebRTCOutgoingTrackAudio(medias media.Medias) (*webRTCOutgoingTrack, err @@ -285,7 +297,7 @@ func newWebRTCOutgoingTrackAudio(medias media.Medias) (*webRTCOutgoingTrack, err
track: webRTCTrak,
cb: func(unit formatprocessor.Unit) error {
for _, pkt := range unit.GetRTPPackets() {
webRTCTrak.WriteRTP(pkt)
webRTCTrak.WriteRTP(pkt) //nolint:errcheck
}
return nil
@ -322,7 +334,7 @@ func newWebRTCOutgoingTrackAudio(medias media.Medias) (*webRTCOutgoingTrack, err @@ -322,7 +334,7 @@ func newWebRTCOutgoingTrackAudio(medias media.Medias) (*webRTCOutgoingTrack, err
track: webRTCTrak,
cb: func(unit formatprocessor.Unit) error {
for _, pkt := range unit.GetRTPPackets() {
webRTCTrak.WriteRTP(pkt)
webRTCTrak.WriteRTP(pkt) //nolint:errcheck
}
return nil

2
internal/externalcmd/cmd_unix.go

@ -50,7 +50,7 @@ func (e *Cmd) runOSSpecific() error { @@ -50,7 +50,7 @@ func (e *Cmd) runOSSpecific() error {
select {
case <-e.terminate:
syscall.Kill(cmd.Process.Pid, syscall.SIGINT)
syscall.Kill(cmd.Process.Pid, syscall.SIGINT) //nolint:errcheck
<-cmdDone
return errTerminated

3
internal/formatprocessor/generic_test.go

@ -13,7 +13,8 @@ func TestGenericRemovePadding(t *testing.T) { @@ -13,7 +13,8 @@ func TestGenericRemovePadding(t *testing.T) {
PayloadTyp: 96,
RTPMa: "private/90000",
}
forma.Init()
err := forma.Init()
require.NoError(t, err)
p, err := New(1472, forma, false, nil)
require.NoError(t, err)

22
internal/formatprocessor/h264_test.go

@ -30,7 +30,8 @@ func TestH264DynamicParams(t *testing.T) { @@ -30,7 +30,8 @@ func TestH264DynamicParams(t *testing.T) {
RTPPackets: []*rtp.Packet{pkts[0]},
},
}
p.Process(data, true)
err = p.Process(data, true)
require.NoError(t, err)
require.Equal(t, [][]byte{
{byte(h264.NALUTypeIDR)},
@ -38,31 +39,37 @@ func TestH264DynamicParams(t *testing.T) { @@ -38,31 +39,37 @@ func TestH264DynamicParams(t *testing.T) {
pkts, err = enc.Encode([][]byte{{7, 4, 5, 6}}, 0) // SPS
require.NoError(t, err)
p.Process(&UnitH264{
err = p.Process(&UnitH264{
BaseUnit: BaseUnit{
RTPPackets: []*rtp.Packet{pkts[0]},
},
}, false)
require.NoError(t, err)
pkts, err = enc.Encode([][]byte{{8, 1}}, 0) // PPS
require.NoError(t, err)
p.Process(&UnitH264{
err = p.Process(&UnitH264{
BaseUnit: BaseUnit{
RTPPackets: []*rtp.Packet{pkts[0]},
},
}, false)
require.NoError(t, err)
require.Equal(t, []byte{7, 4, 5, 6}, forma.SPS)
require.Equal(t, []byte{8, 1}, forma.PPS)
pkts, err = enc.Encode([][]byte{{byte(h264.NALUTypeIDR)}}, 0)
require.NoError(t, err)
data = &UnitH264{
BaseUnit: BaseUnit{
RTPPackets: []*rtp.Packet{pkts[0]},
},
}
p.Process(data, true)
err = p.Process(data, true)
require.NoError(t, err)
require.Equal(t, [][]byte{
{0x07, 4, 5, 6},
@ -127,7 +134,9 @@ func TestH264OversizedPackets(t *testing.T) { @@ -127,7 +134,9 @@ func TestH264OversizedPackets(t *testing.T) {
RTPPackets: []*rtp.Packet{pkt},
},
}
p.Process(data, false)
err := p.Process(data, false)
require.NoError(t, err)
out = append(out, data.RTPPackets...)
}
@ -190,7 +199,8 @@ func TestH264EmptyPacket(t *testing.T) { @@ -190,7 +199,8 @@ func TestH264EmptyPacket(t *testing.T) {
},
}
p.Process(unit, false)
err = p.Process(unit, false)
require.NoError(t, err)
// if all NALUs have been removed, no RTP packets must be generated.
require.Equal(t, []*rtp.Packet(nil), unit.RTPPackets)

26
internal/formatprocessor/h265_test.go

@ -29,7 +29,8 @@ func TestH265DynamicParams(t *testing.T) { @@ -29,7 +29,8 @@ func TestH265DynamicParams(t *testing.T) {
RTPPackets: []*rtp.Packet{pkts[0]},
},
}
p.Process(data, true)
err = p.Process(data, true)
require.NoError(t, err)
require.Equal(t, [][]byte{
{byte(h265.NALUType_CRA_NUT) << 1, 0},
@ -37,27 +38,33 @@ func TestH265DynamicParams(t *testing.T) { @@ -37,27 +38,33 @@ func TestH265DynamicParams(t *testing.T) {
pkts, err = enc.Encode([][]byte{{byte(h265.NALUType_VPS_NUT) << 1, 1, 2, 3}}, 0)
require.NoError(t, err)
p.Process(&UnitH265{
err = p.Process(&UnitH265{
BaseUnit: BaseUnit{
RTPPackets: []*rtp.Packet{pkts[0]},
},
}, false)
require.NoError(t, err)
pkts, err = enc.Encode([][]byte{{byte(h265.NALUType_SPS_NUT) << 1, 4, 5, 6}}, 0)
require.NoError(t, err)
p.Process(&UnitH265{
err = p.Process(&UnitH265{
BaseUnit: BaseUnit{
RTPPackets: []*rtp.Packet{pkts[0]},
},
}, false)
require.NoError(t, err)
pkts, err = enc.Encode([][]byte{{byte(h265.NALUType_PPS_NUT) << 1, 7, 8, 9}}, 0)
require.NoError(t, err)
p.Process(&UnitH265{
err = p.Process(&UnitH265{
BaseUnit: BaseUnit{
RTPPackets: []*rtp.Packet{pkts[0]},
},
}, false)
require.NoError(t, err)
require.Equal(t, []byte{byte(h265.NALUType_VPS_NUT) << 1, 1, 2, 3}, forma.VPS)
require.Equal(t, []byte{byte(h265.NALUType_SPS_NUT) << 1, 4, 5, 6}, forma.SPS)
@ -65,12 +72,14 @@ func TestH265DynamicParams(t *testing.T) { @@ -65,12 +72,14 @@ func TestH265DynamicParams(t *testing.T) {
pkts, err = enc.Encode([][]byte{{byte(h265.NALUType_CRA_NUT) << 1, 0}}, 0)
require.NoError(t, err)
data = &UnitH265{
BaseUnit: BaseUnit{
RTPPackets: []*rtp.Packet{pkts[0]},
},
}
p.Process(data, true)
err = p.Process(data, true)
require.NoError(t, err)
require.Equal(t, [][]byte{
{byte(h265.NALUType_VPS_NUT) << 1, 1, 2, 3},
@ -124,7 +133,9 @@ func TestH265OversizedPackets(t *testing.T) { @@ -124,7 +133,9 @@ func TestH265OversizedPackets(t *testing.T) {
RTPPackets: []*rtp.Packet{pkt},
},
}
p.Process(data, false)
err = p.Process(data, false)
require.NoError(t, err)
out = append(out, data.RTPPackets...)
}
@ -187,7 +198,8 @@ func TestH265EmptyPacket(t *testing.T) { @@ -187,7 +198,8 @@ func TestH265EmptyPacket(t *testing.T) {
},
}
p.Process(unit, false)
err = p.Process(unit, false)
require.NoError(t, err)
// if all NALUs have been removed, no RTP packets must be generated.
require.Equal(t, []*rtp.Packet(nil), unit.RTPPackets)

2
internal/httpserv/handler_logger.go

@ -35,7 +35,7 @@ func (w *loggerWriter) WriteHeader(statusCode int) { @@ -35,7 +35,7 @@ func (w *loggerWriter) WriteHeader(statusCode int) {
func (w *loggerWriter) dump() string {
var buf bytes.Buffer
fmt.Fprintf(&buf, "%s %d %s\n", "HTTP/1.1", w.status, http.StatusText(w.status))
w.w.Header().Write(&buf)
w.w.Header().Write(&buf) //nolint:errcheck
buf.Write([]byte("\n"))
if w.buf.Len() > 0 {
fmt.Fprintf(&buf, "(body of %d bytes)", w.buf.Len())

2
internal/logger/destination_file.go

@ -27,7 +27,7 @@ func (d *destinationFile) log(t time.Time, level Level, format string, args ...i @@ -27,7 +27,7 @@ func (d *destinationFile) log(t time.Time, level Level, format string, args ...i
writeTime(&d.buf, t, false)
writeLevel(&d.buf, level, false)
writeContent(&d.buf, format, args)
d.file.Write(d.buf.Bytes())
d.file.Write(d.buf.Bytes()) //nolint:errcheck
}
func (d *destinationFile) close() {

2
internal/logger/destination_stdout.go

@ -25,7 +25,7 @@ func (d *destinationStdout) log(t time.Time, level Level, format string, args .. @@ -25,7 +25,7 @@ func (d *destinationStdout) log(t time.Time, level Level, format string, args ..
writeTime(&d.buf, t, d.useColor)
writeLevel(&d.buf, level, d.useColor)
writeContent(&d.buf, format, args)
os.Stdout.Write(d.buf.Bytes())
os.Stdout.Write(d.buf.Bytes()) //nolint:errcheck
}
func (d *destinationStdout) close() {

3
internal/rtmp/bytecounter/writer_test.go

@ -13,6 +13,7 @@ func TestWriter(t *testing.T) { @@ -13,6 +13,7 @@ func TestWriter(t *testing.T) {
w := NewWriter(&buf)
w.SetCount(100)
w.Write(bytes.Repeat([]byte{0x01}, 64))
_, err := w.Write(bytes.Repeat([]byte{0x01}, 64))
require.NoError(t, err)
require.Equal(t, uint64(100+64), w.Count())
}

2
internal/rtmp/conn_test.go

@ -490,6 +490,6 @@ func BenchmarkRead(b *testing.B) { @@ -490,6 +490,6 @@ func BenchmarkRead(b *testing.B) {
conn := newNoHandshakeConn(&buf)
for n := 0; n < b.N; n++ {
conn.Read()
conn.Read() //nolint:errcheck
}
}

5
internal/rtmp/message/readwriter.go

@ -44,9 +44,12 @@ func (rw *ReadWriter) Read() (Message, error) { @@ -44,9 +44,12 @@ func (rw *ReadWriter) Read() (Message, error) {
rw.w.SetAcknowledgeValue(tmsg.Value)
case *UserControlPingRequest:
rw.w.Write(&UserControlPingResponse{
err := rw.w.Write(&UserControlPingResponse{
ServerTime: tmsg.ServerTime,
})
if err != nil {
return nil, err
}
}
return msg, nil

2
internal/rtmp/rawmessage/reader.go

@ -266,7 +266,7 @@ func (r *Reader) Read() (*Message, error) { @@ -266,7 +266,7 @@ func (r *Reader) Read() (*Message, error) {
r.chunkStreams[chunkStreamID] = rc
}
r.br.UnreadByte()
r.br.UnreadByte() //nolint:errcheck
msg, err := rc.readMessage(typ)
if err != nil {

2
internal/webrtcpc/pc.go

@ -90,7 +90,7 @@ func New( @@ -90,7 +90,7 @@ func New(
// Close closes the connection.
func (co *PeerConnection) Close() {
co.PeerConnection.Close()
co.PeerConnection.Close() //nolint:errcheck
<-co.closed
}

12
internal/websocket/serverconn.go

@ -57,7 +57,7 @@ func NewServerConn(w http.ResponseWriter, req *http.Request) (*ServerConn, error @@ -57,7 +57,7 @@ func NewServerConn(w http.ResponseWriter, req *http.Request) (*ServerConn, error
// Close closes a ServerConn.
func (c *ServerConn) Close() {
c.wc.Close()
c.wc.Close() //nolint:errcheck
close(c.terminate)
}
@ -67,10 +67,10 @@ func (c *ServerConn) RemoteAddr() net.Addr { @@ -67,10 +67,10 @@ func (c *ServerConn) RemoteAddr() net.Addr {
}
func (c *ServerConn) run() {
c.wc.SetReadDeadline(time.Now().Add(pingInterval + pingTimeout))
c.wc.SetReadDeadline(time.Now().Add(pingInterval + pingTimeout)) //nolint:errcheck
c.wc.SetPongHandler(func(string) error {
c.wc.SetReadDeadline(time.Now().Add(pingInterval + pingTimeout))
c.wc.SetReadDeadline(time.Now().Add(pingInterval + pingTimeout)) //nolint:errcheck
return nil
})
@ -80,13 +80,13 @@ func (c *ServerConn) run() { @@ -80,13 +80,13 @@ func (c *ServerConn) run() {
for {
select {
case byts := <-c.write:
c.wc.SetWriteDeadline(time.Now().Add(writeTimeout))
c.wc.SetWriteDeadline(time.Now().Add(writeTimeout)) //nolint:errcheck
err := c.wc.WriteMessage(websocket.TextMessage, byts)
c.writeErr <- err
case <-pingTicker.C:
c.wc.SetWriteDeadline(time.Now().Add(writeTimeout))
c.wc.WriteMessage(websocket.PingMessage, nil)
c.wc.SetWriteDeadline(time.Now().Add(writeTimeout)) //nolint:errcheck
c.wc.WriteMessage(websocket.PingMessage, nil) //nolint:errcheck
case <-c.terminate:
return

5
internal/websocket/serverconn_test.go

@ -37,7 +37,7 @@ func TestServerConn(t *testing.T) { @@ -37,7 +37,7 @@ func TestServerConn(t *testing.T) {
c, res, err := websocket.DefaultDialer.Dial("ws://localhost:6344/", nil)
require.NoError(t, err)
defer res.Body.Close()
defer c.Close()
defer c.Close() //nolint:errcheck
c.SetPingHandler(func(msg string) error {
close(pingReceived)
@ -49,7 +49,8 @@ func TestServerConn(t *testing.T) { @@ -49,7 +49,8 @@ func TestServerConn(t *testing.T) {
require.NoError(t, err)
require.Equal(t, "testing", msg)
c.ReadMessage()
_, _, err = c.ReadMessage()
require.Error(t, err)
<-pingReceived
}

2
internal/whip/link_header.go

@ -16,7 +16,7 @@ func quoteCredential(v string) string { @@ -16,7 +16,7 @@ func quoteCredential(v string) string {
func unquoteCredential(v string) string {
var s string
json.Unmarshal([]byte("\""+v+"\""), &s)
json.Unmarshal([]byte("\""+v+"\""), &s) //nolint:errcheck
return s
}

Loading…
Cancel
Save