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 (
"flag"
"fmt"
"io"
"io/ioutil"
"log"
@ -19,6 +20,7 @@ import (
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/safelog"
"git.torproject.org/pluggable-transports/snowflake.git/v2/common/version"
)
const (
@ -157,6 +159,7 @@ func main() {
unsafeLogging := flag.Bool("unsafe-logging", false, "prevent logs from being scrubbed")
max := flag.Int("max", DefaultSnowflakeCapacity,
"capacity for number of multiplexed WebRTC peers")
versionFlag := flag.Bool("version", false, "display version info to stderr and quit")
// Deprecated
oldLogToStateDir := flag.Bool("logToStateDir", false, "use -log-to-state-dir instead")
@ -164,6 +167,11 @@ func main() {
flag.Parse()
if *versionFlag {
fmt.Fprintf(os.Stderr, "snowflake-client %s", version.ConstructResult())
os.Exit(0)
}
log.SetFlags(log.LstdFlags | log.LUTC)
// 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
}
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 (
"flag"
"fmt"
"io"
"io/ioutil"
"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/safelog"
"git.torproject.org/pluggable-transports/snowflake.git/v2/common/version"
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\". ")
verboseLogging := flag.Bool("verbose", false, "increase log verbosity")
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}
flag.Parse()
if *versionFlag {
fmt.Fprintf(os.Stderr, "snowflake-proxy %s", version.ConstructResult())
os.Exit(0)
}
eventLogger := event.NewSnowflakeEventDispatcher()
if *ephemeralPortsRangeFlag != "" {

View file

@ -19,6 +19,7 @@ import (
"syscall"
"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"
pt "git.torproject.org/pluggable-transports/goptlib.git"
@ -130,6 +131,7 @@ func main() {
var disableTLS bool
var logFilename string
var unsafeLogging bool
var versionFlag bool
flag.Usage = usage
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.StringVar(&logFilename, "log", "", "log file to write to")
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()
if versionFlag {
fmt.Fprintf(os.Stderr, "snowflake-server %s", version.ConstructResult())
os.Exit(0)
}
log.SetFlags(log.LstdFlags | log.LUTC)
var logOutput io.Writer = os.Stderr