mirror of
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake.git
synced 2025-10-13 11:11:30 -04:00
Merge branch 'feat/sd-notify' into 'main'
feat(proxy): add sd_notify support See merge request tpo/anti-censorship/pluggable-transports/snowflake!610
This commit is contained in:
commit
a2989f7c22
4 changed files with 43 additions and 0 deletions
1
go.mod
1
go.mod
|
@ -7,6 +7,7 @@ require (
|
|||
github.com/aws/aws-sdk-go-v2/config v1.30.2
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.18.5
|
||||
github.com/aws/aws-sdk-go-v2/service/sqs v1.38.5
|
||||
github.com/coreos/go-systemd/v22 v22.5.0
|
||||
github.com/golang/mock v1.6.0
|
||||
github.com/gorilla/websocket v1.5.3
|
||||
github.com/miekg/dns v1.1.65
|
||||
|
|
3
go.sum
3
go.sum
|
@ -39,11 +39,14 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk
|
|||
github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU=
|
||||
github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA=
|
||||
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
||||
github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs=
|
||||
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||
github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
|
||||
|
|
|
@ -822,6 +822,8 @@ func (sf *SnowflakeProxy) Start() error {
|
|||
}
|
||||
tokens = newTokens(sf.Capacity)
|
||||
|
||||
sdnotifyStatus("Checking NAT type...")
|
||||
|
||||
err = sf.checkNATType(config, sf.NATProbeURL)
|
||||
if err != nil {
|
||||
// non-fatal error. Log it and continue
|
||||
|
@ -830,6 +832,9 @@ func (sf *SnowflakeProxy) Start() error {
|
|||
}
|
||||
sf.EventDispatcher.OnNewSnowflakeEvent(event.EventOnCurrentNATTypeDetermined{CurNATType: getCurrentNATType()})
|
||||
|
||||
sdnotifyStatus(fmt.Sprintf("NAT type: %s", getCurrentNATType()))
|
||||
sdnotifyReady()
|
||||
|
||||
NatRetestTask := task.Periodic{
|
||||
Interval: sf.NATTypeMeasurementInterval,
|
||||
Execute: func() error {
|
||||
|
@ -846,6 +851,16 @@ func (sf *SnowflakeProxy) Start() error {
|
|||
defer NatRetestTask.Close()
|
||||
}
|
||||
|
||||
WatchdogTask := task.Periodic{
|
||||
Interval: 5 * time.Minute,
|
||||
Execute: func() error {
|
||||
sdnotifyWatchdog()
|
||||
return nil
|
||||
},
|
||||
}
|
||||
WatchdogTask.Start()
|
||||
defer WatchdogTask.Close()
|
||||
|
||||
ticker := time.NewTicker(sf.PollInterval)
|
||||
defer ticker.Stop()
|
||||
|
||||
|
@ -864,6 +879,7 @@ func (sf *SnowflakeProxy) Start() error {
|
|||
|
||||
// Stop closes all existing connections and shuts down the Snowflake.
|
||||
func (sf *SnowflakeProxy) Stop() {
|
||||
sdnotifyStopping()
|
||||
close(sf.shutdown)
|
||||
}
|
||||
|
||||
|
|
23
proxy/lib/systemd.go
Normal file
23
proxy/lib/systemd.go
Normal file
|
@ -0,0 +1,23 @@
|
|||
package snowflake_proxy
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
sdnotify "github.com/coreos/go-systemd/v22/daemon"
|
||||
)
|
||||
|
||||
func sdnotifyReady() {
|
||||
sdnotify.SdNotify(false, sdnotify.SdNotifyReady)
|
||||
}
|
||||
|
||||
func sdnotifyStopping() {
|
||||
sdnotify.SdNotify(false, sdnotify.SdNotifyStopping)
|
||||
}
|
||||
|
||||
func sdnotifyStatus(status string) {
|
||||
sdnotify.SdNotify(false, fmt.Sprintf("STATUS=%s", status))
|
||||
}
|
||||
|
||||
func sdnotifyWatchdog() {
|
||||
sdnotify.SdNotify(false, sdnotify.SdNotifyWatchdog)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue