Documentation ¶
Overview ¶
Package utils provides general utilities.
Index ¶
- Constants
- Variables
- func AllSubSets[T comparable](set []T) (subsets [][]T)
- func AllSubSets_improve1[T comparable](set []T) (subsets [][]T)
- func AnyToBool(a any) (v bool, ok bool)
- func AnyToFloat64(a any) (float64, bool)
- func AnyToInt64(a any) (int64, bool)
- func AnyToUInt16Array(a any) ([]uint16, bool)
- func ArrayToPtrArray[T any](a []T) (r []*T)
- func BuffersLen(bs [][]byte) (allnum int)
- func BuffersWriteTo(bs [][]byte, writeConn io.Writer) (num int64, err2 error)
- func CanLogDebug(msg string) *zapcore.CheckedEntry
- func CanLogErr(msg string) *zapcore.CheckedEntry
- func CanLogFatal(msg string) *zapcore.CheckedEntry
- func CanLogInfo(msg string) *zapcore.CheckedEntry
- func CanLogLevel(l int, msg string) *zapcore.CheckedEntry
- func CanLogWarn(msg string) *zapcore.CheckedEntry
- func CloneSlice[T any](a []T) (r []T)
- func CommonSplit(s, e1, e2 string) (ok bool, v1, v2 string)
- func CommonSplit_regex(s, e1, e2 string) (ok bool, v1, v2 string)
- func CommonSplit_strings(s, e1, e2 string) (ok bool, v1, v2 string)
- func Debug(msg string)
- func DirExist(dirname string) bool
- func DownloadAndUnzip(fname, downloadLink, dst string) (ok bool)
- func Error(msg string)
- func ExecCmd(cmdStr string) (err error)
- func ExecCmdList(strs []string) (err error)
- func ExecCmdMultilineList(cmdStr string) (err error)
- func Fatal(msg string)
- func FileExist(path string) bool
- func FmtPrintRunCmd(name string, arg ...string) (out string, err error)
- func GenerateRandomChar() byte
- func GenerateRandomString() string
- func GenerateUUIDStr() string
- func GetBuf() *bytes.Buffer
- func GetBytes(size int) []byte
- func GetFilePath(fileName string) string
- func GetGivenFlags() (m map[string]*flag.Flag)
- func GetMTU() []byte
- func GetMapSortedKeySlice[K constraints.Ordered, V any](theMap map[K]V) []K
- func GetPacket() []byte
- func GetPurgedTomlStr(v any) (string, error)
- func GetRandomWord() (result string)
- func GetSystemKillChan() <-chan os.Signal
- func GivenFlagKVs() (r map[string]string)
- func Info(msg string)
- func InitLog(firstMsg string)
- func IsFilePath(s string) error
- func IsFlagGiven(name string) bool
- func IsTimezoneCN() bool
- func LogExecCmdList(strs []string) (err error)
- func LogLevelStr(lvl int) string
- func LogLevelStrList() (sl []string)
- func LogRunCmd(name string, arg ...string) (out string, err error)
- func MergeBuffers(bs [][]byte) (result []byte, duplicate bool)
- func MoveItem[T any](arr *[]T, fromIndex, toIndex int)
- func OpenFile(name string) error
- func Openbrowser(url string) error
- func ParseFlags()
- func PrintBuffers(bs [][]byte)
- func PrintStr(str string)
- func PutBuf(buf *bytes.Buffer)
- func PutBytes(bs []byte)
- func PutPacket(bs []byte)
- func QueryNegative(query url.Values, key string) bool
- func QueryPositive(query url.Values, key string) bool
- func RecoverBuffers(bs [][]byte, oldLen, old_sub_len int) [][]byte
- func ReplaceBytesSynonyms(bs []byte, synonyms [][2][]byte) (result []byte)
- func ReplaceStringsSynonyms(bs string, synonyms [][2]string) (result string)
- func ShrinkBuffers(bs [][]byte, all_len int, SingleBufLen int) int
- func SimpleDownloadFile(fname, downloadLink string) (ok bool)
- func SortByOrder[T any](arr []T, order []int) (result []T, neworder []int, erri int)
- func Splice[T any](source *[]T, start int, deleteCount int, items ...T) (removed []T)
- func StandardizeSpaces(s string) string
- func StrNegative(value string) bool
- func StrPositive(value string) bool
- func StrToUUID_slice(s string) []byte
- func TrimSlice[T any](a []T, deleteIndex int) []T
- func TryDownloadWithProxyUrl(proxyUrl, downloadLink string) (thehttpClient *http.Client, resp *http.Response, err error)
- func UUIDToStr(u []byte) string
- func Warn(msg string)
- func WrapFuncForPromptUI(f func(string) bool) func(string) error
- type ByteReader
- type ByteWriter
- type ChanCloser
- type DownloadPrintCounter
- type DummyReadCloser
- type DummyWriteCloser
- type ErrBuffer
- type ErrInErr
- type Errs
- type ErrsItem
- type Heap
- type InvalidDataErr
- type MultiCloser
- type MultiReader
- type MultiUserMap
- func (mu *MultiUserMap) AddUser(u User) error
- func (mu *MultiUserMap) AddUser_nolock(u User)
- func (mu *MultiUserMap) AuthBytesLen() int
- func (mu *MultiUserMap) AuthUserByBytes(bs []byte) User
- func (mu *MultiUserMap) AuthUserByStr(str string) User
- func (mu *MultiUserMap) DelUser(u User) error
- func (mu *MultiUserMap) HasUserByBytes(bs []byte) User
- func (mu *MultiUserMap) HasUserByStr(str string) bool
- func (mu *MultiUserMap) IDBytesLen() int
- func (mu *MultiUserMap) LoadUsers(us []User)
- func (mu *MultiUserMap) SetUseUUIDStr_asKey()
- type MultiWriter
- type NilCloserWrapper
- type NumErr
- type NumStrErr
- type RW
- type ReadSwitcher
- type ReadWrapper
- type SimpleCloser
- type SystemReadver
- type UUID
- type User
- type UserAuthenticator
- type UserBus
- type UserConf
- type UserContainer
- type UserPass
- func (ph *UserPass) AuthBytes() []byte
- func (ph *UserPass) AuthStr() string
- func (ph *UserPass) AuthUserByBytes(bs []byte) User
- func (ph *UserPass) AuthUserByStr(idStr string) User
- func (ph *UserPass) GetUserByPass(user, pass []byte) User
- func (ph *UserPass) IdentityBytes() []byte
- func (ph *UserPass) IdentityStr() string
- func (ph *UserPass) InitWithStr(str string) (ok bool)
- func (ph *UserPass) InitWithUrl(u *url.URL) bool
- func (ph *UserPass) Valid() bool
- type UserSet
- type UserWithPass
- type V2rayUser
- type WriteSwitcher
- type WriteWrapper
Constants ¶
const ( Log_debug = iota Log_info Log_warning Log_error //error一般用于输出 some 连接/客户端协议 错误, 但不致命 Log_dpanic Log_panic Log_fatal DefaultLL = Log_info )
const ( ProjectName = "v2ray_simple" ProjectPath = ProjectName + "/" )
const ( //即 Maximum transmission unit, 参照的是 Ethernet v2 的MTU; MTU int = 1500 //本作设定的最大包 长度大小,64k MaxPacketLen = 64 * 1024 )
const ExampleUUID = "a684455c-b14f-11ea-bf0d-42010aaa0003"
const SystemAutoUseAes = runtime.GOARCH == "amd64" || runtime.GOARCH == "s390x" || runtime.GOARCH == "arm64"
有些系统对aes支持不好,有些支持好。SystemAutoUseAes若为true,则说明支持很好,使用aes作为加密算法速度最佳。
const UUID_BytesLen int = 16
Variables ¶
var ( ErrUnImplemented = errors.New("not implemented") ErrNilParameter = errors.New("nil parameter") ErrNilOrWrongParameter = errors.New("nil or wrong parameter") ErrWrongParameter = errors.New("wrong parameter") ErrInvalidData = errors.New("invalid data") ErrNoMatch = errors.New("no matched") ErrInvalidNumber = errors.New("invalid number") ErrShortRead = errors.New("short read") ErrHandled = errors.New("handled") ErrFailed = errors.New("failed") //最无脑的Err, 在能描述清楚错误时不要使用 ErrFailed )
var ( LogLevel int ZapLogger *zap.Logger //日志输出文件名称 LogOutFileName string )
LogLevel 值越小越唠叨, 废话越多,值越大打印的越少,见log_开头的常量;
我们的loglevel具体值 与 zap的 loglevel+1 的含义等价
var (
ExtraSearchPath = "" //若给出,则会优先在此路径里查找
)
var GivenFlags map[string]*flag.Flag
Functions ¶
func AllSubSets ¶
func AllSubSets[T comparable](set []T) (subsets [][]T)
func AllSubSets edited from https://github.com/mxschmitt/golang-combinations with MIT License All returns all combinations for a given T array. This is essentially a powerset of the given set except that the empty set is disregarded.
func AllSubSets_improve1 ¶
func AllSubSets_improve1[T comparable](set []T) (subsets [][]T)
AllSubSets 测速有点慢, 我改进一下内存分配,可加速一倍多
func AnyToFloat64 ¶ added in v1.2.4
func AnyToInt64 ¶ added in v1.2.4
func AnyToUInt16Array ¶ added in v1.2.5
func ArrayToPtrArray ¶ added in v1.2.5
func ArrayToPtrArray[T any](a []T) (r []*T)
func CanLogDebug ¶
func CanLogDebug(msg string) *zapcore.CheckedEntry
func CanLogErr ¶
func CanLogErr(msg string) *zapcore.CheckedEntry
func CanLogFatal ¶
func CanLogFatal(msg string) *zapcore.CheckedEntry
func CanLogInfo ¶
func CanLogInfo(msg string) *zapcore.CheckedEntry
func CanLogLevel ¶
func CanLogLevel(l int, msg string) *zapcore.CheckedEntry
assume ZapLogger is not nil.
func CanLogWarn ¶
func CanLogWarn(msg string) *zapcore.CheckedEntry
func CloneSlice ¶
func CloneSlice[T any](a []T) (r []T)
func CommonSplit ¶ added in v1.2.4
本作的惯例, 经常使用如下字符串作为配置: s = "e1:v1\ne2:v2",
func CommonSplit_regex ¶ added in v1.2.4
func CommonSplit_strings ¶ added in v1.2.4
func DownloadAndUnzip ¶ added in v1.2.5
func ExecCmdList ¶ added in v1.2.5
func ExecCmdMultilineList ¶ added in v1.2.5
func FmtPrintRunCmd ¶ added in v1.2.5
Stdout, Stderr to fmt
func GenerateUUIDStr ¶
func GenerateUUIDStr() string
func GetFilePath ¶
Function that search the specified file in the following directories:
-1. If starts with '/', or is an empty string, return directly 0. If starts with string similar to "C:/", "D:\\", or "e:/", return directly 1. Search in ExtraSearchPath 2. Same folder with exec file 3. Same folder of the source file, 一种可能 是 用于 go test等情况 4. Same folder of working folder
func GetGivenFlags ¶ added in v1.2.0
flag包有个奇葩的缺点, 没法一下子获取所有的已经配置的参数, 只能遍历; 如果我们有大量的参数需要判断是否给出过, 那么不如先提取到到map里。
实际上flag包的底层也是用的一个map, 但是它是私有的, 而且我们也不宜用unsafe暴露出来.
func GetMapSortedKeySlice ¶
func GetMapSortedKeySlice[K constraints.Ordered, V any](theMap map[K]V) []K
func GetPacket ¶
func GetPacket() []byte
建议在 Read net.Conn 时, 使用 GetPacket函数 获取到足够大的 []byte(MaxBufLen)
func GetPurgedTomlStr ¶
从any生成toml字符串, 移除 = "", = 0 和 = false 的项
func GetRandomWord ¶
func GetRandomWord() (result string)
func GetSystemKillChan ¶ added in v1.2.5
func GivenFlagKVs ¶ added in v1.2.1
return kv pairs for GivenFlags
func IsFlagGiven ¶
func IsTimezoneCN ¶
func IsTimezoneCN() bool
func LogExecCmdList ¶ added in v1.2.5
func LogLevelStr ¶
func LogLevelStrList ¶
func LogLevelStrList() (sl []string)
func MergeBuffers ¶
如果 分配了新内存来 包含数据,则 duplicate ==true, 此时可以用PutPacket函数放回;
如果利用了原有的第一个[]byte, 则 duplicate==false。
如果 duplicate==false, 不要 使用 PutPacket等方法放入Pool;
因为 在更上级的调用会试图去把 整个bs 放入pool;
func Openbrowser ¶ added in v1.2.5
func ParseFlags ¶ added in v1.2.0
func ParseFlags()
call flag.Parse() and assign given flags to GivenFlags.
func PrintBuffers ¶
func PrintBuffers(bs [][]byte)
func PrintStr ¶ added in v1.2.1
func PrintStr(str string)
本来可以直接用 fmt.Print, 但是那个Print多了一次到any的装箱,所以如果只 打印一个字符串的话,不妨直接调用 os.Stdout.WriteString(str)。
func RecoverBuffers ¶
通过reslice 方式将 bs的长度以及 子 []byte 的长度 恢复至指定长度
func ReplaceBytesSynonyms ¶ added in v1.2.5
the first part of synonyms is the one to be replaced, the last part of synonyms is the persistent one.
func ReplaceStringsSynonyms ¶ added in v1.2.5
same as ReplaceBytesSynonyms
func ShrinkBuffers ¶
削减buffer内部的子[]byte 到合适的长度;返回削减后 bs应有的长度.
func SimpleDownloadFile ¶ added in v1.2.5
func SortByOrder ¶ added in v1.2.4
根据传入的order来对arr重新排序;order必须长度与arr一致,而且包含所有索引 若erri>0 则证明传入的order内容有误。1表示过长,2表示过短,3表示内容出错. 在 erri>0 时,本函数会试图修复order,生成一个neworder并用该 neworder 对arr排序。
func Splice ¶ added in v1.2.4
items to insert at start, delete deleteCount items at start See https://github.com/zzwx/splice/blob/main/splice.go
func StandardizeSpaces ¶ added in v1.2.5
func StrNegative ¶ added in v1.2.4
func StrPositive ¶ added in v1.2.4
func StrToUUID_slice ¶ added in v1.2.2
func TryDownloadWithProxyUrl ¶ added in v1.2.3
func TryDownloadWithProxyUrl(proxyUrl, downloadLink string) (thehttpClient *http.Client, resp *http.Response, err error)
TryDownloadWithProxyUrl try to download from a link with the given proxy url. thehttpClient is the client created, could be http.DefaultClient or a newly created one.
If proxyUrl is empty, the function will call http.DefaultClient.Get, else it will create with a client with a transport with proxy set to proxyUrl. If err==nil, then thehttpClient!=nil .
Types ¶
type ByteReader ¶
bufio.Reader and bytes.Buffer implemented ByteReader
type ByteWriter ¶
bytes.Buffer implemented ByteWriter
type ChanCloser ¶ added in v1.2.0
type ChanCloser struct {
// contains filtered or unexported fields
}
simple structure that send a signal by chan when Close called.
func NewChanCloser ¶ added in v1.2.0
func NewChanCloser() (*ChanCloser, chan struct{})
func (*ChanCloser) Close ¶ added in v1.2.0
func (cc *ChanCloser) Close() error
type DownloadPrintCounter ¶ added in v1.2.5
type DownloadPrintCounter struct {
Total uint64
}
https://golangcode.com/download-a-file-with-progress/
func (DownloadPrintCounter) PrintProgress ¶ added in v1.2.5
func (wc DownloadPrintCounter) PrintProgress()
type DummyReadCloser ¶ added in v1.2.0
type DummyReadCloser struct {
ReadCount int
}
type DummyWriteCloser ¶ added in v1.2.0
type DummyWriteCloser struct {
WriteCount int
}
type Heap ¶
The Heap type describes the requirements for a type using the routines in this package. Any type that implements it may be used as a min-heap with the following invariants (established after Init has been called or if the data is empty or sorted):
!h.Less(j, i) for 0 <= i < h.Len() and 2*i+1 <= j <= 2*i+2 and j < h.Len()
Note that Push and Pop in this interface are for package heap's implementation to call. To add and remove things from the heap, use heap.Push and heap.Pop.
实际上我们这个包装已经类似 优先队列了, 至于如何优先取决于 LessFunc
func (*Heap[T]) Fix ¶
Fix re-establishes the heap ordering after the element at index i has changed its value. Changing the value of the element at index i and then calling Fix is equivalent to, but less expensive than, calling Remove(h, i) followed by a Push of the new value. The complexity is O(log n) where n = h.Len().
func (*Heap[T]) Init ¶
func (h *Heap[T]) Init()
Init establishes the heap invariants required by the other routines in this package. Init is idempotent with respect to the heap invariants and may be called whenever the heap invariants may have been invalidated. The complexity is O(n) where n = h.Len().
func (*Heap[T]) Pop ¶
func (h *Heap[T]) Pop() T
Pop removes and returns the minimum element (according to Less) from the heap. The complexity is O(log n) where n = h.Len(). Pop is equivalent to Remove(h, 0).
type InvalidDataErr ¶ added in v1.2.2
type InvalidDataErr string
func (InvalidDataErr) Error ¶ added in v1.2.2
func (e InvalidDataErr) Error() string
func (InvalidDataErr) Is ¶ added in v1.2.2
func (e InvalidDataErr) Is(err error) bool
return err == e || err == ErrInvalidData
type MultiCloser ¶ added in v1.2.4
func (*MultiCloser) Close ¶ added in v1.2.4
func (cc *MultiCloser) Close() (result error)
type MultiReader ¶
type MultiReader interface { ReadBuffers() ([][]byte, error) //在底层没有实现readbuffers时,显然调用 ReadBuffers没有什么意义。 //所以我们通过 WillReadBuffersBenifit 方法 查询 调用是否有益。 WillReadBuffersBenifit() bool }
专门用于 grpc multiMode 的情况. 因为其他协议并没有能够加速的情形。
type MultiUserMap ¶ added in v1.2.2
type MultiUserMap struct { IDMap map[string]User AuthMap map[string]User Mutex sync.RWMutex TheIDBytesLen, TheAuthBytesLen int StoreKeyByStr bool //如果这一项给出, 则内部会用 identityStr/AuthStr 作为key;否则会用 string(identityBytes) 或 string(AuthBytes) 作为key IDStrToBytesFunc func(string) []byte IDBytesToStrFunc func([]byte) string //必须与 Key_StrToBytesFunc 同时给出 AuthStrToBytesFunc func(string) []byte AuthBytesToStrFunc func([]byte) string //必须与 Key_AuthStrToBytesFunc 同时给出 }
implements UserBus, UserSet, UserGetter; 只能存储同一类型的User. 通过 bytes存储用户id,而不是 str。
func NewMultiUserMap ¶ added in v1.2.2
func NewMultiUserMap() *MultiUserMap
func (*MultiUserMap) AddUser ¶ added in v1.2.2
func (mu *MultiUserMap) AddUser(u User) error
same as AddUser_nolock but with lock; concurrent safe
func (*MultiUserMap) AddUser_nolock ¶ added in v1.2.3
func (mu *MultiUserMap) AddUser_nolock(u User)
not concurrent safe, use with caution.
func (*MultiUserMap) AuthBytesLen ¶ added in v1.2.3
func (mu *MultiUserMap) AuthBytesLen() int
func (*MultiUserMap) AuthUserByBytes ¶ added in v1.2.3
func (mu *MultiUserMap) AuthUserByBytes(bs []byte) User
通过Auth查找
func (*MultiUserMap) AuthUserByStr ¶ added in v1.2.3
func (mu *MultiUserMap) AuthUserByStr(str string) User
通过Auth查找
func (*MultiUserMap) DelUser ¶ added in v1.2.2
func (mu *MultiUserMap) DelUser(u User) error
func (*MultiUserMap) HasUserByBytes ¶ added in v1.2.2
func (mu *MultiUserMap) HasUserByBytes(bs []byte) User
通过ID查找
func (*MultiUserMap) HasUserByStr ¶ added in v1.2.2
func (mu *MultiUserMap) HasUserByStr(str string) bool
通过ID查找
func (*MultiUserMap) IDBytesLen ¶ added in v1.2.3
func (mu *MultiUserMap) IDBytesLen() int
func (*MultiUserMap) LoadUsers ¶ added in v1.2.2
func (mu *MultiUserMap) LoadUsers(us []User)
func (*MultiUserMap) SetUseUUIDStr_asKey ¶ added in v1.2.2
func (mu *MultiUserMap) SetUseUUIDStr_asKey()
type MultiWriter ¶
因为 net.Buffers 的 WriteTo方法只会查看其是否实现了net包私有的 writeBuffers 接口 我们无法用WriteTo来给其它 代码提升性能;因此我们重新定义一个新的借口, 实现了 MultiWriter 接口的结构 我们就认为它会提升性能,比直接用 net.Buffers.WriteTo 要更强.
本接口 在代理中的用途,基本上只适合 加密层 能够做到分组加密 的情况; 因为如果不加密的话就是裸协议,直接splice/writev,也不需要这么麻烦; 如果是tls的话,可能涉及自己魔改tls把私有函数暴露出来然后分组加密; 如果是vmess的话,倒是有可能的,不过我还没研究vmess的 加密细节; 而如果是ss 那种简单混淆 异或加密的话,则是完全可以的 分组加密然后 一起用 writev 发送出去,可以降低网络延迟, 不过writev性能的提升可能是非常细微的, 也不必纠结这里. 如果考虑另一种情况,即需要加包头和包尾,则区别就很大了; WriteTo会调用N次Write,如果包装的话,会包装N 个包头和 包尾;而如果我们实现WriteBuffers方法, 只需先写入包头,而在 最后一个 []byte 后加 包尾,那么就可以获得性能提升, 我们只需增添两个新的 []byte 放在其前后即可, 然后再用 writev 一起发送出去 那么实际上 websocket 的gobwas/ws 包在不开启缓存时,就是 每次Write都写一次包头的情况; 所以websocket很有必要实现 WriteBuffers 方法. 目前实现 的有 vless/trojan 的 UserTCPConn , ws.Conn 以及 grpc 的 multiConn
type NilCloserWrapper ¶ added in v1.2.5
type NilCloserWrapper struct {
SimpleCloser
}
func (NilCloserWrapper) Close ¶ added in v1.2.5
func (nc NilCloserWrapper) Close() error
type ReadSwitcher ¶ added in v1.2.0
type ReadSwitcher struct {
Old, New io.Reader //non-nil
SwitchChan chan struct{} //non-nil
io.Closer
// contains filtered or unexported fields
}
先从Old读,若SwitchChan被关闭, 立刻改为从New读
func (*ReadSwitcher) Close ¶ added in v1.2.0
func (d *ReadSwitcher) Close() error
type ReadWrapper ¶ added in v1.2.0
optionally read from OptionalReader
func (*ReadWrapper) Close ¶ added in v1.2.0
func (rw *ReadWrapper) Close() error
type SimpleCloser ¶ added in v1.2.5
type SimpleCloser interface {
Close()
}
type SystemReadver ¶
type SystemReadver interface { Init(bs [][]byte, singleBufLen int) //将 给出的buffer 放入内部实际数据中 Read(fd uintptr) (uint32, error) //读取一次文件,并放入 buffer中 Clear() //清理内部buffer Recover(bsLen int, bs [][]byte) //恢复内部buffer }
SystemReadver 是平台相关的 用于 调用readv的 工具. 该 SystemReadver 的用例请参照 netLayer.readvFrom , 在 netLayer/readv.go中; SystemReadver的具体平台相关的实现见 readv_*.go; 用 GetReadVReader() 函数来获取本平台的对应实现。
func GetReadVReader ¶
func GetReadVReader() SystemReadver
type UUID ¶ added in v1.2.4
type UUID [UUID_BytesLen]byte
func GenerateUUID_v4 ¶
func GenerateUUID_v4() (r UUID)
GenerateUUID_v4 生成符合v4标准的uuid.
v4: https://datatracker.ietf.org/doc/html/rfc4122#section-4.4 variant: https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.1 version: https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.3
type User ¶ added in v1.2.0
type User interface { IdentityStr() string //每个user唯一,通过比较这个string 即可 判断两个User 是否相等。相当于 user name IdentityBytes() []byte //与str类似; 对于程序来说,bytes更方便处理; 可以与str相同,也可以不同. AuthStr() string //AuthStr 可以识别出该用户 并验证该User的真实性。相当于 user name + password AuthBytes() []byte //与 AuthStr 类似 }
User是一个 可确定唯一身份,且可验证该身份的 标识。
func InitV2rayUsers ¶ added in v1.2.2
type UserAuthenticator ¶ added in v1.2.4
type UserAuthenticator interface { AuthUserByStr(authStr string) User AuthUserByBytes(authBytes []byte) User AuthBytesLen() int }
通过验证信息 试图取出 一个User
type UserContainer ¶ added in v1.2.0
type UserContainer interface { UserSet UserAuthenticator }
用户容器,可判断是否存在,也可以验证
type UserPass ¶ added in v1.2.2
type UserPass struct {
UserID, Password []byte
}
used in proxy/socks5 and proxy.http. implements User
func NewUserPass ¶ added in v1.2.2
func NewUserPassByData ¶ added in v1.2.3
func (*UserPass) AuthUserByBytes ¶ added in v1.2.3
func (*UserPass) AuthUserByStr ¶ added in v1.2.3
func (*UserPass) GetUserByPass ¶ added in v1.2.2
func (*UserPass) IdentityBytes ¶ added in v1.2.3
func (*UserPass) IdentityStr ¶ added in v1.2.3
func (*UserPass) InitWithStr ¶ added in v1.2.2
uuid: "user:xxxx\npass:xxxx"
func (*UserPass) InitWithUrl ¶ added in v1.2.2
require "user" and "pass" field. return true if both not empty.
type UserWithPass ¶ added in v1.2.2
type V2rayUser ¶ added in v1.2.0
type V2rayUser [UUID_BytesLen]byte
一种专门用于v2ray协议族(vmess/vless)的 用于标识用户的符号 , 实现 User 接口. (其实就是uuid)
func InitRealV2rayUsers ¶ added in v1.2.3
func NewV2rayUser ¶ added in v1.2.0
func (V2rayUser) IdentityBytes ¶ added in v1.2.3
func (V2rayUser) IdentityStr ¶ added in v1.2.3
type WriteSwitcher ¶ added in v1.2.0
type WriteSwitcher struct {
Old, New io.Writer //non-nil
SwitchChan chan struct{} //non-nil
io.Closer
// contains filtered or unexported fields
}
先向Old写,若SwitchChan被关闭, 改向New写
func (*WriteSwitcher) Close ¶ added in v1.2.0
func (d *WriteSwitcher) Close() error