mirror of
https://github.com/e1732a364fed/v2ray_simple.git
synced 2025-10-07 01:32:57 +08:00

现在整个程序均通过了go test, main 也可以正常运行了。 Relay_UDP 函数添加流量计数; 发现之前 Relay函数的流量计数 在main.go里参数传反了,导致实际上计数的是上传而不是下载,已修复 对fullcone的情况做了特别考量。MsgConn的 Close函数在fullcone时不能随便被调用。 因此我添加了一个 CloseConnWithRaddr(raddr Addr) error 方法,以及 Fullcone() bool 方法 在utils包的init部分使用 rand 随机种子
59 lines
1.2 KiB
Go
59 lines
1.2 KiB
Go
// Package utils provides utilities that is used in all codes in verysimple
|
|
package utils
|
|
|
|
import (
|
|
"errors"
|
|
"flag"
|
|
"math/rand"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/BurntSushi/toml"
|
|
)
|
|
|
|
func init() {
|
|
//保证我们随机种子每次都不一样, 这样可以保证go test中使用随机端口时, 不同的test会使用不同的端口, 防止端口冲突
|
|
// 因为我们所有的包应该都引用了 utils包, 所以可以保证这一点.
|
|
rand.Seed(time.Now().Unix())
|
|
}
|
|
|
|
func IsFlagPassed(name string) bool {
|
|
found := false
|
|
flag.Visit(func(f *flag.Flag) {
|
|
if f.Name == name {
|
|
found = true
|
|
}
|
|
})
|
|
return found
|
|
}
|
|
|
|
//移除 = "" 和 = false 的项
|
|
func GetPurgedTomlStr(v any) (string, error) {
|
|
buf := GetBuf()
|
|
defer PutBuf(buf)
|
|
if err := toml.NewEncoder(buf).Encode(v); err != nil {
|
|
return "", err
|
|
}
|
|
lines := strings.Split(buf.String(), "\n")
|
|
var sb strings.Builder
|
|
|
|
for _, l := range lines {
|
|
if !strings.HasSuffix(l, ` = ""`) && !strings.HasSuffix(l, ` = false`) {
|
|
|
|
sb.WriteString(l)
|
|
sb.WriteByte('\n')
|
|
}
|
|
}
|
|
return sb.String(), nil
|
|
|
|
}
|
|
|
|
func WrapFuncForPromptUI(f func(string) bool) func(string) error {
|
|
return func(s string) error {
|
|
if f(s) {
|
|
return nil
|
|
}
|
|
return errors.New("not valid")
|
|
}
|
|
}
|