Hunter0x7c7
2022-08-11 b8230139fb40edea387617b6accd8371e37eda58
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package kcp
 
import (
    "crypto/cipher"
 
    "github.com/v2fly/v2ray-core/v5/common"
    "github.com/v2fly/v2ray-core/v5/common/serial"
    "github.com/v2fly/v2ray-core/v5/transport/internet"
)
 
const protocolName = "mkcp"
 
// GetMTUValue returns the value of MTU settings.
func (c *Config) GetMTUValue() uint32 {
    if c == nil || c.Mtu == nil {
        return 1350
    }
    return c.Mtu.Value
}
 
// GetTTIValue returns the value of TTI settings.
func (c *Config) GetTTIValue() uint32 {
    if c == nil || c.Tti == nil {
        return 50
    }
    return c.Tti.Value
}
 
// GetUplinkCapacityValue returns the value of UplinkCapacity settings.
func (c *Config) GetUplinkCapacityValue() uint32 {
    if c == nil || c.UplinkCapacity == nil {
        return 5
    }
    return c.UplinkCapacity.Value
}
 
// GetDownlinkCapacityValue returns the value of DownlinkCapacity settings.
func (c *Config) GetDownlinkCapacityValue() uint32 {
    if c == nil || c.DownlinkCapacity == nil {
        return 20
    }
    return c.DownlinkCapacity.Value
}
 
// GetWriteBufferSize returns the size of WriterBuffer in bytes.
func (c *Config) GetWriteBufferSize() uint32 {
    if c == nil || c.WriteBuffer == nil {
        return 2 * 1024 * 1024
    }
    return c.WriteBuffer.Size
}
 
// GetReadBufferSize returns the size of ReadBuffer in bytes.
func (c *Config) GetReadBufferSize() uint32 {
    if c == nil || c.ReadBuffer == nil {
        return 2 * 1024 * 1024
    }
    return c.ReadBuffer.Size
}
 
// GetSecurity returns the security settings.
func (c *Config) GetSecurity() (cipher.AEAD, error) {
    if c.Seed != nil {
        return NewAEADAESGCMBasedOnSeed(c.Seed.Seed), nil
    }
    return NewSimpleAuthenticator(), nil
}
 
func (c *Config) GetPackerHeader() (internet.PacketHeader, error) {
    if c.HeaderConfig != nil {
        rawConfig, err := serial.GetInstanceOf(c.HeaderConfig)
        if err != nil {
            return nil, err
        }
 
        return internet.CreatePacketHeader(rawConfig)
    }
    return nil, nil
}
 
func (c *Config) GetSendingInFlightSize() uint32 {
    size := c.GetUplinkCapacityValue() * 1024 * 1024 / c.GetMTUValue() / (1000 / c.GetTTIValue())
    if size < 8 {
        size = 8
    }
    return size
}
 
func (c *Config) GetSendingBufferSize() uint32 {
    return c.GetWriteBufferSize() / c.GetMTUValue()
}
 
func (c *Config) GetReceivingInFlightSize() uint32 {
    size := c.GetDownlinkCapacityValue() * 1024 * 1024 / c.GetMTUValue() / (1000 / c.GetTTIValue())
    if size < 8 {
        size = 8
    }
    return size
}
 
func (c *Config) GetReceivingBufferSize() uint32 {
    return c.GetReadBufferSize() / c.GetMTUValue()
}
 
func init() {
    common.Must(internet.RegisterProtocolConfigCreator(protocolName, func() interface{} {
        return new(Config)
    }))
}