mirror of
https://github.com/owntone/owntone-server.git
synced 2025-03-31 01:33:44 -04:00
Move mDNS services registration out of main()
This commit is contained in:
parent
f3c0145346
commit
0ff33f12d6
148
src/main.c
148
src/main.c
@ -36,6 +36,7 @@
|
|||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
#include <grp.h>
|
#include <grp.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
#include <sys/signalfd.h>
|
#include <sys/signalfd.h>
|
||||||
|
|
||||||
@ -200,6 +201,78 @@ daemonize(int background, char *pidfile)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
register_services(char *ffid, int no_rsp, int no_daap)
|
||||||
|
{
|
||||||
|
cfg_t *lib;
|
||||||
|
char *servername;
|
||||||
|
char *password;
|
||||||
|
char *txtrecord[10];
|
||||||
|
char records[9][128];
|
||||||
|
int port;
|
||||||
|
uint32_t hash;
|
||||||
|
int i;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
srand((unsigned int)time(NULL));
|
||||||
|
|
||||||
|
lib = cfg_getnsec(cfg, "library", 0);
|
||||||
|
|
||||||
|
servername = cfg_getstr(lib, "name");
|
||||||
|
hash = djb_hash(servername, strlen(servername));
|
||||||
|
|
||||||
|
for (i = 0; i < (sizeof(records) / sizeof(records[0])); i++)
|
||||||
|
{
|
||||||
|
memset(records[i], 0, 128);
|
||||||
|
txtrecord[i] = records[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
txtrecord[9] = NULL;
|
||||||
|
|
||||||
|
snprintf(txtrecord[0], 128, "txtvers=1");
|
||||||
|
snprintf(txtrecord[1], 128, "Database ID=%0X", hash);
|
||||||
|
snprintf(txtrecord[2], 128, "Machine ID=%0X", hash);
|
||||||
|
snprintf(txtrecord[3], 128, "Machine Name=%s", servername);
|
||||||
|
snprintf(txtrecord[4], 128, "mtd-version=%s", VERSION);
|
||||||
|
snprintf(txtrecord[5], 128, "iTSh Version=131073"); /* iTunes 6.0.4 */
|
||||||
|
snprintf(txtrecord[6], 128, "Version=196610"); /* iTunes 6.0.4 */
|
||||||
|
|
||||||
|
password = cfg_getstr(lib, "password");
|
||||||
|
snprintf(txtrecord[7], 128, "Password=%s", (password) ? "true" : "false");
|
||||||
|
|
||||||
|
if (ffid)
|
||||||
|
snprintf(txtrecord[8], 128, "ffid=%s", ffid);
|
||||||
|
else
|
||||||
|
snprintf(txtrecord[8], 128, "ffid=%08x", rand());
|
||||||
|
|
||||||
|
DPRINTF(E_INFO, L_MAIN, "Registering rendezvous names\n");
|
||||||
|
|
||||||
|
port = cfg_getint(lib, "port");
|
||||||
|
|
||||||
|
/* Register web server service */
|
||||||
|
ret = mdns_register(servername, "_http._tcp", port, txtrecord);
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
/* Register RSP service */
|
||||||
|
if (!no_rsp)
|
||||||
|
{
|
||||||
|
ret = mdns_register(servername, "_rsp._tcp", port, txtrecord);
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Register DAAP service */
|
||||||
|
if (!no_daap)
|
||||||
|
{
|
||||||
|
ret = mdns_register(servername, "_daap._tcp", port, txtrecord);
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
signal_cb(int fd, short event, void *arg)
|
signal_cb(int fd, short event, void *arg)
|
||||||
@ -260,19 +333,13 @@ main(int argc, char **argv)
|
|||||||
int loglevel;
|
int loglevel;
|
||||||
char *logdomains;
|
char *logdomains;
|
||||||
char *logfile;
|
char *logfile;
|
||||||
cfg_t *lib;
|
|
||||||
char *tmp;
|
|
||||||
int port;
|
|
||||||
char *servername;
|
|
||||||
char *ffid;
|
char *ffid;
|
||||||
char *perr;
|
char *perr;
|
||||||
char *txtrecord[10];
|
|
||||||
char *pidfile;
|
char *pidfile;
|
||||||
sigset_t sigs;
|
sigset_t sigs;
|
||||||
int sigfd;
|
int sigfd;
|
||||||
struct event sig_event;
|
struct event sig_event;
|
||||||
int ret;
|
int ret;
|
||||||
int i;
|
|
||||||
|
|
||||||
struct option option_map[] =
|
struct option option_map[] =
|
||||||
{
|
{
|
||||||
@ -317,11 +384,11 @@ main(int argc, char **argv)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 'd':
|
case 'd':
|
||||||
ret = safe_atoi(optarg, &i);
|
ret = safe_atoi(optarg, &option);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
fprintf(stderr, "Error: loglevel must be an integer in '-d %s'\n", optarg);
|
fprintf(stderr, "Error: loglevel must be an integer in '-d %s'\n", optarg);
|
||||||
else
|
else
|
||||||
loglevel = i;
|
loglevel = option;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'D':
|
case 'D':
|
||||||
@ -484,65 +551,18 @@ main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Register mDNS services */
|
/* Register mDNS services */
|
||||||
lib = cfg_getnsec(cfg, "library", 0);
|
ret = register_services(ffid, mdns_no_rsp, mdns_no_daap);
|
||||||
|
if (ret < 0)
|
||||||
servername = cfg_getstr(lib, "name");
|
|
||||||
|
|
||||||
for (i = 0; i < (sizeof(txtrecord) / sizeof(*txtrecord) - 1); i++)
|
|
||||||
{
|
{
|
||||||
txtrecord[i] = (char *)malloc(128);
|
httpd_deinit();
|
||||||
if (!txtrecord[i])
|
filescanner_deinit();
|
||||||
{
|
mdns_deinit();
|
||||||
DPRINTF(E_FATAL, L_MAIN, "Out of memory for TXT record\n");
|
db_deinit();
|
||||||
|
conffile_unload();
|
||||||
httpd_deinit();
|
logger_deinit();
|
||||||
filescanner_deinit();
|
exit(EXIT_FAILURE);
|
||||||
mdns_deinit();
|
|
||||||
db_deinit();
|
|
||||||
conffile_unload();
|
|
||||||
logger_deinit();
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
memset(txtrecord[i], 0, 128);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(txtrecord[0], 128, "txtvers=1");
|
|
||||||
snprintf(txtrecord[1], 128, "Database ID=%0X", djb_hash(servername, strlen(servername)));
|
|
||||||
snprintf(txtrecord[2], 128, "Machine ID=%0X", djb_hash(servername, strlen(servername)));
|
|
||||||
snprintf(txtrecord[3], 128, "Machine Name=%s", servername);
|
|
||||||
snprintf(txtrecord[4], 128, "mtd-version=%s", VERSION);
|
|
||||||
snprintf(txtrecord[5], 128, "iTSh Version=131073"); /* iTunes 6.0.4 */
|
|
||||||
snprintf(txtrecord[6], 128, "Version=196610"); /* iTunes 6.0.4 */
|
|
||||||
|
|
||||||
tmp = cfg_getstr(lib, "password");
|
|
||||||
snprintf(txtrecord[7], 128, "Password=%s", (tmp) ? "true" : "false");
|
|
||||||
|
|
||||||
srand((unsigned int)time(NULL));
|
|
||||||
|
|
||||||
if (ffid)
|
|
||||||
snprintf(txtrecord[8], 128, "ffid=%s", ffid);
|
|
||||||
else
|
|
||||||
snprintf(txtrecord[8], 128, "ffid=%08x", rand());
|
|
||||||
|
|
||||||
txtrecord[9] = NULL;
|
|
||||||
|
|
||||||
DPRINTF(E_LOG,L_MAIN,"Registering rendezvous names\n");
|
|
||||||
|
|
||||||
port = cfg_getint(lib, "port");
|
|
||||||
|
|
||||||
/* Register web server service */
|
|
||||||
mdns_register(servername, "_http._tcp", port, txtrecord);
|
|
||||||
/* Register RSP service */
|
|
||||||
if (!mdns_no_rsp)
|
|
||||||
mdns_register(servername, "_rsp._tcp", port, txtrecord);
|
|
||||||
/* Register DAAP service */
|
|
||||||
if (!mdns_no_daap)
|
|
||||||
mdns_register(servername, "_daap._tcp", port, txtrecord);
|
|
||||||
|
|
||||||
for (i = 0; i < (sizeof(txtrecord) / sizeof(*txtrecord) - 1); i++)
|
|
||||||
free(txtrecord[i]);
|
|
||||||
|
|
||||||
/* Set up signal fd */
|
/* Set up signal fd */
|
||||||
sigfd = signalfd(-1, &sigs, SFD_NONBLOCK | SFD_CLOEXEC);
|
sigfd = signalfd(-1, &sigs, SFD_NONBLOCK | SFD_CLOEXEC);
|
||||||
if (sigfd < 0)
|
if (sigfd < 0)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user