diff --git a/tap/api/api.go b/tap/api/api.go index 84f87f4e9..5b2b3ae4d 100644 --- a/tap/api/api.go +++ b/tap/api/api.go @@ -427,6 +427,8 @@ type TcpReader interface { GetEmitter() Emitter GetIsClosed() bool GetExtension() *Extension + SetTcpID(tcpID *TcpID) + SetCaptureTime(captureTime time.Time) } type TcpStream interface { diff --git a/tap/tcp/tcp_reader.go b/tap/tcp/tcp_reader.go index 9feaecb5d..b69ffeb54 100644 --- a/tap/tcp/tcp_reader.go +++ b/tap/tcp/tcp_reader.go @@ -147,3 +147,11 @@ func (reader *tcpReader) GetIsClosed() bool { func (reader *tcpReader) GetExtension() *api.Extension { return reader.extension } + +func (reader *tcpReader) SetTcpID(tcpID *api.TcpID) { + reader.tcpID = tcpID +} + +func (reader *tcpReader) SetCaptureTime(captureTime time.Time) { + reader.captureTime = captureTime +} diff --git a/tap/tlstapper/tls_poller.go b/tap/tlstapper/tls_poller.go index c01e39669..87963dac0 100644 --- a/tap/tlstapper/tls_poller.go +++ b/tap/tlstapper/tls_poller.go @@ -128,11 +128,28 @@ func (p *tlsPoller) handleTlsChunk(chunk *tlsChunk, extension *api.Extension, key := buildTlsKey(chunk, ip, port) 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 { - reader = p.startNewTlsReader(chunk, ip, port, key, extension, emitter, options) + reader = p.startNewTlsReader(chunk, ip, port, key, extension, tcpReader, options) p.readers[key] = reader } + tcpReader.SetCaptureTime(time.Now()) reader.chunks <- chunk 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, - emitter api.Emitter, options *shared.TrafficFilteringOptions) *tlsReader { + tcpReader api.TcpReader, options *shared.TrafficFilteringOptions) *tlsReader { reader := &tlsReader{ key: key, @@ -154,40 +171,25 @@ func (p *tlsPoller) startNewTlsReader(chunk *tlsChunk, ip net.IP, port uint16, k } tcpid := p.buildTcpId(chunk, ip, port) + tcpReader.SetTcpID(&tcpid) tlsEmitter := &tlsEmitter{ - delegate: emitter, + delegate: tcpReader.GetEmitter(), 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 } -func dissect(extension *api.Extension, reader *tlsReader, isRequest bool, tcpid *api.TcpID, - tlsEmitter *tlsEmitter, options *shared.TrafficFilteringOptions, reqResMatcher api.RequestResponseMatcher) { +func dissect(extension *api.Extension, reader *tlsReader, tcpReader api.TcpReader, + tlsEmitter *tlsEmitter, options *shared.TrafficFilteringOptions) { 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) if err != nil { - logger.Log.Warningf("Error dissecting TLS %v - %v", tcpid, err) + logger.Log.Warningf("Error dissecting TLS %v - %v", tcpReader.GetTcpID(), err) } } diff --git a/ui-common/src/components/TrafficViewer/EntryDetailed.tsx b/ui-common/src/components/TrafficViewer/EntryDetailed.tsx index a139e8209..715439ddd 100644 --- a/ui-common/src/components/TrafficViewer/EntryDetailed.tsx +++ b/ui-common/src/components/TrafficViewer/EntryDetailed.tsx @@ -110,8 +110,8 @@ export const EntryDetailed = () => { const [entryData, setEntryData] = useState(null); useEffect(() => { - if (!focusedEntryId) return; - setEntryData(null); + setEntryData(null); + if (!focusedEntryId) return; setIsLoading(true); (async () => { try {