From c96e6e2adb6de8878d42a210f9403a62e281e94e Mon Sep 17 00:00:00 2001 From: Justin Maggard Date: Tue, 22 Oct 2013 18:50:09 -0700 Subject: [PATCH] Skip the initial ssdp:alive packets when initially registering our network interfaces during startup, so the byebye's can come first. --- getifaddr.c | 20 +++++++++++--------- getifaddr.h | 2 +- minidlna.c | 4 ++-- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/getifaddr.c b/getifaddr.c index 704be9f..0f0d351 100644 --- a/getifaddr.c +++ b/getifaddr.c @@ -63,7 +63,7 @@ #include "log.h" static int -getifaddr(const char *ifname) +getifaddr(const char *ifname, int notify) { #if HAVE_GETIFADDRS struct ifaddrs *ifap, *p; @@ -95,8 +95,9 @@ getifaddr(const char *ifname) lan_addr[n_lan_addr].snotify = OpenAndConfSSDPNotifySocket(lan_addr[n_lan_addr].addr.s_addr); if (lan_addr[n_lan_addr].snotify >= 0) { - SendSSDPNotifies(lan_addr[n_lan_addr].snotify, lan_addr[n_lan_addr].str, - runtime_vars.port, runtime_vars.notify_interval); + if (notify) + SendSSDPNotifies(lan_addr[n_lan_addr].snotify, lan_addr[n_lan_addr].str, + runtime_vars.port, runtime_vars.notify_interval); n_lan_addr++; } if (ifname || n_lan_addr >= MAX_LAN_ADDR) @@ -153,8 +154,9 @@ getifaddr(const char *ifname) lan_addr[n_lan_addr].snotify = OpenAndConfSSDPNotifySocket(lan_addr[i].addr.s_addr); if (lan_addr[n_lan_addr].snotify >= 0) { - SendSSDPNotifies(lan_addr[n_lan_addr].snotify, lan_addr[n_lan_addr].str, - runtime_vars.port, runtime_vars.notify_interval); + if (notify) + SendSSDPNotifies(lan_addr[n_lan_addr].snotify, lan_addr[n_lan_addr].str, + runtime_vars.port, runtime_vars.notify_interval); n_lan_addr++; } if (ifname || n_lan_addr >= MAX_LAN_ADDR) @@ -299,7 +301,7 @@ get_remote_mac(struct in_addr ip_addr, unsigned char *mac) } void -reload_ifaces(void) +reload_ifaces(int notify) { int i; @@ -313,11 +315,11 @@ reload_ifaces(void) { for (i = 0; runtime_vars.ifaces[i]; i++) { - getifaddr(runtime_vars.ifaces[i]); + getifaddr(runtime_vars.ifaces[i], notify); } } else - getifaddr(NULL); + getifaddr(NULL, notify); for (i = 0; i < n_lan_addr; i++) { @@ -382,6 +384,6 @@ ProcessMonitorEvent(int s) nlh = NLMSG_NEXT(nlh, len); } if (changed) - reload_ifaces(); + reload_ifaces(1); #endif } diff --git a/getifaddr.h b/getifaddr.h index 1592fc2..a2447f7 100644 --- a/getifaddr.h +++ b/getifaddr.h @@ -40,7 +40,7 @@ int getsyshwaddr(char *buf, int len); int get_remote_mac(struct in_addr ip_addr, unsigned char *mac); -void reload_ifaces(void); +void reload_ifaces(int notify); int OpenAndConfMonitorSocket(); void ProcessMonitorEvent(int s); diff --git a/minidlna.c b/minidlna.c index d5c1ecb..e77dffb 100644 --- a/minidlna.c +++ b/minidlna.c @@ -169,7 +169,7 @@ sighup(int sig) signal(sig, sighup); DPRINTF(E_WARN, L_GENERAL, "received signal %d, re-read\n", sig); - reload_ifaces(); + reload_ifaces(1); } /* record the startup time */ @@ -904,7 +904,7 @@ init(int argc, char **argv) } set_startup_time(); - reload_ifaces(); + reload_ifaces(0); /* presentation url */ if (presurl)