From 13b65104eb56756d728ce57d0b361da87eb89947 Mon Sep 17 00:00:00 2001 From: YanceyChiew <35898533+YanceyChiew@users.noreply.github.com> Date: Sat, 1 Oct 2022 17:18:50 +0800 Subject: [PATCH] dlna: add SSDP AnnounceInterval flag option The current default AnnounceInterval is too short, causing the multicast domain to be flooded with NOTIFY announcements, which may prevent other dlna devices from sleeping. This change allows users to set the announcement interval, and it's default value also increased to 12 minutes. Even within the interval, rclone can still passively respond to M-SEARCH requests from other devices. --- cmd/serve/dlna/dlna.go | 2 +- cmd/serve/dlna/dlnaflags/dlnaflags.go | 21 +++++++++++++-------- docs/content/commands/rclone_serve_dlna.md | 5 +++++ 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/cmd/serve/dlna/dlna.go b/cmd/serve/dlna/dlna.go index 4c2837217..579d695d8 100644 --- a/cmd/serve/dlna/dlna.go +++ b/cmd/serve/dlna/dlna.go @@ -118,7 +118,7 @@ func newServer(f fs.Fs, opt *dlnaflags.Options) (*server, error) { } s := &server{ - AnnounceInterval: 10 * time.Second, + AnnounceInterval: opt.AnnounceInterval, FriendlyName: friendlyName, RootDeviceUUID: makeDeviceUUID(friendlyName), Interfaces: interfaces, diff --git a/cmd/serve/dlna/dlnaflags/dlnaflags.go b/cmd/serve/dlna/dlnaflags/dlnaflags.go index 85a1347dc..10745474c 100644 --- a/cmd/serve/dlna/dlnaflags/dlnaflags.go +++ b/cmd/serve/dlna/dlnaflags/dlnaflags.go @@ -2,6 +2,8 @@ package dlnaflags import ( + "time" + "github.com/rclone/rclone/fs/config/flags" "github.com/rclone/rclone/fs/rc" "github.com/spf13/pflag" @@ -24,18 +26,20 @@ logging of all UPNP traffic. // Options is the type for DLNA serving options. type Options struct { - ListenAddr string - FriendlyName string - LogTrace bool - InterfaceNames []string + ListenAddr string + FriendlyName string + LogTrace bool + InterfaceNames []string + AnnounceInterval time.Duration } // DefaultOpt contains the defaults options for DLNA serving. var DefaultOpt = Options{ - ListenAddr: ":7879", - FriendlyName: "", - LogTrace: false, - InterfaceNames: []string{}, + ListenAddr: ":7879", + FriendlyName: "", + LogTrace: false, + InterfaceNames: []string{}, + AnnounceInterval: 12 * time.Minute, } // Opt contains the options for DLNA serving. @@ -49,6 +53,7 @@ func addFlagsPrefix(flagSet *pflag.FlagSet, prefix string, Opt *Options) { flags.StringVarP(flagSet, &Opt.FriendlyName, prefix+"name", "", Opt.FriendlyName, "Name of DLNA server") flags.BoolVarP(flagSet, &Opt.LogTrace, prefix+"log-trace", "", Opt.LogTrace, "Enable trace logging of SOAP traffic") flags.StringArrayVarP(flagSet, &Opt.InterfaceNames, prefix+"interface", "", Opt.InterfaceNames, "The interface to use for SSDP (repeat as necessary)") + flags.DurationVarP(flagSet, &Opt.AnnounceInterval, prefix+"announce-interval", "", Opt.AnnounceInterval, "The interval between SSDP announcements") } // AddFlags add the command line flags for DLNA serving. diff --git a/docs/content/commands/rclone_serve_dlna.md b/docs/content/commands/rclone_serve_dlna.md index 0343debb4..9ab1e83b9 100644 --- a/docs/content/commands/rclone_serve_dlna.md +++ b/docs/content/commands/rclone_serve_dlna.md @@ -32,6 +32,11 @@ IPs. Use `--name` to choose the friendly server name, which is by default "rclone (hostname)". +Use `--announce-interval` to specify the interval at which SSDP server +announce devices and services. Larger active announcement intervals help +keep the multicast domain clean, this value does not affect unicast +responses to `M-SEARCH` requests from other devices. + Use `--log-trace` in conjunction with `-vv` to enable additional debug logging of all UPNP traffic.