13 Commits

Author SHA1 Message Date
idk
7d820eeaaa dual-keys by default, tidy up 2020-09-03 16:21:53 -04:00
idk
ac54a46ded Use dual keys by default 2020-09-03 16:19:12 -04:00
idk
22a3e9f3a7 Merge pull request #3 from bonedaddy/fix/mutex
Fix Pass Lock By Value Vet Warning
2020-09-02 12:04:38 +00:00
idk
b7ce5c1061 Merge pull request #2 from bonedaddy/feat/dest#create
Enable Basic Destination Creation
2020-09-02 12:03:43 +00:00
postables
7729762ce9 fix pass lock by value warning 2020-08-30 18:34:41 -07:00
postables
13bf63f35a test: make sure to check the returned error from destination creation 2020-08-30 17:59:30 -07:00
postables
91fc13b151 enable creating I2P destinations 2020-08-30 17:56:05 -07:00
idk
7cf9e8b61e mutex thing should be better 2020-08-25 16:53:59 -04:00
idk
c7d6848930 Protext non-context-aware dialer with a mutex 2020-08-25 10:31:44 -04:00
idk
eabd2d94f6 Protext non-context-aware dialer with a mutex 2020-08-25 10:27:40 -04:00
idk
76924e5961 add make link target 2020-07-29 13:00:36 -04:00
idk
027983674b add Makefile to help me automate releases 2020-07-29 12:57:16 -04:00
idk
7521a7862a Fix multi-lookup utility 2020-07-29 12:54:09 -04:00
11 changed files with 116 additions and 5 deletions

1
.gitignore vendored
View File

@@ -22,3 +22,4 @@ _testmain.go
*.exe
itp-golang-github-eyedeekay-gosam.txt
.pc
deb/

24
Makefile Normal file
View File

@@ -0,0 +1,24 @@
USER_GH=eyedeekay
VERSION=0.32.25
packagename=gosam
echo:
@echo "type make version to do release $(VERSION)"
version:
gothub release -s $(GITHUB_TOKEN) -u $(USER_GH) -r $(packagename) -t v$(VERSION) -d "version $(VERSION)"
del:
gothub delete -s $(GITHUB_TOKEN) -u $(USER_GH) -r $(packagename) -t v$(VERSION)
tar:
tar --exclude .git \
--exclude .go \
--exclude bin \
--exclude examples \
-cJvf ../$(packagename)_$(VERSION).orig.tar.xz .
link:
rm -f ../goSam
ln -sf . ../goSam

View File

@@ -11,6 +11,7 @@ import (
"math/rand"
"net"
"strings"
"sync"
)
// A Client represents a single Connection to the SAM bridge
@@ -38,6 +39,7 @@ type Client struct {
dontPublishLease bool
encryptLease bool
leaseSetEncType string
reduceIdle bool
reduceIdleTime uint
@@ -52,6 +54,7 @@ type Client struct {
//NEVER, EVER modify lastaddr or id yourself. They are used internally only.
lastaddr string
id int32
ml sync.Mutex
}
var SAMsigTypes = []string{
@@ -137,6 +140,7 @@ func NewClientFromOptions(opts ...func(*Client) error) (*Client, error) {
c.id = 0
c.lastaddr = "invalid"
c.destination = ""
c.leaseSetEncType = "4,0"
for _, o := range opts {
if err := o(&c); err != nil {
return nil, err

View File

@@ -27,3 +27,12 @@ func TestClientHello(t *testing.T) {
t.Log(client.Base32())
teardown(t)
}
func TestNewDestination(t *testing.T) {
setup(t)
t.Log(client.Base32())
if _, err := client.NewDestination(SAMsigTypes[3]); err != nil {
t.Error(err)
}
teardown(t)
}

12
debian/changelog vendored
View File

@@ -1,3 +1,15 @@
golang-github-eyedeekay-gosam (0.32.24) UNRELEASED; urgency=medium
* Improve the mutex thingy
-- idk <hankhill19580@gmail.com> Tue, 25 Aug 2020 04:52:11 -0500
golang-github-eyedeekay-gosam (0.32.23) UNRELEASED; urgency=medium
* Protect Dial with a mutex to fix a lookup bug
-- idk <hankhill19580@gmail.com> Tue, 25 Aug 2020 10:29:26 -0500
golang-github-eyedeekay-gosam (0.3.2.1) bionic; urgency=medium
* Get rid of the debug directory, just move it into the source

3
debian/control vendored
View File

@@ -6,7 +6,8 @@ Uploaders: idk <hankhill19580@gmail.com>
Build-Depends: debhelper (>= 11),
dh-golang,
golang-any,
i2pd | i2p
i2pd | i2p,
git,
Standards-Version: 4.2.1
Homepage: https://github.com/eyedeekay/gosam
Vcs-Browser: https:/github.com/eyedeekay/gosam

View File

@@ -30,16 +30,21 @@ func (c *Client) DialContext(ctx context.Context, network, addr string) (net.Con
}
}
func (c Client) dialCheck(addr string) (int32, bool) {
func (c *Client) dialCheck(addr string) (int32, bool) {
if c.lastaddr == "invalid" {
fmt.Println("Preparing to dial new address.")
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
}
// Dial implements the net.Dial function and can be used for http.Transport
func (c *Client) Dial(network, addr string) (net.Conn, error) {
c.ml.Lock()
defer c.ml.Unlock()
portIdx := strings.Index(addr, ":")
if portIdx >= 0 {
addr = addr[:portIdx]

3
go.sum Normal file
View File

@@ -0,0 +1,3 @@
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=

35
i2pkeys.go Normal file
View File

@@ -0,0 +1,35 @@
package goSam
import (
"errors"
"github.com/eyedeekay/sam3/i2pkeys"
)
// NewDestination generates a new I2P destination, creating the underlying
// public/private keys in the process. The public key can be used to send messages
// to the destination, while the private key can be used to reply to messages
func (c *Client) NewDestination(sigType ...string) (i2pkeys.I2PKeys, error) {
var (
sigtmp string
keys i2pkeys.I2PKeys
)
if len(sigType) > 0 {
sigtmp = sigType[0]
}
r, err := c.sendCmd(
"DEST GENERATE %s\n",
sigtmp,
)
if err != nil {
return keys, err
}
var pub, priv string
if priv = r.Pairs["PRIV"]; priv == "" {
return keys, errors.New("failed to generate private destination key")
}
if pub = r.Pairs["PUB"]; pub == "" {
return keys, errors.New("failed to generate public destination key")
}
return i2pkeys.NewKeys(i2pkeys.I2PAddr(pub), priv), nil
}

View File

@@ -22,8 +22,8 @@ func TestClientLookupInvalid(t *testing.T) {
if !ok {
t.Fatalf("client.Lookup() should return a ReplyError")
}
if repErr.Result != ResultInvalidKey {
t.Errorf("client.Lookup() should throw an ResultKeyNotFound error.\nGot:%+v\n", repErr)
if repErr.Result != ResultKeyNotFound {
t.Errorf("client.Lookup() should throw an ResultKeyNotFound error.\nGot:%+v%s%s\n", repErr, "!=", ResultKeyNotFound)
}
}
@@ -46,5 +46,5 @@ func ExampleClient_Lookup() {
// Output:
//Address of zzz.i2p:
//GKapJ8koUcBj~jmQzHsTYxDg2tpfWj0xjQTzd8BhfC9c3OS5fwPBNajgF-eOD6eCjFTqTlorlh7Hnd8kXj1qblUGXT-tDoR9~YV8dmXl51cJn9MVTRrEqRWSJVXbUUz9t5Po6Xa247Vr0sJn27R4KoKP8QVj1GuH6dB3b6wTPbOamC3dkO18vkQkfZWUdRMDXk0d8AdjB0E0864nOT~J9Fpnd2pQE5uoFT6P0DqtQR2jsFvf9ME61aqLvKPPWpkgdn4z6Zkm-NJOcDz2Nv8Si7hli94E9SghMYRsdjU-knObKvxiagn84FIwcOpepxuG~kFXdD5NfsH0v6Uri3usE3uSzpWS0EHmrlfoLr5uGGd9ZHwwCIcgfOATaPRMUEQxiK9q48PS0V3EXXO4-YLT0vIfk4xO~XqZpn8~PW1kFe2mQMHd7oO89yCk-3yizRG3UyFtI7-mO~eCI6-m1spYoigStgoupnC3G85gJkqEjMm49gUjbhfWKWI-6NwTj0ZnAAAA
//GKapJ8koUcBj~jmQzHsTYxDg2tpfWj0xjQTzd8BhfC9c3OS5fwPBNajgF-eOD6eCjFTqTlorlh7Hnd8kXj1qblUGXT-tDoR9~YV8dmXl51cJn9MVTRrEqRWSJVXbUUz9t5Po6Xa247Vr0sJn27R4KoKP8QVj1GuH6dB3b6wTPbOamC3dkO18vkQkfZWUdRMDXk0d8AdjB0E0864nOT~J9Fpnd2pQE5uoFT6P0DqtQR2jsFvf9ME61aqLvKPPWpkgdn4z6Zkm-NJOcDz2Nv8Si7hli94E9SghMYRsdjU-knObKvxiagn84FIwcOpepxuG~kFXdD5NfsH0v6Uri3usE3XWD7Pw6P8qVYF39jUIq4OiNMwPnNYzy2N4mDMQdsdHO3LUVh~DEppOy9AAmEoHDjjJxt2BFBbGxfdpZCpENkwvmZeYUyNCCzASqTOOlNzdpne8cuesn3NDXIpNnqEE6Oe5Qm5YOJykrX~Vx~cFFT3QzDGkIjjxlFBsjUJyYkFjBQAEAAcAAA==
}

View File

@@ -275,6 +275,14 @@ func SetEncrypt(b bool) func(*Client) error {
}
}
//SetLeaseSetEncType tells the router to use an encrypted leaseset
func SetLeaseSetEncType(b string) func(*Client) error {
return func(c *Client) error {
c.leaseSetEncType = b
return nil
}
}
//SetReduceIdle sets the created tunnels to be reduced during extended idle time to avoid excessive resource usage
func SetReduceIdle(b bool) func(*Client) error {
return func(c *Client) error {
@@ -426,6 +434,13 @@ func (c *Client) encryptlease() string {
return " i2cp.encryptLeaseSet=false "
}
func (c *Client) leasesetenctype() string {
if c.encryptLease {
return fmt.Sprintf(" i2cp.leaseSetEncType=%s ", c.leaseSetEncType)
}
return " i2cp.leaseSetEncType=4,0 "
}
func (c *Client) dontpublishlease() string {
if c.dontPublishLease {
return " i2cp.dontPublishLeaseSet=true "
@@ -478,6 +493,7 @@ func (c *Client) allOptions() string {
c.outbackups() +
c.dontpublishlease() +
c.encryptlease() +
c.leasesetenctype() +
c.reduceonidle() +
c.reduceidletime() +
c.reduceidlecount() +
@@ -498,6 +514,7 @@ func (c *Client) Print() string {
c.outbackups() +
c.dontpublishlease() +
c.encryptlease() +
c.leasesetenctype() +
c.reduceonidle() +
c.reduceidletime() +
c.reduceidlecount() +