log.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. package wire
  2. import (
  3. "fmt"
  4. "strings"
  5. "v2ray.com/core/external/github.com/lucas-clemente/quic-go/internal/protocol"
  6. "v2ray.com/core/external/github.com/lucas-clemente/quic-go/internal/utils"
  7. )
  8. // LogFrame logs a frame, either sent or received
  9. func LogFrame(logger utils.Logger, frame Frame, sent bool) {
  10. if !logger.Debug() {
  11. return
  12. }
  13. dir := "<-"
  14. if sent {
  15. dir = "->"
  16. }
  17. switch f := frame.(type) {
  18. case *CryptoFrame:
  19. dataLen := protocol.ByteCount(len(f.Data))
  20. logger.Debugf("\t%s &wire.CryptoFrame{Offset: 0x%x, Data length: 0x%x, Offset + Data length: 0x%x}", dir, f.Offset, dataLen, f.Offset+dataLen)
  21. case *StreamFrame:
  22. logger.Debugf("\t%s &wire.StreamFrame{StreamID: %d, FinBit: %t, Offset: 0x%x, Data length: 0x%x, Offset + Data length: 0x%x}", dir, f.StreamID, f.FinBit, f.Offset, f.DataLen(), f.Offset+f.DataLen())
  23. case *AckFrame:
  24. if len(f.AckRanges) > 1 {
  25. ackRanges := make([]string, len(f.AckRanges))
  26. for i, r := range f.AckRanges {
  27. ackRanges[i] = fmt.Sprintf("{Largest: %#x, Smallest: %#x}", r.Largest, r.Smallest)
  28. }
  29. logger.Debugf("\t%s &wire.AckFrame{LargestAcked: %#x, LowestAcked: %#x, AckRanges: {%s}, DelayTime: %s}", dir, f.LargestAcked(), f.LowestAcked(), strings.Join(ackRanges, ", "), f.DelayTime.String())
  30. } else {
  31. logger.Debugf("\t%s &wire.AckFrame{LargestAcked: %#x, LowestAcked: %#x, DelayTime: %s}", dir, f.LargestAcked(), f.LowestAcked(), f.DelayTime.String())
  32. }
  33. default:
  34. logger.Debugf("\t%s %#v", dir, frame)
  35. }
  36. }