From 357282c0e44479d540ad1b25d846ce0d82aaf97f Mon Sep 17 00:00:00 2001 From: Jake Walker Date: Wed, 3 Aug 2022 18:57:05 +0000 Subject: [PATCH 1/4] Update 'main.go' --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.go b/main.go index 081ab4c..69b8105 100644 --- a/main.go +++ b/main.go @@ -141,7 +141,7 @@ func (c *Client) Receive() ([]RawMessage, error) { return messages, nil } -func (c *Client) handshakeLoop(password string) error { +func (c *Client) HandshakeLoop(password string) error { log.Println("sending server info request") err := c.SendPlain(ReqServerInfo, nil, nil, nil) if err != nil { From 158189ae7d58ff61cfa9adeb121280c6a4c9feb7 Mon Sep 17 00:00:00 2001 From: Jake W Date: Fri, 5 Aug 2022 11:15:05 +0100 Subject: [PATCH 2/4] Add client version as argument --- main.go | 6 ++---- main_test.go | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/main.go b/main.go index 69b8105..c25b6ed 100644 --- a/main.go +++ b/main.go @@ -14,8 +14,6 @@ import ( "git.vh7.uk/jakew/echo-go/crypto" ) -const EchoVersion = "3.17" - func randomHex(n int) (string, error) { b := make([]byte, n) if _, err := rand.Read(b); err != nil { @@ -141,7 +139,7 @@ func (c *Client) Receive() ([]RawMessage, error) { return messages, nil } -func (c *Client) HandshakeLoop(password string) error { +func (c *Client) HandshakeLoop(clientVersion string, password string) error { log.Println("sending server info request") err := c.SendPlain(ReqServerInfo, nil, nil, nil) if err != nil { @@ -175,7 +173,7 @@ func (c *Client) HandshakeLoop(password string) error { data, err := json.Marshal([]string{ c.Username, password, - EchoVersion, + clientVersion, }) if err != nil { return err diff --git a/main_test.go b/main_test.go index d090ab0..7611ea9 100644 --- a/main_test.go +++ b/main_test.go @@ -8,7 +8,7 @@ func TestCanConnect(t *testing.T) { t.Fatalf("failed to create client: %v", err) } - err = client.handshakeLoop("mypassword") + err = client.HandshakeLoop("mypassword", "4.0.0") if err != nil { t.Fatalf("failed to run handshake loop: %v", err) } From 5bd7802455cb89e50f3b7409e84cbdb288377905 Mon Sep 17 00:00:00 2001 From: Jake Walker Date: Tue, 9 Aug 2022 11:23:38 +0000 Subject: [PATCH 3/4] Update 'main.go' --- main.go | 1 + 1 file changed, 1 insertion(+) diff --git a/main.go b/main.go index c25b6ed..b709893 100644 --- a/main.go +++ b/main.go @@ -174,6 +174,7 @@ func (c *Client) HandshakeLoop(clientVersion string, password string) error { c.Username, password, clientVersion, + "", }) if err != nil { return err From 56fa617f260379b7f428833730a34c80914e70f9 Mon Sep 17 00:00:00 2001 From: Jake W Date: Tue, 9 Aug 2022 14:49:21 +0100 Subject: [PATCH 4/4] Load longer messages --- main.go | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/main.go b/main.go index c25b6ed..589c2ff 100644 --- a/main.go +++ b/main.go @@ -77,16 +77,31 @@ func (c *Client) Send(msgType MessageType, data *string, subType *string, metada return err } +func (c *Client) rawReceive(messageEnding string) (string, error) { + received := "" + + for !strings.HasSuffix(received, messageEnding) { + data := make([]byte, 20480) + _, err := c.Con.Read(data) + if err != nil { + return received, err + } + + received = received + string(bytes.Trim(data, "\x00")) + } + + return received, nil +} + func (c *Client) ReceivePlain() ([]RawMessage, error) { - data := make([]byte, 20480) - _, err := c.Con.Read(data) + received, err := c.rawReceive("}") if err != nil { return nil, err } messages := []RawMessage{} - for _, message := range strings.Split(string(bytes.Trim(data, "\x00")), "}") { + for _, message := range strings.Split(received, "}") { if strings.TrimSpace(message) == "" { continue } @@ -104,15 +119,14 @@ func (c *Client) ReceivePlain() ([]RawMessage, error) { } func (c *Client) Receive() ([]RawMessage, error) { - data := make([]byte, 20480) - _, err := c.Con.Read(data) + received, err := c.rawReceive("]") if err != nil { return nil, err } messages := []RawMessage{} - for _, message := range strings.Split(string(bytes.Trim(data, "\x00")), "]") { + for _, message := range strings.Split(received, "]") { if strings.TrimSpace(message) == "" { continue } @@ -174,6 +188,7 @@ func (c *Client) HandshakeLoop(clientVersion string, password string) error { c.Username, password, clientVersion, + "", }) if err != nil { return err