mirror of
https://github.com/aler9/gortsplib
synced 2025-10-13 10:53:58 +08:00
update golangci-lint (#292)
This commit is contained in:
2
.github/workflows/lint.yml
vendored
2
.github/workflows/lint.yml
vendored
@@ -19,7 +19,7 @@ jobs:
|
|||||||
|
|
||||||
- uses: golangci/golangci-lint-action@v3
|
- uses: golangci/golangci-lint-action@v3
|
||||||
with:
|
with:
|
||||||
version: v1.50.1
|
version: v1.52.2
|
||||||
|
|
||||||
go-mod-tidy:
|
go-mod-tidy:
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-20.04
|
||||||
|
2
Makefile
2
Makefile
@@ -1,5 +1,5 @@
|
|||||||
BASE_IMAGE = golang:1.20.1-alpine3.17
|
BASE_IMAGE = golang:1.20.1-alpine3.17
|
||||||
LINT_IMAGE = golangci/golangci-lint:v1.50.1
|
LINT_IMAGE = golangci/golangci-lint:v1.52.2
|
||||||
|
|
||||||
.PHONY: $(shell ls)
|
.PHONY: $(shell ls)
|
||||||
|
|
||||||
|
@@ -481,7 +481,7 @@ func (c *Client) runInner() error {
|
|||||||
req.res <- clientRes{res: res, err: err}
|
req.res <- clientRes{res: res, err: err}
|
||||||
|
|
||||||
case req := <-c.play:
|
case req := <-c.play:
|
||||||
res, err := c.doPlay(req.ra, false)
|
res, err := c.doPlay(req.ra)
|
||||||
req.res <- clientRes{res: res, err: err}
|
req.res <- clientRes{res: res, err: err}
|
||||||
|
|
||||||
case req := <-c.record:
|
case req := <-c.record:
|
||||||
@@ -607,7 +607,7 @@ func (c *Client) trySwitchingProtocol() error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = c.doPlay(c.lastRange, true)
|
_, err = c.doPlay(c.lastRange)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -1423,7 +1423,7 @@ func (c *Client) SetupAll(medias media.Medias, baseURL *url.URL) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) doPlay(ra *headers.Range, isSwitchingProtocol bool) (*base.Response, error) {
|
func (c *Client) doPlay(ra *headers.Range) (*base.Response, error) {
|
||||||
err := c.checkState(map[clientState]struct{}{
|
err := c.checkState(map[clientState]struct{}{
|
||||||
clientStatePrePlay: {},
|
clientStatePrePlay: {},
|
||||||
})
|
})
|
||||||
|
@@ -126,8 +126,8 @@ func (cm *clientMedia) start() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if cm.udpRTPListener != nil {
|
if cm.udpRTPListener != nil {
|
||||||
cm.udpRTPListener.start(cm.c.state == clientStatePlay)
|
cm.udpRTPListener.start()
|
||||||
cm.udpRTCPListener.start(cm.c.state == clientStatePlay)
|
cm.udpRTCPListener.start()
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, ct := range cm.formats {
|
for _, ct := range cm.formats {
|
||||||
@@ -241,7 +241,7 @@ func (cm *clientMedia) readRTCPTCPPlay(payload []byte) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cm *clientMedia) readRTPTCPRecord(payload []byte) error {
|
func (cm *clientMedia) readRTPTCPRecord(_ []byte) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -323,7 +323,7 @@ func (cm *clientMedia) readRTCPUDPPlay(payload []byte) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cm *clientMedia) readRTPUDPRecord(payload []byte) error {
|
func (cm *clientMedia) readRTPUDPRecord(_ []byte) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -153,11 +153,11 @@ func (u *clientUDPListener) port() int {
|
|||||||
return u.pc.LocalAddr().(*net.UDPAddr).Port
|
return u.pc.LocalAddr().(*net.UDPAddr).Port
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u *clientUDPListener) start(forPlay bool) {
|
func (u *clientUDPListener) start() {
|
||||||
u.running = true
|
u.running = true
|
||||||
u.pc.SetReadDeadline(time.Time{})
|
u.pc.SetReadDeadline(time.Time{})
|
||||||
u.readerDone = make(chan struct{})
|
u.readerDone = make(chan struct{})
|
||||||
go u.runReader(forPlay)
|
go u.runReader()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u *clientUDPListener) stop() {
|
func (u *clientUDPListener) stop() {
|
||||||
@@ -165,7 +165,7 @@ func (u *clientUDPListener) stop() {
|
|||||||
<-u.readerDone
|
<-u.readerDone
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u *clientUDPListener) runReader(forPlay bool) {
|
func (u *clientUDPListener) runReader() {
|
||||||
defer close(u.readerDone)
|
defer close(u.readerDone)
|
||||||
|
|
||||||
var readFunc func([]byte) error
|
var readFunc func([]byte) error
|
||||||
|
@@ -18,7 +18,7 @@ type AV1 struct {
|
|||||||
Tier *int
|
Tier *int
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *AV1) unmarshal(payloadType uint8, clock string, codec string, rtpmap string, fmtp map[string]string) error {
|
func (f *AV1) unmarshal(payloadType uint8, _ string, _ string, _ string, fmtp map[string]string) error {
|
||||||
f.PayloadTyp = payloadType
|
f.PayloadTyp = payloadType
|
||||||
|
|
||||||
for key, val := range fmtp {
|
for key, val := range fmtp {
|
||||||
|
@@ -13,7 +13,7 @@ type G711 struct {
|
|||||||
MULaw bool
|
MULaw bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *G711) unmarshal(payloadType uint8, clock string, codec string, rtpmap string, fmtp map[string]string) error {
|
func (f *G711) unmarshal(payloadType uint8, _ string, _ string, _ string, _ map[string]string) error {
|
||||||
f.MULaw = (payloadType == 0)
|
f.MULaw = (payloadType == 0)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@@ -10,7 +10,7 @@ import (
|
|||||||
// Specification: https://datatracker.ietf.org/doc/html/rfc3551
|
// Specification: https://datatracker.ietf.org/doc/html/rfc3551
|
||||||
type G722 struct{}
|
type G722 struct{}
|
||||||
|
|
||||||
func (f *G722) unmarshal(payloadType uint8, clock string, codec string, rtpmap string, fmtp map[string]string) error {
|
func (f *G722) unmarshal(_ uint8, _ string, _ string, _ string, _ map[string]string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -57,20 +57,17 @@ type Generic struct {
|
|||||||
RTPMa string
|
RTPMa string
|
||||||
FMT map[string]string
|
FMT map[string]string
|
||||||
|
|
||||||
// clock rate of the format. Filled automatically.
|
// clock rate of the format. Filled when calling Init().
|
||||||
ClockRat int
|
ClockRat int
|
||||||
}
|
}
|
||||||
|
|
||||||
// Init computes the clock rate of the format. It it mandatory to call it.
|
// Init computes the clock rate of the format. It is mandatory to call it.
|
||||||
func (f *Generic) Init() error {
|
func (f *Generic) Init() error {
|
||||||
f.ClockRat, _ = findClockRate(f.PayloadTyp, f.RTPMa)
|
f.ClockRat, _ = findClockRate(f.PayloadTyp, f.RTPMa)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *Generic) unmarshal(
|
func (f *Generic) unmarshal(payloadType uint8, _ string, _ string, rtpmap string, fmtp map[string]string) error {
|
||||||
payloadType uint8, clock string, codec string,
|
|
||||||
rtpmap string, fmtp map[string]string,
|
|
||||||
) error {
|
|
||||||
f.PayloadTyp = payloadType
|
f.PayloadTyp = payloadType
|
||||||
f.RTPMa = rtpmap
|
f.RTPMa = rtpmap
|
||||||
f.FMT = fmtp
|
f.FMT = fmtp
|
||||||
|
@@ -81,7 +81,7 @@ type H264 struct {
|
|||||||
mutex sync.RWMutex
|
mutex sync.RWMutex
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *H264) unmarshal(payloadType uint8, clock string, codec string, rtpmap string, fmtp map[string]string) error {
|
func (f *H264) unmarshal(payloadType uint8, _ string, _ string, _ string, fmtp map[string]string) error {
|
||||||
f.PayloadTyp = payloadType
|
f.PayloadTyp = payloadType
|
||||||
|
|
||||||
for key, val := range fmtp {
|
for key, val := range fmtp {
|
||||||
|
@@ -23,7 +23,7 @@ type H265 struct {
|
|||||||
mutex sync.RWMutex
|
mutex sync.RWMutex
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *H265) unmarshal(payloadType uint8, clock string, codec string, rtpmap string, fmtp map[string]string) error {
|
func (f *H265) unmarshal(payloadType uint8, _ string, _ string, _ string, fmtp map[string]string) error {
|
||||||
f.PayloadTyp = payloadType
|
f.PayloadTyp = payloadType
|
||||||
|
|
||||||
for key, val := range fmtp {
|
for key, val := range fmtp {
|
||||||
|
@@ -18,7 +18,7 @@ type LPCM struct {
|
|||||||
ChannelCount int
|
ChannelCount int
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *LPCM) unmarshal(payloadType uint8, clock string, codec string, rtpmap string, fmtp map[string]string) error {
|
func (f *LPCM) unmarshal(payloadType uint8, clock string, codec string, _ string, _ map[string]string) error {
|
||||||
f.PayloadTyp = payloadType
|
f.PayloadTyp = payloadType
|
||||||
|
|
||||||
switch codec {
|
switch codec {
|
||||||
|
@@ -10,7 +10,7 @@ import (
|
|||||||
// Specification: https://datatracker.ietf.org/doc/html/rfc2435
|
// Specification: https://datatracker.ietf.org/doc/html/rfc2435
|
||||||
type MJPEG struct{}
|
type MJPEG struct{}
|
||||||
|
|
||||||
func (f *MJPEG) unmarshal(payloadType uint8, clock string, codec string, rtpmap string, fmtp map[string]string) error {
|
func (f *MJPEG) unmarshal(_ uint8, _ string, _ string, _ string, _ map[string]string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -10,10 +10,7 @@ import (
|
|||||||
// Specification: https://datatracker.ietf.org/doc/html/rfc2250
|
// Specification: https://datatracker.ietf.org/doc/html/rfc2250
|
||||||
type MPEG2Audio struct{}
|
type MPEG2Audio struct{}
|
||||||
|
|
||||||
func (f *MPEG2Audio) unmarshal(
|
func (f *MPEG2Audio) unmarshal(_ uint8, _ string, _ string, _ string, _ map[string]string) error {
|
||||||
payloadType uint8, clock string, codec string,
|
|
||||||
rtpmap string, fmtp map[string]string,
|
|
||||||
) error {
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -8,10 +8,7 @@ import (
|
|||||||
// Specification: https://datatracker.ietf.org/doc/html/rfc2250
|
// Specification: https://datatracker.ietf.org/doc/html/rfc2250
|
||||||
type MPEG2Video struct{}
|
type MPEG2Video struct{}
|
||||||
|
|
||||||
func (f *MPEG2Video) unmarshal(
|
func (f *MPEG2Video) unmarshal(_ uint8, _ string, _ string, _ string, _ map[string]string) error {
|
||||||
payloadType uint8, clock string, codec string,
|
|
||||||
rtpmap string, fmtp map[string]string,
|
|
||||||
) error {
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -27,8 +27,8 @@ type MPEG4AudioGeneric struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (f *MPEG4AudioGeneric) unmarshal(
|
func (f *MPEG4AudioGeneric) unmarshal(
|
||||||
payloadType uint8, clock string, codec string,
|
payloadType uint8, _ string, _ string,
|
||||||
rtpmap string, fmtp map[string]string,
|
_ string, fmtp map[string]string,
|
||||||
) error {
|
) error {
|
||||||
f.PayloadTyp = payloadType
|
f.PayloadTyp = payloadType
|
||||||
|
|
||||||
|
@@ -21,8 +21,8 @@ type MPEG4AudioLATM struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (f *MPEG4AudioLATM) unmarshal(
|
func (f *MPEG4AudioLATM) unmarshal(
|
||||||
payloadType uint8, clock string, codec string,
|
payloadType uint8, _ string, _ string,
|
||||||
rtpmap string, fmtp map[string]string,
|
_ string, fmtp map[string]string,
|
||||||
) error {
|
) error {
|
||||||
f.PayloadTyp = payloadType
|
f.PayloadTyp = payloadType
|
||||||
f.ProfileLevelID = 30 // default value defined by specification
|
f.ProfileLevelID = 30 // default value defined by specification
|
||||||
|
@@ -23,8 +23,8 @@ type MPEG4VideoES struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (f *MPEG4VideoES) unmarshal(
|
func (f *MPEG4VideoES) unmarshal(
|
||||||
payloadType uint8, clock string, codec string,
|
payloadType uint8, _ string, _ string,
|
||||||
rtpmap string, fmtp map[string]string,
|
_ string, fmtp map[string]string,
|
||||||
) error {
|
) error {
|
||||||
f.PayloadTyp = payloadType
|
f.PayloadTyp = payloadType
|
||||||
f.ProfileLevelID = 1 // default value defined by specification
|
f.ProfileLevelID = 1 // default value defined by specification
|
||||||
|
@@ -8,7 +8,7 @@ import (
|
|||||||
// Specification: https://datatracker.ietf.org/doc/html/rfc2250
|
// Specification: https://datatracker.ietf.org/doc/html/rfc2250
|
||||||
type MPEGTS struct{}
|
type MPEGTS struct{}
|
||||||
|
|
||||||
func (f *MPEGTS) unmarshal(payloadType uint8, clock string, codec string, rtpmap string, fmtp map[string]string) error {
|
func (f *MPEGTS) unmarshal(_ uint8, _ string, _ string, _ string, _ map[string]string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -17,7 +17,7 @@ type Opus struct {
|
|||||||
IsStereo bool
|
IsStereo bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *Opus) unmarshal(payloadType uint8, clock string, codec string, rtpmap string, fmtp map[string]string) error {
|
func (f *Opus) unmarshal(payloadType uint8, clock string, _ string, _ string, fmtp map[string]string) error {
|
||||||
f.PayloadTyp = payloadType
|
f.PayloadTyp = payloadType
|
||||||
|
|
||||||
tmp := strings.SplitN(clock, "/", 2)
|
tmp := strings.SplitN(clock, "/", 2)
|
||||||
|
@@ -18,7 +18,7 @@ type Vorbis struct {
|
|||||||
Configuration []byte
|
Configuration []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *Vorbis) unmarshal(payloadType uint8, clock string, codec string, rtpmap string, fmtp map[string]string) error {
|
func (f *Vorbis) unmarshal(payloadType uint8, clock string, _ string, _ string, fmtp map[string]string) error {
|
||||||
f.PayloadTyp = payloadType
|
f.PayloadTyp = payloadType
|
||||||
|
|
||||||
tmp := strings.SplitN(clock, "/", 2)
|
tmp := strings.SplitN(clock, "/", 2)
|
||||||
|
@@ -17,7 +17,7 @@ type VP8 struct {
|
|||||||
MaxFS *int
|
MaxFS *int
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *VP8) unmarshal(payloadType uint8, clock string, codec string, rtpmap string, fmtp map[string]string) error {
|
func (f *VP8) unmarshal(payloadType uint8, _ string, _ string, _ string, fmtp map[string]string) error {
|
||||||
f.PayloadTyp = payloadType
|
f.PayloadTyp = payloadType
|
||||||
|
|
||||||
for key, val := range fmtp {
|
for key, val := range fmtp {
|
||||||
|
@@ -18,7 +18,7 @@ type VP9 struct {
|
|||||||
ProfileID *int
|
ProfileID *int
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *VP9) unmarshal(payloadType uint8, clock string, codec string, rtpmap string, fmtp map[string]string) error {
|
func (f *VP9) unmarshal(payloadType uint8, _ string, _ string, _ string, fmtp map[string]string) error {
|
||||||
f.PayloadTyp = payloadType
|
f.PayloadTyp = payloadType
|
||||||
|
|
||||||
for key, val := range fmtp {
|
for key, val := range fmtp {
|
||||||
|
@@ -4,7 +4,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
)
|
)
|
||||||
|
|
||||||
func readKey(origstr string, str string, separator byte) (string, string) {
|
func readKey(str string, separator byte) (string, string) {
|
||||||
i := 0
|
i := 0
|
||||||
for {
|
for {
|
||||||
if i >= len(str) || str[i] == '=' || str[i] == separator {
|
if i >= len(str) || str[i] == '=' || str[i] == separator {
|
||||||
@@ -47,7 +47,7 @@ func keyValParse(str string, separator byte) (map[string]string, error) {
|
|||||||
|
|
||||||
for len(str) > 0 {
|
for len(str) > 0 {
|
||||||
var k string
|
var k string
|
||||||
k, str = readKey(origstr, str, separator)
|
k, str = readKey(str, separator)
|
||||||
|
|
||||||
if len(k) > 0 {
|
if len(k) > 0 {
|
||||||
if len(str) > 0 && str[0] == '=' {
|
if len(str) > 0 && str[0] == '=' {
|
||||||
|
@@ -26,10 +26,10 @@ func getSessionID(header base.Header) string {
|
|||||||
|
|
||||||
func mediasForSDP(
|
func mediasForSDP(
|
||||||
medias media.Medias,
|
medias media.Medias,
|
||||||
streamMedias map[*media.Media]*serverStreamMedia,
|
|
||||||
contentBase *url.URL,
|
contentBase *url.URL,
|
||||||
) media.Medias {
|
) media.Medias {
|
||||||
copy := make(media.Medias, len(medias))
|
newMedias := make(media.Medias, len(medias))
|
||||||
|
|
||||||
for i, medi := range medias {
|
for i, medi := range medias {
|
||||||
mc := &media.Media{
|
mc := &media.Media{
|
||||||
Type: medi.Type,
|
Type: medi.Type,
|
||||||
@@ -47,9 +47,10 @@ func mediasForSDP(
|
|||||||
u, _ := mc.URL(contentBase)
|
u, _ := mc.URL(contentBase)
|
||||||
mc.Control = u.String()
|
mc.Control = u.String()
|
||||||
|
|
||||||
copy[i] = mc
|
newMedias[i] = mc
|
||||||
}
|
}
|
||||||
return copy
|
|
||||||
|
return newMedias
|
||||||
}
|
}
|
||||||
|
|
||||||
type readReq struct {
|
type readReq struct {
|
||||||
@@ -294,7 +295,7 @@ func (sc *ServerConn) handleRequestInner(req *base.Request) (*base.Response, err
|
|||||||
}
|
}
|
||||||
|
|
||||||
if stream != nil {
|
if stream != nil {
|
||||||
byts, _ := mediasForSDP(stream.medias, stream.streamMedias, req.URL).Marshal(multicast).Marshal()
|
byts, _ := mediasForSDP(stream.medias, req.URL).Marshal(multicast).Marshal()
|
||||||
res.Body = byts
|
res.Body = byts
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -68,12 +68,12 @@ func (cr *serverConnReader) readFuncStandard() error {
|
|||||||
cr.sc.nconn.SetReadDeadline(time.Time{})
|
cr.sc.nconn.SetReadDeadline(time.Time{})
|
||||||
|
|
||||||
for {
|
for {
|
||||||
any, err := cr.sc.conn.ReadInterleavedFrameOrRequest()
|
what, err := cr.sc.conn.ReadInterleavedFrameOrRequest()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
switch what := any.(type) {
|
switch what := what.(type) {
|
||||||
case *base.Request:
|
case *base.Request:
|
||||||
cres := make(chan error)
|
cres := make(chan error)
|
||||||
req := readReq{req: what, res: cres}
|
req := readReq{req: what, res: cres}
|
||||||
|
@@ -66,7 +66,8 @@ func invalidURLAnnounceReq(t *testing.T, control string) base.Request {
|
|||||||
MediaDescriptions: []*psdp.MediaDescription{medi.Marshal()},
|
MediaDescriptions: []*psdp.MediaDescription{medi.Marshal()},
|
||||||
}
|
}
|
||||||
|
|
||||||
byts, _ := sout.Marshal()
|
byts, err := sout.Marshal()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
return base.Request{
|
return base.Request{
|
||||||
Method: base.Announce,
|
Method: base.Announce,
|
||||||
|
@@ -240,7 +240,7 @@ func (sm *serverSessionMedia) readRTCPUDPRecord(payload []byte) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sm *serverSessionMedia) readRTPTCPPlay(payload []byte) error {
|
func (sm *serverSessionMedia) readRTPTCPPlay(_ []byte) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -323,7 +323,7 @@ type testServerErrMethodNotImplemented struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *testServerErrMethodNotImplemented) OnDescribe(
|
func (s *testServerErrMethodNotImplemented) OnDescribe(
|
||||||
ctx *ServerHandlerOnDescribeCtx,
|
_ *ServerHandlerOnDescribeCtx,
|
||||||
) (*base.Response, *ServerStream, error) {
|
) (*base.Response, *ServerStream, error) {
|
||||||
return &base.Response{
|
return &base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
@@ -331,7 +331,7 @@ func (s *testServerErrMethodNotImplemented) OnDescribe(
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *testServerErrMethodNotImplemented) OnSetup(
|
func (s *testServerErrMethodNotImplemented) OnSetup(
|
||||||
ctx *ServerHandlerOnSetupCtx,
|
_ *ServerHandlerOnSetupCtx,
|
||||||
) (*base.Response, *ServerStream, error) {
|
) (*base.Response, *ServerStream, error) {
|
||||||
return &base.Response{
|
return &base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
|
Reference in New Issue
Block a user