Fix session ID issue, we only need a new session when we really need a new session, i.e. give people a way to ask for it instead of trying to guess

This commit is contained in:
idk
2020-11-22 12:31:20 -05:00
parent 9baee36493
commit 3c5397e87f
6 changed files with 51 additions and 23 deletions

View File

@ -55,6 +55,7 @@ type Client struct {
lastaddr string
id int32
ml sync.Mutex
oml sync.Mutex
}
var SAMsigTypes = []string{

View File

@ -10,7 +10,8 @@ import (
//"log"
"net/http"
"github.com/eyedeekay/sam3"
"github.com/eyedeekay/sam3/helper"
"github.com/eyedeekay/sam3/i2pkeys"
)
func HelloServer(w http.ResponseWriter, r *http.Request) {
@ -30,25 +31,27 @@ func setup(t *testing.T) {
}
func TestCompositeClient(t *testing.T) {
sam, err := sam3.NewSAM("127.0.0.1:7656")
if err != nil {
t.Fatalf("Listener() Error: %q\n", err)
}
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()
listener, err := sam.I2PListener("testservice", "127.0.0.1:7656", "testkeys")
if err != nil {
t.Fatalf("Listener() Error: %q\n", err)
}
http.HandleFunc("/", HelloServer)
go http.Serve(listener, nil)
listener2, err := sam.I2PListener("testservice2", "127.0.0.1:7656", "testkeys2")
if err != nil {
t.Fatalf("Listener() Error: %q\n", err)
}
// http.HandleFunc("/", HelloServer)
go http.Serve(listener2, nil)
listener3, err := sam.I2PListener("testservice3", "127.0.0.1:7656", "testkeys3")
if err != nil {
t.Fatalf("Listener() Error: %q\n", err)
}
// http.HandleFunc("/", HelloServer)
go http.Serve(listener3, nil)
client, err = NewClientFromOptions(SetDebug(true))
if err != nil {
t.Fatalf("NewDefaultClient() Error: %q\n", err)
@ -58,12 +61,31 @@ func TestCompositeClient(t *testing.T) {
}
client := &http.Client{Transport: tr}
time.Sleep(time.Second * 30)
resp, err := client.Get("http://" + keys.Addr().Base32())
if err != nil {
t.Fatalf("Get Error: %q\n", err)
}
defer resp.Body.Close()
t.Log("Get returned ", resp)
go func() {
resp, err := client.Get("http://" + listener.Addr().(i2pkeys.I2PAddr).Base32())
if err != nil {
t.Fatalf("Get Error: %q\n", err)
}
defer resp.Body.Close()
t.Log("Get returned ", resp)
}()
go func() {
resp, err := client.Get("http://" + listener2.Addr().(i2pkeys.I2PAddr).Base32())
if err != nil {
t.Fatalf("Get Error: %q\n", err)
}
defer resp.Body.Close()
t.Log("Get returned ", resp)
}()
go func() {
resp, err := client.Get("http://" + listener3.Addr().(i2pkeys.I2PAddr).Base32())
if err != nil {
t.Fatalf("Get Error: %q\n", err)
}
defer resp.Body.Close()
t.Log("Get returned ", resp)
}()
time.Sleep(time.Second * 15)
}

View File

@ -9,6 +9,8 @@ import (
// DialContext implements the net.DialContext function and can be used for http.Transport
func (c *Client) DialContext(ctx context.Context, network, addr string) (net.Conn, error) {
c.oml.Lock()
defer c.oml.Unlock()
errCh := make(chan error, 1)
connCh := make(chan net.Conn, 1)
go func() {
@ -42,7 +44,6 @@ func (c *Client) dialCheck(addr string) (int32, bool) {
return c.NewID(), true
} else if c.lastaddr != addr {
fmt.Println("Preparing to dial next new address.")
return c.NewID(), true
}
return c.id, false
}

2
go.mod
View File

@ -1,6 +1,6 @@
module github.com/eyedeekay/goSam
require github.com/eyedeekay/sam3 v0.32.2
require github.com/eyedeekay/sam3 v0.32.32-0.20201122050855-f464873c9350
//replace github.com/eyedeekay/gosam v0.1.1-0.20190814195658-27e786578944 => github.com/eyedeekay/goSam ./

3
go.sum
View File

@ -2,3 +2,6 @@ github.com/eyedeekay/ramp v0.0.0-20190429201811-305b382042ab h1:EfTRHxGSbiaEyxNz
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=
github.com/eyedeekay/sam3 v0.32.31 h1:0fdDAupEQZSETHcyVQAsnFgpYArGJzU+lC2qN6f0GDk=
github.com/eyedeekay/sam3 v0.32.32-0.20201122050855-f464873c9350 h1:8R4zcaWsgANiZ4MKKBPUf9Isct2M1IFVUVZdAMqPCmU=
github.com/eyedeekay/sam3 v0.32.32-0.20201122050855-f464873c9350/go.mod h1:qRA9KIIVxbrHlkj+ZB+OoxFGFgdKeGp1vSgPw26eOVU=

View File

@ -63,7 +63,8 @@ func parseReply(line string) (*Reply, error) {
} else {
kvPair := strings.SplitN(v, "=", 2)
if kvPair != nil {
if len(kvPair) != 2 {
if len(kvPair) == 1 {
} else if len(kvPair) != 2 {
return nil, fmt.Errorf("Malformed key-value-pair.\n%s\n", kvPair)
}
}