Skip to content

Commit 46fd734

Browse files
committed
Merge branch 'master' into sbruens/proxy
2 parents 3becca2 + 55e8d0c commit 46fd734

File tree

13 files changed

+681
-482
lines changed

13 files changed

+681
-482
lines changed

cmd/outline-ss-server/main.go

+19-8
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ package main
1616

1717
import (
1818
"container/list"
19+
"context"
1920
"flag"
2021
"fmt"
2122
"log/slog"
@@ -28,6 +29,7 @@ import (
2829
"syscall"
2930
"time"
3031

32+
"github.com/Jigsaw-Code/outline-sdk/transport"
3133
"github.com/Jigsaw-Code/outline-sdk/transport/shadowsocks"
3234
"github.com/Jigsaw-Code/outline-ss-server/ipinfo"
3335
"github.com/Jigsaw-Code/outline-ss-server/service"
@@ -60,7 +62,7 @@ type SSServer struct {
6062
stopConfig func() error
6163
lnManager service.ListenerManager
6264
natTimeout time.Duration
63-
m *outlineMetricsCollector
65+
m *outlineMetrics
6466
replayCache service.ReplayCache
6567
}
6668

@@ -119,13 +121,13 @@ func newCipherListFromConfig(config ServiceConfig) (service.CipherList, error) {
119121
}
120122

121123
func (s *SSServer) NewShadowsocksStreamHandler(ciphers service.CipherList) service.StreamHandler {
122-
authFunc := service.NewShadowsocksStreamAuthenticator(ciphers, &s.replayCache, s.m)
124+
authFunc := service.NewShadowsocksStreamAuthenticator(ciphers, &s.replayCache, s.m.tcpServiceMetrics)
123125
// TODO: Register initial data metrics at zero.
124-
return service.NewStreamHandler(authFunc, s.m, tcpReadTimeout)
126+
return service.NewStreamHandler(authFunc, tcpReadTimeout)
125127
}
126128

127129
func (s *SSServer) NewShadowsocksPacketHandler(ciphers service.CipherList) service.PacketHandler {
128-
return service.NewPacketHandler(s.natTimeout, ciphers, s.m)
130+
return service.NewPacketHandler(s.natTimeout, ciphers, s.m, s.m.udpServiceMetrics)
129131
}
130132

131133
func (s *SSServer) NewShadowsocksStreamHandlerFromConfig(config ServiceConfig) (service.StreamHandler, error) {
@@ -247,7 +249,10 @@ func (s *SSServer) runConfig(config Config) (func() error, error) {
247249
return err
248250
}
249251
slog.Info("TCP service started.", "address", ln.Addr().String())
250-
go service.StreamServe(ln.AcceptStream, sh.Handle)
252+
go service.StreamServe(ln.AcceptStream, func(ctx context.Context, conn transport.StreamConn) {
253+
connMetrics := s.m.AddOpenTCPConnection(conn)
254+
sh.Handle(ctx, conn, connMetrics)
255+
})
251256

252257
pc, err := lnSet.ListenPacket(addr)
253258
if err != nil {
@@ -277,7 +282,10 @@ func (s *SSServer) runConfig(config Config) (func() error, error) {
277282
return err
278283
}
279284
}
280-
go service.StreamServe(ln.AcceptStream, sh.Handle)
285+
go service.StreamServe(ln.AcceptStream, func(ctx context.Context, conn transport.StreamConn) {
286+
connMetrics := s.m.AddOpenTCPConnection(conn)
287+
sh.Handle(ctx, conn, connMetrics)
288+
})
281289
case listenerTypeUDP:
282290
pc, err := lnSet.ListenPacket(lnConfig.Address)
283291
if err != nil {
@@ -333,7 +341,7 @@ func (s *SSServer) Stop() error {
333341
}
334342

335343
// RunSSServer starts a shadowsocks server running, and returns the server or an error.
336-
func RunSSServer(filename string, natTimeout time.Duration, sm *outlineMetricsCollector, replayHistory int) (*SSServer, error) {
344+
func RunSSServer(filename string, natTimeout time.Duration, sm *outlineMetrics, replayHistory int) (*SSServer, error) {
337345
server := &SSServer{
338346
lnManager: service.NewListenerManager(),
339347
natTimeout: natTimeout,
@@ -416,7 +424,10 @@ func main() {
416424
}
417425
defer ip2info.Close()
418426

419-
metrics := newPrometheusOutlineMetrics(ip2info)
427+
metrics, err := newPrometheusOutlineMetrics(ip2info)
428+
if err != nil {
429+
slog.Error("Failed to create Outline Prometheus metrics. Aborting.", "err", err)
430+
}
420431
metrics.SetBuildInfo(version)
421432
r := prometheus.WrapRegistererWithPrefix("shadowsocks_", prometheus.DefaultRegisterer)
422433
r.MustRegister(metrics)

0 commit comments

Comments
 (0)