Add Version Output Support to Snowflake

From now on, there will be a file at common/version/version.go that includes current version number.
This commit is contained in:
Shelikhoo 2022-11-08 14:58:23 +00:00
parent 2c599f8827
commit 33248f3dec
No known key found for this signature in database
GPG key ID: C4D5E79D22B25316
8 changed files with 81 additions and 0 deletions

View file

@ -3,6 +3,7 @@ package main
import ( import (
"flag" "flag"
"fmt"
"io" "io"
"io/ioutil" "io/ioutil"
"log" "log"
@ -19,6 +20,7 @@ import (
sf "git.torproject.org/pluggable-transports/snowflake.git/v2/client/lib" sf "git.torproject.org/pluggable-transports/snowflake.git/v2/client/lib"
"git.torproject.org/pluggable-transports/snowflake.git/v2/common/event" "git.torproject.org/pluggable-transports/snowflake.git/v2/common/event"
"git.torproject.org/pluggable-transports/snowflake.git/v2/common/safelog" "git.torproject.org/pluggable-transports/snowflake.git/v2/common/safelog"
"git.torproject.org/pluggable-transports/snowflake.git/v2/common/version"
) )
const ( const (
@ -157,6 +159,7 @@ func main() {
unsafeLogging := flag.Bool("unsafe-logging", false, "prevent logs from being scrubbed") unsafeLogging := flag.Bool("unsafe-logging", false, "prevent logs from being scrubbed")
max := flag.Int("max", DefaultSnowflakeCapacity, max := flag.Int("max", DefaultSnowflakeCapacity,
"capacity for number of multiplexed WebRTC peers") "capacity for number of multiplexed WebRTC peers")
versionFlag := flag.Bool("version", false, "display version info to stderr and quit")
// Deprecated // Deprecated
oldLogToStateDir := flag.Bool("logToStateDir", false, "use -log-to-state-dir instead") oldLogToStateDir := flag.Bool("logToStateDir", false, "use -log-to-state-dir instead")
@ -164,6 +167,11 @@ func main() {
flag.Parse() flag.Parse()
if *versionFlag {
fmt.Fprintf(os.Stderr, "snowflake-client %s", version.ConstructResult())
os.Exit(0)
}
log.SetFlags(log.LstdFlags | log.LUTC) log.SetFlags(log.LstdFlags | log.LUTC)
// Don't write to stderr; versions of tor earlier than about 0.3.5.6 do // Don't write to stderr; versions of tor earlier than about 0.3.5.6 do

View file

@ -36,3 +36,11 @@ func NameToUTLSID(name string) (utls.ClientHelloID, error) {
} }
return utls.ClientHelloID{}, errNameNotFound return utls.ClientHelloID{}, errNameNotFound
} }
func ListAllNames() []string {
var names []string
for k, _ := range clientHelloIDMap {
names = append(names, k)
}
return names
}

View file

@ -0,0 +1,24 @@
package utls
import (
"git.torproject.org/pluggable-transports/snowflake.git/v2/common/version"
"strings"
)
func generateVersionOutput() string {
var versionOutputBuilder strings.Builder
versionOutputBuilder.WriteString(`Known utls-imitate values:
(empty)
`)
for _, name := range ListAllNames() {
versionOutputBuilder.WriteString(name)
versionOutputBuilder.WriteRune('\n')
}
return versionOutputBuilder.String()
}
func init() {
version.AddVersionDetail(generateVersionOutput())
}

View file

@ -0,0 +1,5 @@
package version
func ConstructResult() string {
return GetVersion() + "\n" + GetVersionDetail()
}

13
common/version/detail.go Normal file
View file

@ -0,0 +1,13 @@
package version
import "strings"
var detailBuilder strings.Builder
func AddVersionDetail(detail string) {
detailBuilder.WriteString(detail)
}
func GetVersionDetail() string {
return detailBuilder.String()
}

View file

@ -0,0 +1,7 @@
package version
func GetVersion() string {
return version
}
var version = "2.3.1"

View file

@ -2,6 +2,7 @@ package main
import ( import (
"flag" "flag"
"fmt"
"io" "io"
"io/ioutil" "io/ioutil"
"log" "log"
@ -12,6 +13,7 @@ import (
"git.torproject.org/pluggable-transports/snowflake.git/v2/common/event" "git.torproject.org/pluggable-transports/snowflake.git/v2/common/event"
"git.torproject.org/pluggable-transports/snowflake.git/v2/common/safelog" "git.torproject.org/pluggable-transports/snowflake.git/v2/common/safelog"
"git.torproject.org/pluggable-transports/snowflake.git/v2/common/version"
sf "git.torproject.org/pluggable-transports/snowflake.git/v2/proxy/lib" sf "git.torproject.org/pluggable-transports/snowflake.git/v2/proxy/lib"
) )
@ -31,11 +33,17 @@ func main() {
"the time interval to output summary, 0s disables summaries. Valid time units are \"s\", \"m\", \"h\". ") "the time interval to output summary, 0s disables summaries. Valid time units are \"s\", \"m\", \"h\". ")
verboseLogging := flag.Bool("verbose", false, "increase log verbosity") verboseLogging := flag.Bool("verbose", false, "increase log verbosity")
ephemeralPortsRangeFlag := flag.String("ephemeral-ports-range", "", "ICE UDP ephemeral ports range (format:\"<min>:<max>\")") ephemeralPortsRangeFlag := flag.String("ephemeral-ports-range", "", "ICE UDP ephemeral ports range (format:\"<min>:<max>\")")
versionFlag := flag.Bool("version", false, "display version info to stderr and quit")
var ephemeralPortsRange []uint16 = []uint16{0, 0} var ephemeralPortsRange []uint16 = []uint16{0, 0}
flag.Parse() flag.Parse()
if *versionFlag {
fmt.Fprintf(os.Stderr, "snowflake-proxy %s", version.ConstructResult())
os.Exit(0)
}
eventLogger := event.NewSnowflakeEventDispatcher() eventLogger := event.NewSnowflakeEventDispatcher()
if *ephemeralPortsRangeFlag != "" { if *ephemeralPortsRangeFlag != "" {

View file

@ -19,6 +19,7 @@ import (
"syscall" "syscall"
"git.torproject.org/pluggable-transports/snowflake.git/v2/common/safelog" "git.torproject.org/pluggable-transports/snowflake.git/v2/common/safelog"
"git.torproject.org/pluggable-transports/snowflake.git/v2/common/version"
"golang.org/x/crypto/acme/autocert" "golang.org/x/crypto/acme/autocert"
pt "git.torproject.org/pluggable-transports/goptlib.git" pt "git.torproject.org/pluggable-transports/goptlib.git"
@ -130,6 +131,7 @@ func main() {
var disableTLS bool var disableTLS bool
var logFilename string var logFilename string
var unsafeLogging bool var unsafeLogging bool
var versionFlag bool
flag.Usage = usage flag.Usage = usage
flag.StringVar(&acmeEmail, "acme-email", "", "optional contact email for Let's Encrypt notifications") flag.StringVar(&acmeEmail, "acme-email", "", "optional contact email for Let's Encrypt notifications")
@ -137,8 +139,14 @@ func main() {
flag.BoolVar(&disableTLS, "disable-tls", false, "don't use HTTPS") flag.BoolVar(&disableTLS, "disable-tls", false, "don't use HTTPS")
flag.StringVar(&logFilename, "log", "", "log file to write to") flag.StringVar(&logFilename, "log", "", "log file to write to")
flag.BoolVar(&unsafeLogging, "unsafe-logging", false, "prevent logs from being scrubbed") flag.BoolVar(&unsafeLogging, "unsafe-logging", false, "prevent logs from being scrubbed")
flag.BoolVar(&versionFlag, "unsafe-logging", false, "display version info to stderr and quit")
flag.Parse() flag.Parse()
if versionFlag {
fmt.Fprintf(os.Stderr, "snowflake-server %s", version.ConstructResult())
os.Exit(0)
}
log.SetFlags(log.LstdFlags | log.LUTC) log.SetFlags(log.LstdFlags | log.LUTC)
var logOutput io.Writer = os.Stderr var logOutput io.Writer = os.Stderr