8 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
9 changed files with 75 additions and 11 deletions

1
.gitignore vendored
View File

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

View File

@@ -1,6 +1,6 @@
USER_GH=eyedeekay
VERSION=0.32.23
VERSION=0.32.25
packagename=gosam
echo:

View File

@@ -39,6 +39,7 @@ type Client struct {
dontPublishLease bool
encryptLease bool
leaseSetEncType string
reduceIdle bool
reduceIdleTime uint
@@ -139,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)
}

11
debian/changelog vendored
View File

@@ -1,7 +1,12 @@
golang-github-eyedeekay-gosam (0.32.23) bionic; urgency=medium
golang-github-eyedeekay-gosam (0.32.24) UNRELEASED; urgency=medium
* Get rid of the debug directory, just move it into the source
* Get rid of the old example, just use the one in the README
* 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

1
debian/files vendored
View File

@@ -1 +0,0 @@
golang-github-eyedeekay-gosam_0.3.2.1_source.buildinfo devel optional

View File

@@ -30,7 +30,7 @@ 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
@@ -44,13 +44,13 @@ func (c Client) dialCheck(addr string) (int32, bool) {
// 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]
}
addr, err := c.Lookup(addr)
if err != nil {
c.ml.Unlock()
return nil, err
}
@@ -58,22 +58,18 @@ func (c *Client) Dial(network, addr string) (net.Conn, error) {
if c.id, test = c.dialCheck(addr); test == true {
c.destination, err = c.CreateStreamSession(c.id, c.destination)
if err != nil {
c.ml.Unlock()
return nil, err
}
c.lastaddr = addr
}
c, err = c.NewClient()
if err != nil {
c.ml.Unlock()
return nil, err
}
err = c.StreamConnect(c.id, addr)
if err != nil {
c.ml.Unlock()
return nil, err
}
c.ml.Unlock()
return c.SamConn, nil
}

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

@@ -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() +