mirror of
https://github.com/kubeshark/kubeshark.git
synced 2025-08-08 11:59:17 +00:00
* Spawn only two Goroutines per TCP stream * Fix the linter error * Use `isProtocolIdentified` method instead * Fix the `Read` method of `tcpReader` * Remove unnecessary `append` * Copy to buffer only a message is received * Remove `exhaustBuffer` field and add `rewind` function * Rename `buffer` field to `pastData` * Update tap/tcp_reader.go Co-authored-by: Nimrod Gilboa Markevich <59927337+nimrod-up9@users.noreply.github.com> * Use `copy` instead of assignment * No lint * #run_acceptance_tests * Fix `rewind` #run_acceptance_tests * Fix the buffering algorithm #run_acceptance_tests * Add `TODO` * Fix the problems in AMQP and Kafka #run_acceptance_tests * Use `*bytes.Buffer` instead of `[]api.TcpReaderDataMsg` #run_acceptance_tests * Have a single `*bytes.Buffer` * Revert "Have a single `*bytes.Buffer`" This reverts commitfad96a288a
. * Revert "Use `*bytes.Buffer` instead of `[]api.TcpReaderDataMsg` #run_acceptance_tests" This reverts commit0fc70bffe2
. * Fix the early timing out issue #run_acceptance_tests * Remove `NewBytes()` method * Update the `NewTcpReader` method signature #run_acceptance_tests * #run_acceptance_tests * #run_acceptance_tests * #run_acceptance_tests Co-authored-by: Nimrod Gilboa Markevich <59927337+nimrod-up9@users.noreply.github.com>
97 lines
1.7 KiB
Go
97 lines
1.7 KiB
Go
package tlstapper
|
|
|
|
import (
|
|
"io"
|
|
"time"
|
|
|
|
"github.com/up9inc/mizu/tap/api"
|
|
)
|
|
|
|
type tlsReader struct {
|
|
key string
|
|
chunks chan *tlsChunk
|
|
seenChunks int
|
|
data []byte
|
|
doneHandler func(r *tlsReader)
|
|
progress *api.ReadProgress
|
|
tcpID *api.TcpID
|
|
isClient bool
|
|
captureTime time.Time
|
|
extension *api.Extension
|
|
emitter api.Emitter
|
|
counterPair *api.CounterPair
|
|
parent *tlsStream
|
|
reqResMatcher api.RequestResponseMatcher
|
|
}
|
|
|
|
func (r *tlsReader) newChunk(chunk *tlsChunk) {
|
|
r.captureTime = time.Now()
|
|
r.seenChunks = r.seenChunks + 1
|
|
r.chunks <- chunk
|
|
}
|
|
|
|
func (r *tlsReader) Read(p []byte) (int, error) {
|
|
var chunk *tlsChunk
|
|
|
|
for len(r.data) == 0 {
|
|
var ok bool
|
|
select {
|
|
case chunk, ok = <-r.chunks:
|
|
if !ok {
|
|
return 0, io.EOF
|
|
}
|
|
|
|
r.data = chunk.getRecordedData()
|
|
case <-time.After(time.Second * 3):
|
|
r.doneHandler(r)
|
|
return 0, io.EOF
|
|
}
|
|
|
|
if len(r.data) > 0 {
|
|
break
|
|
}
|
|
}
|
|
|
|
l := copy(p, r.data)
|
|
r.data = r.data[l:]
|
|
r.progress.Feed(l)
|
|
|
|
return l, nil
|
|
}
|
|
|
|
func (r *tlsReader) GetReqResMatcher() api.RequestResponseMatcher {
|
|
return r.reqResMatcher
|
|
}
|
|
|
|
func (r *tlsReader) GetIsClient() bool {
|
|
return r.isClient
|
|
}
|
|
|
|
func (r *tlsReader) GetReadProgress() *api.ReadProgress {
|
|
return r.progress
|
|
}
|
|
|
|
func (r *tlsReader) GetParent() api.TcpStream {
|
|
return r.parent
|
|
}
|
|
|
|
func (r *tlsReader) GetTcpID() *api.TcpID {
|
|
return r.tcpID
|
|
}
|
|
|
|
func (r *tlsReader) GetCounterPair() *api.CounterPair {
|
|
return r.counterPair
|
|
}
|
|
|
|
func (r *tlsReader) GetCaptureTime() time.Time {
|
|
return r.captureTime
|
|
}
|
|
|
|
func (r *tlsReader) GetEmitter() api.Emitter {
|
|
return r.emitter
|
|
}
|
|
|
|
func (r *tlsReader) GetIsClosed() bool {
|
|
return false
|
|
}
|