func()

in pkg/profiling/task/network/analyze/base/traffic.go [211:249]


func (t *TrafficAnalyzer) generateOrCombineTraffic(traffic *ProcessTraffic, con *ConnectionContext, remotePid uint32) *ProcessTraffic {
	if traffic == nil {
		traffic = &ProcessTraffic{
			Analyzer: t,

			LocalPid:       con.LocalPid,
			LocalProcesses: con.LocalProcesses,
			LocalIP:        con.LocalIP,
			LocalPort:      con.LocalPort,

			Metrics: t.analyzeContext.NewConnectionMetrics(),
		}
	}
	if len(traffic.LocalProcesses) == 0 && len(con.LocalProcesses) > 0 {
		traffic.LocalProcesses = con.LocalProcesses
	}
	if traffic.Role == enums.ConnectionRoleUnknown && con.Role != enums.ConnectionRoleUnknown {
		traffic.Role = con.Role
	}
	if traffic.Protocol == enums.ConnectionProtocolUnknown && con.Protocol != enums.ConnectionProtocolUnknown {
		traffic.Protocol = con.Protocol
	}
	if !traffic.IsSSL && con.IsSSL {
		traffic.IsSSL = true
	}

	if remotePid != 0 {
		traffic.RemotePid = remotePid
		traffic.RemoteProcesses = t.processData[remotePid]
	}
	traffic.RemoteIP = con.RemoteIP
	traffic.RemotePort = con.RemotePort

	// flush connection metrics
	traffic.Metrics.MergeMetricsFromConnection(con)

	con.FlushDataCount++
	return traffic
}