From ce09953167b50c01e7f11a01aaeb945554641686 Mon Sep 17 00:00:00 2001 From: AJ ONeal Date: Wed, 15 Jul 2020 04:09:17 +0000 Subject: [PATCH] more debugging --- mplexer/decoder.go | 6 +++++- mplexer/encoder.go | 12 +++++++++++- mplexer/v1.go | 12 +++++++++++- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/mplexer/decoder.go b/mplexer/decoder.go index d0912b5..047065f 100644 --- a/mplexer/decoder.go +++ b/mplexer/decoder.go @@ -1,6 +1,7 @@ package telebit import ( + "fmt" "io" ) @@ -29,12 +30,13 @@ func (d *Decoder) Decode(out Router) error { go func() { for { b := make([]byte, d.bufferSize) - //fmt.Println("loopers gonna loop") n, err := d.in.Read(b) + fmt.Println("[debug] [decoder] [srv] Tunnel read", n) if n > 0 { rx <- b[:n] } if nil != err { + fmt.Println("[debug] [decoder] [srv] Tunnel read err", err) rxErr <- err return } @@ -47,8 +49,10 @@ func (d *Decoder) Decode(out Router) error { // TODO, do we actually need ctx here? // would it be sufficient to expect the reader to be closed by the caller instead? case b := <-rx: + fmt.Println("[debug] [decoder] [srv] Tunnel write", len(b), string(b)) _, err := p.Write(b) if nil != err { + fmt.Println("[debug] [decoder] [srv] Tunnel write error") // an error to write represents an unrecoverable error, // not just a downstream client error //d.in.Close() diff --git a/mplexer/encoder.go b/mplexer/encoder.go index f328369..8248125 100644 --- a/mplexer/encoder.go +++ b/mplexer/encoder.go @@ -2,7 +2,9 @@ package telebit import ( "context" + "encoding/hex" "errors" + "fmt" "io" "sync" ) @@ -71,10 +73,12 @@ func (enc *Encoder) Encode(rin io.Reader, src, dst Addr) error { b := make([]byte, enc.bufferSize) //fmt.Println("loopers gonna loop") n, err := rin.Read(b) + fmt.Println("[debug] [encoder] [srv] Browser read", n) if n > 0 { rx <- b[:n] } if nil != err { + fmt.Println("[debug] [encoder] [srv] Browser read error", err) rxErr <- err return } @@ -90,21 +94,27 @@ func (enc *Encoder) Encode(rin io.Reader, src, dst Addr) error { case <-enc.ctx.Done(): // TODO: verify that closing the reader will cause the goroutine to be released //rin.Close() + fmt.Println("[debug] [encoder] [srv] Browser ctx.Done()") return errors.New("cancelled by encoder read or parent context") case <-enc.subctx.Done(): //rin.Close() + fmt.Println("[debug] [encoder] [srv] Browser subctx.Done()") return errors.New("cancelled by encoder write context") case b := <-rx: - header, _, err := Encode(b, src, Addr{scheme: src.scheme, addr: "", port: -1}) + header, _, err := Encode(b, src, Addr{scheme: src.scheme, addr: dst.Hostname(), port: dst.Port()}) if nil != err { //rin.Close() + fmt.Println("[debug] [encoder] [srv] Browser Encode err", err) return err } //fmt.Println("[debug] encode header:", string(header)) //fmt.Println("[debug] encode payload:", string(b)) _, err = enc.write(header, b) + fmt.Println("[debug] [encoder] [srv] Browser-to-tun write", len(header), header) + fmt.Println("[debug] [encoder] [srv]", len(b), hex.EncodeToString(b)) if nil != err { + fmt.Println("[debug] [encoder] [srv] Browser-to-tun write err", err) //rin.Close() return err } diff --git a/mplexer/v1.go b/mplexer/v1.go index cca0da0..51a4b05 100644 --- a/mplexer/v1.go +++ b/mplexer/v1.go @@ -50,7 +50,7 @@ func (p *Parser) unpackV1(b []byte) (int, error) { z++ n := len(b) if n < 1 { - //fmt.Println("[debug] v1 end", z, n) + fmt.Printf("[debug] v1 message unpacked (%d loops) (%d bytes left)\n", z, n) break } @@ -141,7 +141,10 @@ func (p *Parser) unpackV1Header(b []byte, n int) ([]byte, error) { port, _ := strconv.Atoi(parts[PortIndex]) service := parts[ServiceIndex] + fmt.Printf("[debug] parts: %s\n", parts) + fmt.Printf("[debug] service: %s\n", service) if "control" == service { + fmt.Printf("[debug] control: %s\n", service) return nil, errors.New("'control' messages not implemented") } @@ -163,6 +166,7 @@ func (p *Parser) unpackV1Header(b []byte, n int) ([]byte, error) { } p.state.srcAddr = src p.state.dstAddr = dst + /* p.state.conn = p.conns[addr.Network()] if nil == p.state.conn { @@ -180,11 +184,16 @@ func (p *Parser) unpackV1Header(b []byte, n int) ([]byte, error) { } */ p.parseState++ + fmt.Printf("[debug] parse state: %v\n", p.parseState) + if "end" == service { + p.handler.RouteBytes(p.state.srcAddr, p.state.dstAddr, []byte{}) + } return b, nil } func (p *Parser) unpackV1Payload(b []byte, n int) ([]byte, error) { + fmt.Printf("[debug] state: %+v\n", p.state) // Handle "connect" and "end" if 0 == p.state.payloadLen { /* @@ -203,6 +212,7 @@ func (p *Parser) unpackV1Payload(b []byte, n int) ([]byte, error) { */ //fmt.Printf("[debug] [2] payload written: %d | payload length: %d\n", p.state.payloadWritten, p.state.payloadLen) + fmt.Printf("[debug] RouteBytes: %#v %#v %s\n", p.state.srcAddr, p.state.dstAddr, p.state.dstAddr.scheme) p.handler.RouteBytes(p.state.srcAddr, p.state.dstAddr, []byte{}) return b, nil }