Compare commits
7 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
dc12ba56d4 | ||
![]() |
281084cb81 | ||
![]() |
ff6b890bfd | ||
![]() |
12d1bf38b2 | ||
![]() |
7fa46ffc98 | ||
![]() |
a516752491 | ||
![]() |
4c81f5f7a0 |
7
Makefile
7
Makefile
@@ -1,9 +1,9 @@
|
|||||||
|
|
||||||
USER_GH=eyedeekay
|
USER_GH=eyedeekay
|
||||||
VERSION=0.32.26
|
VERSION=0.32.28
|
||||||
packagename=gosam
|
packagename=gosam
|
||||||
|
|
||||||
echo:
|
echo: fmt
|
||||||
@echo "type make version to do release $(VERSION)"
|
@echo "type make version to do release $(VERSION)"
|
||||||
|
|
||||||
version:
|
version:
|
||||||
@@ -22,3 +22,6 @@ tar:
|
|||||||
link:
|
link:
|
||||||
rm -f ../goSam
|
rm -f ../goSam
|
||||||
ln -sf . ../goSam
|
ln -sf . ../goSam
|
||||||
|
|
||||||
|
fmt:
|
||||||
|
gofmt -w -s *.go */*.go
|
||||||
|
@@ -85,7 +85,10 @@ to produce an unsigned deb for personal use only. For packagers,
|
|||||||
|
|
||||||
will produce a viable source package for use with Launchpad PPA's and other
|
will produce a viable source package for use with Launchpad PPA's and other
|
||||||
similar systems.
|
similar systems.
|
||||||
|
|
||||||
### TODO
|
### TODO
|
||||||
|
|
||||||
* Implement `STREAM ACCEPT` and `STREAM FORWARD`
|
* Improve recovery on failed sockets
|
||||||
|
* Implement `STREAM FORWARD`
|
||||||
* Implement datagrams (Repliable and Anon)
|
* Implement datagrams (Repliable and Anon)
|
||||||
|
|
||||||
|
@@ -106,7 +106,6 @@ func (c *Client) Base32() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) base64() []byte {
|
func (c *Client) base64() []byte {
|
||||||
fmt.Println("\n\nDESTINATION", c.destination, "\n\n.")
|
|
||||||
if c.destination != "" {
|
if c.destination != "" {
|
||||||
s, _ := i2pB64enc.DecodeString(c.destination)
|
s, _ := i2pB64enc.DecodeString(c.destination)
|
||||||
alen := binary.BigEndian.Uint16(s[385:387])
|
alen := binary.BigEndian.Uint16(s[385:387])
|
||||||
@@ -146,6 +145,8 @@ func NewClientFromOptions(opts ...func(*Client) error) (*Client, error) {
|
|||||||
c.lastaddr = "invalid"
|
c.lastaddr = "invalid"
|
||||||
c.destination = ""
|
c.destination = ""
|
||||||
c.leaseSetEncType = "4,0"
|
c.leaseSetEncType = "4,0"
|
||||||
|
c.fromport = ""
|
||||||
|
c.toport = ""
|
||||||
for _, o := range opts {
|
for _, o := range opts {
|
||||||
if err := o(&c); err != nil {
|
if err := o(&c); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -184,7 +185,7 @@ func (c *Client) hello() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if r.Topic != "HELLO" {
|
if r.Topic != "HELLO" {
|
||||||
return fmt.Errorf("Unknown Reply: %+v\n", r)
|
return fmt.Errorf("Client Hello Unknown Reply: %+v\n", r)
|
||||||
}
|
}
|
||||||
|
|
||||||
if r.Pairs["RESULT"] != "OK" {
|
if r.Pairs["RESULT"] != "OK" {
|
||||||
|
@@ -4,6 +4,19 @@ package goSam
|
|||||||
|
|
||||||
import "testing"
|
import "testing"
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
//"log"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/eyedeekay/sam3"
|
||||||
|
)
|
||||||
|
|
||||||
|
func HelloServer(w http.ResponseWriter, r *http.Request) {
|
||||||
|
fmt.Fprintf(w, "Hello, %s!", r.URL.Path[1:])
|
||||||
|
}
|
||||||
|
|
||||||
var client *Client
|
var client *Client
|
||||||
|
|
||||||
func setup(t *testing.T) {
|
func setup(t *testing.T) {
|
||||||
@@ -16,6 +29,44 @@ 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()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Listener() Error: %q\n", err)
|
||||||
|
}
|
||||||
|
http.HandleFunc("/", HelloServer)
|
||||||
|
go http.Serve(listener, nil)
|
||||||
|
|
||||||
|
client, err = NewClientFromOptions(SetDebug(true))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("NewDefaultClient() Error: %q\n", err)
|
||||||
|
}
|
||||||
|
tr := &http.Transport{
|
||||||
|
Dial: client.Dial,
|
||||||
|
}
|
||||||
|
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)
|
||||||
|
time.Sleep(time.Second * 15)
|
||||||
|
}
|
||||||
|
|
||||||
func teardown(t *testing.T) {
|
func teardown(t *testing.T) {
|
||||||
if err := client.Close(); err != nil {
|
if err := client.Close(); err != nil {
|
||||||
t.Fatalf("client.Close() Error: %q\n", err)
|
t.Fatalf("client.Close() Error: %q\n", err)
|
||||||
|
12
debian/changelog
vendored
12
debian/changelog
vendored
@@ -1,3 +1,15 @@
|
|||||||
|
golang-github-eyedeekay-gosam (0.32.27) UNRELEASED; urgency=medium
|
||||||
|
|
||||||
|
* Maintenance updates
|
||||||
|
|
||||||
|
-- idk <hankhill19580@gmail.com> Thu, 12 Sept 2020 22:44:27 -0500
|
||||||
|
|
||||||
|
golang-github-eyedeekay-gosam (0.32.27) UNRELEASED; urgency=medium
|
||||||
|
|
||||||
|
* Add a Resolve function to fulfill SOCKS5 proxy requirements
|
||||||
|
|
||||||
|
-- idk <hankhill19580@gmail.com> Sun, 13 Sept 2020 04:48:27 -0500
|
||||||
|
|
||||||
golang-github-eyedeekay-gosam (0.32.26) UNRELEASED; urgency=medium
|
golang-github-eyedeekay-gosam (0.32.26) UNRELEASED; urgency=medium
|
||||||
|
|
||||||
* Fix mistaken-identity issue with listeners
|
* Fix mistaken-identity issue with listeners
|
||||||
|
6
dial.go
6
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 {
|
if conn, err := c.Dial(network, addr); err != nil {
|
||||||
errCh <- err
|
errCh <- err
|
||||||
} else if ctx.Err() != nil {
|
} else if ctx.Err() != nil {
|
||||||
conn.Close()
|
var err error
|
||||||
|
c, err = c.NewClient()
|
||||||
|
if err != nil {
|
||||||
|
conn.Close()
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
connCh <- conn
|
connCh <- conn
|
||||||
}
|
}
|
||||||
|
1
go.sum
1
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/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 h1:xODDY5nBVg0oK7KaYk7ofkXFoHPsmI1umhSv1TZlS7s=
|
||||||
github.com/eyedeekay/sam3 v0.32.2/go.mod h1:Y3igFVzN4ybqkkpfUWULGhw7WRp8lieq0ORXbLBbcZM=
|
github.com/eyedeekay/sam3 v0.32.2/go.mod h1:Y3igFVzN4ybqkkpfUWULGhw7WRp8lieq0ORXbLBbcZM=
|
||||||
|
41
naming.go
41
naming.go
@@ -1,7 +1,10 @@
|
|||||||
package goSam
|
package goSam
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"net"
|
||||||
"os"
|
"os"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -14,7 +17,7 @@ func (c *Client) Lookup(name string) (string, error) {
|
|||||||
|
|
||||||
// TODO: move check into sendCmd()
|
// TODO: move check into sendCmd()
|
||||||
if r.Topic != "NAMING" || r.Type != "REPLY" {
|
if r.Topic != "NAMING" || r.Type != "REPLY" {
|
||||||
return "", fmt.Errorf("Unknown Reply: %+v\n", r)
|
return "", fmt.Errorf("Naming Unknown Reply: %+v\n", r)
|
||||||
}
|
}
|
||||||
|
|
||||||
result := r.Pairs["RESULT"]
|
result := r.Pairs["RESULT"]
|
||||||
@@ -32,3 +35,39 @@ func (c *Client) Lookup(name string) (string, error) {
|
|||||||
|
|
||||||
return r.Pairs["VALUE"], nil
|
return r.Pairs["VALUE"], nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Client) forward(client, conn net.Conn) {
|
||||||
|
go func() {
|
||||||
|
defer client.Close()
|
||||||
|
defer conn.Close()
|
||||||
|
io.Copy(client, conn)
|
||||||
|
}()
|
||||||
|
go func() {
|
||||||
|
defer client.Close()
|
||||||
|
defer conn.Close()
|
||||||
|
io.Copy(conn, client)
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) Resolve(ctx context.Context, name string) (context.Context, net.IP, error) {
|
||||||
|
if c.lastaddr == "invalid" || c.lastaddr != name {
|
||||||
|
client, err := c.DialContext(ctx, "", name)
|
||||||
|
if err != nil {
|
||||||
|
return ctx, nil, err
|
||||||
|
}
|
||||||
|
ln, err := net.Listen("tcp", "127.0.0.1:")
|
||||||
|
if err != nil {
|
||||||
|
return ctx, nil, err
|
||||||
|
}
|
||||||
|
go func() {
|
||||||
|
for {
|
||||||
|
conn, err := ln.Accept()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err.Error())
|
||||||
|
}
|
||||||
|
go c.forward(client, conn)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
return ctx, nil, nil
|
||||||
|
}
|
||||||
|
@@ -27,7 +27,7 @@ func TestClientLookupInvalid(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func ExampleClient_Lookup() {
|
func TestClientLookupValid(t *testing.T) {
|
||||||
client, err := NewDefaultClient()
|
client, err := NewDefaultClient()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("NewDefaultClient() should not throw an error.\n%s\n", err)
|
fmt.Printf("NewDefaultClient() should not throw an error.\n%s\n", err)
|
||||||
@@ -40,11 +40,17 @@ func ExampleClient_Lookup() {
|
|||||||
return
|
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:")
|
fmt.Println("Address of zzz.i2p:")
|
||||||
// Addresses change all the time
|
// Addresses change all the time
|
||||||
fmt.Println(addr)
|
fmt.Println(addr)
|
||||||
|
|
||||||
// Output:
|
// Output:
|
||||||
//Address of zzz.i2p:
|
//Address of zzz.i2p:
|
||||||
//GKapJ8koUcBj~jmQzHsTYxDg2tpfWj0xjQTzd8BhfC9c3OS5fwPBNajgF-eOD6eCjFTqTlorlh7Hnd8kXj1qblUGXT-tDoR9~YV8dmXl51cJn9MVTRrEqRWSJVXbUUz9t5Po6Xa247Vr0sJn27R4KoKP8QVj1GuH6dB3b6wTPbOamC3dkO18vkQkfZWUdRMDXk0d8AdjB0E0864nOT~J9Fpnd2pQE5uoFT6P0DqtQR2jsFvf9ME61aqLvKPPWpkgdn4z6Zkm-NJOcDz2Nv8Si7hli94E9SghMYRsdjU-knObKvxiagn84FIwcOpepxuG~kFXdD5NfsH0v6Uri3usE3XWD7Pw6P8qVYF39jUIq4OiNMwPnNYzy2N4mDMQdsdHO3LUVh~DEppOy9AAmEoHDjjJxt2BFBbGxfdpZCpENkwvmZeYUyNCCzASqTOOlNzdpne8cuesn3NDXIpNnqEE6Oe5Qm5YOJykrX~Vx~cFFT3QzDGkIjjxlFBsjUJyYkFjBQAEAAcAAA==
|
//
|
||||||
}
|
}
|
||||||
|
12
options.go
12
options.go
@@ -369,6 +369,12 @@ func SetSignatureType(s string) func(*Client) error {
|
|||||||
|
|
||||||
//return the from port as a string.
|
//return the from port as a string.
|
||||||
func (c *Client) from() string {
|
func (c *Client) from() string {
|
||||||
|
if c.fromport == "FROM_PORT=0" {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
if c.fromport == "0" {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
if c.fromport == "" {
|
if c.fromport == "" {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
@@ -377,6 +383,12 @@ func (c *Client) from() string {
|
|||||||
|
|
||||||
//return the to port as a string.
|
//return the to port as a string.
|
||||||
func (c *Client) to() string {
|
func (c *Client) to() string {
|
||||||
|
if c.fromport == "TO_PORT=0" {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
if c.fromport == "0" {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
if c.toport == "" {
|
if c.toport == "" {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
package goSam
|
package goSam
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"math"
|
"math"
|
||||||
@@ -186,3 +188,4 @@ func TestOptionPortInt(t *testing.T) {
|
|||||||
fmt.Printf("\t address64- %s \t", client.Base64())
|
fmt.Printf("\t address64- %s \t", client.Base64())
|
||||||
fmt.Printf("\t address- %s \t", client.Base32())
|
fmt.Printf("\t address- %s \t", client.Base32())
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
@@ -32,6 +32,8 @@ func (r ReplyError) Error() string {
|
|||||||
type Reply struct {
|
type Reply struct {
|
||||||
Topic string
|
Topic string
|
||||||
Type string
|
Type string
|
||||||
|
From string
|
||||||
|
To string
|
||||||
|
|
||||||
Pairs map[string]string
|
Pairs map[string]string
|
||||||
}
|
}
|
||||||
@@ -50,14 +52,23 @@ func parseReply(line string) (*Reply, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, v := range parts[2:] {
|
for _, v := range parts[2:] {
|
||||||
kvPair := strings.SplitN(v, "=", 2)
|
if strings.Contains(v, "FROM_PORT") {
|
||||||
if kvPair != nil {
|
if v != "FROM_PORT=0" {
|
||||||
if len(kvPair) != 2 {
|
r.From = v
|
||||||
return nil, fmt.Errorf("Malformed key-value-pair.\n%s\n", kvPair)
|
|
||||||
}
|
}
|
||||||
|
} else if strings.Contains(v, "TO_PORT") {
|
||||||
|
if v != "TO_PORT=0" {
|
||||||
|
r.To = v
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
kvPair := strings.SplitN(v, "=", 2)
|
||||||
|
if kvPair != nil {
|
||||||
|
if len(kvPair) != 2 {
|
||||||
|
return nil, fmt.Errorf("Malformed key-value-pair.\n%s\n", kvPair)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
r.Pairs[kvPair[0]] = kvPair[len(kvPair)-1]
|
||||||
}
|
}
|
||||||
|
|
||||||
r.Pairs[kvPair[0]] = kvPair[len(kvPair)-1]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return r, nil
|
return r, nil
|
||||||
|
@@ -19,11 +19,11 @@ func (c *Client) CreateStreamSession(id int32, dest string) (string, error) {
|
|||||||
}
|
}
|
||||||
c.id = id
|
c.id = id
|
||||||
r, err := c.sendCmd(
|
r, err := c.sendCmd(
|
||||||
"SESSION CREATE STYLE=STREAM ID=%d %s %s DESTINATION=%s %s %s\n",
|
"SESSION CREATE STYLE=STREAM ID=%d DESTINATION=%s %s %s %s %s \n",
|
||||||
c.id,
|
c.id,
|
||||||
|
dest,
|
||||||
c.from(),
|
c.from(),
|
||||||
c.to(),
|
c.to(),
|
||||||
dest,
|
|
||||||
c.sigtype(),
|
c.sigtype(),
|
||||||
c.allOptions(),
|
c.allOptions(),
|
||||||
)
|
)
|
||||||
@@ -33,7 +33,7 @@ func (c *Client) CreateStreamSession(id int32, dest string) (string, error) {
|
|||||||
|
|
||||||
// TODO: move check into sendCmd()
|
// TODO: move check into sendCmd()
|
||||||
if r.Topic != "SESSION" || r.Type != "STATUS" {
|
if r.Topic != "SESSION" || r.Type != "STATUS" {
|
||||||
return "", fmt.Errorf("Unknown Reply: %+v\n", r)
|
return "", fmt.Errorf("Session Unknown Reply: %+v\n", r)
|
||||||
}
|
}
|
||||||
|
|
||||||
result := r.Pairs["RESULT"]
|
result := r.Pairs["RESULT"]
|
||||||
|
@@ -6,14 +6,14 @@ import (
|
|||||||
|
|
||||||
// StreamConnect asks SAM for a TCP-Like connection to dest, has to be called on a new Client
|
// StreamConnect asks SAM for a TCP-Like connection to dest, has to be called on a new Client
|
||||||
func (c *Client) StreamConnect(id int32, dest string) error {
|
func (c *Client) StreamConnect(id int32, dest string) error {
|
||||||
r, err := c.sendCmd("STREAM CONNECT ID=%d %s %s DESTINATION=%s\n", id, c.from(), c.to(), dest)
|
r, err := c.sendCmd("STREAM CONNECT ID=%d DESTINATION=%s %s %s\n", id, dest, c.from(), c.to())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: move check into sendCmd()
|
// TODO: move check into sendCmd()
|
||||||
if r.Topic != "STREAM" || r.Type != "STATUS" {
|
if r.Topic != "STREAM" || r.Type != "STATUS" {
|
||||||
return fmt.Errorf("Unknown Reply: %+v\n", r)
|
return fmt.Errorf("Stream Connect Unknown Reply: %+v\n", r)
|
||||||
}
|
}
|
||||||
|
|
||||||
result := r.Pairs["RESULT"]
|
result := r.Pairs["RESULT"]
|
||||||
@@ -33,7 +33,7 @@ func (c *Client) StreamAccept(id int32) (*Reply, error) {
|
|||||||
|
|
||||||
// TODO: move check into sendCmd()
|
// TODO: move check into sendCmd()
|
||||||
if r.Topic != "STREAM" || r.Type != "STATUS" {
|
if r.Topic != "STREAM" || r.Type != "STATUS" {
|
||||||
return nil, fmt.Errorf("Unknown Reply: %+v\n", r)
|
return nil, fmt.Errorf("Stream Accept Unknown Reply: %+v\n", r)
|
||||||
}
|
}
|
||||||
|
|
||||||
result := r.Pairs["RESULT"]
|
result := r.Pairs["RESULT"]
|
||||||
|
Reference in New Issue
Block a user