update kcp

This commit is contained in:
ginuerzh
2022-04-13 21:30:30 +08:00
parent b0859bcebf
commit 65b44b0790
6 changed files with 218 additions and 55 deletions

View File

@ -19,9 +19,11 @@ definitions:
type: string
x-go-name: PathPrefix
type: object
x-go-package: github.com/go-gost/core/config
x-go-package: github.com/go-gost/x/config
AdmissionConfig:
properties:
file:
$ref: '#/definitions/FileLoader'
matchers:
items:
type: string
@ -30,15 +32,15 @@ definitions:
name:
type: string
x-go-name: Name
redis:
$ref: '#/definitions/RedisLoader'
reload:
$ref: '#/definitions/Duration'
reverse:
type: boolean
x-go-name: Reverse
type:
description: inline, file, etc.
type: string
x-go-name: Type
type: object
x-go-package: github.com/go-gost/core/config
x-go-package: github.com/go-gost/x/config
AuthConfig:
properties:
password:
@ -48,7 +50,7 @@ definitions:
type: string
x-go-name: Username
type: object
x-go-package: github.com/go-gost/core/config
x-go-package: github.com/go-gost/x/config
AutherConfig:
properties:
auths:
@ -56,17 +58,21 @@ definitions:
$ref: '#/definitions/AuthConfig'
type: array
x-go-name: Auths
file:
$ref: '#/definitions/FileLoader'
name:
type: string
x-go-name: Name
type:
description: inline, file, redis, etc.
type: string
x-go-name: Type
redis:
$ref: '#/definitions/RedisLoader'
reload:
$ref: '#/definitions/Duration'
type: object
x-go-package: github.com/go-gost/core/config
x-go-package: github.com/go-gost/x/config
BypassConfig:
properties:
file:
$ref: '#/definitions/FileLoader'
matchers:
items:
type: string
@ -75,15 +81,15 @@ definitions:
name:
type: string
x-go-name: Name
redis:
$ref: '#/definitions/RedisLoader'
reload:
$ref: '#/definitions/Duration'
reverse:
type: boolean
x-go-name: Reverse
type:
description: inline, file, etc.
type: string
x-go-name: Type
type: object
x-go-package: github.com/go-gost/core/config
x-go-package: github.com/go-gost/x/config
ChainConfig:
properties:
hops:
@ -97,7 +103,7 @@ definitions:
selector:
$ref: '#/definitions/SelectorConfig'
type: object
x-go-package: github.com/go-gost/core/config
x-go-package: github.com/go-gost/x/config
Config:
properties:
admissions:
@ -133,6 +139,11 @@ definitions:
$ref: '#/definitions/MetricsConfig'
profiling:
$ref: '#/definitions/ProfilingConfig'
recorders:
items:
$ref: '#/definitions/RecorderConfig'
type: array
x-go-name: Recorders
resolvers:
items:
$ref: '#/definitions/ResolverConfig'
@ -146,7 +157,7 @@ definitions:
tls:
$ref: '#/definitions/TLSConfig'
type: object
x-go-package: github.com/go-gost/core/config
x-go-package: github.com/go-gost/x/config
ConnectorConfig:
properties:
auth:
@ -162,7 +173,7 @@ definitions:
type: string
x-go-name: Type
type: object
x-go-package: github.com/go-gost/core/config
x-go-package: github.com/go-gost/x/config
DialerConfig:
properties:
auth:
@ -178,7 +189,7 @@ definitions:
type: string
x-go-name: Type
type: object
x-go-package: github.com/go-gost/core/config
x-go-package: github.com/go-gost/x/config
Duration:
description: |-
A Duration represents the elapsed time between two instants
@ -187,6 +198,23 @@ definitions:
format: int64
type: integer
x-go-package: time
FileLoader:
properties:
path:
type: string
x-go-name: Path
type: object
x-go-package: github.com/go-gost/x/config
FileRecorder:
properties:
path:
type: string
x-go-name: Path
sep:
type: string
x-go-name: Sep
type: object
x-go-package: github.com/go-gost/x/config
ForwarderConfig:
properties:
selector:
@ -197,7 +225,7 @@ definitions:
type: array
x-go-name: Targets
type: object
x-go-package: github.com/go-gost/core/config
x-go-package: github.com/go-gost/x/config
HandlerConfig:
properties:
auth:
@ -223,7 +251,7 @@ definitions:
type: string
x-go-name: Type
type: object
x-go-package: github.com/go-gost/core/config
x-go-package: github.com/go-gost/x/config
HopConfig:
properties:
bypass:
@ -232,6 +260,9 @@ definitions:
hosts:
type: string
x-go-name: Hosts
interface:
type: string
x-go-name: Interface
name:
type: string
x-go-name: Name
@ -245,8 +276,10 @@ definitions:
x-go-name: Resolver
selector:
$ref: '#/definitions/SelectorConfig'
sockopts:
$ref: '#/definitions/SockOptsConfig'
type: object
x-go-package: github.com/go-gost/core/config
x-go-package: github.com/go-gost/x/config
HostMappingConfig:
properties:
aliases:
@ -261,9 +294,11 @@ definitions:
type: string
x-go-name: IP
type: object
x-go-package: github.com/go-gost/core/config
x-go-package: github.com/go-gost/x/config
HostsConfig:
properties:
file:
$ref: '#/definitions/FileLoader'
mappings:
items:
$ref: '#/definitions/HostMappingConfig'
@ -272,12 +307,12 @@ definitions:
name:
type: string
x-go-name: Name
type:
description: inline, file, etc.
type: string
x-go-name: Type
redis:
$ref: '#/definitions/RedisLoader'
reload:
$ref: '#/definitions/Duration'
type: object
x-go-package: github.com/go-gost/core/config
x-go-package: github.com/go-gost/x/config
ListenerConfig:
properties:
auth:
@ -299,7 +334,7 @@ definitions:
type: string
x-go-name: Type
type: object
x-go-package: github.com/go-gost/core/config
x-go-package: github.com/go-gost/x/config
LogConfig:
properties:
format:
@ -312,20 +347,17 @@ definitions:
type: string
x-go-name: Output
type: object
x-go-package: github.com/go-gost/core/config
x-go-package: github.com/go-gost/x/config
MetricsConfig:
properties:
addr:
type: string
x-go-name: Addr
enable:
type: boolean
x-go-name: Enable
path:
type: string
x-go-name: Path
type: object
x-go-package: github.com/go-gost/core/config
x-go-package: github.com/go-gost/x/config
NameserverConfig:
properties:
addr:
@ -348,7 +380,7 @@ definitions:
ttl:
$ref: '#/definitions/Duration'
type: object
x-go-package: github.com/go-gost/core/config
x-go-package: github.com/go-gost/x/config
NodeConfig:
properties:
addr:
@ -364,24 +396,87 @@ definitions:
hosts:
type: string
x-go-name: Hosts
interface:
type: string
x-go-name: Interface
name:
type: string
x-go-name: Name
resolver:
type: string
x-go-name: Resolver
sockopts:
$ref: '#/definitions/SockOptsConfig'
type: object
x-go-package: github.com/go-gost/core/config
x-go-package: github.com/go-gost/x/config
ProfilingConfig:
properties:
addr:
type: string
x-go-name: Addr
enable:
type: boolean
x-go-name: Enable
type: object
x-go-package: github.com/go-gost/core/config
x-go-package: github.com/go-gost/x/config
RecorderConfig:
properties:
file:
$ref: '#/definitions/FileRecorder'
name:
type: string
x-go-name: Name
redis:
$ref: '#/definitions/RedisRecorder'
type: object
x-go-package: github.com/go-gost/x/config
RecorderObject:
properties:
name:
type: string
x-go-name: Name
record:
type: string
x-go-name: Record
type: object
x-go-package: github.com/go-gost/x/config
RedisLoader:
properties:
addr:
type: string
x-go-name: Addr
db:
format: int64
type: integer
x-go-name: DB
key:
type: string
x-go-name: Key
password:
type: string
x-go-name: Password
type:
type: string
x-go-name: Type
type: object
x-go-package: github.com/go-gost/x/config
RedisRecorder:
properties:
addr:
type: string
x-go-name: Addr
db:
format: int64
type: integer
x-go-name: DB
key:
type: string
x-go-name: Key
password:
type: string
x-go-name: Password
type:
type: string
x-go-name: Type
type: object
x-go-package: github.com/go-gost/x/config
ResolverConfig:
properties:
name:
@ -392,12 +487,8 @@ definitions:
$ref: '#/definitions/NameserverConfig'
type: array
x-go-name: Nameservers
type:
description: inline, file, etc.
type: string
x-go-name: Type
type: object
x-go-package: github.com/go-gost/core/config
x-go-package: github.com/go-gost/x/config
Response:
properties:
code:
@ -408,7 +499,7 @@ definitions:
type: string
x-go-name: Msg
type: object
x-go-package: github.com/go-gost/core/api
x-go-package: github.com/go-gost/x/api
SelectorConfig:
properties:
failTimeout:
@ -421,7 +512,7 @@ definitions:
type: string
x-go-name: Strategy
type: object
x-go-package: github.com/go-gost/core/config
x-go-package: github.com/go-gost/x/config
ServiceConfig:
properties:
addr:
@ -440,16 +531,34 @@ definitions:
hosts:
type: string
x-go-name: Hosts
interface:
type: string
x-go-name: Interface
listener:
$ref: '#/definitions/ListenerConfig'
name:
type: string
x-go-name: Name
recorders:
items:
$ref: '#/definitions/RecorderObject'
type: array
x-go-name: Recorders
resolver:
type: string
x-go-name: Resolver
sockopts:
$ref: '#/definitions/SockOptsConfig'
type: object
x-go-package: github.com/go-gost/core/config
x-go-package: github.com/go-gost/x/config
SockOptsConfig:
properties:
mark:
format: int64
type: integer
x-go-name: Mark
type: object
x-go-package: github.com/go-gost/x/config
TLSConfig:
properties:
caFile:
@ -468,7 +577,7 @@ definitions:
type: string
x-go-name: ServerName
type: object
x-go-package: github.com/go-gost/core/config
x-go-package: github.com/go-gost/x/config
info:
title: Documentation of Web API.
version: 1.0.0

View File

@ -146,7 +146,9 @@ func (d *kcpDialer) initSession(ctx context.Context, addr net.Addr, conn net.Pac
// stream multiplex
smuxConfig := smux.DefaultConfig()
smuxConfig.MaxReceiveBuffer = config.SockBuf
smuxConfig.Version = config.SmuxVer
smuxConfig.MaxReceiveBuffer = config.SmuxBuf
smuxConfig.MaxStreamBuffer = config.StreamBuf
smuxConfig.KeepAliveInterval = time.Duration(config.KeepAlive) * time.Second
var cc net.Conn = kcpconn
if !config.NoComp {

View File

@ -17,9 +17,17 @@ type metadata struct {
func (d *kcpDialer) parseMetadata(md mdata.Metadata) (err error) {
const (
config = "config"
configFile = "c"
handshakeTimeout = "handshakeTimeout"
)
if file := mdx.GetString(md, configFile); file != "" {
d.md.config, err = kcp_util.ParseFromFile(file)
if err != nil {
return
}
}
if m := mdx.GetStringMap(md, config); len(m) > 0 {
b, err := json.Marshal(m)
if err != nil {

View File

@ -2,6 +2,8 @@ package kcp
import (
"crypto/sha1"
"encoding/json"
"os"
"github.com/xtaci/kcp-go/v5"
"golang.org/x/crypto/pbkdf2"
@ -31,6 +33,9 @@ var (
Resend: 0,
NoCongestion: 0,
SockBuf: 4194304,
SmuxVer: 1,
SmuxBuf: 4194304,
StreamBuf: 2097152,
KeepAlive: 10,
SnmpLog: "",
SnmpPeriod: 60,
@ -57,6 +62,9 @@ type Config struct {
Resend int `json:"resend"`
NoCongestion int `json:"nc"`
SockBuf int `json:"sockbuf"`
SmuxBuf int `json:"smuxbuf"`
StreamBuf int `json:"streambuf"`
SmuxVer int `json:"smuxver"`
KeepAlive int `json:"keepalive"`
SnmpLog string `json:"snmplog"`
SnmpPeriod int `json:"snmpperiod"`
@ -64,6 +72,23 @@ type Config struct {
TCP bool `json:"tcp"`
}
func ParseFromFile(filename string) (*Config, error) {
if filename == "" {
return nil, nil
}
file, err := os.Open(filename)
if err != nil {
return nil, err
}
defer file.Close()
config := &Config{}
if err = json.NewDecoder(file).Decode(config); err != nil {
return nil, err
}
return config, nil
}
// Init initializes the KCP config.
func (c *Config) Init() {
switch c.Mode {
@ -76,6 +101,15 @@ func (c *Config) Init() {
case "fast3":
c.NoDelay, c.Interval, c.Resend, c.NoCongestion = 1, 10, 2, 1
}
if c.SmuxVer <= 0 {
c.SmuxVer = 1
}
if c.SmuxBuf <= 0 {
c.SmuxBuf = c.SockBuf
}
if c.StreamBuf <= 0 {
c.StreamBuf = c.SockBuf / 2
}
}
func BlockCrypt(key, crypt, salt string) (block kcp.BlockCrypt) {

View File

@ -146,7 +146,9 @@ func (l *kcpListener) mux(conn net.Conn) {
defer conn.Close()
smuxConfig := smux.DefaultConfig()
smuxConfig.MaxReceiveBuffer = l.md.config.SockBuf
smuxConfig.Version = l.md.config.SmuxVer
smuxConfig.MaxReceiveBuffer = l.md.config.SmuxBuf
smuxConfig.MaxStreamBuffer = l.md.config.StreamBuf
smuxConfig.KeepAliveInterval = time.Duration(l.md.config.KeepAlive) * time.Second
if !l.md.config.NoComp {

View File

@ -19,10 +19,18 @@ type metadata struct {
func (l *kcpListener) parseMetadata(md mdata.Metadata) (err error) {
const (
backlog = "backlog"
config = "config"
backlog = "backlog"
config = "config"
configFile = "c"
)
if file := mdx.GetString(md, configFile); file != "" {
l.md.config, err = kcp_util.ParseFromFile(file)
if err != nil {
return
}
}
if m := mdx.GetStringMap(md, config); len(m) > 0 {
b, err := json.Marshal(m)
if err != nil {