Merge branch 'develop' into fix/better-close-other-dissectors

This commit is contained in:
M. Mert Yildiran
2022-04-26 16:31:05 +03:00
4 changed files with 37 additions and 25 deletions

View File

@@ -427,6 +427,8 @@ type TcpReader interface {
GetEmitter() Emitter GetEmitter() Emitter
GetIsClosed() bool GetIsClosed() bool
GetExtension() *Extension GetExtension() *Extension
SetTcpID(tcpID *TcpID)
SetCaptureTime(captureTime time.Time)
} }
type TcpStream interface { type TcpStream interface {

View File

@@ -147,3 +147,11 @@ func (reader *tcpReader) GetIsClosed() bool {
func (reader *tcpReader) GetExtension() *api.Extension { func (reader *tcpReader) GetExtension() *api.Extension {
return reader.extension return reader.extension
} }
func (reader *tcpReader) SetTcpID(tcpID *api.TcpID) {
reader.tcpID = tcpID
}
func (reader *tcpReader) SetCaptureTime(captureTime time.Time) {
reader.captureTime = captureTime
}

View File

@@ -128,11 +128,28 @@ func (p *tlsPoller) handleTlsChunk(chunk *tlsChunk, extension *api.Extension,
key := buildTlsKey(chunk, ip, port) key := buildTlsKey(chunk, ip, port)
reader, exists := p.readers[key] reader, exists := p.readers[key]
tcpStream := tcp.NewTcpStreamDummy(api.Ebpf)
tcpReader := tcp.NewTcpReader(
make(chan api.TcpReaderDataMsg),
reader.progress,
"",
&api.TcpID{},
time.Time{},
tcpStream,
chunk.isRequest(),
false,
nil,
emitter,
&api.CounterPair{},
p.reqResMatcher,
)
if !exists { if !exists {
reader = p.startNewTlsReader(chunk, ip, port, key, extension, emitter, options) reader = p.startNewTlsReader(chunk, ip, port, key, extension, tcpReader, options)
p.readers[key] = reader p.readers[key] = reader
} }
tcpReader.SetCaptureTime(time.Now())
reader.chunks <- chunk reader.chunks <- chunk
if os.Getenv("MIZU_VERBOSE_TLS_TAPPER") == "true" { if os.Getenv("MIZU_VERBOSE_TLS_TAPPER") == "true" {
@@ -143,7 +160,7 @@ func (p *tlsPoller) handleTlsChunk(chunk *tlsChunk, extension *api.Extension,
} }
func (p *tlsPoller) startNewTlsReader(chunk *tlsChunk, ip net.IP, port uint16, key string, extension *api.Extension, func (p *tlsPoller) startNewTlsReader(chunk *tlsChunk, ip net.IP, port uint16, key string, extension *api.Extension,
emitter api.Emitter, options *shared.TrafficFilteringOptions) *tlsReader { tcpReader api.TcpReader, options *shared.TrafficFilteringOptions) *tlsReader {
reader := &tlsReader{ reader := &tlsReader{
key: key, key: key,
@@ -154,40 +171,25 @@ func (p *tlsPoller) startNewTlsReader(chunk *tlsChunk, ip net.IP, port uint16, k
} }
tcpid := p.buildTcpId(chunk, ip, port) tcpid := p.buildTcpId(chunk, ip, port)
tcpReader.SetTcpID(&tcpid)
tlsEmitter := &tlsEmitter{ tlsEmitter := &tlsEmitter{
delegate: emitter, delegate: tcpReader.GetEmitter(),
namespace: p.getNamespace(chunk.Pid), namespace: p.getNamespace(chunk.Pid),
} }
go dissect(extension, reader, chunk.isRequest(), &tcpid, tlsEmitter, options, p.reqResMatcher) go dissect(extension, reader, tcpReader, tlsEmitter, options)
return reader return reader
} }
func dissect(extension *api.Extension, reader *tlsReader, isRequest bool, tcpid *api.TcpID, func dissect(extension *api.Extension, reader *tlsReader, tcpReader api.TcpReader,
tlsEmitter *tlsEmitter, options *shared.TrafficFilteringOptions, reqResMatcher api.RequestResponseMatcher) { tlsEmitter *tlsEmitter, options *shared.TrafficFilteringOptions) {
b := bufio.NewReader(reader) b := bufio.NewReader(reader)
tcpStream := tcp.NewTcpStreamDummy(api.Ebpf)
tcpReader := tcp.NewTcpReader(
make(chan api.TcpReaderDataMsg),
reader.progress,
"",
tcpid,
time.Now(),
tcpStream,
isRequest,
false,
nil,
tlsEmitter,
&api.CounterPair{},
reqResMatcher,
)
err := extension.Dissector.Dissect(b, tcpReader, options) err := extension.Dissector.Dissect(b, tcpReader, options)
if err != nil { if err != nil {
logger.Log.Warningf("Error dissecting TLS %v - %v", tcpid, err) logger.Log.Warningf("Error dissecting TLS %v - %v", tcpReader.GetTcpID(), err)
} }
} }

View File

@@ -110,8 +110,8 @@ export const EntryDetailed = () => {
const [entryData, setEntryData] = useState(null); const [entryData, setEntryData] = useState(null);
useEffect(() => { useEffect(() => {
if (!focusedEntryId) return; setEntryData(null);
setEntryData(null); if (!focusedEntryId) return;
setIsLoading(true); setIsLoading(true);
(async () => { (async () => {
try { try {