Skip to content

Commit

Permalink
fix: jsoniter should register fuzzyDecoder
Browse files Browse the repository at this point in the history
  • Loading branch information
mzz2017 committed Dec 7, 2021
1 parent e52a1bd commit 43605a3
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 8 deletions.
12 changes: 6 additions & 6 deletions cmd/cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,25 +34,25 @@ $ gg git clone https://github.com/mzz2017/gg.git`)
// validate command and get the fullPath from $PATH
fullPath, err := exec.LookPath(args[0])
if err != nil {
logrus.Fatal(err)
logrus.Fatal("exec.LookPath:", err)
}
// get dialer
dialer, err := GetDialer(log)
if err != nil {
logrus.Fatal(err)
logrus.Fatal("GetDialer:", err)
}

noUDP, err := cmd.Flags().GetBool("noudp")
if err != nil {
logrus.Fatal(err)
logrus.Fatal("GetBool(noudp):", err)
}
if !noUDP && !dialer.SupportUDP() {
log.Warn("Your proxy server does not support UDP, so we will not redirect UDP traffic.")
noUDP = true
}
preserveEnv, err := cmd.Flags().GetBool("preserve-env")
if err != nil {
logrus.Fatal(err)
logrus.Fatal("GetBool(preserve-env):", err)
}
var env []string
if preserveEnv {
Expand All @@ -67,11 +67,11 @@ $ gg git clone https://github.com/mzz2017/gg.git`)
log,
)
if err != nil {
logrus.Fatal(err)
logrus.Fatal("tracer.New:", err)
}
code, err := t.Wait()
if err != nil {
logrus.Fatal(err)
logrus.Fatal("tracer.Wait:", err)
}
os.Exit(code)
},
Expand Down
27 changes: 27 additions & 0 deletions common/jsoniter.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package common

import (
"encoding/json"
jsoniter "github.com/json-iterator/go"
"unsafe"
)

type FuzzyStringDecoder struct {
}

func (decoder *FuzzyStringDecoder) Decode(ptr unsafe.Pointer, iter *jsoniter.Iterator) {
valueType := iter.WhatIsNext()
switch valueType {
case jsoniter.NumberValue:
var number json.Number
iter.ReadVal(&number)
*((*string)(ptr)) = string(number)
case jsoniter.StringValue:
*((*string)(ptr)) = iter.ReadString()
case jsoniter.NilValue:
iter.Skip()
*((*string)(ptr)) = ""
default:
iter.ReportError("FuzzyStringDecoder", "not number or string")
}
}
4 changes: 2 additions & 2 deletions dialer/dialer.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,15 +45,15 @@ func (d *Dialer) Test(ctx context.Context) (bool, error) {
}
req, err := http.NewRequestWithContext(ctx, "GET", "https://fonts.gstatic.com/generate_204", nil)
if err != nil {
return false, fmt.Errorf("%w: %v", ConnectivityTestFailedErr, err)
return false, fmt.Errorf("%v: %w", ConnectivityTestFailedErr, err)
}
resp, err := cli.Do(req)
if err != nil {
var netErr net.Error
if errors.As(err, &netErr); netErr.Timeout() {
err = fmt.Errorf("timeout")
}
return false, fmt.Errorf("%w: %v", ConnectivityTestFailedErr, err)
return false, fmt.Errorf("%v: %w", ConnectivityTestFailedErr, err)
}
defer resp.Body.Close()
return resp.StatusCode == 204, nil
Expand Down
3 changes: 3 additions & 0 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,16 @@ import (
_ "github.com/e14914c0-6759-480d-be89-66b7b7676451/BitterJohn/protocol/trojanc"
_ "github.com/e14914c0-6759-480d-be89-66b7b7676451/BitterJohn/protocol/vless"
_ "github.com/e14914c0-6759-480d-be89-66b7b7676451/BitterJohn/protocol/vmess"
"github.com/json-iterator/go/extra"
"github.com/mzz2017/gg/cmd"
"net/http"
"os"
"time"
)

func main() {
extra.RegisterFuzzyDecoders()

http.DefaultClient.Timeout = 30 * time.Second
if err := cmd.Execute(); err != nil {
os.Exit(1)
Expand Down

0 comments on commit 43605a3

Please sign in to comment.