diff --git a/client_test.go b/client_test.go index 8d097bf..c258f47 100644 --- a/client_test.go +++ b/client_test.go @@ -9,6 +9,8 @@ import ( "time" //"log" "net/http" + + "github.com/eyedeekay/sam3" ) func HelloServer(w http.ResponseWriter, r *http.Request) { @@ -28,17 +30,24 @@ func setup(t *testing.T) { } func TestCompositeClient(t *testing.T) { - server, err := NewClientFromOptions(SetDebug(true)) + sam, err := sam3.NewSAM("127.0.0.1:7656") if err != nil { - t.Fatalf("NewDefaultClient() Error: %q\n", err) + t.Fatalf("Listener() Error: %q\n", err) } - listener, err := server.Listen() + keys, err := sam.NewKeys() + if err != nil { + t.Fatalf("Listener() Error: %q\n", err) + } + stream, err := sam.NewStreamSession("serverTun", keys, sam3.Options_Medium) + if err != nil { + t.Fatalf("Listener() Error: %q\n", err) + } + listener, err := stream.Listen() if err != nil { t.Fatalf("Listener() Error: %q\n", err) } http.HandleFunc("/", HelloServer) go http.Serve(listener, nil) - time.Sleep(time.Second * 15) client, err = NewClientFromOptions(SetDebug(true)) if err != nil { @@ -48,7 +57,8 @@ func TestCompositeClient(t *testing.T) { Dial: client.Dial, } client := &http.Client{Transport: tr} - resp, err := client.Get("http://" + server.Base32() + ".b32.i2p") + time.Sleep(time.Second * 30) + resp, err := client.Get("http://" + keys.Addr().Base32()) if err != nil { t.Fatalf("Get Error: %q\n", err) } diff --git a/dial.go b/dial.go index 7bd9dac..50b426c 100644 --- a/dial.go +++ b/dial.go @@ -15,7 +15,11 @@ func (c *Client) DialContext(ctx context.Context, network, addr string) (net.Con if conn, err := c.Dial(network, addr); err != nil { errCh <- err } else if ctx.Err() != nil { - conn.Close() + var err error + c, err = c.NewClient() + if err != nil { + conn.Close() + } } else { connCh <- conn } diff --git a/go.sum b/go.sum index 6f9cf05..30187b6 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,4 @@ +github.com/eyedeekay/ramp v0.0.0-20190429201811-305b382042ab h1:EfTRHxGSbiaEyxNzvKRBWVIDw3mD8xXGxj4gvwFzY7Q= github.com/eyedeekay/ramp v0.0.0-20190429201811-305b382042ab/go.mod h1:h7mvUAMgZ/rtRDUOkvKTK+8LnDMeUhJSoa5EPdB51fc= github.com/eyedeekay/sam3 v0.32.2 h1:xODDY5nBVg0oK7KaYk7ofkXFoHPsmI1umhSv1TZlS7s= github.com/eyedeekay/sam3 v0.32.2/go.mod h1:Y3igFVzN4ybqkkpfUWULGhw7WRp8lieq0ORXbLBbcZM= diff --git a/naming_test.go b/naming_test.go index 5305155..e716f7f 100644 --- a/naming_test.go +++ b/naming_test.go @@ -27,7 +27,7 @@ func TestClientLookupInvalid(t *testing.T) { } } -func ExampleClient_Lookup() { +func TestClientLookupValid(t *testing.T) { client, err := NewDefaultClient() if err != nil { fmt.Printf("NewDefaultClient() should not throw an error.\n%s\n", err) @@ -40,11 +40,17 @@ func ExampleClient_Lookup() { return } + if addr == `GKapJ8koUcBj~jmQzHsTYxDg2tpfWj0xjQTzd8BhfC9c3OS5fwPBNajgF-eOD6eCjFTqTlorlh7Hnd8kXj1qblUGXT-tDoR9~YV8dmXl51cJn9MVTRrEqRWSJVXbUUz9t5Po6Xa247Vr0sJn27R4KoKP8QVj1GuH6dB3b6wTPbOamC3dkO18vkQkfZWUdRMDXk0d8AdjB0E0864nOT~J9Fpnd2pQE5uoFT6P0DqtQR2jsFvf9ME61aqLvKPPWpkgdn4z6Zkm-NJOcDz2Nv8Si7hli94E9SghMYRsdjU-knObKvxiagn84FIwcOpepxuG~kFXdD5NfsH0v6Uri3usE3XWD7Pw6P8qVYF39jUIq4OiNMwPnNYzy2N4mDMQdsdHO3LUVh~DEppOy9AAmEoHDjjJxt2BFBbGxfdpZCpENkwvmZeYUyNCCzASqTOOlNzdpne8cuesn3NDXIpNnqEE6Oe5Qm5YOJykrX~Vx~cFFT3QzDGkIjjxlFBsjUJyYkFjBQAEAAcAAA==` { + t.Log("Success") + } else { + t.Errorf("Address of zzz.i2p != \nGKapJ8koUcBj~jmQzHsTYxDg2tpfWj0xjQTzd8BhfC9c3OS5fwPBNajgF-eOD6eCjFTqTlorlh7Hnd8kXj1qblUGXT-tDoR9~YV8dmXl51cJn9MVTRrEqRWSJVXbUUz9t5Po6Xa247Vr0sJn27R4KoKP8QVj1GuH6dB3b6wTPbOamC3dkO18vkQkfZWUdRMDXk0d8AdjB0E0864nOT~J9Fpnd2pQE5uoFT6P0DqtQR2jsFvf9ME61aqLvKPPWpkgdn4z6Zkm-NJOcDz2Nv8Si7hli94E9SghMYRsdjU-knObKvxiagn84FIwcOpepxuG~kFXdD5NfsH0v6Uri3usE3XWD7Pw6P8qVYF39jUIq4OiNMwPnNYzy2N4mDMQdsdHO3LUVh~DEppOy9AAmEoHDjjJxt2BFBbGxfdpZCpENkwvmZeYUyNCCzASqTOOlNzdpne8cuesn3NDXIpNnqEE6Oe5Qm5YOJykrX~Vx~cFFT3QzDGkIjjxlFBsjUJyYkFjBQAEAAcAAA==\n, check to see if it changed, %s", addr) + } + fmt.Println("Address of zzz.i2p:") // Addresses change all the time fmt.Println(addr) // Output: //Address of zzz.i2p: - //GKapJ8koUcBj~jmQzHsTYxDg2tpfWj0xjQTzd8BhfC9c3OS5fwPBNajgF-eOD6eCjFTqTlorlh7Hnd8kXj1qblUGXT-tDoR9~YV8dmXl51cJn9MVTRrEqRWSJVXbUUz9t5Po6Xa247Vr0sJn27R4KoKP8QVj1GuH6dB3b6wTPbOamC3dkO18vkQkfZWUdRMDXk0d8AdjB0E0864nOT~J9Fpnd2pQE5uoFT6P0DqtQR2jsFvf9ME61aqLvKPPWpkgdn4z6Zkm-NJOcDz2Nv8Si7hli94E9SghMYRsdjU-knObKvxiagn84FIwcOpepxuG~kFXdD5NfsH0v6Uri3usE3XWD7Pw6P8qVYF39jUIq4OiNMwPnNYzy2N4mDMQdsdHO3LUVh~DEppOy9AAmEoHDjjJxt2BFBbGxfdpZCpENkwvmZeYUyNCCzASqTOOlNzdpne8cuesn3NDXIpNnqEE6Oe5Qm5YOJykrX~Vx~cFFT3QzDGkIjjxlFBsjUJyYkFjBQAEAAcAAA== + // } diff --git a/options.go b/options.go index b812d45..68f6444 100644 --- a/options.go +++ b/options.go @@ -369,6 +369,12 @@ func SetSignatureType(s string) func(*Client) error { //return the from port as a string. func (c *Client) from() string { + if c.fromport == "FROM_PORT=0" { + return "" + } + if c.fromport == "0" { + return "" + } if c.fromport == "" { return "" } @@ -377,6 +383,12 @@ func (c *Client) from() string { //return the to port as a string. func (c *Client) to() string { + if c.fromport == "TO_PORT=0" { + return "" + } + if c.fromport == "0" { + return "" + } if c.toport == "" { return "" } diff --git a/replyParser.go b/replyParser.go index c5d2e61..9ff7357 100644 --- a/replyParser.go +++ b/replyParser.go @@ -39,7 +39,6 @@ type Reply struct { } func parseReply(line string) (*Reply, error) { - fmt.Println("PARSER PARTS", line) line = strings.TrimSpace(line) parts := strings.Split(line, " ") if len(parts) < 3 { @@ -54,11 +53,16 @@ func parseReply(line string) (*Reply, error) { for _, v := range parts[2:] { if strings.Contains(v, "FROM_PORT") { - r.From = v + if v != "FROM_PORT=0" { + r.From = v + } } else if strings.Contains(v, "TO_PORT") { - r.To = v + if v != "TO_PORT=0" { + r.To = v + } } else { kvPair := strings.SplitN(v, "=", 2) + fmt.Printf("Reply, %s", parts) if kvPair != nil { if len(kvPair) != 2 { return nil, fmt.Errorf("Malformed key-value-pair.\n%s\n", kvPair)