- 新增 managed/external/nested 三种传输保护模式 - 新增 peer attach 显式认证、抗重放、channel binding 和可选前向保密协商 - 明确单连接注入与可重拨连接源的语义边界 - 禁止 ConnectByConn 场景下 dedicated bulk 走 sidecar,auto 模式自动回退 shared - 修正 dedicated attach 在 bootstrap/steady profile 切换下的处理逻辑 - 优化 shared bulk super-batch 与批量 framed write 路径 - 降低 stream/bulk fast path 的复制和分发损耗 - 补齐 benchmark、回归测试、运行时快照和 README 文档
117 lines
4.9 KiB
Go
117 lines
4.9 KiB
Go
package notify
|
|
|
|
import (
|
|
"b612.me/stario"
|
|
"context"
|
|
"net"
|
|
"sync"
|
|
"sync/atomic"
|
|
"time"
|
|
)
|
|
|
|
type ServerCommon struct {
|
|
msgID uint64
|
|
alive atomic.Value
|
|
status Status
|
|
sessionOwnerState atomic.Int32
|
|
sessionRuntime atomic.Pointer[serverSessionRuntime]
|
|
listener net.Listener
|
|
udpListener *net.UDPConn
|
|
queue *stario.StarQueue
|
|
stopFn context.CancelFunc
|
|
stopCtx context.Context
|
|
maxReadTimeout time.Duration
|
|
maxWriteTimeout time.Duration
|
|
parallelNum int
|
|
wg stario.WaitGroup
|
|
peerRegistry *serverPeerRegistry
|
|
mu sync.RWMutex
|
|
handshakeRsaKey []byte
|
|
SecretKey []byte
|
|
defaultMsgEn func([]byte, []byte) []byte
|
|
defaultMsgDe func([]byte, []byte) []byte
|
|
defaultFastStreamEncode transportFastStreamEncoder
|
|
defaultFastBulkEncode transportFastBulkEncoder
|
|
defaultFastPlainEncode transportFastPlainEncoder
|
|
defaultModernPSKRuntime *modernPSKCodecRuntime
|
|
peerAttachSecurity atomic.Pointer[peerAttachSecurityState]
|
|
securityBootstrap transportProtectionProfile
|
|
securitySteady transportProtectionProfile
|
|
securityAuthMode AuthMode
|
|
securityProtectionMode ProtectionMode
|
|
securityRequireForwardSecrecy bool
|
|
securityConfigured bool
|
|
peerAttachReplay peerAttachReplayCache
|
|
peerAttachExplicitCount atomic.Int64
|
|
peerAttachAuthFallbackCount atomic.Int64
|
|
peerAttachAuthRejectCount atomic.Int64
|
|
peerAttachDowngradeRejectCount atomic.Int64
|
|
peerAttachBindingRejectCount atomic.Int64
|
|
linkFns map[string]func(message *Message)
|
|
defaultFns func(message *Message)
|
|
noFinSyncMsgMaxKeepSeconds int64
|
|
maxHeartbeatLostSeconds int64
|
|
sequenceDe func([]byte) (interface{}, error)
|
|
sequenceEn func(interface{}) ([]byte, error)
|
|
logicalSession *logicalSessionState
|
|
onFileEvent func(FileEvent)
|
|
fileEventObserver func(FileEvent)
|
|
fileTransferCfg fileTransferConfig
|
|
signalReliableCfg signalReliabilityConfig
|
|
streamRuntime *streamRuntime
|
|
recordRuntime *recordRuntime
|
|
bulkRuntime *bulkRuntime
|
|
bulkOpenTuning BulkOpenTuning
|
|
bulkDedicatedSidecarMu sync.Mutex
|
|
bulkDedicatedSidecars map[*LogicalConn]map[uint32]*bulkDedicatedSidecar
|
|
connectionRetryState *connectionRetryState
|
|
detachedClientKeepSeconds int64
|
|
securityReadyCheck bool
|
|
showError bool
|
|
debugMode bool
|
|
}
|
|
|
|
func NewServer() Server {
|
|
transport := defaultModernPSKTransportBundle()
|
|
var server ServerCommon
|
|
server.wg = stario.NewWaitGroup(0)
|
|
server.parallelNum = 0
|
|
server.noFinSyncMsgMaxKeepSeconds = 0
|
|
server.maxHeartbeatLostSeconds = 300
|
|
server.stopCtx, server.stopFn = context.WithCancel(context.Background())
|
|
server.SecretKey = nil
|
|
server.handshakeRsaKey = defaultRsaKey
|
|
server.peerRegistry = newServerPeerRegistry()
|
|
server.defaultMsgEn = transport.msgEn
|
|
server.defaultMsgDe = transport.msgDe
|
|
server.defaultFastStreamEncode = transport.fastStreamEncode
|
|
server.defaultFastBulkEncode = transport.fastBulkEncode
|
|
server.defaultFastPlainEncode = transport.fastPlainEncode
|
|
server.securityReadyCheck = true
|
|
server.sequenceEn = encode
|
|
server.sequenceDe = Decode
|
|
server.alive.Store(false)
|
|
server.linkFns = make(map[string]func(*Message))
|
|
server.fileTransferCfg = defaultFileTransferConfig()
|
|
server.signalReliableCfg = defaultSignalReliabilityConfig()
|
|
server.logicalSession = newLogicalSessionState(server.fileTransferCfg, server.signalReliableCfg)
|
|
server.streamRuntime = newStreamRuntime("sstrm")
|
|
server.recordRuntime = newRecordRuntime()
|
|
server.bulkRuntime = newBulkRuntime("sblk")
|
|
server.bulkOpenTuning = defaultBulkOpenTuning()
|
|
server.bulkDedicatedSidecars = make(map[*LogicalConn]map[uint32]*bulkDedicatedSidecar)
|
|
server.connectionRetryState = newConnectionRetryState()
|
|
server.onFileEvent = normalizeFileEventCallback(nil)
|
|
server.fileEventObserver = normalizeFileEventCallback(nil)
|
|
server.defaultFns = func(message *Message) {
|
|
return
|
|
}
|
|
server.setServerDefaultTransportProtectionProfile(defaultTransportProtectionProfile())
|
|
server.peerAttachSecurity.Store(defaultPeerAttachSecurityState())
|
|
server.sessionRuntime.Store(newServerSessionRuntimeBase(server.stopCtx, server.stopFn))
|
|
bindServerStreamControl(&server)
|
|
bindServerBulkControl(&server)
|
|
server.getTransferState().setBuiltinHandler(server.builtinFileTransferHandler)
|
|
return &server
|
|
}
|