github.com/vmware/govmomi@v0.51.0/toolbox/trace_channel.go (about) 1 // © Broadcom. All Rights Reserved. 2 // The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. 3 // SPDX-License-Identifier: Apache-2.0 4 5 package toolbox 6 7 import ( 8 "encoding/hex" 9 "flag" 10 "fmt" 11 "io" 12 "os" 13 ) 14 15 var ( 16 Trace = false 17 18 traceLog io.Writer = os.Stderr 19 ) 20 21 func init() { 22 flag.BoolVar(&Trace, "toolbox.trace", Trace, "Enable toolbox trace") 23 } 24 25 type TraceChannel struct { 26 Channel 27 log io.Writer 28 } 29 30 func NewTraceChannel(c Channel) Channel { 31 if !Trace { 32 return c 33 } 34 35 return &TraceChannel{ 36 Channel: c, 37 log: traceLog, 38 } 39 } 40 41 func (d *TraceChannel) Start() error { 42 err := d.Channel.Start() 43 44 return err 45 } 46 47 func (d *TraceChannel) Stop() error { 48 err := d.Channel.Stop() 49 50 return err 51 } 52 53 func (d *TraceChannel) Send(buf []byte) error { 54 if len(buf) > 0 { 55 fmt.Fprintf(d.log, "SEND %d...\n%s\n", len(buf), hex.Dump(buf)) 56 } 57 58 err := d.Channel.Send(buf) 59 60 return err 61 } 62 63 func (d *TraceChannel) Receive() ([]byte, error) { 64 buf, err := d.Channel.Receive() 65 66 if err == nil && len(buf) > 0 { 67 fmt.Fprintf(d.log, "RECV %d...\n%s\n", len(buf), hex.Dump(buf)) 68 } 69 70 return buf, err 71 }