// Copyright 2023 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. //go:build go1.21 package quic import ( "fmt" "os" "strings" ) var logPackets bool // Parse GODEBUG settings. // // GODEBUG=quiclogpackets=1 -- log every packet sent and received. func init() { s := os.Getenv("GODEBUG") for len(s) > 0 { var opt string opt, s, _ = strings.Cut(s, ",") switch opt { case "quiclogpackets=1": logPackets = true } } } func logInboundLongPacket(c *Conn, p longPacket) { if !logPackets { return } prefix := c.String() fmt.Printf("%v recv %v %v\n", prefix, p.ptype, p.num) logFrames(prefix+" <- ", p.payload) } func logInboundShortPacket(c *Conn, p shortPacket) { if !logPackets { return } prefix := c.String() fmt.Printf("%v recv 1-RTT %v\n", prefix, p.num) logFrames(prefix+" <- ", p.payload) } func logSentPacket(c *Conn, ptype packetType, pnum packetNumber, src, dst, payload []byte) { if !logPackets || len(payload) == 0 { return } prefix := c.String() fmt.Printf("%v send %v %v\n", prefix, ptype, pnum) logFrames(prefix+" -> ", payload) } func logFrames(prefix string, payload []byte) { for len(payload) > 0 { f, n := parseDebugFrame(payload) if n < 0 { fmt.Printf("%vBAD DATA\n", prefix) break } payload = payload[n:] fmt.Printf("%v%v\n", prefix, f) } }