mirror of
https://github.com/wyx2685/V2bX.git
synced 2025-01-22 09:58:14 -05:00
update conf, fix tcp count
This commit is contained in:
parent
97b7322492
commit
179de8ab2a
10
conf/conf.go
10
conf/conf.go
@ -15,7 +15,7 @@ type Conf struct {
|
||||
InboundConfigPath string `yaml:"InboundConfigPath"`
|
||||
OutboundConfigPath string `yaml:"OutboundConfigPath"`
|
||||
RouteConfigPath string `yaml:"RouteConfigPath"`
|
||||
ConnectionConfig *ConnetionConfig `yaml:"ConnectionConfig"`
|
||||
ConnectionConfig *ConnectionConfig `yaml:"ConnectionConfig"`
|
||||
NodesConfig []*NodeConfig `yaml:"Nodes"`
|
||||
}
|
||||
|
||||
@ -26,7 +26,7 @@ func New() *Conf {
|
||||
InboundConfigPath: "",
|
||||
OutboundConfigPath: "",
|
||||
RouteConfigPath: "",
|
||||
ConnectionConfig: NewConnetionConfig(),
|
||||
ConnectionConfig: NewConnectionConfig(),
|
||||
NodesConfig: []*NodeConfig{},
|
||||
}
|
||||
}
|
||||
@ -55,17 +55,15 @@ func (p *Conf) Watch(filePath string, reload func()) error {
|
||||
defer watcher.Close()
|
||||
for {
|
||||
select {
|
||||
case event := <-watcher.Events:
|
||||
if event.Has(fsnotify.Write) {
|
||||
case <-watcher.Events:
|
||||
log.Println("config dir changed, reloading...")
|
||||
*p = *New()
|
||||
err := p.LoadFromPath(filePath)
|
||||
if err != nil {
|
||||
log.Printf("reload config error: %s", err)
|
||||
}
|
||||
log.Println("reload config success")
|
||||
reload()
|
||||
}
|
||||
log.Println("reload config success")
|
||||
case err := <-watcher.Errors:
|
||||
if err != nil {
|
||||
log.Printf("File watcher error: %s", err)
|
||||
|
@ -1,6 +1,6 @@
|
||||
package conf
|
||||
|
||||
type ConnetionConfig struct {
|
||||
type ConnectionConfig struct {
|
||||
Handshake uint32 `yaml:"handshake"`
|
||||
ConnIdle uint32 `yaml:"connIdle"`
|
||||
UplinkOnly uint32 `yaml:"uplinkOnly"`
|
||||
@ -8,8 +8,8 @@ type ConnetionConfig struct {
|
||||
BufferSize int32 `yaml:"bufferSize"`
|
||||
}
|
||||
|
||||
func NewConnetionConfig() *ConnetionConfig {
|
||||
return &ConnetionConfig{
|
||||
func NewConnectionConfig() *ConnectionConfig {
|
||||
return &ConnectionConfig{
|
||||
Handshake: 4,
|
||||
ConnIdle: 30,
|
||||
UplinkOnly: 2,
|
||||
|
@ -28,7 +28,7 @@ type ControllerConfig struct {
|
||||
EnableFallback bool `yaml:"EnableFallback"`
|
||||
DisableIVCheck bool `yaml:"DisableIVCheck"`
|
||||
DisableSniffing bool `yaml:"DisableSniffing"`
|
||||
FallBackConfigs []*FallBackConfig `yaml:"FallBackConfigs"`
|
||||
FallBackConfigs []FallBackConfig `yaml:"FallBackConfigs"`
|
||||
CertConfig *CertConfig `yaml:"CertConfig"`
|
||||
}
|
||||
|
||||
|
@ -33,7 +33,7 @@ func New(c *conf.Conf) *Core {
|
||||
return &Core{Server: getCore(c)}
|
||||
}
|
||||
|
||||
func parseConnectionConfig(c *conf.ConnetionConfig) (policy *coreConf.Policy) {
|
||||
func parseConnectionConfig(c *conf.ConnectionConfig) (policy *coreConf.Policy) {
|
||||
policy = &coreConf.Policy{
|
||||
StatsUserUplink: true,
|
||||
StatsUserDownlink: true,
|
||||
|
@ -27,18 +27,23 @@ func (c *ConnLimiter) AddConnCount(user string, ip string, isTcp bool) (limit bo
|
||||
if c.connLimit != 0 {
|
||||
if v, ok := c.count.Load(user); ok {
|
||||
if v.(int) >= c.connLimit {
|
||||
// over connection limit
|
||||
return true
|
||||
} else if isTcp { // tcp protocol
|
||||
} else if isTcp {
|
||||
// tcp protocol
|
||||
// connection count add
|
||||
c.count.Store(user, v.(int)+1)
|
||||
}
|
||||
} else if isTcp { // tcp protocol
|
||||
} else if isTcp {
|
||||
// tcp protocol
|
||||
// store connection count
|
||||
c.count.Store(user, 1)
|
||||
}
|
||||
}
|
||||
if c.ipLimit == 0 {
|
||||
return false
|
||||
}
|
||||
// default user map
|
||||
// first user map
|
||||
ipMap := new(sync.Map)
|
||||
if c.realtime {
|
||||
if isTcp {
|
||||
@ -57,11 +62,12 @@ func (c *ConnLimiter) AddConnCount(user string, ip string, isTcp bool) (limit bo
|
||||
if online, ok := ips.Load(ip); ok {
|
||||
// online ip
|
||||
if c.realtime {
|
||||
if online.(int)%2 == 0 && isTcp {
|
||||
// count add
|
||||
if isTcp {
|
||||
// tcp count add
|
||||
ips.Store(ip, online.(int)+2)
|
||||
}
|
||||
} else {
|
||||
// update connect time for not realtime
|
||||
ips.Store(ip, time.Now())
|
||||
}
|
||||
} else {
|
||||
@ -75,6 +81,7 @@ func (c *ConnLimiter) AddConnCount(user string, ip string, isTcp bool) (limit bo
|
||||
return true
|
||||
})
|
||||
if limit {
|
||||
// over ip limit
|
||||
return
|
||||
}
|
||||
if c.realtime {
|
||||
|
@ -3,6 +3,7 @@ package limiter
|
||||
import (
|
||||
"sync"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
var c *ConnLimiter
|
||||
@ -23,13 +24,21 @@ func TestConnLimiter_DelConnCount(t *testing.T) {
|
||||
t.Log(c.AddConnCount("1", "2", true))
|
||||
}
|
||||
|
||||
func TestConnLimiter_ClearPacketOnlineIP(t *testing.T) {
|
||||
func TestConnLimiter_ClearOnlineIP(t *testing.T) {
|
||||
t.Log(c.AddConnCount("1", "1", false))
|
||||
t.Log(c.AddConnCount("1", "2", false))
|
||||
c.ClearOnlineIP()
|
||||
t.Log(c.AddConnCount("1", "2", true))
|
||||
c.DelConnCount("1", "2")
|
||||
t.Log(c.AddConnCount("1", "1", false))
|
||||
// not realtime
|
||||
c.realtime = false
|
||||
t.Log(c.AddConnCount("3", "2", true))
|
||||
c.ClearOnlineIP()
|
||||
t.Log(c.ip.Load("3"))
|
||||
time.Sleep(time.Minute)
|
||||
c.ClearOnlineIP()
|
||||
t.Log(c.ip.Load("3"))
|
||||
}
|
||||
|
||||
func BenchmarkConnLimiter(b *testing.B) {
|
||||
|
Loading…
Reference in New Issue
Block a user