Change the Dissect method signature to have *TcpReader as an argument

This commit is contained in:
M. Mert Yildiran
2022-04-20 13:06:46 +03:00
parent 960ba644cd
commit ea85b0b082
11 changed files with 209 additions and 98 deletions
+1 -1
View File
@@ -132,7 +132,7 @@ func (p *ReadProgress) Current() (n int) {
type Dissector interface {
Register(*Extension)
Ping()
Dissect(b *bufio.Reader, progress *ReadProgress, capture Capture, isClient bool, tcpID *TcpID, counterPair *CounterPair, superTimer *SuperTimer, superIdentifier *SuperIdentifier, emitter Emitter, options *shared.TrafficFilteringOptions, reqResMatcher RequestResponseMatcher) error
Dissect(b *bufio.Reader, reader *TcpReader, options *shared.TrafficFilteringOptions) error
Analyze(item *OutputChannelItem, resolvedSource string, resolvedDestination string, namespace string) *Entry
Summarize(entry *Entry) *BaseEntry
Represent(request map[string]interface{}, response map[string]interface{}) (object []byte, err error)
+21 -21
View File
@@ -40,45 +40,45 @@ type TcpReader struct {
sync.Mutex
}
func (h *TcpReader) Read(p []byte) (int, error) {
func (reader *TcpReader) Read(p []byte) (int, error) {
var msg TcpReaderDataMsg
ok := true
for ok && len(h.data) == 0 {
msg, ok = <-h.MsgQueue
h.data = msg.bytes
for ok && len(reader.data) == 0 {
msg, ok = <-reader.MsgQueue
reader.data = msg.bytes
h.SuperTimer.CaptureTime = msg.timestamp
if len(h.data) > 0 {
h.packetsSeen += 1
reader.SuperTimer.CaptureTime = msg.timestamp
if len(reader.data) > 0 {
reader.packetsSeen += 1
}
}
if !ok || len(h.data) == 0 {
if !ok || len(reader.data) == 0 {
return 0, io.EOF
}
l := copy(p, h.data)
h.data = h.data[l:]
h.Progress.Feed(l)
l := copy(p, reader.data)
reader.data = reader.data[l:]
reader.Progress.Feed(l)
return l, nil
}
func (h *TcpReader) Close() {
h.Lock()
if !h.isClosed {
h.isClosed = true
close(h.MsgQueue)
func (reader *TcpReader) Close() {
reader.Lock()
if !reader.isClosed {
reader.isClosed = true
close(reader.MsgQueue)
}
h.Unlock()
reader.Unlock()
}
func (h *TcpReader) Run(filteringOptions *shared.TrafficFilteringOptions, wg *sync.WaitGroup) {
func (reader *TcpReader) Run(options *shared.TrafficFilteringOptions, wg *sync.WaitGroup) {
defer wg.Done()
b := bufio.NewReader(h)
err := h.Extension.Dissector.Dissect(b, h.Progress, h.Parent.Origin, h.IsClient, h.TcpID, h.CounterPair, h.SuperTimer, h.Parent.SuperIdentifier, h.Emitter, filteringOptions, h.ReqResMatcher)
b := bufio.NewReader(reader)
err := reader.Extension.Dissector.Dissect(b, reader, options)
if err != nil {
_, err = io.Copy(ioutil.Discard, b)
_, err = io.Copy(ioutil.Discard, reader)
if err != nil {
logger.Log.Errorf("%v", err)
}