diff --git a/examples/stackbasic/main.go b/examples/stackbasic/main.go index 9908b90..0986dbd 100644 --- a/examples/stackbasic/main.go +++ b/examples/stackbasic/main.go @@ -49,7 +49,11 @@ func main() { if err != nil { log.Fatal(err) } - + // h := &handler.H + // _ = h.AwaitingSynAck() + // _ = h.AwaitingSynResponse() + // _ = h.AwaitingSynSend() + // _ = h err = handler.OpenListen(addrPort.Port(), iss) if err != nil { log.Fatal(err) @@ -57,7 +61,7 @@ func main() { tap := ltesto.NewHTTPTapClient("http://127.0.0.1:7070") defer tap.Close() - + tap.ReadDiscard() // Discard all unread content. fmt.Println("hosting server at ", addrPort.String()) var buf [mtu]byte var hdr httpraw.Header @@ -68,6 +72,7 @@ func main() { log.Fatal(err) } else if nread > 0 { debugEthPacket(nil, "IN ", buf[:nread]) + fmt.Println("INHEX ", debugHex(buf[:nread])) err = lStack.RecvEth(buf[:nread]) if err != nil { slogger.error("recv", slog.String("err", err.Error()), slog.Int("plen", nread)) @@ -78,6 +83,7 @@ func main() { if err != nil { slogger.error("handle", slog.String("err", err.Error())) } else if nw > 0 { + fmt.Println("OUTHEX ", debugHex(buf[:nread])) _, err = tap.Write(buf[:nw]) if err != nil { log.Fatal(err) @@ -326,3 +332,15 @@ func debugEthPacket(logger *slog.Logger, prefix string, b []byte) { fmt.Println("PAYLOAD:", string(payload)) } } + +func debugHex(b []byte) string { + var d []byte + for i := 0; i < len(b); i++ { + c1 := tblhex[b[i]&0xf] + c2 := tblhex[b[i]>>4] + d = append(d, c2, c1, ' ') + } + return string(d) +} + +const tblhex = "0123456789abcdef" diff --git a/examples/tcpclient/main.go b/examples/tcpclient/main.go new file mode 100644 index 0000000..fcd0d4b --- /dev/null +++ b/examples/tcpclient/main.go @@ -0,0 +1,43 @@ +package main + +import ( + "fmt" + "net" + "os" + + "github.com/soypat/lneto/http/httpraw" +) + +func main() { + if err := run(); err != nil { + fmt.Println(err) + os.Exit(1) + } + fmt.Println("DONE") +} + +func run() error { + fmt.Println("dialing...") + conn, err := net.DialTCP("tcp4", &net.TCPAddr{IP: []byte{192, 168, 10, 1}, Port: 1337}, &net.TCPAddr{IP: []byte{192, 168, 10, 2}, Port: 80}) + if err != nil { + return err + } + fmt.Println("reading...") + var hdr httpraw.Header + for { + _, err = hdr.ReadFromLimited(conn, 1024) + if err != nil { + return err + } + const asRequest = false + var ok bool + ok, err = hdr.TryParse(asRequest) + if ok { + break + } else if err != nil { + return err + } + } + fmt.Println("got HTTP:\n", hdr.String()) + return nil +} diff --git a/internet/tcpconn.go b/internet/tcpconn.go index cc4dc10..6bb0c8a 100644 --- a/internet/tcpconn.go +++ b/internet/tcpconn.go @@ -21,6 +21,7 @@ var ( ) type TCPConn struct { + // deprecated: here for debugging purposes only. h tcp.Handler remoteAddr []byte