summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorBluesaxorcist <joshua@operatorfoundation.org>2019-10-21 15:16:49 -0500
committerBluesaxorcist <joshua@operatorfoundation.org>2019-10-21 15:16:49 -0500
commit770bc14548a6a48ccbc8be0f0583122cf1dc6f6e (patch)
tree47da51866567a0674ff3acff194efe2d21044e26 /common
parent3eee4e2869a783c6f3a5baef279406d82c063f23 (diff)
added dialer to the modes and removed unneccessary code
Diffstat (limited to 'common')
-rw-r--r--common/options.go39
-rw-r--r--common/pt_extras/pt_extras.go13
2 files changed, 43 insertions, 9 deletions
diff --git a/common/options.go b/common/options.go
index 9c73616..f0ededf 100644
--- a/common/options.go
+++ b/common/options.go
@@ -3,7 +3,8 @@ package options
import (
"encoding/json"
"errors"
- "fmt"
+ "github.com/OperatorFoundation/shapeshifter-dispatcher/common/log"
+ interconv "github.com/mufti1/interconv/package"
"strings"
)
@@ -11,14 +12,46 @@ func ParseOptions(s string) (map[string]interface{}, error) {
var result map[string]interface{}
if len(s) == 0 {
- return nil, errors.New("Empty options")
+ return map[string]interface{}{}, nil
}
decoder := json.NewDecoder(strings.NewReader(s))
if err := decoder.Decode(&result); err != nil {
- fmt.Errorf("Error decoding JSON %q", err)
+ log.Errorf("Error decoding JSON %q", err)
return nil, err
}
return result, nil
}
+
+func ParseServerOptions(s string) (params map[string]map[string]interface{}, err error) {
+ result := make(map[string]map[string]interface{})
+
+ if len(s) == 0 {
+ return result, nil
+ }
+
+ decoder := json.NewDecoder(strings.NewReader(s))
+ if err := decoder.Decode(&result); err != nil {
+ log.Errorf("Error decoding JSON %q", err)
+ return nil, err
+ }
+
+ return result, nil
+}
+
+func CoerceToString(futureString interface{}) (*string, error) {
+ var result string
+
+ switch futureString.(type) {
+ case string:
+ var icerr error
+ result, icerr = interconv.ParseString(futureString)
+ if icerr != nil {
+ return nil, icerr
+ }
+ return &result, nil
+ default:
+ return nil, errors.New("unable to coerce empty interface to string")
+ }
+} \ No newline at end of file
diff --git a/common/pt_extras/pt_extras.go b/common/pt_extras/pt_extras.go
index a41f4f7..a04859e 100644
--- a/common/pt_extras/pt_extras.go
+++ b/common/pt_extras/pt_extras.go
@@ -33,6 +33,7 @@ import (
"github.com/OperatorFoundation/shapeshifter-dispatcher/common/log"
"github.com/OperatorFoundation/shapeshifter-dispatcher/transports"
"github.com/OperatorFoundation/shapeshifter-transports/transports/Optimizer"
+ "golang.org/x/net/proxy"
"net"
"net/url"
"os"
@@ -46,19 +47,19 @@ import (
func ptEnvError(msg string) error {
line := []byte(fmt.Sprintf("ENV-ERROR %s\n", msg))
- pt.Stdout.Write(line)
+ _, _ = pt.Stdout.Write(line)
return errors.New(msg)
}
func ptProxyError(msg string) error {
line := []byte(fmt.Sprintf("PROXY-ERROR %s\n", msg))
- pt.Stdout.Write(line)
+ _, _ = pt.Stdout.Write(line)
return errors.New(msg)
}
func PtProxyDone() {
line := []byte("PROXY DONE\n")
- pt.Stdout.Write(line)
+ _, _ = pt.Stdout.Write(line)
}
func PtIsClient() (bool, error) {
@@ -174,7 +175,7 @@ func PtShouldExitOnStdinClose() bool {
return os.Getenv("TOR_PT_EXIT_ON_STDIN_CLOSE") == "1"
}
-func ArgsToDialer(target string, name string, args map[string]interface{}) (Optimizer.Transport, error) {
+func ArgsToDialer(target string, name string, args map[string]interface{}, dialer proxy.Dialer) (Optimizer.Transport, error) {
switch name {
//case "obfs2":
// transport := obfs2.NewObfs2Transport()
@@ -182,7 +183,7 @@ func ArgsToDialer(target string, name string, args map[string]interface{}) (Opti
// return dialer, nil
case "obfs4":
//refactor starts here
- transport, err := transports.ParseArgsObfs4(args, target)
+ transport, err := transports.ParseArgsObfs4(args, target, dialer)
if err != nil {
log.Errorf("Could not parse options %s", err.Error())
return nil, err
@@ -198,7 +199,7 @@ func ArgsToDialer(target string, name string, args map[string]interface{}) (Opti
return transport, nil
}
case "Optimizer":
- transport, err := transports.ParseArgsOptimizer(args)
+ transport, err := transports.ParseArgsOptimizer(args, dialer)
if err != nil {
log.Errorf("Could not parse options %s", err.Error())
return nil, err