add codec wait
This commit is contained in:
		| @@ -68,7 +68,6 @@ func (self *Server) handleConn(conn *Conn) (err error) { | ||||
| 		if err = conn.prepare(stageCommandDone, 0); err != nil { | ||||
| 			return | ||||
| 		} | ||||
|  | ||||
| 		if conn.playing { | ||||
| 			if self.HandlePlay != nil { | ||||
| 				self.HandlePlay(conn) | ||||
| @@ -136,51 +135,42 @@ const ( | ||||
| ) | ||||
|  | ||||
| type Conn struct { | ||||
| 	URL             *url.URL | ||||
| 	OnPlayOrPublish func(string, flvio.AMFMap) error | ||||
|  | ||||
| 	prober  *flv.Prober | ||||
| 	streams []av.CodecData | ||||
|  | ||||
| 	txbytes uint64 | ||||
| 	rxbytes uint64 | ||||
|  | ||||
| 	bufr *bufio.Reader | ||||
| 	bufw *bufio.Writer | ||||
| 	ackn uint32 | ||||
|  | ||||
| 	writebuf []byte | ||||
| 	readbuf  []byte | ||||
|  | ||||
| 	netconn   net.Conn | ||||
| 	txrxcount *txrxcount | ||||
|  | ||||
| 	writeMaxChunkSize int | ||||
| 	readMaxChunkSize  int | ||||
| 	readAckSize       uint32 | ||||
| 	readcsmap         map[uint32]*chunkStream | ||||
|  | ||||
| 	chunkHeaderBuf      []byte | ||||
| 	chunkHeaderBufExt   []byte | ||||
| 	URL                 *url.URL | ||||
| 	OnPlayOrPublish     func(string, flvio.AMFMap) error | ||||
| 	prober              *flv.Prober | ||||
| 	streams             []av.CodecData | ||||
| 	txbytes             uint64 | ||||
| 	rxbytes             uint64 | ||||
| 	bufr                *bufio.Reader | ||||
| 	bufw                *bufio.Writer | ||||
| 	ackn                uint32 | ||||
| 	writebuf            []byte | ||||
| 	readbuf             []byte | ||||
| 	netconn             net.Conn | ||||
| 	txrxcount           *txrxcount | ||||
| 	writeMaxChunkSize   int | ||||
| 	readMaxChunkSize    int | ||||
| 	readAckSize         uint32 | ||||
| 	readcsmap           map[uint32]*chunkStream | ||||
| 	isserver            bool | ||||
| 	publishing, playing bool | ||||
| 	reading, writing    bool | ||||
| 	stage               int | ||||
|  | ||||
| 	avmsgsid uint32 | ||||
|  | ||||
| 	gotcommand     bool | ||||
| 	commandname    string | ||||
| 	commandtransid float64 | ||||
| 	commandobj     flvio.AMFMap | ||||
| 	commandparams  []interface{} | ||||
|  | ||||
| 	gotmsg      bool | ||||
| 	timestamp   uint32 | ||||
| 	msgdata     []byte | ||||
| 	msgtypeid   uint8 | ||||
| 	datamsgvals []interface{} | ||||
| 	avtag       flvio.Tag | ||||
|  | ||||
| 	eventtype uint16 | ||||
| 	avmsgsid            uint32 | ||||
| 	gotcommand          bool | ||||
| 	commandname         string | ||||
| 	commandtransid      float64 | ||||
| 	commandobj          flvio.AMFMap | ||||
| 	commandparams       []interface{} | ||||
| 	gotmsg              bool | ||||
| 	timestamp           uint32 | ||||
| 	msgdata             []byte | ||||
| 	msgtypeid           uint8 | ||||
| 	datamsgvals         []interface{} | ||||
| 	avtag               flvio.Tag | ||||
| 	eventtype           uint16 | ||||
| } | ||||
|  | ||||
| type txrxcount struct { | ||||
| @@ -213,6 +203,8 @@ func NewConn(netconn net.Conn) *Conn { | ||||
| 	conn.txrxcount = &txrxcount{ReadWriter: netconn} | ||||
| 	conn.writebuf = make([]byte, 4096) | ||||
| 	conn.readbuf = make([]byte, 4096) | ||||
| 	conn.chunkHeaderBuf = make([]byte, 265) | ||||
| 	conn.chunkHeaderBufExt = make([]byte, 12+4+4) | ||||
| 	return conn | ||||
| } | ||||
|  | ||||
| @@ -353,16 +345,13 @@ func createURL(tcurl, app, play string) (u *url.URL) { | ||||
| var CodecTypes = flv.CodecTypes | ||||
|  | ||||
| func (self *Conn) writeBasicConf() (err error) { | ||||
| 	// > SetChunkSize | ||||
| 	if err = self.writeSetChunkSize(1024 * 128); err != nil { | ||||
| 	if err = self.writeSetChunkSize(65536); err != nil { | ||||
| 		return | ||||
| 	} | ||||
| 	// > WindowAckSize | ||||
| 	if err = self.writeWindowAckSize(5000000); err != nil { | ||||
| 	if err = self.writeWindowAckSize(2500000); err != nil { | ||||
| 		return | ||||
| 	} | ||||
| 	// > SetPeerBandwidth | ||||
| 	if err = self.writeSetPeerBandwidth(5000000, 2); err != nil { | ||||
| 	if err = self.writeSetPeerBandwidth(10000000, 2); err != nil { | ||||
| 		return | ||||
| 	} | ||||
| 	return | ||||
| @@ -370,8 +359,6 @@ func (self *Conn) writeBasicConf() (err error) { | ||||
|  | ||||
| func (self *Conn) readConnect() (err error) { | ||||
| 	var connectpath string | ||||
|  | ||||
| 	// < connect("app") | ||||
| 	if err = self.pollCommand(); err != nil { | ||||
| 		return | ||||
| 	} | ||||
| @@ -405,11 +392,11 @@ func (self *Conn) readConnect() (err error) { | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	// > _result("NetConnection.Connect.Success") | ||||
| 	if err = self.writeCommandMsg(3, 0, "_result", self.commandtransid, | ||||
| 		flvio.AMFMap{ | ||||
| 			"fmtVer":       "FMS/3,0,1,123", | ||||
| 			"capabilities": 31, | ||||
| 			"mode":         1, | ||||
| 		}, | ||||
| 		flvio.AMFMap{ | ||||
| 			"level":          "status", | ||||
| @@ -432,10 +419,8 @@ func (self *Conn) readConnect() (err error) { | ||||
| 		if self.gotcommand { | ||||
| 			switch self.commandname { | ||||
|  | ||||
| 			// < createStream | ||||
| 			case "createStream": | ||||
| 				self.avmsgsid = uint32(1) | ||||
| 				// > _result(streamid) | ||||
| 				if err = self.writeCommandMsg(3, 0, "_result", self.commandtransid, nil, self.avmsgsid); err != nil { | ||||
| 					return | ||||
| 				} | ||||
| @@ -443,7 +428,6 @@ func (self *Conn) readConnect() (err error) { | ||||
| 					return | ||||
| 				} | ||||
|  | ||||
| 			// < publish("path") | ||||
| 			case "publish": | ||||
| 				if Debug { | ||||
| 					fmt.Println("rtmp: < publish") | ||||
| @@ -460,7 +444,6 @@ func (self *Conn) readConnect() (err error) { | ||||
| 					cberr = self.OnPlayOrPublish(self.commandname, connectparams) | ||||
| 				} | ||||
|  | ||||
| 				// > onStatus() | ||||
| 				if err = self.writeCommandMsg(5, self.avmsgsid, | ||||
| 					"onStatus", self.commandtransid, nil, | ||||
| 					flvio.AMFMap{ | ||||
| @@ -486,7 +469,6 @@ func (self *Conn) readConnect() (err error) { | ||||
| 				self.stage++ | ||||
| 				return | ||||
|  | ||||
| 			// < play("path") | ||||
| 			case "play": | ||||
| 				if Debug { | ||||
| 					fmt.Println("rtmp: < play") | ||||
| @@ -498,12 +480,10 @@ func (self *Conn) readConnect() (err error) { | ||||
| 				} | ||||
| 				playpath, _ := self.commandparams[0].(string) | ||||
|  | ||||
| 				// > streamBegin(streamid) | ||||
| 				if err = self.writeStreamBegin(self.avmsgsid); err != nil { | ||||
| 					return | ||||
| 				} | ||||
|  | ||||
| 				// > onStatus() | ||||
| 				if err = self.writeCommandMsg(5, self.avmsgsid, | ||||
| 					"onStatus", self.commandtransid, nil, | ||||
| 					flvio.AMFMap{ | ||||
| @@ -515,7 +495,6 @@ func (self *Conn) readConnect() (err error) { | ||||
| 					return | ||||
| 				} | ||||
|  | ||||
| 				// > |RtmpSampleAccess() | ||||
| 				if err = self.writeDataMsg(5, self.avmsgsid, | ||||
| 					"|RtmpSampleAccess", true, true, | ||||
| 				); err != nil { | ||||
| @@ -599,7 +578,6 @@ func (self *Conn) writeConnect(path string) (err error) { | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	// > connect("app") | ||||
| 	if Debug { | ||||
| 		fmt.Printf("rtmp: > connect('%s') host=%s\n", path, self.URL.Host) | ||||
| 	} | ||||
| @@ -627,7 +605,6 @@ func (self *Conn) writeConnect(path string) (err error) { | ||||
| 			return | ||||
| 		} | ||||
| 		if self.gotcommand { | ||||
| 			// < _result("NetConnection.Connect.Success") | ||||
| 			if self.commandname == "_result" { | ||||
| 				var ok bool | ||||
| 				var errmsg string | ||||
| @@ -664,7 +641,6 @@ func (self *Conn) connectPublish() (err error) { | ||||
|  | ||||
| 	transid := 2 | ||||
|  | ||||
| 	// > createStream() | ||||
| 	if Debug { | ||||
| 		fmt.Printf("rtmp: > createStream()\n") | ||||
| 	} | ||||
| @@ -682,7 +658,6 @@ func (self *Conn) connectPublish() (err error) { | ||||
| 			return | ||||
| 		} | ||||
| 		if self.gotcommand { | ||||
| 			// < _result(avmsgsid) of createStream | ||||
| 			if self.commandname == "_result" { | ||||
| 				var ok bool | ||||
| 				if ok, self.avmsgsid = self.checkCreateStreamResult(); !ok { | ||||
| @@ -694,7 +669,6 @@ func (self *Conn) connectPublish() (err error) { | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	// > publish('app') | ||||
| 	if Debug { | ||||
| 		fmt.Printf("rtmp: > publish('%s')\n", publishpath) | ||||
| 	} | ||||
| @@ -720,7 +694,6 @@ func (self *Conn) connectPlay() (err error) { | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	// > createStream() | ||||
| 	if Debug { | ||||
| 		fmt.Printf("rtmp: > createStream()\n") | ||||
| 	} | ||||
| @@ -728,7 +701,6 @@ func (self *Conn) connectPlay() (err error) { | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	// > SetBufferLength 0,100ms | ||||
| 	if err = self.writeSetBufferLength(0, 100); err != nil { | ||||
| 		return | ||||
| 	} | ||||
| @@ -742,7 +714,6 @@ func (self *Conn) connectPlay() (err error) { | ||||
| 			return | ||||
| 		} | ||||
| 		if self.gotcommand { | ||||
| 			// < _result(avmsgsid) of createStream | ||||
| 			if self.commandname == "_result" { | ||||
| 				var ok bool | ||||
| 				if ok, self.avmsgsid = self.checkCreateStreamResult(); !ok { | ||||
| @@ -754,7 +725,6 @@ func (self *Conn) connectPlay() (err error) { | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	// > play('app') | ||||
| 	if Debug { | ||||
| 		fmt.Printf("rtmp: > play('%s')\n", playpath) | ||||
| 	} | ||||
| @@ -868,7 +838,6 @@ func (self *Conn) WritePacket(pkt av.Packet) (err error) { | ||||
| 	if err = self.writeAVTag(tag, int32(timestamp)); err != nil { | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	return | ||||
| } | ||||
|  | ||||
| @@ -889,13 +858,10 @@ func (self *Conn) WriteHeader(streams []av.CodecData) (err error) { | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	// > onMetaData() | ||||
| 	if err = self.writeDataMsg(5, self.avmsgsid, "onMetaData", metadata); err != nil { | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	// > Videodata(decoder config) | ||||
| 	// > Audiodata(decoder config) | ||||
| 	for _, stream := range streams { | ||||
| 		var ok bool | ||||
| 		var tag flvio.Tag | ||||
| @@ -983,6 +949,92 @@ func (self *Conn) writeAMF0Msg(msgtypeid uint8, csid, msgsid uint32, args ...int | ||||
| 	_, err = self.bufw.Write(b[:n]) | ||||
| 	return | ||||
| } | ||||
| func (self *Conn) fillChunk3Header(b []byte, csid uint32, timestamp uint32) (n int) { | ||||
| 	b[n] = (byte(csid) & 0x3f) | 0xC0 | ||||
| 	n++ | ||||
| 	if timestamp >= 0xffffff { | ||||
| 		pio.PutU32BE(b[n:], timestamp) | ||||
| 		n += 4 | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
|  | ||||
| func (self *Conn) fillChunk0Header(b []byte, csid uint32, timestamp uint32, msgtypeid uint8, msgsid uint32, msgdatalen int) (n int) { | ||||
|  | ||||
| 	//  0                   1                   2                   3 | ||||
| 	//  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | ||||
| 	// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| 	// |                   timestamp                   |message length | | ||||
| 	// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| 	// |     message length (cont)     |message type id| msg stream id | | ||||
| 	// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| 	// |           message stream id (cont)            | | ||||
| 	// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| 	// | ||||
| 	//       Figure 9 Chunk Message Header – Type 0 | ||||
|  | ||||
| 	b[n] = byte(csid) & 0x3f | ||||
| 	n++ | ||||
| 	if timestamp < 0xffffff { | ||||
| 		pio.PutU24BE(b[n:], uint32(timestamp)) | ||||
| 	} else { | ||||
| 		pio.PutU24BE(b[n:], uint32(0xffffff)) | ||||
| 	} | ||||
| 	n += 3 | ||||
| 	pio.PutU24BE(b[n:], uint32(msgdatalen)) | ||||
| 	n += 3 | ||||
| 	b[n] = msgtypeid | ||||
| 	n++ | ||||
| 	pio.PutU32LE(b[n:], msgsid) | ||||
| 	n += 4 | ||||
|  | ||||
| 	if timestamp >= 0xffffff { | ||||
| 		pio.PutU32BE(b[n:], timestamp) | ||||
| 		n += 4 | ||||
| 	} | ||||
| 	if Debug { | ||||
| 		fmt.Printf("rtmp: write chunk msgdatalen=%d msgsid=%d\n", msgdatalen, msgsid) | ||||
| 	} | ||||
|  | ||||
| 	return | ||||
| } | ||||
| func (self *Conn) weiteAVTagtoChunk(csid uint32, timestamp uint32, msgtypeid uint8, msgsid uint32, msgdatalen int, tag flvio.Tag) (n int, err error) { | ||||
| 	pos := 0 | ||||
| 	sn := 0 | ||||
| 	last := self.writeMaxChunkSize | ||||
| 	hdrlen := tag.FillHeader(self.chunkHeaderBufExt) | ||||
| 	tag.Data = append(self.chunkHeaderBufExt[:hdrlen], tag.Data...) | ||||
| 	msgdatalen = len(tag.Data) | ||||
| 	end := msgdatalen | ||||
| 	for msgdatalen+hdrlen > 0 { | ||||
| 		if pos == 0 { | ||||
| 			n = self.fillChunk0Header(self.chunkHeaderBuf, csid, timestamp, msgtypeid, msgsid, msgdatalen) | ||||
| 			n, err = self.bufw.Write(self.chunkHeaderBuf[:n]) | ||||
| 			if err != nil { | ||||
| 				return | ||||
| 			} | ||||
| 		} else { | ||||
| 			n := self.fillChunk3Header(self.chunkHeaderBuf, csid, timestamp) | ||||
| 			_, err = self.bufw.Write(self.chunkHeaderBuf[:n]) | ||||
| 		} | ||||
| 		if msgdatalen > self.writeMaxChunkSize { | ||||
| 			if sn, err = self.bufw.Write(tag.Data[pos:last]); err != nil { | ||||
| 				return | ||||
| 			} | ||||
| 			pos += sn | ||||
| 			last += sn | ||||
| 			msgdatalen -= sn | ||||
| 			continue | ||||
| 		} | ||||
| 		if sn, err = self.bufw.Write(tag.Data[pos:end]); err != nil { | ||||
| 			return | ||||
| 		} | ||||
| 		pos += sn | ||||
| 		msgdatalen -= sn | ||||
| 		return | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
|  | ||||
| func (self *Conn) writeAVTag(tag flvio.Tag, ts int32) (err error) { | ||||
| 	var msgtypeid uint8 | ||||
| @@ -1000,28 +1052,8 @@ func (self *Conn) writeAVTag(tag flvio.Tag, ts int32) (err error) { | ||||
| 		csid = 7 | ||||
| 		data = tag.Data | ||||
| 	} | ||||
|  | ||||
| 	actualChunkHeaderLength := chunkHeaderLength | ||||
| 	if uint32(ts) > FlvTimestampMax { | ||||
| 		actualChunkHeaderLength += 4 | ||||
| 	} | ||||
|  | ||||
| 	b := self.tmpwbuf(actualChunkHeaderLength + flvio.MaxTagSubHeaderLength) | ||||
| 	hdrlen := tag.FillHeader(b[actualChunkHeaderLength:]) | ||||
| 	self.fillChunkHeader(b, csid, ts, msgtypeid, self.avmsgsid, hdrlen+len(data)) | ||||
| 	n := hdrlen + actualChunkHeaderLength | ||||
|  | ||||
| 	if n+len(data) > self.writeMaxChunkSize { | ||||
| 		if err = self.writeSetChunkSize(n + len(data)); err != nil { | ||||
| 			return | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if _, err = self.bufw.Write(b[:n]); err != nil { | ||||
| 		return | ||||
| 	} | ||||
| 	_, err = self.bufw.Write(data) | ||||
| 	return | ||||
| 	_, err = self.weiteAVTagtoChunk(csid, uint32(ts), msgtypeid, self.avmsgsid, len(data), tag) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| func (self *Conn) writeStreamBegin(msgsid uint32) (err error) { | ||||
| @@ -1529,20 +1561,12 @@ func (self *Conn) handshakeClient() (err error) { | ||||
|  | ||||
| 	C0C1C2 := random[:1536*2+1] | ||||
| 	C0 := C0C1C2[:1] | ||||
| 	//C1 := C0C1C2[1:1536+1] | ||||
| 	C0C1 := C0C1C2[:1536+1] | ||||
| 	C2 := C0C1C2[1536+1:] | ||||
|  | ||||
| 	S0S1S2 := random[1536*2+1:] | ||||
| 	//S0 := S0S1S2[:1] | ||||
| 	S1 := S0S1S2[1 : 1536+1] | ||||
| 	//S0S1 := S0S1S2[:1536+1] | ||||
| 	//S2 := S0S1S2[1536+1:] | ||||
|  | ||||
| 	C0[0] = 3 | ||||
| 	//hsCreate01(C0C1, hsClientFullKey) | ||||
|  | ||||
| 	// > C0C1 | ||||
| 	if _, err = self.bufw.Write(C0C1); err != nil { | ||||
| 		return | ||||
| 	} | ||||
| @@ -1550,7 +1574,6 @@ func (self *Conn) handshakeClient() (err error) { | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	// < S0S1S2 | ||||
| 	if _, err = io.ReadFull(self.bufr, S0S1S2); err != nil { | ||||
| 		return | ||||
| 	} | ||||
| @@ -1565,7 +1588,6 @@ func (self *Conn) handshakeClient() (err error) { | ||||
| 		C2 = S1 | ||||
| 	} | ||||
|  | ||||
| 	// > C2 | ||||
| 	if _, err = self.bufw.Write(C2); err != nil { | ||||
| 		return | ||||
| 	} | ||||
| @@ -1582,14 +1604,12 @@ func (self *Conn) handshakeServer() (err error) { | ||||
| 	C1 := C0C1C2[1 : 1536+1] | ||||
| 	C0C1 := C0C1C2[:1536+1] | ||||
| 	C2 := C0C1C2[1536+1:] | ||||
|  | ||||
| 	S0S1S2 := random[1536*2+1:] | ||||
| 	S0 := S0S1S2[:1] | ||||
| 	S1 := S0S1S2[1 : 1536+1] | ||||
| 	S0S1 := S0S1S2[:1536+1] | ||||
| 	S2 := S0S1S2[1536+1:] | ||||
|  | ||||
| 	// < C0C1 | ||||
| 	if _, err = io.ReadFull(self.bufr, C0C1); err != nil { | ||||
| 		return | ||||
| 	} | ||||
| @@ -1619,7 +1639,6 @@ func (self *Conn) handshakeServer() (err error) { | ||||
| 		copy(S2, C2) | ||||
| 	} | ||||
|  | ||||
| 	// > S0S1S2 | ||||
| 	if _, err = self.bufw.Write(S0S1S2); err != nil { | ||||
| 		return | ||||
| 	} | ||||
| @@ -1627,7 +1646,6 @@ func (self *Conn) handshakeServer() (err error) { | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	// < C2 | ||||
| 	if _, err = io.ReadFull(self.bufr, C2); err != nil { | ||||
| 		return | ||||
| 	} | ||||
|   | ||||
| @@ -86,6 +86,7 @@ type RTSPClient struct { | ||||
| 	PreVideoTS          int64 | ||||
| 	PreSequenceNumber   int | ||||
| 	FPS                 int | ||||
| 	WaitCodec           bool | ||||
| } | ||||
|  | ||||
| type RTSPClientOptions struct { | ||||
| @@ -153,6 +154,7 @@ func Dial(options RTSPClientOptions) (*RTSPClient, error) { | ||||
| 					} | ||||
| 				} else { | ||||
| 					client.CodecData = append(client.CodecData, h264parser.CodecData{}) | ||||
| 					client.WaitCodec = true | ||||
| 				} | ||||
| 				client.FPS = i2.FPS | ||||
| 				client.videoCodec = av.H264 | ||||
|   | ||||
							
								
								
									
										5
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								go.mod
									
									
									
									
									
								
							| @@ -3,6 +3,7 @@ module github.com/deepch/vdk | ||||
| go 1.15 | ||||
|  | ||||
| require ( | ||||
| 	github.com/pion/webrtc/v2 v2.2.26 // indirect | ||||
| 	github.com/pion/webrtc/v3 v3.0.5 // indirect | ||||
| 	github.com/pion/interceptor v0.0.12 | ||||
| 	github.com/pion/webrtc/v2 v2.2.26 | ||||
| 	github.com/pion/webrtc/v3 v3.0.29 | ||||
| ) | ||||
|   | ||||
							
								
								
									
										114
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										114
									
								
								go.sum
									
									
									
									
									
								
							| @@ -1,8 +1,13 @@ | ||||
| github.com/cheekybits/genny v1.0.0 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE= | ||||
| github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= | ||||
| github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||||
| github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= | ||||
| github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||||
| github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= | ||||
| github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= | ||||
| github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= | ||||
| github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= | ||||
| github.com/golang/mock v1.2.0 h1:28o5sBqPkBsMGnC6b4MvE2TzSr5/AT4c/1fLqVGIwlk= | ||||
| github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= | ||||
| github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= | ||||
| github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= | ||||
| @@ -11,92 +16,100 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU | ||||
| github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= | ||||
| github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= | ||||
| github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= | ||||
| github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM= | ||||
| github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= | ||||
| github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= | ||||
| github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= | ||||
| github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= | ||||
| github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | ||||
| github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= | ||||
| github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | ||||
| github.com/google/uuid v1.1.5 h1:kxhtnfFVi+rYdOALN0B3k9UT86zVJKfBimRaciULW4I= | ||||
| github.com/google/uuid v1.1.5/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | ||||
| github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs= | ||||
| github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | ||||
| github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= | ||||
| github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= | ||||
| github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= | ||||
| github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= | ||||
| github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= | ||||
| github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= | ||||
| github.com/lucas-clemente/quic-go v0.7.1-0.20190401152353-907071221cf9 h1:tbuodUh2vuhOVZAdW3NEUvosFHUMJwUNl7jk/VSEiwc= | ||||
| github.com/lucas-clemente/quic-go v0.7.1-0.20190401152353-907071221cf9/go.mod h1:PpMmPfPKO9nKJ/psF49ESTAGQSdfXxlg1otPbEB2nOw= | ||||
| github.com/marten-seemann/qtls v0.2.3 h1:0yWJ43C62LsZt08vuQJDK1uC1czUc3FJeCLPoNAI4vA= | ||||
| github.com/marten-seemann/qtls v0.2.3/go.mod h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk= | ||||
| github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= | ||||
| github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= | ||||
| github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= | ||||
| github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= | ||||
| github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= | ||||
| github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= | ||||
| github.com/onsi/ginkgo v1.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= | ||||
| github.com/onsi/ginkgo v1.16.1 h1:foqVmeWDD6yYpK+Yz3fHyNIxFYNxswxqNFjSKe+vI54= | ||||
| github.com/onsi/ginkgo v1.16.1/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= | ||||
| github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= | ||||
| github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= | ||||
| github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= | ||||
| github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= | ||||
| github.com/onsi/gomega v1.11.0 h1:+CqWgvj0OZycCaqclBD1pxKHAU+tOkHmQIWvDHq2aug= | ||||
| github.com/onsi/gomega v1.11.0/go.mod h1:azGKhqFUon9Vuj0YmTfLSmx0FUwqXYSTl5re8lQLTUg= | ||||
| github.com/pion/datachannel v1.4.21 h1:3ZvhNyfmxsAqltQrApLPQMhSFNA+aT87RqyCq4OXmf0= | ||||
| github.com/pion/datachannel v1.4.21/go.mod h1:oiNyP4gHx2DIwRzX/MFyH0Rz/Gz05OgBlayAI2hAWjg= | ||||
| github.com/pion/dtls/v2 v2.0.1/go.mod h1:uMQkz2W0cSqY00xav7WByQ4Hb+18xeQh2oH2fRezr5U= | ||||
| github.com/pion/dtls/v2 v2.0.2 h1:FHCHTiM182Y8e15aFTiORroiATUI16ryHiQh8AIOJ1E= | ||||
| github.com/pion/dtls/v2 v2.0.2/go.mod h1:27PEO3MDdaCfo21heT59/vsdmZc0zMt9wQPcSlLu/1I= | ||||
| github.com/pion/dtls/v2 v2.0.4 h1:WuUcqi6oYMu/noNTz92QrF1DaFj4eXbhQ6dzaaAwOiI= | ||||
| github.com/pion/dtls/v2 v2.0.4/go.mod h1:qAkFscX0ZHoI1E07RfYPoRw3manThveu+mlTDdOxoGI= | ||||
| github.com/pion/dtls/v2 v2.0.9 h1:7Ow+V++YSZQMYzggI0P9vLJz/hUFcffsfGMfT/Qy+u8= | ||||
| github.com/pion/dtls/v2 v2.0.9/go.mod h1:O0Wr7si/Zj5/EBFlDzDd6UtVxx25CE1r7XM7BQKYQho= | ||||
| github.com/pion/ice v0.7.18 h1:KbAWlzWRUdX9SmehBh3gYpIFsirjhSQsCw6K2MjYMK0= | ||||
| github.com/pion/ice v0.7.18/go.mod h1:+Bvnm3nYC6Nnp7VV6glUkuOfToB/AtMRZpOU8ihuf4c= | ||||
| github.com/pion/ice/v2 v2.0.15 h1:KZrwa2ciL9od8+TUVJiYTNsCW9J5lktBjGwW1MacEnQ= | ||||
| github.com/pion/ice/v2 v2.0.15/go.mod h1:ZIiVGevpgAxF/cXiIVmuIUtCb3Xs4gCzCbXB6+nFkSI= | ||||
| github.com/pion/interceptor v0.0.9 h1:fk5hTdyLO3KURQsf/+RjMpEm4NE3yeTY9Kh97b5BvwA= | ||||
| github.com/pion/interceptor v0.0.9/go.mod h1:dHgEP5dtxOTf21MObuBAjJeAayPxLUAZjerGH8Xr07c= | ||||
| github.com/pion/ice/v2 v2.1.7 h1:FjgDfUNrVYTxQabJrkBX6ld12tvYbgzHenqPh3PJF6E= | ||||
| github.com/pion/ice/v2 v2.1.7/go.mod h1:kV4EODVD5ux2z8XncbLHIOtcXKtYXVgLVCeVqnpoeP0= | ||||
| github.com/pion/interceptor v0.0.12 h1:eC1iVneBIAQJEfaNAfDqAncJWhMDAnaXPRCJsltdokE= | ||||
| github.com/pion/interceptor v0.0.12/go.mod h1:qzeuWuD/ZXvPqOnxNcnhWfkCZ2e1kwwslicyyPnhoK4= | ||||
| github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY= | ||||
| github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms= | ||||
| github.com/pion/mdns v0.0.4 h1:O4vvVqr4DGX63vzmO6Fw9vpy3lfztVWHGCQfyw0ZLSY= | ||||
| github.com/pion/mdns v0.0.4/go.mod h1:R1sL0p50l42S5lJs91oNdUL58nm0QHrhxnSegr++qC0= | ||||
| github.com/pion/mdns v0.0.5 h1:Q2oj/JB3NqfzY9xGZ1fPzZzK7sDSD8rZPOvcIQ10BCw= | ||||
| github.com/pion/mdns v0.0.5/go.mod h1:UgssrvdD3mxpi8tMxAXbsppL3vJ4Jipw1mTCW+al01g= | ||||
| github.com/pion/quic v0.1.1 h1:D951FV+TOqI9A0rTF7tHx0Loooqz+nyzjEyj8o3PuMA= | ||||
| github.com/pion/quic v0.1.1/go.mod h1:zEU51v7ru8Mp4AUBJvj6psrSth5eEFNnVQK5K48oV3k= | ||||
| github.com/pion/randutil v0.0.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8= | ||||
| github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA= | ||||
| github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8= | ||||
| github.com/pion/rtcp v1.2.3 h1:2wrhKnqgSz91Q5nzYTO07mQXztYPtxL8a0XOss4rJqA= | ||||
| github.com/pion/rtcp v1.2.3/go.mod h1:zGhIv0RPRF0Z1Wiij22pUt5W/c9fevqSzT4jje/oK7I= | ||||
| github.com/pion/rtcp v1.2.6 h1:1zvwBbyd0TeEuuWftrd/4d++m+/kZSeiguxU61LFWpo= | ||||
| github.com/pion/rtcp v1.2.6/go.mod h1:52rMNPWFsjr39z9B9MhnkqhPLoeHTv1aN63o/42bWE0= | ||||
| github.com/pion/rtp v1.6.0 h1:4Ssnl/T5W2LzxHj9ssYpGVEQh3YYhQFNVmSWO88MMwk= | ||||
| github.com/pion/rtp v1.6.0/go.mod h1:QgfogHsMBVE/RFNno467U/KBqfUywEH+HK+0rtnwsdI= | ||||
| github.com/pion/rtp v1.6.2 h1:iGBerLX6JiDjB9NXuaPzHyxHFG9JsIEdgwTC0lp5n/U= | ||||
| github.com/pion/rtp v1.6.2/go.mod h1:bDb5n+BFZxXx0Ea7E5qe+klMuqiBrP+w8XSjiWtCUko= | ||||
| github.com/pion/sctp v1.7.10 h1:o3p3/hZB5Cx12RMGyWmItevJtZ6o2cpuxaw6GOS4x+8= | ||||
| github.com/pion/rtp v1.6.5 h1:o2cZf8OascA5HF/b0PAbTxRKvOWxTQxWYt7SlToxFGI= | ||||
| github.com/pion/rtp v1.6.5/go.mod h1:bDb5n+BFZxXx0Ea7E5qe+klMuqiBrP+w8XSjiWtCUko= | ||||
| github.com/pion/sctp v1.7.10/go.mod h1:EhpTUQu1/lcK3xI+eriS6/96fWetHGCvBi9MSsnaBN0= | ||||
| github.com/pion/sctp v1.7.11 h1:UCnj7MsobLKLuP/Hh+JMiI/6W5Bs/VF45lWKgHFjSIE= | ||||
| github.com/pion/sctp v1.7.11/go.mod h1:EhpTUQu1/lcK3xI+eriS6/96fWetHGCvBi9MSsnaBN0= | ||||
| github.com/pion/sctp v1.7.12 h1:GsatLufywVruXbZZT1CKg+Jr8ZTkwiPnmUC/oO9+uuY= | ||||
| github.com/pion/sctp v1.7.12/go.mod h1:xFe9cLMZ5Vj6eOzpyiKjT9SwGM4KpK/8Jbw5//jc+0s= | ||||
| github.com/pion/sdp/v2 v2.4.0 h1:luUtaETR5x2KNNpvEMv/r4Y+/kzImzbz4Lm1z8eQNQI= | ||||
| github.com/pion/sdp/v2 v2.4.0/go.mod h1:L2LxrOpSTJbAns244vfPChbciR/ReU1KWfG04OpkR7E= | ||||
| github.com/pion/sdp/v3 v3.0.4 h1:2Kf+dgrzJflNCSw3TV5v2VLeI0s/qkzy2r5jlR0wzf8= | ||||
| github.com/pion/sdp/v3 v3.0.4/go.mod h1:bNiSknmJE0HYBprTHXKPQ3+JjacTv5uap92ueJZKsRk= | ||||
| github.com/pion/srtp v1.5.1 h1:9Q3jAfslYZBt+C69SI/ZcONJh9049JUHZWYRRf5KEKw= | ||||
| github.com/pion/srtp v1.5.1/go.mod h1:B+QgX5xPeQTNc1CJStJPHzOlHK66ViMDWTT0HZTCkcA= | ||||
| github.com/pion/srtp/v2 v2.0.1 h1:kgfh65ob3EcnFYA4kUBvU/menCp9u7qaJLXwWgpobzs= | ||||
| github.com/pion/srtp/v2 v2.0.1/go.mod h1:c8NWHhhkFf/drmHTAblkdu8++lsISEBBdAuiyxgqIsE= | ||||
| github.com/pion/srtp/v2 v2.0.2 h1:664iGzVmaY7KYS5M0gleY0DscRo9ReDfTxQrq4UgGoU= | ||||
| github.com/pion/srtp/v2 v2.0.2/go.mod h1:VEyLv4CuxrwGY8cxM+Ng3bmVy8ckz/1t6A0q/msKOw0= | ||||
| github.com/pion/stun v0.3.5 h1:uLUCBCkQby4S1cf6CGuR9QrVOKcvUwFeemaC865QHDg= | ||||
| github.com/pion/stun v0.3.5/go.mod h1:gDMim+47EeEtfWogA37n6qXZS88L5V6LqFcf+DZA2UA= | ||||
| github.com/pion/transport v0.6.0/go.mod h1:iWZ07doqOosSLMhZ+FXUTq+TamDoXSllxpbGcfkCmbE= | ||||
| github.com/pion/transport v0.8.10/go.mod h1:tBmha/UCjpum5hqTWhfAEs3CO4/tHSg0MYRhSzR+CZ8= | ||||
| github.com/pion/transport v0.10.0/go.mod h1:BnHnUipd0rZQyTVB2SBGojFHT9CBt5C5TcsJSQGkvSE= | ||||
| github.com/pion/transport v0.10.1 h1:2W+yJT+0mOQ160ThZYUx5Zp2skzshiNgxrNE9GUfhJM= | ||||
| github.com/pion/transport v0.10.1/go.mod h1:PBis1stIILMiis0PewDw91WJeLJkyIMcEk+DwKOzf4A= | ||||
| github.com/pion/transport v0.12.1/go.mod h1:N3+vZQD9HlDP5GWkZ85LohxNsDcNgofQmyL6ojX5d8Q= | ||||
| github.com/pion/transport v0.12.2 h1:WYEjhloRHt1R86LhUKjC5y+P52Y11/QqEUalvtzVoys= | ||||
| github.com/pion/transport v0.12.2/go.mod h1:N3+vZQD9HlDP5GWkZ85LohxNsDcNgofQmyL6ojX5d8Q= | ||||
| github.com/pion/turn/v2 v2.0.4 h1:oDguhEv2L/4rxwbL9clGLgtzQPjtuZwCdoM7Te8vQVk= | ||||
| github.com/pion/transport v0.12.3 h1:vdBfvfU/0Wq8kd2yhUMSDB/x+O4Z9MYVl2fJ5BT4JZw= | ||||
| github.com/pion/transport v0.12.3/go.mod h1:OViWW9SP2peE/HbwBvARicmAVnesphkNkCVZIWJ6q9A= | ||||
| github.com/pion/turn/v2 v2.0.4/go.mod h1:1812p4DcGVbYVBTiraUmP50XoKye++AMkbfp+N27mog= | ||||
| github.com/pion/turn/v2 v2.0.5 h1:iwMHqDfPEDEOFzwWKT56eFmh6DYC6o/+xnLAEzgISbA= | ||||
| github.com/pion/turn/v2 v2.0.5/go.mod h1:APg43CFyt/14Uy7heYUOGWdkem/Wu4PhCO/bjyrTqMw= | ||||
| github.com/pion/udp v0.1.0 h1:uGxQsNyrqG3GLINv36Ff60covYmfrLoxzwnCsIYspXI= | ||||
| github.com/pion/udp v0.1.0/go.mod h1:BPELIjbwE9PRbd/zxI/KYBnbo7B6+oA6YuEaNE8lths= | ||||
| github.com/pion/webrtc v1.2.0 h1:3LGGPQEMacwG2hcDfhdvwQPz315gvjZXOfY4vaF4+I4= | ||||
| github.com/pion/udp v0.1.1 h1:8UAPvyqmsxK8oOjloDk4wUt63TzFe9WEJkg5lChlj7o= | ||||
| github.com/pion/udp v0.1.1/go.mod h1:6AFo+CMdKQm7UiA0eUPA8/eVCTx8jBIITLZHc9DWX5M= | ||||
| github.com/pion/webrtc/v2 v2.2.26 h1:01hWE26pL3LgqfxvQ1fr6O4ZtyRFFJmQEZK39pHWfFc= | ||||
| github.com/pion/webrtc/v2 v2.2.26/go.mod h1:XMZbZRNHyPDe1gzTIHFcQu02283YO45CbiwFgKvXnmc= | ||||
| github.com/pion/webrtc/v3 v3.0.5 h1:utennp7RwX+2mtyMzoOXE03IUIckiHBigjarRJZ2DqY= | ||||
| github.com/pion/webrtc/v3 v3.0.5/go.mod h1:/EDCREM8y+JrJSkoCRHpoz//qtuBCOYV4E96vEK3bz0= | ||||
| github.com/pion/webrtc/v3 v3.0.29 h1:pVs6mYjbbYvC8pMsztayEz35DnUEFLPswsicGXaQjxo= | ||||
| github.com/pion/webrtc/v3 v3.0.29/go.mod h1:XFQeLYBf++bWWA0sJqh6zF1ouWluosxwTOMOoTZGaD0= | ||||
| github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= | ||||
| github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | ||||
| github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= | ||||
| github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | ||||
| github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= | ||||
| github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= | ||||
| @@ -104,30 +117,38 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV | ||||
| github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= | ||||
| github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= | ||||
| github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= | ||||
| github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= | ||||
| github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= | ||||
| github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= | ||||
| golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= | ||||
| golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= | ||||
| golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | ||||
| golang.org/x/crypto v0.0.0-20200602180216-279210d13fed/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | ||||
| golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | ||||
| golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899 h1:DZhuSZLsGlFL4CmhA8BcRA0mnthyA/nZ00AqCUo7vHg= | ||||
| golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | ||||
| golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 h1:pLI5jrR7OSLijeIDcmRxNmw2api+jEfxLoykJVice/E= | ||||
| golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | ||||
| golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 h1:It14KIkyBFYkHkwZ7k45minvA9aorojkyjGk9KJ5B/w= | ||||
| golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= | ||||
| golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | ||||
| golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
| golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | ||||
| golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||||
| golang.org/x/net v0.0.0-20191126235420-ef20fe5d7933/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||||
| golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||||
| golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= | ||||
| golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= | ||||
| golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= | ||||
| golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU= | ||||
| golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= | ||||
| golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= | ||||
| golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= | ||||
| golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= | ||||
| golang.org/x/net v0.0.0-20201201195509-5d6afe98e0b7/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= | ||||
| golang.org/x/net v0.0.0-20210119194325-5f4716e94777 h1:003p0dJM77cxMSyCPFphvZf/Y5/NXf5fzg6ufd1/Oew= | ||||
| golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= | ||||
| golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= | ||||
| golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= | ||||
| golang.org/x/net v0.0.0-20210331212208-0fccb6fa2b5c/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= | ||||
| golang.org/x/net v0.0.0-20210420210106-798c2154c571 h1:Q6Bg8xzKzpFPU4Oi1sBnBTHBwlMsLeEXpu4hYBY8rAg= | ||||
| golang.org/x/net v0.0.0-20210420210106-798c2154c571/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= | ||||
| golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||
| golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||
| golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||
| @@ -136,18 +157,23 @@ golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7w | ||||
| golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200724161237-0e2f3a69832c h1:UIcGWL6/wpCfyGuJnRFJRurA+yj8RrW7Q6x2YMCXt6c= | ||||
| golang.org/x/sys v0.0.0-20200724161237-0e2f3a69832c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 h1:nxC68pudNYkKU6jWhgrqdreuFiOQWj1Fs7T3VrH4Pjw= | ||||
| golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe h1:WdX7u8s3yOigWAhHEaDl8r9G+4XwFQEQFtBMYyN+kXQ= | ||||
| golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= | ||||
| golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | ||||
| golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= | ||||
| golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | ||||
| golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= | ||||
| golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | ||||
| golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||
| golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= | ||||
| golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||
| golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | ||||
| golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||
| golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||
| golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||
| golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= | ||||
| golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||
| @@ -156,13 +182,19 @@ google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ | ||||
| google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= | ||||
| google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= | ||||
| google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= | ||||
| google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM= | ||||
| google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= | ||||
| gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||
| gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= | ||||
| gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||
| gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= | ||||
| gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= | ||||
| gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= | ||||
| gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | ||||
| gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | ||||
| gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | ||||
| gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | ||||
| gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= | ||||
| gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= | ||||
| gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= | ||||
| gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 deepch
					deepch