Skip to content

Commit e336213

Browse files
committed
Merge branch 'sbruens/optional-metrics' into sbruens/service
2 parents c2bae13 + 655c3cc commit e336213

File tree

3 files changed

+28
-1
lines changed

3 files changed

+28
-1
lines changed

service/shadowsocks.go

+9
Original file line numberDiff line numberDiff line change
@@ -135,3 +135,12 @@ func (cm *ssConnMetrics) AddCipherSearch(accessKeyFound bool, timeToCipher time.
135135
cm.ServiceMetrics.AddCipherSearch(cm.proto, accessKeyFound, timeToCipher)
136136
}
137137
}
138+
139+
// NoOpShadowsocksConnMetrics is a [ShadowsocksConnMetrics] that doesn't do anything. Useful in tests
140+
// or if you don't want to track metrics.
141+
type NoOpShadowsocksConnMetrics struct{}
142+
143+
var _ ShadowsocksConnMetrics = (*NoOpShadowsocksConnMetrics)(nil)
144+
145+
func (m *NoOpShadowsocksConnMetrics) AddCipherSearch(accessKeyFound bool, timeToCipher time.Duration) {
146+
}

service/tcp.go

+6
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,9 @@ type StreamAuthenticateFunc func(clientConn transport.StreamConn) (string, trans
117117
// NewShadowsocksStreamAuthenticator creates a stream authenticator that uses Shadowsocks.
118118
// TODO(fortuna): Offer alternative transports.
119119
func NewShadowsocksStreamAuthenticator(ciphers CipherList, replayCache *ReplayCache, metrics ShadowsocksConnMetrics) StreamAuthenticateFunc {
120+
if metrics == nil {
121+
metrics = &NoOpShadowsocksConnMetrics{}
122+
}
120123
return func(clientConn transport.StreamConn) (string, transport.StreamConn, *onet.ConnectionError) {
121124
// Find the cipher and acess key id.
122125
cipherEntry, clientReader, clientSalt, timeToCipher, keyErr := findAccessKey(clientConn, remoteIP(clientConn), ciphers)
@@ -241,6 +244,9 @@ func StreamServe(accept StreamAcceptFunc, handle StreamHandleFunc) {
241244
}
242245

243246
func (h *streamHandler) Handle(ctx context.Context, clientConn transport.StreamConn, connMetrics TCPConnMetrics) {
247+
if connMetrics == nil {
248+
connMetrics = &NoOpTCPConnMetrics{}
249+
}
244250
var proxyMetrics metrics.ProxyMetrics
245251
measuredClientConn := metrics.MeasureConn(clientConn, &proxyMetrics.ProxyClient, &proxyMetrics.ClientProxy)
246252
connStart := time.Now()

service/udp.go

+13-1
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,19 @@ type packetHandler struct {
8989

9090
// NewPacketHandler creates a UDPService
9191
func NewPacketHandler(natTimeout time.Duration, cipherList CipherList, m UDPMetrics, ssMetrics ShadowsocksConnMetrics) PacketHandler {
92-
return &packetHandler{natTimeout: natTimeout, ciphers: cipherList, m: m, ssm: ssMetrics, targetIPValidator: onet.RequirePublicIP}
92+
if m == nil {
93+
m = &NoOpUDPMetrics{}
94+
}
95+
if ssMetrics == nil {
96+
ssMetrics = &NoOpShadowsocksConnMetrics{}
97+
}
98+
return &packetHandler{
99+
natTimeout: natTimeout,
100+
ciphers: cipherList,
101+
m: m,
102+
ssm: ssMetrics,
103+
targetIPValidator: onet.RequirePublicIP,
104+
}
93105
}
94106

95107
// PacketHandler is a running UDP shadowsocks proxy that can be stopped.

0 commit comments

Comments
 (0)