utils

package
v0.0.0-...-1ef8d7c Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 29, 2018 License: GPL-3.0 Imports: 34 Imported by: 0

Documentation

Overview

Provides leaky buffer, based on the example in Effective Go.

Index

Constants

View Source
const LeakyBufSize = 2048 // data.len(2) + hmacsha1(10) + data(4096)

Variables

View Source
var LeakyBuffer = NewLeakyBuf(maxNBuf, LeakyBufSize)
View Source
var SHARD_COUNT = 32

Functions

func BuildPacket

func BuildPacket(typ uint8, data ...string) []byte

func BuildPacketData

func BuildPacketData(data ...string) []byte

func CloseConn

func CloseConn(conn *net.Conn)

func ConnectHost

func ConnectHost(hostAndPort string, timeout int) (conn net.Conn, err error)

func ConnectKCPHost

func ConnectKCPHost(hostAndPort string, config kcpcfg.KCPConfigArgs) (conn net.Conn, err error)

func GetAllInterfaceAddr

func GetAllInterfaceAddr() ([]net.IP, error)

func GetKCPBlock

func GetKCPBlock(method, key string) (block kcp.BlockCrypt)

func HTTPGet

func HTTPGet(URL string, timeout int) (err error)

func HttpGet

func HttpGet(URL string, timeout int, host ...string) (body []byte, code int, err error)

func InsertProxyHeaders

func InsertProxyHeaders(head []byte, headers string) []byte

func IoBind

func IoBind(dst io.ReadWriteCloser, src io.ReadWriteCloser, fn func(err interface{}), log *logger.Logger)

func IsHTTP

func IsHTTP(head []byte) bool

func IsIternalIP

func IsIternalIP(domainOrIP string, always bool) bool

func IsSocks5

func IsSocks5(head []byte) bool

func Keygen

func Keygen() (err error)

func NewCompConn

func NewCompConn(conn net.Conn) net.Conn

func PathExists

func PathExists(_path string) bool

func RandInt

func RandInt(strLen int) int64

func RandString

func RandString(strlen int) string

func ReadData

func ReadData(r io.Reader) (data string, err error)

func ReadPacket

func ReadPacket(r io.Reader, typ *uint8, data ...*string) (err error)

func ReadPacketData

func ReadPacketData(r io.Reader, data ...*string) (err error)

func ReadUDPPacket

func ReadUDPPacket(_reader io.Reader) (srcAddr string, packet []byte, err error)

func RemoveProxyHeaders

func RemoveProxyHeaders(head []byte) []byte

func SubBytes

func SubBytes(bytes []byte, start, end int) []byte

func SubStr

func SubStr(str string, start, end int) string

func TlsBytes

func TlsBytes(cert, key string) (certBytes, keyBytes []byte, err error)

func TlsConnect

func TlsConnect(host string, port, timeout int, certBytes, keyBytes, caCertBytes []byte) (conn tls.Conn, err error)

func TlsConnectHost

func TlsConnectHost(host string, timeout int, certBytes, keyBytes, caCertBytes []byte) (conn tls.Conn, err error)

func UDPPacket

func UDPPacket(srcAddr string, packet []byte) []byte

func Uniqueid

func Uniqueid() string

Types

type BasicAuth

type BasicAuth struct {
	// contains filtered or unexported fields
}

func NewBasicAuth

func NewBasicAuth(dns *DomainResolver, log *logger.Logger) BasicAuth

func (*BasicAuth) Add

func (ba *BasicAuth) Add(userpassArr []string) (n int)

func (*BasicAuth) AddFromFile

func (ba *BasicAuth) AddFromFile(file string) (n int, err error)

func (*BasicAuth) Check

func (ba *BasicAuth) Check(userpass string, ip, target string) (ok bool)

func (*BasicAuth) CheckUserPass

func (ba *BasicAuth) CheckUserPass(user, pass, ip, target string) (ok bool)

func (*BasicAuth) SetAuthURL

func (ba *BasicAuth) SetAuthURL(URL string, code, timeout, retry int)

func (*BasicAuth) Total

func (ba *BasicAuth) Total() (n int)

type BufferedConn

type BufferedConn struct {
	net.Conn // So that most methods are embedded
	// contains filtered or unexported fields
}

func NewBufferedConn

func NewBufferedConn(c net.Conn) BufferedConn

func NewBufferedConnSize

func NewBufferedConnSize(c net.Conn, n int) BufferedConn

func (BufferedConn) Buffered

func (b BufferedConn) Buffered() int

func (BufferedConn) Peek

func (b BufferedConn) Peek(n int) ([]byte, error)

func (BufferedConn) Read

func (b BufferedConn) Read(p []byte) (int, error)

func (BufferedConn) ReadByte

func (b BufferedConn) ReadByte() (byte, error)

func (BufferedConn) UnreadByte

func (b BufferedConn) UnreadByte() error

type Checker

type Checker struct {
	// contains filtered or unexported fields
}

func NewChecker

func NewChecker(timeout int, interval int64, blockedFile, directFile string, log *logger.Logger) Checker

NewChecker args: timeout : tcp timeout milliseconds ,connect to host interval: recheck domain interval seconds

func (*Checker) Add

func (c *Checker) Add(key, address string)

func (*Checker) IsBlocked

func (c *Checker) IsBlocked(address string) (blocked bool, failN, successN uint)

func (*Checker) Stop

func (c *Checker) Stop()

type CheckerItem

type CheckerItem struct {
	IsHTTPS      bool
	Method       string
	URL          string
	Domain       string
	Host         string
	Data         []byte
	SuccessCount uint
	FailCount    uint
	Key          string
}

type ClientKeyRouter

type ClientKeyRouter struct {
	// contains filtered or unexported fields
}

func NewClientKeyRouter

func NewClientKeyRouter(ctrl *ConcurrentMap, size int) ClientKeyRouter

func (*ClientKeyRouter) GetKey

func (c *ClientKeyRouter) GetKey() string

type CompStream

type CompStream struct {
	net.Conn
	// contains filtered or unexported fields
}

func NewCompStream

func NewCompStream(conn net.Conn) *CompStream

func (*CompStream) Close

func (c *CompStream) Close() error

func (*CompStream) LocalAddr

func (c *CompStream) LocalAddr() net.Addr

func (*CompStream) Read

func (c *CompStream) Read(p []byte) (n int, err error)

func (*CompStream) RemoteAddr

func (c *CompStream) RemoteAddr() net.Addr

func (*CompStream) SetDeadline

func (c *CompStream) SetDeadline(t time.Time) error

func (*CompStream) SetReadDeadline

func (c *CompStream) SetReadDeadline(t time.Time) error

func (*CompStream) SetWriteDeadline

func (c *CompStream) SetWriteDeadline(t time.Time) error

func (*CompStream) Write

func (c *CompStream) Write(p []byte) (n int, err error)

type ConcurrentMap

type ConcurrentMap []*ConcurrentMapShared

A "thread" safe map of type string:Anything. To avoid lock bottlenecks this map is dived to several (SHARD_COUNT) map shards.

func NewConcurrentMap

func NewConcurrentMap() ConcurrentMap

Creates a new concurrent map.

func (ConcurrentMap) Count

func (m ConcurrentMap) Count() int

Returns the number of elements within the map.

func (ConcurrentMap) Get

func (m ConcurrentMap) Get(key string) (interface{}, bool)

Retrieves an element from map under given key.

func (ConcurrentMap) GetShard

func (m ConcurrentMap) GetShard(key string) *ConcurrentMapShared

Returns shard under given key

func (ConcurrentMap) Has

func (m ConcurrentMap) Has(key string) bool

Looks up an item under specified key

func (ConcurrentMap) IsEmpty

func (m ConcurrentMap) IsEmpty() bool

Checks if map is empty.

func (ConcurrentMap) Items

func (m ConcurrentMap) Items() map[string]interface{}

Returns all items as map[string]interface{}

func (ConcurrentMap) Iter deprecated

func (m ConcurrentMap) Iter() <-chan Tuple

Returns an iterator which could be used in a for range loop.

Deprecated: using IterBuffered() will get a better performence

func (ConcurrentMap) IterBuffered

func (m ConcurrentMap) IterBuffered() <-chan Tuple

Returns a buffered iterator which could be used in a for range loop.

func (ConcurrentMap) IterCb

func (m ConcurrentMap) IterCb(fn IterCb)

Callback based iterator, cheapest way to read all elements in a map.

func (ConcurrentMap) Keys

func (m ConcurrentMap) Keys() []string

Return all keys as []string

func (ConcurrentMap) MSet

func (m ConcurrentMap) MSet(data map[string]interface{})

func (ConcurrentMap) MarshalJSON

func (m ConcurrentMap) MarshalJSON() ([]byte, error)

Reviles ConcurrentMap "private" variables to json marshal.

func (ConcurrentMap) Pop

func (m ConcurrentMap) Pop(key string) (v interface{}, exists bool)

Removes an element from the map and returns it

func (ConcurrentMap) Remove

func (m ConcurrentMap) Remove(key string)

Removes an element from the map.

func (ConcurrentMap) Set

func (m ConcurrentMap) Set(key string, value interface{})

Sets the given value under the specified key.

func (ConcurrentMap) SetIfAbsent

func (m ConcurrentMap) SetIfAbsent(key string, value interface{}) bool

Sets the given value under the specified key if no value was associated with it.

func (ConcurrentMap) Upsert

func (m ConcurrentMap) Upsert(key string, value interface{}, cb UpsertCb) (res interface{})

Insert or Update - updates existing element or inserts a new one using UpsertCb

type ConcurrentMapShared

type ConcurrentMapShared struct {
	sync.RWMutex // Read Write mutex, guards access to internal map.
	// contains filtered or unexported fields
}

A "thread" safe string to anything map.

type ConnManager

type ConnManager struct {
	// contains filtered or unexported fields
}

func NewConnManager

func NewConnManager(log *logger.Logger) ConnManager

func (*ConnManager) Add

func (cm *ConnManager) Add(key, ID string, conn *net.Conn)

func (*ConnManager) Remove

func (cm *ConnManager) Remove(key string)

func (*ConnManager) RemoveAll

func (cm *ConnManager) RemoveAll()

func (*ConnManager) RemoveOne

func (cm *ConnManager) RemoveOne(key string, ID string)

type DomainResolver

type DomainResolver struct {
	// contains filtered or unexported fields
}

func NewDomainResolver

func NewDomainResolver(dnsAddrress string, ttl int, log *logger.Logger) DomainResolver

func (*DomainResolver) MustResolve

func (a *DomainResolver) MustResolve(address string) (ip string)

func (*DomainResolver) PrintData

func (a *DomainResolver) PrintData()

func (*DomainResolver) Resolve

func (a *DomainResolver) Resolve(address string) (ip string, err error)

type DomainResolverItem

type DomainResolverItem struct {
	// contains filtered or unexported fields
}

type HTTPRequest

type HTTPRequest struct {
	HeadBuf []byte

	Host   string
	Method string
	URL    string
	// contains filtered or unexported fields
}

func NewHTTPRequest

func NewHTTPRequest(inConn *net.Conn, bufSize int, isBasicAuth bool, basicAuth *BasicAuth, log *logger.Logger, header ...[]byte) (req HTTPRequest, err error)

func (*HTTPRequest) BasicAuth

func (req *HTTPRequest) BasicAuth() (err error)

func (*HTTPRequest) GetAuthDataStr

func (req *HTTPRequest) GetAuthDataStr() (basicInfo string, err error)

func (*HTTPRequest) HTTP

func (req *HTTPRequest) HTTP() (err error)

func (*HTTPRequest) HTTPS

func (req *HTTPRequest) HTTPS() (err error)

func (*HTTPRequest) HTTPSReply

func (req *HTTPRequest) HTTPSReply() (err error)

func (*HTTPRequest) IsHTTPS

func (req *HTTPRequest) IsHTTPS() bool

type IterCb

type IterCb func(key string, v interface{})

Iterator callback,called for every key,value found in maps. RLock is held for all calls for a given shard therefore callback sess consistent view of a shard, but not across the shards

type LeakyBuf

type LeakyBuf struct {
	// contains filtered or unexported fields
}

func NewLeakyBuf

func NewLeakyBuf(n, bufSize int) *LeakyBuf

NewLeakyBuf creates a leaky buffer which can hold at most n buffer, each with bufSize bytes.

func (*LeakyBuf) Get

func (lb *LeakyBuf) Get() (b []byte)

Get returns a buffer from the leaky buffer or create a new buffer.

func (*LeakyBuf) Put

func (lb *LeakyBuf) Put(b []byte)

Put add the buffer into the free buffer pool for reuse. Panic if the buffer size is not the same with the leaky buffer's. This is intended to expose error usage of leaky buffer.

type OutConn

type OutConn struct {
	// contains filtered or unexported fields
}

func NewOutConn

func NewOutConn(dur int, typ string, kcp kcpcfg.KCPConfigArgs, certBytes, keyBytes, caCertBytes []byte, address string, timeout int) (op OutConn)

func (*OutConn) Get

func (op *OutConn) Get() (conn net.Conn, err error)

type Reader

type Reader struct {
	// contains filtered or unexported fields
}

func NewReader

func NewReader(r io.Reader) *Reader

NewReader returns a reader that implements io.Reader with rate limiting.

func NewReaderWithContext

func NewReaderWithContext(r io.Reader, ctx context.Context) *Reader

NewReaderWithContext returns a reader that implements io.Reader with rate limiting.

func (*Reader) Read

func (s *Reader) Read(p []byte) (int, error)

Read reads bytes into p.

func (*Reader) SetRateLimit

func (s *Reader) SetRateLimit(bytesPerSec float64)

SetRateLimit sets rate limit (bytes/sec) to the reader.

type ServerChannel

type ServerChannel struct {
	Listener    *net.Listener
	UDPListener *net.UDPConn
	// contains filtered or unexported fields
}

func NewServerChannel

func NewServerChannel(ip string, port int, log *logger.Logger) ServerChannel

func NewServerChannelHost

func NewServerChannelHost(host string, log *logger.Logger) ServerChannel

func (*ServerChannel) ListenKCP

func (sc *ServerChannel) ListenKCP(config kcpcfg.KCPConfigArgs, fn func(conn net.Conn), log *logger.Logger) (err error)

func (*ServerChannel) ListenTCP

func (sc *ServerChannel) ListenTCP(fn func(conn net.Conn)) (err error)

func (*ServerChannel) ListenTls

func (sc *ServerChannel) ListenTls(certBytes, keyBytes, caCertBytes []byte, fn func(conn net.Conn)) (err error)

func (*ServerChannel) ListenUDP

func (sc *ServerChannel) ListenUDP(fn func(packet []byte, localAddr, srcAddr *net.UDPAddr)) (err error)

func (*ServerChannel) SetErrAcceptHandler

func (sc *ServerChannel) SetErrAcceptHandler(fn func(err error))

type Tuple

type Tuple struct {
	Key string
	Val interface{}
}

Used by the Iter & IterBuffered functions to wrap two variables together over a channel,

type UpsertCb

type UpsertCb func(exist bool, valueInMap interface{}, newValue interface{}) interface{}

Callback to return new element to be inserted into the map It is called while lock is held, therefore it MUST NOT try to access other keys in same map, as it can lead to deadlock since Go sync.RWLock is not reentrant

type Writer

type Writer struct {
	// contains filtered or unexported fields
}

func NewWriter

func NewWriter(w io.Writer) *Writer

NewWriter returns a writer that implements io.Writer with rate limiting.

func NewWriterWithContext

func NewWriterWithContext(w io.Writer, ctx context.Context) *Writer

NewWriterWithContext returns a writer that implements io.Writer with rate limiting.

func (*Writer) SetRateLimit

func (s *Writer) SetRateLimit(bytesPerSec float64)

SetRateLimit sets rate limit (bytes/sec) to the writer.

func (*Writer) Write

func (s *Writer) Write(p []byte) (int, error)

Write writes bytes from p.

Directories

Path Synopsis
Package xid is a globally unique id generator suited for web scale Xid is using Mongo Object ID algorithm to generate globally unique ids: https://docs.mongodb.org/manual/reference/object-id/ - 4-byte value representing the seconds since the Unix epoch, - 3-byte machine identifier, - 2-byte process id, and - 3-byte counter, starting with a random value.
Package xid is a globally unique id generator suited for web scale Xid is using Mongo Object ID algorithm to generate globally unique ids: https://docs.mongodb.org/manual/reference/object-id/ - 4-byte value representing the seconds since the Unix epoch, - 3-byte machine identifier, - 2-byte process id, and - 3-byte counter, starting with a random value.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL