]> Sergey Matveev's repositories - btrtrc.git/blob - version/version.go
cmd/btrtrc client
[btrtrc.git] / version / version.go
1 // Package version provides default versions, user-agents etc. for client identification.
2 package version
3
4 import (
5         "fmt"
6         "reflect"
7         "runtime/debug"
8         "strings"
9 )
10
11 var (
12         DefaultExtendedHandshakeClientVersion string
13         // This should be updated when client behaviour changes in a way that other peers could care
14         // about.
15         DefaultBep20Prefix   = "-GT0003-"
16         DefaultHttpUserAgent string
17         DefaultUpnpId        string
18 )
19
20 func init() {
21         const (
22                 longNamespace   = "anacrolix"
23                 longPackageName = "torrent"
24         )
25         type Newtype struct{}
26         var newtype Newtype
27         thisPkg := reflect.TypeOf(newtype).PkgPath()
28         var (
29                 mainPath       = "unknown"
30                 mainVersion    = "unknown"
31                 torrentVersion = "unknown"
32         )
33         if buildInfo, ok := debug.ReadBuildInfo(); ok {
34                 mainPath = buildInfo.Main.Path
35                 mainVersion = buildInfo.Main.Version
36                 thisModule := ""
37                 // Note that if the main module is the same as this module, we get a version of "(devel)".
38                 for _, dep := range append(buildInfo.Deps, &buildInfo.Main) {
39                         if strings.HasPrefix(thisPkg, dep.Path) && len(dep.Path) >= len(thisModule) {
40                                 thisModule = dep.Path
41                                 torrentVersion = dep.Version
42                         }
43                 }
44         }
45         DefaultExtendedHandshakeClientVersion = fmt.Sprintf(
46                 "%v %v (%v/%v %v)",
47                 mainPath,
48                 mainVersion,
49                 longNamespace,
50                 longPackageName,
51                 torrentVersion,
52         )
53         DefaultUpnpId = fmt.Sprintf("%v %v", mainPath, mainVersion)
54         // Per https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent#library_and_net_tool_ua_strings
55         DefaultHttpUserAgent = fmt.Sprintf(
56                 "%v-%v/%v",
57                 longNamespace,
58                 longPackageName,
59                 torrentVersion,
60         )
61 }