switch to using interfaces

This commit is contained in:
idk
2019-04-20 18:02:54 -04:00
parent ac5f5e3313
commit 5ede568549
9 changed files with 169 additions and 177 deletions

View File

@ -70,7 +70,11 @@ type SAMClientForwarder struct {
accessList []string
}
func (f SAMClientForwarder) print() []string {
func (f *SAMClientForwarder) ID() string {
return f.TunName
}
func (f *SAMClientForwarder) print() []string {
lsk, lspk, lspsk := f.leasesetsettings()
return []string{
//f.targetForPort443(),
@ -99,13 +103,13 @@ func (f SAMClientForwarder) print() []string {
}
}
func (f SAMClientForwarder) Cleanup() {
func (f *SAMClientForwarder) Cleanup() {
f.connectStream.Close()
f.publishConnection.Close()
f.samConn.Close()
}
func (f SAMClientForwarder) Print() string {
func (f *SAMClientForwarder) Print() string {
var r string
r += "name=" + f.TunName + "\n"
r += "type=" + f.Type + "\n"
@ -120,7 +124,7 @@ func (f SAMClientForwarder) Print() string {
return r
}
func (f SAMClientForwarder) Search(search string) string {
func (f *SAMClientForwarder) Search(search string) string {
terms := strings.Split(search, ",")
if search == "" {
return f.Print()
@ -133,7 +137,7 @@ func (f SAMClientForwarder) Search(search string) string {
return f.Print()
}
func (f SAMClientForwarder) accesslisttype() string {
func (f *SAMClientForwarder) accesslisttype() string {
if f.accessListType == "whitelist" {
return "i2cp.enableAccessList=true"
} else if f.accessListType == "blacklist" {
@ -144,7 +148,7 @@ func (f SAMClientForwarder) accesslisttype() string {
return ""
}
func (f SAMClientForwarder) accesslist() string {
func (f *SAMClientForwarder) accesslist() string {
if f.accessListType != "" && len(f.accessList) > 0 {
r := ""
for _, s := range f.accessList {
@ -155,7 +159,7 @@ func (f SAMClientForwarder) accesslist() string {
return ""
}
func (f SAMClientForwarder) leasesetsettings() (string, string, string) {
func (f *SAMClientForwarder) leasesetsettings() (string, string, string) {
var r, s, t string
if f.leaseSetKey != "" {
r = "i2cp.leaseSetKey=" + f.leaseSetKey
@ -170,30 +174,30 @@ func (f SAMClientForwarder) leasesetsettings() (string, string, string) {
}
// Target returns the host:port of the local service you want to forward to i2p
func (f SAMClientForwarder) Target() string {
func (f *SAMClientForwarder) Target() string {
return f.TargetHost + ":" + f.TargetPort
}
// Destination returns the destination of the i2p service you want to forward locally
func (f SAMClientForwarder) Destination() string {
func (f *SAMClientForwarder) Destination() string {
return f.addr.Base32()
}
func (f SAMClientForwarder) sam() string {
func (f *SAMClientForwarder) sam() string {
return f.SamHost + ":" + f.SamPort
}
//Base32 returns the base32 address of the local destination
func (f SAMClientForwarder) Base32() string {
func (f *SAMClientForwarder) Base32() string {
return f.SamKeys.Addr().Base32()
}
//Base64 returns the base64 address of the local destiantion
func (f SAMClientForwarder) Base64() string {
func (f *SAMClientForwarder) Base64() string {
return f.SamKeys.Addr().Base64()
}
func (f SAMClientForwarder) forward(conn net.Conn) {
func (f *SAMClientForwarder) forward(conn net.Conn) {
client, err := f.connectStream.DialI2P(f.addr)
if err != nil {
log.Fatalf("Dial failed: %v", err)
@ -212,7 +216,7 @@ func (f SAMClientForwarder) forward(conn net.Conn) {
}
//Serve starts the SAM connection and and forwards the local host:port to i2p
func (f SAMClientForwarder) Serve() error {
func (f *SAMClientForwarder) Serve() error {
if f.addr, err = f.samConn.Lookup(f.dest); err != nil {
return err
}
@ -233,7 +237,7 @@ func (f SAMClientForwarder) Serve() error {
}
//Close shuts the whole thing down.
func (f SAMClientForwarder) Close() error {
func (f *SAMClientForwarder) Close() error {
var err error
err = f.samConn.Close()
err = f.connectStream.Close()

View File

@ -81,21 +81,25 @@ type SAMForwarder struct {
var err error
func (f SAMForwarder) Cleanup() {
func (f *SAMForwarder) ID() string {
return f.TunName
}
func (f *SAMForwarder) Cleanup() {
f.publishStream.Close()
f.publishListen.Close()
f.publishConnection.Close()
f.samConn.Close()
}
/*func (f SAMForwarder) targetForPort443() string {
/*func (f *SAMForwarder) targetForPort443() string {
if f.TargetForPort443 != "" {
return "targetForPort.4443=" + f.TargetHost + ":" + f.TargetForPort443
}
return ""
}*/
func (f SAMForwarder) print() []string {
func (f *SAMForwarder) print() []string {
lsk, lspk, lspsk := f.leasesetsettings()
return []string{
//f.targetForPort443(),
@ -124,7 +128,7 @@ func (f SAMForwarder) print() []string {
}
}
func (f SAMForwarder) Print() string {
func (f *SAMForwarder) Print() string {
var r string
r += "name=" + f.TunName + "\n"
r += "type=" + f.Type + "\n"
@ -141,7 +145,7 @@ func (f SAMForwarder) Print() string {
return strings.Replace(r, "\n\n", "\n", -1)
}
func (f SAMForwarder) Search(search string) string {
func (f *SAMForwarder) Search(search string) string {
terms := strings.Split(search, ",")
if search == "" {
return f.Print()
@ -154,7 +158,7 @@ func (f SAMForwarder) Search(search string) string {
return f.Print()
}
func (f SAMForwarder) accesslisttype() string {
func (f *SAMForwarder) accesslisttype() string {
if f.accessListType == "whitelist" {
return "i2cp.enableAccessList=true"
} else if f.accessListType == "blacklist" {
@ -165,7 +169,7 @@ func (f SAMForwarder) accesslisttype() string {
return ""
}
func (f SAMForwarder) accesslist() string {
func (f *SAMForwarder) accesslist() string {
if f.accessListType != "" && len(f.accessList) > 0 {
r := ""
for _, s := range f.accessList {
@ -176,7 +180,7 @@ func (f SAMForwarder) accesslist() string {
return ""
}
func (f SAMForwarder) leasesetsettings() (string, string, string) {
func (f *SAMForwarder) leasesetsettings() (string, string, string) {
var r, s, t string
if f.leaseSetKey != "" {
r = "i2cp.leaseSetKey=" + f.leaseSetKey
@ -191,15 +195,15 @@ func (f SAMForwarder) leasesetsettings() (string, string, string) {
}
// Target returns the host:port of the local service you want to forward to i2p
func (f SAMForwarder) Target() string {
func (f *SAMForwarder) Target() string {
return f.TargetHost + ":" + f.TargetPort
}
func (f SAMForwarder) sam() string {
func (f *SAMForwarder) sam() string {
return f.SamHost + ":" + f.SamPort
}
func (f SAMForwarder) HTTPRequestBytes(conn *sam3.SAMConn) ([]byte, *http.Request, error) {
func (f *SAMForwarder) HTTPRequestBytes(conn *sam3.SAMConn) ([]byte, *http.Request, error) {
var request *http.Request
var retrequest []byte
var err error
@ -217,7 +221,7 @@ func (f SAMForwarder) HTTPRequestBytes(conn *sam3.SAMConn) ([]byte, *http.Reques
return retrequest, request, nil
}
func (f SAMForwarder) HTTPResponseBytes(conn net.Conn, req *http.Request) ([]byte, error) {
func (f *SAMForwarder) HTTPResponseBytes(conn net.Conn, req *http.Request) ([]byte, error) {
var response *http.Response
var retresponse []byte
var err error
@ -233,7 +237,7 @@ func (f SAMForwarder) HTTPResponseBytes(conn net.Conn, req *http.Request) ([]byt
return retresponse, nil
}
func (f SAMForwarder) clientUnlockAndClose(cli, conn bool, client net.Conn) {
func (f *SAMForwarder) clientUnlockAndClose(cli, conn bool, client net.Conn) {
if cli {
f.clientLock = cli
}
@ -247,7 +251,7 @@ func (f SAMForwarder) clientUnlockAndClose(cli, conn bool, client net.Conn) {
}
}
func (f SAMForwarder) connUnlockAndClose(cli, conn bool, connection *sam3.SAMConn) {
func (f *SAMForwarder) connUnlockAndClose(cli, conn bool, connection *sam3.SAMConn) {
if cli {
f.connClientLock = cli
}
@ -261,7 +265,7 @@ func (f SAMForwarder) connUnlockAndClose(cli, conn bool, connection *sam3.SAMCon
}
}
func (f SAMForwarder) forward(conn *sam3.SAMConn) { //(conn net.Conn) {
func (f *SAMForwarder) forward(conn *sam3.SAMConn) { //(conn net.Conn) {
var request *http.Request
var requestbytes []byte
var responsebytes []byte
@ -305,17 +309,17 @@ func (f SAMForwarder) forward(conn *sam3.SAMConn) { //(conn net.Conn) {
}
//Base32 returns the base32 address where the local service is being forwarded
func (f SAMForwarder) Base32() string {
func (f *SAMForwarder) Base32() string {
return f.SamKeys.Addr().Base32()
}
//Base64 returns the base64 address where the local service is being forwarded
func (f SAMForwarder) Base64() string {
func (f *SAMForwarder) Base64() string {
return f.SamKeys.Addr().Base64()
}
//Serve starts the SAM connection and and forwards the local host:port to i2p
func (f SAMForwarder) Serve() error {
func (f *SAMForwarder) Serve() error {
//lsk, lspk, lspsk := f.leasesetsettings()
if f.publishStream, err = f.samConn.NewStreamSession(f.TunName, f.SamKeys, f.print()); err != nil {
log.Println("Stream Creation error:", err.Error())
@ -340,7 +344,7 @@ func (f SAMForwarder) Serve() error {
}
//Close shuts the whole thing down.
func (f SAMForwarder) Close() error {
func (f *SAMForwarder) Close() error {
var err error
err = f.samConn.Close()
err = f.publishStream.Close()

View File

@ -1,11 +1,13 @@
package samtunnel
type SAMTunnel interface {
//GetType() string
Cleanup()
Print() string
Search(search string) string
Target() string
Destination() string
ID() string
//Destination() string
Base32() string
Base64() string
Serve() error

View File

@ -10,7 +10,7 @@ import (
"github.com/eyedeekay/sam-forwarder/config"
"github.com/eyedeekay/sam-forwarder/interface"
"github.com/eyedeekay/sam-forwarder/tcp"
"github.com/eyedeekay/sam-forwarder/udp"
//"github.com/eyedeekay/sam-forwarder/udp"
)
type SAMManager struct {
@ -28,13 +28,7 @@ type SAMManager struct {
WebHost string
WebPort string
tunnels []*samtunnel.SAMTunnel
///*
forwarders []*samforwarder.SAMForwarder
clientforwarders []*samforwarder.SAMClientForwarder
udpforwarders []*samforwarderudp.SAMSSUForwarder
udpclientforwarders []*samforwarderudp.SAMSSUClientForwarder
//*/
tunnels []samtunnel.SAMTunnel
}
func stringify(s []string) string {
@ -51,79 +45,61 @@ func stringify(s []string) string {
func (s *SAMManager) List(search ...string) *[]string {
var r []string
if search == nil {
for index, element := range s.forwarders {
r = append(r, fmt.Sprintf(" %v. %s", index, element.Print()))
}
for index, element := range s.clientforwarders {
r = append(r, fmt.Sprintf(" %v. %s", index, element.Print()))
}
for index, element := range s.udpforwarders {
r = append(r, fmt.Sprintf(" %v. %s", index, element.Print()))
}
for index, element := range s.udpclientforwarders {
for index, element := range s.tunnels {
r = append(r, fmt.Sprintf(" %v. %s", index, element.Print()))
}
return &r
} else if len(search) > 0 {
switch search[0] {
case "":
for index, element := range s.forwarders {
r = append(r, fmt.Sprintf(" %v. %s", index, element.Print()))
}
for index, element := range s.clientforwarders {
r = append(r, fmt.Sprintf(" %v. %s", index, element.Print()))
}
for index, element := range s.udpforwarders {
r = append(r, fmt.Sprintf(" %v. %s", index, element.Print()))
}
for index, element := range s.udpclientforwarders {
for index, element := range s.tunnels {
r = append(r, fmt.Sprintf(" %v. %s", index, element.Print()))
}
return &r
case "ntcpserver":
for index, element := range s.forwarders {
for index, element := range s.tunnels {
r = append(r, fmt.Sprintf(" %v. %s", index, element.Search(stringify(search))))
}
return &r
case "httpserver":
for index, element := range s.forwarders {
if element.Type == "http" {
for index, element := range s.tunnels {
if element.(*samforwarder.SAMForwarder).Type == "http" {
r = append(r, fmt.Sprintf(" %v. %s", index, element.Search(stringify(search))))
}
}
return &r
case "ntcpclient":
for index, element := range s.clientforwarders {
for index, element := range s.tunnels {
r = append(r, fmt.Sprintf(" %v. %s", index, element.Search(stringify(search))))
}
return &r
case "ssuserver":
for index, element := range s.udpforwarders {
for index, element := range s.tunnels {
r = append(r, fmt.Sprintf(" %v. %s", index, element.Search(stringify(search))))
}
return &r
case "ssuclient":
for index, element := range s.udpclientforwarders {
for index, element := range s.tunnels {
r = append(r, fmt.Sprintf(" %v. %s", index, element.Search(stringify(search))))
}
return &r
default:
for index, element := range s.forwarders {
for index, element := range s.tunnels {
if element.Search(stringify(search)) != "" {
r = append(r, fmt.Sprintf(" %v. %s", index, element.Search(stringify(search))))
}
}
for index, element := range s.clientforwarders {
for index, element := range s.tunnels {
if element.Search(stringify(search)) != "" {
r = append(r, fmt.Sprintf(" %v. %s", index, element.Search(stringify(search))))
}
}
for index, element := range s.udpforwarders {
for index, element := range s.tunnels {
if element.Search(stringify(search)) != "" {
r = append(r, fmt.Sprintf(" %v. %s", index, element.Search(stringify(search))))
}
}
for index, element := range s.udpclientforwarders {
for index, element := range s.tunnels {
if element.Search(stringify(search)) != "" {
r = append(r, fmt.Sprintf(" %v. %s", index, element.Search(stringify(search))))
}
@ -135,36 +111,15 @@ func (s *SAMManager) List(search ...string) *[]string {
}
func (s *SAMManager) Cleanup() {
for _, k := range s.forwarders {
k.Cleanup()
}
for _, k := range s.clientforwarders {
k.Cleanup()
}
for _, k := range s.udpforwarders {
k.Cleanup()
}
for _, k := range s.udpclientforwarders {
for _, k := range s.tunnels {
k.Cleanup()
}
}
func (s *SAMManager) Serve() bool {
log.Println("Starting tunnels")
for _, element := range s.forwarders {
log.Println("Starting NTCP service tunnel", element.TunName)
go element.Serve()
}
for _, element := range s.clientforwarders {
log.Println("Starting NTCP client tunnel", element.TunName)
go element.Serve()
}
for _, element := range s.udpforwarders {
log.Println("Starting SSU service tunnel", element.TunName)
go element.Serve()
}
for _, element := range s.udpclientforwarders {
log.Println("Starting SSU client tunnel", element.TunName)
for _, element := range s.tunnels {
log.Println("Starting service tunnel", element.ID())
go element.Serve()
}
for true {
@ -211,42 +166,42 @@ func NewSAMManagerFromOptions(opts ...func(*SAMManager) error) (*SAMManager, err
case "http":
if f, e := i2ptunconf.NewSAMForwarderFromConfig(s.FilePath, s.SamHost, s.SamPort, label); e == nil {
log.Println("found http under", label)
s.forwarders = append(s.forwarders, f)
s.tunnels = append(s.tunnels, f)
} else {
return nil, fmt.Errorf(e.Error())
}
case "server":
if f, e := i2ptunconf.NewSAMForwarderFromConfig(s.FilePath, s.SamHost, s.SamPort, label); e == nil {
log.Println("found server under", label)
s.forwarders = append(s.forwarders, f)
s.tunnels = append(s.tunnels, f)
} else {
return nil, fmt.Errorf(e.Error())
}
case "client":
if f, e := i2ptunconf.NewSAMClientForwarderFromConfig(s.FilePath, s.SamHost, s.SamPort, label); e == nil {
log.Println("found client under", label)
s.clientforwarders = append(s.clientforwarders, f)
s.tunnels = append(s.tunnels, f)
} else {
return nil, fmt.Errorf(e.Error())
}
case "udpserver":
if f, e := i2ptunconf.NewSAMSSUForwarderFromConfig(s.FilePath, s.SamHost, s.SamPort, label); e == nil {
log.Println("found udpserver under", label)
s.udpforwarders = append(s.udpforwarders, f)
s.tunnels = append(s.tunnels, f)
} else {
return nil, fmt.Errorf(e.Error())
}
case "udpclient":
if f, e := i2ptunconf.NewSAMSSUClientForwarderFromConfig(s.FilePath, s.SamHost, s.SamPort, label); e == nil {
log.Println("found udpclient under", label)
s.udpclientforwarders = append(s.udpclientforwarders, f)
s.tunnels = append(s.tunnels, f)
} else {
return nil, fmt.Errorf(e.Error())
}
default:
if f, e := i2ptunconf.NewSAMForwarderFromConfig(s.FilePath, s.SamHost, s.SamPort, label); e == nil {
log.Println("found server under", label)
s.forwarders = append(s.forwarders, f)
s.tunnels = append(s.tunnels, f)
} else {
return nil, fmt.Errorf(e.Error())
}
@ -263,42 +218,42 @@ func NewSAMManagerFromOptions(opts ...func(*SAMManager) error) (*SAMManager, err
case "http":
if f, e := i2ptunconf.NewSAMForwarderFromConfig(s.FilePath, s.SamHost, s.SamPort); e == nil {
log.Println("found default http")
s.forwarders = append(s.forwarders, f)
s.tunnels = append(s.tunnels, f)
} else {
return nil, fmt.Errorf(e.Error())
}
case "server":
if f, e := i2ptunconf.NewSAMForwarderFromConfig(s.FilePath, s.SamHost, s.SamPort); e == nil {
log.Println("found default server")
s.forwarders = append(s.forwarders, f)
s.tunnels = append(s.tunnels, f)
} else {
return nil, fmt.Errorf(e.Error())
}
case "client":
if f, e := i2ptunconf.NewSAMClientForwarderFromConfig(s.FilePath, s.SamHost, s.SamPort); e == nil {
log.Println("found default client")
s.clientforwarders = append(s.clientforwarders, f)
s.tunnels = append(s.tunnels, f)
} else {
return nil, fmt.Errorf(e.Error())
}
case "udpserver":
if f, e := i2ptunconf.NewSAMSSUForwarderFromConfig(s.FilePath, s.SamHost, s.SamPort); e == nil {
log.Println("found default udpserver")
s.udpforwarders = append(s.udpforwarders, f)
s.tunnels = append(s.tunnels, f)
} else {
return nil, fmt.Errorf(e.Error())
}
case "udpclient":
if f, e := i2ptunconf.NewSAMSSUClientForwarderFromConfig(s.FilePath, s.SamHost, s.SamPort); e == nil {
log.Println("found default udpclient")
s.udpclientforwarders = append(s.udpclientforwarders, f)
s.tunnels = append(s.tunnels, f)
} else {
return nil, fmt.Errorf(e.Error())
}
default:
if f, e := i2ptunconf.NewSAMClientForwarderFromConfig(s.FilePath, s.SamHost, s.SamPort); e == nil {
log.Println("found default client")
s.clientforwarders = append(s.clientforwarders, f)
s.tunnels = append(s.tunnels, f)
} else {
return nil, fmt.Errorf(e.Error())
}

View File

@ -9,8 +9,11 @@ import (
"time"
)
import ".."
import "../udp"
import (
"github.com/eyedeekay/sam-forwarder/interface"
"github.com/eyedeekay/sam-forwarder/tcp"
"github.com/eyedeekay/sam-forwarder/udp"
)
var (
port = "8100"
@ -24,10 +27,10 @@ var (
udpserverconn *net.UDPConn
directory = "./www"
err error
forwarder *samforwarder.SAMForwarder
forwarderclient *samforwarder.SAMClientForwarder
ssuforwarder *samforwarderudp.SAMSSUForwarder
ssuforwarderclient *samforwarderudp.SAMSSUClientForwarder
forwarder samtunnel.SAMTunnel
forwarderclient samtunnel.SAMTunnel
ssuforwarder samtunnel.SAMTunnel
ssuforwarderclient samtunnel.SAMTunnel
)
func serve() {

View File

@ -69,7 +69,11 @@ type SAMClientForwarder struct {
accessList []string
}
func (f SAMClientForwarder) print() []string {
func (f *SAMClientForwarder) ID() string {
return f.TunName
}
func (f *SAMClientForwarder) print() []string {
lsk, lspk, lspsk := f.leasesetsettings()
return []string{
//f.targetForPort443(),
@ -98,13 +102,13 @@ func (f SAMClientForwarder) print() []string {
}
}
func (f SAMClientForwarder) Cleanup() {
func (f *SAMClientForwarder) Cleanup() {
f.connectStream.Close()
f.publishConnection.Close()
f.samConn.Close()
}
func (f SAMClientForwarder) Print() string {
func (f *SAMClientForwarder) Print() string {
var r string
r += "name=" + f.TunName + "\n"
r += "type=" + f.Type + "\n"
@ -119,7 +123,7 @@ func (f SAMClientForwarder) Print() string {
return r
}
func (f SAMClientForwarder) Search(search string) string {
func (f *SAMClientForwarder) Search(search string) string {
terms := strings.Split(search, ",")
if search == "" {
return f.Print()
@ -132,7 +136,7 @@ func (f SAMClientForwarder) Search(search string) string {
return f.Print()
}
func (f SAMClientForwarder) accesslisttype() string {
func (f *SAMClientForwarder) accesslisttype() string {
if f.accessListType == "whitelist" {
return "i2cp.enableAccessList=true"
} else if f.accessListType == "blacklist" {
@ -143,7 +147,7 @@ func (f SAMClientForwarder) accesslisttype() string {
return ""
}
func (f SAMClientForwarder) accesslist() string {
func (f *SAMClientForwarder) accesslist() string {
if f.accessListType != "" && len(f.accessList) > 0 {
r := ""
for _, s := range f.accessList {
@ -154,7 +158,7 @@ func (f SAMClientForwarder) accesslist() string {
return ""
}
func (f SAMClientForwarder) leasesetsettings() (string, string, string) {
func (f *SAMClientForwarder) leasesetsettings() (string, string, string) {
var r, s, t string
if f.leaseSetKey != "" {
r = "i2cp.leaseSetKey=" + f.leaseSetKey
@ -169,30 +173,30 @@ func (f SAMClientForwarder) leasesetsettings() (string, string, string) {
}
// Target returns the host:port of the local service you want to forward to i2p
func (f SAMClientForwarder) Target() string {
func (f *SAMClientForwarder) Target() string {
return f.TargetHost + ":" + f.TargetPort
}
// Destination returns the destination of the i2p service you want to forward locally
func (f SAMClientForwarder) Destination() string {
func (f *SAMClientForwarder) Destination() string {
return f.addr.Base32()
}
func (f SAMClientForwarder) sam() string {
func (f *SAMClientForwarder) sam() string {
return f.SamHost + ":" + f.SamPort
}
//Base32 returns the base32 address of the local destination
func (f SAMClientForwarder) Base32() string {
func (f *SAMClientForwarder) Base32() string {
return f.SamKeys.Addr().Base32()
}
//Base64 returns the base64 address of the local destiantion
func (f SAMClientForwarder) Base64() string {
func (f *SAMClientForwarder) Base64() string {
return f.SamKeys.Addr().Base64()
}
func (f SAMClientForwarder) forward(conn net.Conn) {
func (f *SAMClientForwarder) forward(conn net.Conn) {
client, err := f.connectStream.DialI2P(f.addr)
if err != nil {
log.Fatalf("Dial failed: %v", err)
@ -211,7 +215,7 @@ func (f SAMClientForwarder) forward(conn net.Conn) {
}
//Serve starts the SAM connection and and forwards the local host:port to i2p
func (f SAMClientForwarder) Serve() error {
func (f *SAMClientForwarder) Serve() error {
if f.addr, err = f.samConn.Lookup(f.dest); err != nil {
return err
}
@ -232,7 +236,7 @@ func (f SAMClientForwarder) Serve() error {
}
//Close shuts the whole thing down.
func (f SAMClientForwarder) Close() error {
func (f *SAMClientForwarder) Close() error {
var err error
err = f.samConn.Close()
err = f.connectStream.Close()

View File

@ -80,21 +80,25 @@ type SAMForwarder struct {
var err error
func (f SAMForwarder) Cleanup() {
func (f *SAMForwarder) ID() string {
return f.TunName
}
func (f *SAMForwarder) Cleanup() {
f.publishStream.Close()
f.publishListen.Close()
f.publishConnection.Close()
f.samConn.Close()
}
/*func (f SAMForwarder) targetForPort443() string {
/*func (f *SAMForwarder) targetForPort443() string {
if f.TargetForPort443 != "" {
return "targetForPort.4443=" + f.TargetHost + ":" + f.TargetForPort443
}
return ""
}*/
func (f SAMForwarder) print() []string {
func (f *SAMForwarder) print() []string {
lsk, lspk, lspsk := f.leasesetsettings()
return []string{
//f.targetForPort443(),
@ -123,7 +127,7 @@ func (f SAMForwarder) print() []string {
}
}
func (f SAMForwarder) Print() string {
func (f *SAMForwarder) Print() string {
var r string
r += "name=" + f.TunName + "\n"
r += "type=" + f.Type + "\n"
@ -140,7 +144,7 @@ func (f SAMForwarder) Print() string {
return strings.Replace(r, "\n\n", "\n", -1)
}
func (f SAMForwarder) Search(search string) string {
func (f *SAMForwarder) Search(search string) string {
terms := strings.Split(search, ",")
if search == "" {
return f.Print()
@ -153,7 +157,7 @@ func (f SAMForwarder) Search(search string) string {
return f.Print()
}
func (f SAMForwarder) accesslisttype() string {
func (f *SAMForwarder) accesslisttype() string {
if f.accessListType == "whitelist" {
return "i2cp.enableAccessList=true"
} else if f.accessListType == "blacklist" {
@ -164,7 +168,7 @@ func (f SAMForwarder) accesslisttype() string {
return ""
}
func (f SAMForwarder) accesslist() string {
func (f *SAMForwarder) accesslist() string {
if f.accessListType != "" && len(f.accessList) > 0 {
r := ""
for _, s := range f.accessList {
@ -175,7 +179,7 @@ func (f SAMForwarder) accesslist() string {
return ""
}
func (f SAMForwarder) leasesetsettings() (string, string, string) {
func (f *SAMForwarder) leasesetsettings() (string, string, string) {
var r, s, t string
if f.leaseSetKey != "" {
r = "i2cp.leaseSetKey=" + f.leaseSetKey
@ -190,15 +194,15 @@ func (f SAMForwarder) leasesetsettings() (string, string, string) {
}
// Target returns the host:port of the local service you want to forward to i2p
func (f SAMForwarder) Target() string {
func (f *SAMForwarder) Target() string {
return f.TargetHost + ":" + f.TargetPort
}
func (f SAMForwarder) sam() string {
func (f *SAMForwarder) sam() string {
return f.SamHost + ":" + f.SamPort
}
func (f SAMForwarder) HTTPRequestBytes(conn *sam3.SAMConn) ([]byte, *http.Request, error) {
func (f *SAMForwarder) HTTPRequestBytes(conn *sam3.SAMConn) ([]byte, *http.Request, error) {
var request *http.Request
var retrequest []byte
var err error
@ -216,7 +220,7 @@ func (f SAMForwarder) HTTPRequestBytes(conn *sam3.SAMConn) ([]byte, *http.Reques
return retrequest, request, nil
}
func (f SAMForwarder) HTTPResponseBytes(conn net.Conn, req *http.Request) ([]byte, error) {
func (f *SAMForwarder) HTTPResponseBytes(conn net.Conn, req *http.Request) ([]byte, error) {
var response *http.Response
var retresponse []byte
var err error
@ -232,7 +236,7 @@ func (f SAMForwarder) HTTPResponseBytes(conn net.Conn, req *http.Request) ([]byt
return retresponse, nil
}
func (f SAMForwarder) clientUnlockAndClose(cli, conn bool, client net.Conn) {
func (f *SAMForwarder) clientUnlockAndClose(cli, conn bool, client net.Conn) {
if cli {
f.clientLock = cli
}
@ -246,7 +250,7 @@ func (f SAMForwarder) clientUnlockAndClose(cli, conn bool, client net.Conn) {
}
}
func (f SAMForwarder) connUnlockAndClose(cli, conn bool, connection *sam3.SAMConn) {
func (f *SAMForwarder) connUnlockAndClose(cli, conn bool, connection *sam3.SAMConn) {
if cli {
f.connClientLock = cli
}
@ -260,7 +264,7 @@ func (f SAMForwarder) connUnlockAndClose(cli, conn bool, connection *sam3.SAMCon
}
}
func (f SAMForwarder) forward(conn *sam3.SAMConn) { //(conn net.Conn) {
func (f *SAMForwarder) forward(conn *sam3.SAMConn) { //(conn net.Conn) {
var request *http.Request
var requestbytes []byte
var responsebytes []byte
@ -304,17 +308,17 @@ func (f SAMForwarder) forward(conn *sam3.SAMConn) { //(conn net.Conn) {
}
//Base32 returns the base32 address where the local service is being forwarded
func (f SAMForwarder) Base32() string {
func (f *SAMForwarder) Base32() string {
return f.SamKeys.Addr().Base32()
}
//Base64 returns the base64 address where the local service is being forwarded
func (f SAMForwarder) Base64() string {
func (f *SAMForwarder) Base64() string {
return f.SamKeys.Addr().Base64()
}
//Serve starts the SAM connection and and forwards the local host:port to i2p
func (f SAMForwarder) Serve() error {
func (f *SAMForwarder) Serve() error {
//lsk, lspk, lspsk := f.leasesetsettings()
if f.publishStream, err = f.samConn.NewStreamSession(f.TunName, f.SamKeys, f.print()); err != nil {
log.Println("Stream Creation error:", err.Error())
@ -339,7 +343,7 @@ func (f SAMForwarder) Serve() error {
}
//Close shuts the whole thing down.
func (f SAMForwarder) Close() error {
func (f *SAMForwarder) Close() error {
var err error
err = f.samConn.Close()
err = f.publishStream.Close()

View File

@ -70,13 +70,21 @@ type SAMSSUClientForwarder struct {
accessList []string
}
func (f SAMSSUClientForwarder) Cleanup() {
func (f *SAMSSUClientForwarder) ID() string {
return f.TunName
}
func (f *SAMSSUClientForwarder) Cleanup() {
f.publishConnection.Close()
f.connectStream.Close()
f.samConn.Close()
}
func (f SAMSSUClientForwarder) print() []string {
func (f *SAMSSUClientForwarder) Close() error {
return nil
}
func (f *SAMSSUClientForwarder) print() []string {
lsk, lspk, lspsk := f.leasesetsettings()
return []string{
//f.targetForPort443(),
@ -105,7 +113,7 @@ func (f SAMSSUClientForwarder) print() []string {
}
}
func (f SAMSSUClientForwarder) Print() string {
func (f *SAMSSUClientForwarder) Print() string {
var r string
r += "name=" + f.TunName + "\n"
r += "type=" + f.Type + "\n"
@ -119,7 +127,7 @@ func (f SAMSSUClientForwarder) Print() string {
return strings.Replace(r, "\n\n", "\n", -1)
}
func (f SAMSSUClientForwarder) Search(search string) string {
func (f *SAMSSUClientForwarder) Search(search string) string {
terms := strings.Split(search, ",")
if search == "" {
return f.Print()
@ -132,7 +140,7 @@ func (f SAMSSUClientForwarder) Search(search string) string {
return f.Print()
}
func (f SAMSSUClientForwarder) accesslisttype() string {
func (f *SAMSSUClientForwarder) accesslisttype() string {
if f.accessListType == "whitelist" {
return "i2cp.enableAccessList=true"
} else if f.accessListType == "blacklist" {
@ -143,7 +151,7 @@ func (f SAMSSUClientForwarder) accesslisttype() string {
return ""
}
func (f SAMSSUClientForwarder) accesslist() string {
func (f *SAMSSUClientForwarder) accesslist() string {
if f.accessListType != "" && len(f.accessList) > 0 {
r := ""
for _, s := range f.accessList {
@ -154,7 +162,7 @@ func (f SAMSSUClientForwarder) accesslist() string {
return ""
}
func (f SAMSSUClientForwarder) leasesetsettings() (string, string, string) {
func (f *SAMSSUClientForwarder) leasesetsettings() (string, string, string) {
var r, s, t string
if f.leaseSetKey != "" {
r = "i2cp.leaseSetKey=" + f.leaseSetKey
@ -169,30 +177,30 @@ func (f SAMSSUClientForwarder) leasesetsettings() (string, string, string) {
}
// Destination returns the destination of the i2p service you want to forward locally
func (f SAMSSUClientForwarder) Destination() string {
func (f *SAMSSUClientForwarder) Destination() string {
return f.addr.Base32()
}
// Target returns the host:port of the local service you want to forward to i2p
func (f SAMSSUClientForwarder) Target() string {
func (f *SAMSSUClientForwarder) Target() string {
return f.TargetHost + ":" + f.TargetPort
}
func (f SAMSSUClientForwarder) sam() string {
func (f *SAMSSUClientForwarder) sam() string {
return f.SamHost + ":" + f.SamPort
}
//Base32 returns the base32 address of the local destination
func (f SAMSSUClientForwarder) Base32() string {
func (f *SAMSSUClientForwarder) Base32() string {
return f.SamKeys.Addr().Base32()
}
//Base64 returns the base64 address of the local destination
func (f SAMSSUClientForwarder) Base64() string {
func (f *SAMSSUClientForwarder) Base64() string {
return f.SamKeys.Addr().Base64()
}
func (f SAMSSUClientForwarder) forward(conn net.PacketConn) {
func (f *SAMSSUClientForwarder) forward(conn net.PacketConn) {
var err error
//p, _ := strconv.Atoi(f.TargetPort)
sp, _ := strconv.Atoi(f.SamPort)
@ -227,7 +235,7 @@ func (f SAMSSUClientForwarder) forward(conn net.PacketConn) {
}
//Serve starts the SAM connection and and forwards the local host:port to i2p
func (f SAMSSUClientForwarder) Serve() error {
func (f *SAMSSUClientForwarder) Serve() error {
if f.addr, err = f.samConn.Lookup(f.dest); err != nil {
return err
}

View File

@ -70,13 +70,21 @@ type SAMSSUForwarder struct {
var err error
func (f SAMSSUForwarder) Cleanup() {
func (f *SAMSSUForwarder) ID() string {
return f.TunName
}
func (f *SAMSSUForwarder) Cleanup() {
f.publishConnection.Close()
f.clientConnection.Close()
f.samConn.Close()
}
func (f SAMSSUForwarder) print() []string {
func (f *SAMSSUForwarder) Close() error {
return nil
}
func (f *SAMSSUForwarder) print() []string {
lsk, lspk, lspsk := f.leasesetsettings()
return []string{
//f.targetForPort443(),
@ -105,7 +113,7 @@ func (f SAMSSUForwarder) print() []string {
}
}
func (f SAMSSUForwarder) Print() string {
func (f *SAMSSUForwarder) Print() string {
var r string
r += "name=" + f.TunName + "\n"
r += "type=" + f.Type + "\n"
@ -118,7 +126,7 @@ func (f SAMSSUForwarder) Print() string {
return strings.Replace(r, "\n\n", "\n", -1)
}
func (f SAMSSUForwarder) Search(search string) string {
func (f *SAMSSUForwarder) Search(search string) string {
terms := strings.Split(search, ",")
if search == "" {
return f.Print()
@ -131,7 +139,7 @@ func (f SAMSSUForwarder) Search(search string) string {
return f.Print()
}
func (f SAMSSUForwarder) accesslisttype() string {
func (f *SAMSSUForwarder) accesslisttype() string {
if f.accessListType == "whitelist" {
return "i2cp.enableAccessList=true"
} else if f.accessListType == "blacklist" {
@ -142,7 +150,7 @@ func (f SAMSSUForwarder) accesslisttype() string {
return ""
}
func (f SAMSSUForwarder) accesslist() string {
func (f *SAMSSUForwarder) accesslist() string {
if f.accessListType != "" && len(f.accessList) > 0 {
r := ""
for _, s := range f.accessList {
@ -153,7 +161,7 @@ func (f SAMSSUForwarder) accesslist() string {
return ""
}
func (f SAMSSUForwarder) leasesetsettings() (string, string, string) {
func (f *SAMSSUForwarder) leasesetsettings() (string, string, string) {
var r, s, t string
if f.leaseSetKey != "" {
r = "i2cp.leaseSetKey=" + f.leaseSetKey
@ -168,16 +176,16 @@ func (f SAMSSUForwarder) leasesetsettings() (string, string, string) {
}
// Target returns the host:port of the local service you want to forward to i2p
func (f SAMSSUForwarder) Target() string {
func (f *SAMSSUForwarder) Target() string {
return f.TargetHost + ":" + f.TargetPort
}
func (f SAMSSUForwarder) sam() string {
func (f *SAMSSUForwarder) sam() string {
return f.SamHost + ":" + f.SamPort
}
//func (f SAMSSUForwarder) forward(conn net.Conn) {
func (f SAMSSUForwarder) forward() {
//func (f *SAMSSUForwarder) forward(conn net.Conn) {
func (f *SAMSSUForwarder) forward() {
go func() {
defer f.clientConnection.Close()
defer f.publishConnection.Close()
@ -203,17 +211,17 @@ func (f SAMSSUForwarder) forward() {
}
//Base32 returns the base32 address where the local service is being forwarded
func (f SAMSSUForwarder) Base32() string {
func (f *SAMSSUForwarder) Base32() string {
return f.SamKeys.Addr().Base32()
}
//Base64 returns the base64 address where the local service is being forwarded
func (f SAMSSUForwarder) Base64() string {
func (f *SAMSSUForwarder) Base64() string {
return f.SamKeys.Addr().Base64()
}
//Serve starts the SAM connection and and forwards the local host:port to i2p
func (f SAMSSUForwarder) Serve() error {
func (f *SAMSSUForwarder) Serve() error {
var err error
sp, _ := strconv.Atoi(f.SamPort)