diff options
Diffstat (limited to 'src/ssl/test/runner/packet_adapter.go')
-rw-r--r-- | src/ssl/test/runner/packet_adapter.go | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/ssl/test/runner/packet_adapter.go b/src/ssl/test/runner/packet_adapter.go index b432659..2351eb0 100644 --- a/src/ssl/test/runner/packet_adapter.go +++ b/src/ssl/test/runner/packet_adapter.go @@ -28,13 +28,22 @@ const opcodeTimeoutAck = byte('t') type packetAdaptor struct { net.Conn + debug *recordingConn } // newPacketAdaptor wraps a reliable streaming net.Conn into a reliable // packet-based net.Conn. The stream contains packets and control commands, // distinguished by a one byte opcode. func newPacketAdaptor(conn net.Conn) *packetAdaptor { - return &packetAdaptor{conn} + return &packetAdaptor{conn, nil} +} + +func (p *packetAdaptor) log(message string, data []byte) { + if p.debug == nil { + return + } + + p.debug.LogSpecial(message, data) } func (p *packetAdaptor) readOpcode() (byte, error) { @@ -87,6 +96,8 @@ func (p *packetAdaptor) Write(b []byte) (int, error) { // for acknowledgement of the timeout, buffering any packets received since // then. The packets are then returned. func (p *packetAdaptor) SendReadTimeout(d time.Duration) ([][]byte, error) { + p.log("Simulating read timeout: " + d.String(), nil) + payload := make([]byte, 1+8) payload[0] = opcodeTimeout binary.BigEndian.PutUint64(payload[1:], uint64(d.Nanoseconds())) @@ -102,6 +113,7 @@ func (p *packetAdaptor) SendReadTimeout(d time.Duration) ([][]byte, error) { } switch opcode { case opcodeTimeoutAck: + p.log("Received timeout ACK", nil) // Done! Return the packets buffered and continue. return packets, nil case opcodePacket: @@ -110,6 +122,7 @@ func (p *packetAdaptor) SendReadTimeout(d time.Duration) ([][]byte, error) { if err != nil { return nil, err } + p.log("Simulating dropped packet", packet) packets = append(packets, packet) default: return nil, fmt.Errorf("unexpected opcode '%d'", opcode) |