diff --git a/p2pd/main.go b/p2pd/main.go index 21958282..a2c3ac4b 100644 --- a/p2pd/main.go +++ b/p2pd/main.go @@ -126,7 +126,7 @@ func main() { var c config.Config defaultCtx := context.Background() // context used for all streams opened by this daemon opts := []libp2p.Option{ - libp2p.UserAgent("p2pd/0.1"), + libp2p.UserAgent(p2pd.UserAgent()), libp2p.DefaultTransports, } diff --git a/version.go b/version.go new file mode 100644 index 00000000..60ab253f --- /dev/null +++ b/version.go @@ -0,0 +1,53 @@ +package p2pd + +import ( + "fmt" + "runtime/debug" + "strings" +) + +const name = "learning@home" + +var defaultUserAgent string + +func init() { + bi, ok := debug.ReadBuildInfo() + if !ok { + defaultUserAgent = name + "/unknown-build" + return + } + + version := bi.Main.Version + if version == "" { + version = "(unknown)" + } + + revision, dirty := "", "" + for _, bs := range bi.Settings { + switch bs.Key { + case "vcs.revision": + if len(bs.Value) >= 9 { + revision = bs.Value[:9] + } else { + revision = bs.Value + } + case "vcs.modified": + if bs.Value == "true" { + dirty = "-dirty" + } + } + } + + if strings.HasPrefix(version, "v") { + defaultUserAgent = fmt.Sprintf("%s/%s", name, version) + } else if revision != "" { + defaultUserAgent = fmt.Sprintf("%s/%s%s", name, revision, dirty) + } else { + defaultUserAgent = fmt.Sprintf("%s@%s", bi.Main.Path, version) + } +} + +// UserAgent returns the dynamically generated user agent string. +func UserAgent() string { + return defaultUserAgent +}