220 lines
5.6 KiB
Go
220 lines
5.6 KiB
Go
|
package logging
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"net"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
type tracerMultiplexer struct {
|
||
|
tracers []Tracer
|
||
|
}
|
||
|
|
||
|
var _ Tracer = &tracerMultiplexer{}
|
||
|
|
||
|
// NewMultiplexedTracer creates a new tracer that multiplexes events to multiple tracers.
|
||
|
func NewMultiplexedTracer(tracers ...Tracer) Tracer {
|
||
|
if len(tracers) == 0 {
|
||
|
return nil
|
||
|
}
|
||
|
if len(tracers) == 1 {
|
||
|
return tracers[0]
|
||
|
}
|
||
|
return &tracerMultiplexer{tracers}
|
||
|
}
|
||
|
|
||
|
func (m *tracerMultiplexer) TracerForConnection(ctx context.Context, p Perspective, odcid ConnectionID) ConnectionTracer {
|
||
|
var connTracers []ConnectionTracer
|
||
|
for _, t := range m.tracers {
|
||
|
if ct := t.TracerForConnection(ctx, p, odcid); ct != nil {
|
||
|
connTracers = append(connTracers, ct)
|
||
|
}
|
||
|
}
|
||
|
return NewMultiplexedConnectionTracer(connTracers...)
|
||
|
}
|
||
|
|
||
|
func (m *tracerMultiplexer) SentPacket(remote net.Addr, hdr *Header, size ByteCount, frames []Frame) {
|
||
|
for _, t := range m.tracers {
|
||
|
t.SentPacket(remote, hdr, size, frames)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (m *tracerMultiplexer) DroppedPacket(remote net.Addr, typ PacketType, size ByteCount, reason PacketDropReason) {
|
||
|
for _, t := range m.tracers {
|
||
|
t.DroppedPacket(remote, typ, size, reason)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
type connTracerMultiplexer struct {
|
||
|
tracers []ConnectionTracer
|
||
|
}
|
||
|
|
||
|
var _ ConnectionTracer = &connTracerMultiplexer{}
|
||
|
|
||
|
// NewMultiplexedConnectionTracer creates a new connection tracer that multiplexes events to multiple tracers.
|
||
|
func NewMultiplexedConnectionTracer(tracers ...ConnectionTracer) ConnectionTracer {
|
||
|
if len(tracers) == 0 {
|
||
|
return nil
|
||
|
}
|
||
|
if len(tracers) == 1 {
|
||
|
return tracers[0]
|
||
|
}
|
||
|
return &connTracerMultiplexer{tracers: tracers}
|
||
|
}
|
||
|
|
||
|
func (m *connTracerMultiplexer) StartedConnection(local, remote net.Addr, srcConnID, destConnID ConnectionID) {
|
||
|
for _, t := range m.tracers {
|
||
|
t.StartedConnection(local, remote, srcConnID, destConnID)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (m *connTracerMultiplexer) NegotiatedVersion(chosen VersionNumber, clientVersions, serverVersions []VersionNumber) {
|
||
|
for _, t := range m.tracers {
|
||
|
t.NegotiatedVersion(chosen, clientVersions, serverVersions)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (m *connTracerMultiplexer) ClosedConnection(e error) {
|
||
|
for _, t := range m.tracers {
|
||
|
t.ClosedConnection(e)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (m *connTracerMultiplexer) SentTransportParameters(tp *TransportParameters) {
|
||
|
for _, t := range m.tracers {
|
||
|
t.SentTransportParameters(tp)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (m *connTracerMultiplexer) ReceivedTransportParameters(tp *TransportParameters) {
|
||
|
for _, t := range m.tracers {
|
||
|
t.ReceivedTransportParameters(tp)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (m *connTracerMultiplexer) RestoredTransportParameters(tp *TransportParameters) {
|
||
|
for _, t := range m.tracers {
|
||
|
t.RestoredTransportParameters(tp)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (m *connTracerMultiplexer) SentPacket(hdr *ExtendedHeader, size ByteCount, ack *AckFrame, frames []Frame) {
|
||
|
for _, t := range m.tracers {
|
||
|
t.SentPacket(hdr, size, ack, frames)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (m *connTracerMultiplexer) ReceivedVersionNegotiationPacket(hdr *Header, versions []VersionNumber) {
|
||
|
for _, t := range m.tracers {
|
||
|
t.ReceivedVersionNegotiationPacket(hdr, versions)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (m *connTracerMultiplexer) ReceivedRetry(hdr *Header) {
|
||
|
for _, t := range m.tracers {
|
||
|
t.ReceivedRetry(hdr)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (m *connTracerMultiplexer) ReceivedPacket(hdr *ExtendedHeader, size ByteCount, frames []Frame) {
|
||
|
for _, t := range m.tracers {
|
||
|
t.ReceivedPacket(hdr, size, frames)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (m *connTracerMultiplexer) BufferedPacket(typ PacketType) {
|
||
|
for _, t := range m.tracers {
|
||
|
t.BufferedPacket(typ)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (m *connTracerMultiplexer) DroppedPacket(typ PacketType, size ByteCount, reason PacketDropReason) {
|
||
|
for _, t := range m.tracers {
|
||
|
t.DroppedPacket(typ, size, reason)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (m *connTracerMultiplexer) UpdatedCongestionState(state CongestionState) {
|
||
|
for _, t := range m.tracers {
|
||
|
t.UpdatedCongestionState(state)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (m *connTracerMultiplexer) UpdatedMetrics(rttStats *RTTStats, cwnd, bytesInFLight ByteCount, packetsInFlight int) {
|
||
|
for _, t := range m.tracers {
|
||
|
t.UpdatedMetrics(rttStats, cwnd, bytesInFLight, packetsInFlight)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (m *connTracerMultiplexer) AcknowledgedPacket(encLevel EncryptionLevel, pn PacketNumber) {
|
||
|
for _, t := range m.tracers {
|
||
|
t.AcknowledgedPacket(encLevel, pn)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (m *connTracerMultiplexer) LostPacket(encLevel EncryptionLevel, pn PacketNumber, reason PacketLossReason) {
|
||
|
for _, t := range m.tracers {
|
||
|
t.LostPacket(encLevel, pn, reason)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (m *connTracerMultiplexer) UpdatedPTOCount(value uint32) {
|
||
|
for _, t := range m.tracers {
|
||
|
t.UpdatedPTOCount(value)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (m *connTracerMultiplexer) UpdatedKeyFromTLS(encLevel EncryptionLevel, perspective Perspective) {
|
||
|
for _, t := range m.tracers {
|
||
|
t.UpdatedKeyFromTLS(encLevel, perspective)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (m *connTracerMultiplexer) UpdatedKey(generation KeyPhase, remote bool) {
|
||
|
for _, t := range m.tracers {
|
||
|
t.UpdatedKey(generation, remote)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (m *connTracerMultiplexer) DroppedEncryptionLevel(encLevel EncryptionLevel) {
|
||
|
for _, t := range m.tracers {
|
||
|
t.DroppedEncryptionLevel(encLevel)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (m *connTracerMultiplexer) DroppedKey(generation KeyPhase) {
|
||
|
for _, t := range m.tracers {
|
||
|
t.DroppedKey(generation)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (m *connTracerMultiplexer) SetLossTimer(typ TimerType, encLevel EncryptionLevel, exp time.Time) {
|
||
|
for _, t := range m.tracers {
|
||
|
t.SetLossTimer(typ, encLevel, exp)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (m *connTracerMultiplexer) LossTimerExpired(typ TimerType, encLevel EncryptionLevel) {
|
||
|
for _, t := range m.tracers {
|
||
|
t.LossTimerExpired(typ, encLevel)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (m *connTracerMultiplexer) LossTimerCanceled() {
|
||
|
for _, t := range m.tracers {
|
||
|
t.LossTimerCanceled()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (m *connTracerMultiplexer) Debug(name, msg string) {
|
||
|
for _, t := range m.tracers {
|
||
|
t.Debug(name, msg)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (m *connTracerMultiplexer) Close() {
|
||
|
for _, t := range m.tracers {
|
||
|
t.Close()
|
||
|
}
|
||
|
}
|