From 86d6ba077b8d183914eec1f970ddaf077b574f4b Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sat, 12 Apr 2008 04:07:24 +0000 Subject: [PATCH] provide switches for TCP and unix sockets autoconf flags for enabling and disabling TCP and unix domain socket support. Embedded machines without a TCP stack may be better off without TCP support. git-svn-id: https://svn.musicpd.org/mpd/trunk@7236 09075e82-0dd4-0310-85a5-a0d7c8717e4f --- configure.ac | 36 ++++++++++++++++++++++++++++++++++++ src/interface.c | 4 ++++ src/listen.c | 16 ++++++++++++++++ src/os_compat.h | 5 ++++- 4 files changed, 60 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 679be11e6..d9697136e 100644 --- a/configure.ac +++ b/configure.ac @@ -65,6 +65,8 @@ AC_ARG_ENABLE(ao,[ --enable-ao enable support for libao (default: d AC_ARG_ENABLE(shout,[ --disable-shout disable support for streaming through shout (default: enable)],[enable_shout=$enableval],[enable_shout=yes]) AC_ARG_ENABLE(iconv,[ --disable-iconv disable iconv support (default: enable)],[enable_iconv=$enableval],[enable_iconv=yes]) AC_ARG_ENABLE(ipv6,[ --disable-ipv6 disable IPv6 support (default: enable)],[enable_ipv6=$enableval],[enable_ipv6=yes]) +AC_ARG_ENABLE(tcp,[ --disable-tcp disable support for clients connecting via TCP (default: enable)],[enable_tcp=$enableval],[enable_tcp=yes]) +AC_ARG_ENABLE(un,[ --enable-un enable support for clients connecting via unix domain sockets (default: disable)],[enable_un=$enableval],[enable_un=no]) AC_ARG_ENABLE(oss,[ --disable-oss disable OSS support (default: enable)],[enable_oss=$enableval],[enable_oss=yes]) AC_ARG_ENABLE(alsa,[ --disable-alsa disable ALSA support (default: enable)],[enable_alsa=$enableval],[enable_alsa=yes]) AC_ARG_ENABLE(jack,[ --disable-jack disable jack support (default: enable)],[enable_jack=$enableval],[enable_jack=yes]) @@ -132,6 +134,11 @@ dnl AC_CHECK_HEADER(langinfo.h,[enable_langinfo=yes;AC_DEFINE(HAVE_LANGINFO,1,[D AM_LANGINFO_CODESET AC_CHECK_HEADER(locale.h,[enable_locale=yes;AC_DEFINE(HAVE_LOCALE,1,[Define if locale.h is present])],enable_locale=no) +if test x$enable_tcp = xno; then + # if we don't support TCP, we don't need IPv6 either + enable_ipv6=no +fi + if test x$enable_ipv6 = xyes; then AC_MSG_CHECKING(for ipv6) AC_EGREP_CPP([AP_maGiC_VALUE], @@ -151,6 +158,14 @@ AP_maGiC_VALUE ) fi +if test x$enable_tcp = xyes; then + AC_DEFINE(HAVE_TCP, 1, [Define if TCP socket support is enabled]) +fi + +if test x$enable_un = xyes; then + AC_DEFINE(HAVE_UN, 1, [Define if unix domain socket support is enabled]) +fi + enable_osx=no case $host in *-darwin*) @@ -638,6 +653,27 @@ echo "" echo "########### MPD CONFIGURATION ############" echo "" +echo " Client Support:" +if test x$enable_tcp = xyes; then + echo " TCP support ...................enabled" +else + echo " TCP support ...................disabled" +fi + +if test x$enable_un = xyes; then + echo " Unix domain socket support ....enabled" +else + echo " Unix domain socket support ....disabled" +fi + +echo "" + +if + test x$enable_tcp = xno && + test x$enable_un = xno; then + AC_MSG_ERROR([No client interfaces configured!]) +fi + echo " Playback Support:" if test x$enable_ao = xyes; then echo " libao support .................enabled" diff --git a/src/interface.c b/src/interface.c index 43c8b3654..df9eb63f7 100644 --- a/src/interface.c +++ b/src/interface.c @@ -245,6 +245,7 @@ void openAInterface(int fd, struct sockaddr *addr) } else { const char *hostname; switch (addr->sa_family) { +#ifdef HAVE_TCP case AF_INET: hostname = (const char *)inet_ntoa(((struct sockaddr_in *) addr)->sin_addr); @@ -267,9 +268,12 @@ void openAInterface(int fd, struct sockaddr *addr) } break; #endif +#endif /* HAVE_TCP */ +#ifdef HAVE_UN case AF_UNIX: hostname = "local connection"; break; +#endif /* HAVE_UN */ default: hostname = "unknown"; } diff --git a/src/listen.c b/src/listen.c index 423b54e9a..6b2ed994e 100644 --- a/src/listen.c +++ b/src/listen.c @@ -74,6 +74,7 @@ static int establishListen(const struct sockaddr *addrp, socklen_t addrlen) int allowReuse = ALLOW_REUSE; switch (addrp->sa_family) { +#ifdef HAVE_TCP case AF_INET: pf = PF_INET; break; @@ -82,9 +83,12 @@ static int establishListen(const struct sockaddr *addrp, socklen_t addrlen) pf = PF_INET6; break; #endif +#endif /* HAVE_TCP */ +#ifdef HAVE_UN case AF_UNIX: pf = PF_UNIX; break; +#endif /* HAVE_UN */ default: FATAL("unknown address family: %i\n", addrp->sa_family); } @@ -123,6 +127,7 @@ static void parseListenConfigParam(unsigned int port, ConfigParam * param) { const struct sockaddr *addrp; socklen_t addrlen; +#ifdef HAVE_TCP struct sockaddr_in sin4; #ifdef HAVE_IPV6 struct sockaddr_in6 sin6; @@ -135,8 +140,10 @@ static void parseListenConfigParam(unsigned int port, ConfigParam * param) memset(&sin4, 0, sizeof(struct sockaddr_in)); sin4.sin_port = htons(port); sin4.sin_family = AF_INET; +#endif /* HAVE_TCP */ if (!param || 0 == strcmp(param->value, "any")) { +#ifdef HAVE_TCP DEBUG("binding to any address\n"); #ifdef HAVE_IPV6 if (useIpv6) { @@ -157,6 +164,10 @@ static void parseListenConfigParam(unsigned int port, ConfigParam * param) #endif BINDERROR(); } +#else /* HAVE_TCP */ + FATAL("TCP support is disabled\n"); +#endif /* HAVE_TCP */ +#ifdef HAVE_UN } else if (param->value[0] == '/') { size_t path_length; struct sockaddr_un sun; @@ -173,7 +184,9 @@ static void parseListenConfigParam(unsigned int port, ConfigParam * param) if (establishListen(addrp, addrlen) < 0) BINDERROR(); +#endif /* HAVE_UN */ } else { +#ifdef HAVE_TCP struct hostent *he; DEBUG("binding to address for %s\n", param->value); if (!(he = gethostbyname(param->value))) { @@ -207,6 +220,9 @@ static void parseListenConfigParam(unsigned int port, ConfigParam * param) if (establishListen(addrp, addrlen) < 0) BINDERROR(); +#else /* HAVE_TCP */ + FATAL("TCP support is disabled\n"); +#endif /* HAVE_TCP */ } } diff --git a/src/os_compat.h b/src/os_compat.h index 6409053c7..97ab02a2a 100644 --- a/src/os_compat.h +++ b/src/os_compat.h @@ -64,7 +64,6 @@ #include #include #include -#include #include #include #include @@ -75,4 +74,8 @@ #include #include +#ifdef HAVE_UN +#include +#endif + #endif /* OS_COMPAT_H */