Source file src/vendor/golang.org/x/net/quic/log.go

     1  // Copyright 2023 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package quic
     6  
     7  import (
     8  	"fmt"
     9  	"os"
    10  	"strings"
    11  )
    12  
    13  var logPackets bool
    14  
    15  // Parse GODEBUG settings.
    16  //
    17  // GODEBUG=quiclogpackets=1 -- log every packet sent and received.
    18  func init() {
    19  	s := os.Getenv("GODEBUG")
    20  	for len(s) > 0 {
    21  		var opt string
    22  		opt, s, _ = strings.Cut(s, ",")
    23  		switch opt {
    24  		case "quiclogpackets=1":
    25  			logPackets = true
    26  		}
    27  	}
    28  }
    29  
    30  func logInboundLongPacket(c *Conn, p longPacket) {
    31  	if !logPackets {
    32  		return
    33  	}
    34  	prefix := c.String()
    35  	fmt.Printf("%v recv %v %v\n", prefix, p.ptype, p.num)
    36  	logFrames(prefix+"   <- ", p.payload)
    37  }
    38  
    39  func logInboundShortPacket(c *Conn, p shortPacket) {
    40  	if !logPackets {
    41  		return
    42  	}
    43  	prefix := c.String()
    44  	fmt.Printf("%v recv 1-RTT %v\n", prefix, p.num)
    45  	logFrames(prefix+"   <- ", p.payload)
    46  }
    47  
    48  func logSentPacket(c *Conn, ptype packetType, pnum packetNumber, src, dst, payload []byte) {
    49  	if !logPackets || len(payload) == 0 {
    50  		return
    51  	}
    52  	prefix := c.String()
    53  	fmt.Printf("%v send %v %v\n", prefix, ptype, pnum)
    54  	logFrames(prefix+"   -> ", payload)
    55  }
    56  
    57  func logFrames(prefix string, payload []byte) {
    58  	for len(payload) > 0 {
    59  		f, n := parseDebugFrame(payload)
    60  		if n < 0 {
    61  			fmt.Printf("%vBAD DATA\n", prefix)
    62  			break
    63  		}
    64  		payload = payload[n:]
    65  		fmt.Printf("%v%v\n", prefix, f)
    66  	}
    67  }
    68  

View as plain text