Remove support for ZeroConf/Bonjour/Rendezvous service registration
This commit is contained in:
parent
5ed7a4ea57
commit
4a6d44dce2
12
INSTALL
12
INSTALL
|
@ -12,6 +12,11 @@
|
||||||
I. Upgrade Information
|
I. Upgrade Information
|
||||||
~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Differences to version 17
|
||||||
|
|
||||||
|
- Support for ZeroConf/Bonjour/Rendezvous service registration has been
|
||||||
|
removed. The configuration option "NoZeroconf" is no longer available.
|
||||||
|
|
||||||
Differences to version 16
|
Differences to version 16
|
||||||
|
|
||||||
- Changes to the "MotdFile" specified in ngircd.conf now require a ngircd
|
- Changes to the "MotdFile" specified in ngircd.conf now require a ngircd
|
||||||
|
@ -173,13 +178,6 @@ standard locations.
|
||||||
Include support for IDENT ("AUTH") lookups. The "ident" library is
|
Include support for IDENT ("AUTH") lookups. The "ident" library is
|
||||||
required for this option.
|
required for this option.
|
||||||
|
|
||||||
* ZeroConf Support:
|
|
||||||
--with-zeroconf[=<path>]
|
|
||||||
|
|
||||||
Compile ngIRCd with support for ZeroConf multicast DNS service registration.
|
|
||||||
Either the Apple ZeroConf implementation (e. g. Mac OS X) or the Howl
|
|
||||||
library is required. Which one is available is autodetected.
|
|
||||||
|
|
||||||
* TCP-Wrappers:
|
* TCP-Wrappers:
|
||||||
--with-tcp-wrappers[=<path>]
|
--with-tcp-wrappers[=<path>]
|
||||||
|
|
||||||
|
|
80
configure.in
80
configure.in
|
@ -33,7 +33,6 @@ AH_TEMPLATE([ZLIB], [Define if zlib compression should be enabled])
|
||||||
AH_TEMPLATE([TCPWRAP], [Define if TCP wrappers should be used])
|
AH_TEMPLATE([TCPWRAP], [Define if TCP wrappers should be used])
|
||||||
AH_TEMPLATE([IRCPLUS], [Define if IRC+ protocol should be used])
|
AH_TEMPLATE([IRCPLUS], [Define if IRC+ protocol should be used])
|
||||||
AH_TEMPLATE([WANT_IPV6], [Define if IPV6 protocol should be enabled])
|
AH_TEMPLATE([WANT_IPV6], [Define if IPV6 protocol should be enabled])
|
||||||
AH_TEMPLATE([ZEROCONF], [Define if support for Zeroconf should be included])
|
|
||||||
AH_TEMPLATE([IDENTAUTH], [Define if the server should do IDENT requests])
|
AH_TEMPLATE([IDENTAUTH], [Define if the server should do IDENT requests])
|
||||||
AH_TEMPLATE([PAM], [Define if PAM should be used])
|
AH_TEMPLATE([PAM], [Define if PAM should be used])
|
||||||
AH_TEMPLATE([HAVE_sockaddr_in_len], [Define if sockaddr_in.sin_len exists])
|
AH_TEMPLATE([HAVE_sockaddr_in_len], [Define if sockaddr_in.sin_len exists])
|
||||||
|
@ -411,56 +410,6 @@ int deny_severity = 0;
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
# include support for "zeroconf"?
|
|
||||||
|
|
||||||
x_zeroconf_on=no
|
|
||||||
AC_ARG_WITH(zeroconf,
|
|
||||||
[ --with-zeroconf enable support for "Zeroconf"],
|
|
||||||
[ if test "$withval" != "no"; then
|
|
||||||
if test "$withval" != "yes"; then
|
|
||||||
CFLAGS="-I$withval/include $CFLAGS"
|
|
||||||
CPPFLAGS="-I$withval/include $CPPFLAGS"
|
|
||||||
LDFLAGS="-L$withval/lib $LDFLAGS"
|
|
||||||
fi
|
|
||||||
AC_CHECK_FUNCS(DNSServiceRegistrationCreate, x_zeroconf_on=osx,
|
|
||||||
[
|
|
||||||
AC_CHECK_LIB(pthread, pthread_mutexattr_init)
|
|
||||||
AC_CHECK_LIB(howl, sw_discovery_init)
|
|
||||||
AC_CHECK_FUNCS(sw_discovery_init, \
|
|
||||||
x_zeroconf_on=howl, \
|
|
||||||
AC_MSG_ERROR([Can't enable Zeroconf!]))
|
|
||||||
])
|
|
||||||
fi
|
|
||||||
]
|
|
||||||
)
|
|
||||||
if test "$x_zeroconf_on" = "osx"; then
|
|
||||||
AC_CHECK_HEADERS([DNSServiceDiscovery/DNSServiceDiscovery.h \
|
|
||||||
mach/port.h],,AC_MSG_ERROR([required C header missing!]))
|
|
||||||
AC_DEFINE(ZEROCONF, 1)
|
|
||||||
fi
|
|
||||||
if test "$x_zeroconf_on" = "howl"; then
|
|
||||||
for dir in /usr/local/include /usr/local/include/howl* \
|
|
||||||
/usr/include /usr/include/howl* \
|
|
||||||
/usr/local/include/avahi* /usr/include/avahi*; do
|
|
||||||
test -d "$dir" || continue
|
|
||||||
AC_MSG_CHECKING([for Howl headers in $dir])
|
|
||||||
if test -f "$dir/rendezvous/rendezvous.h"; then
|
|
||||||
if test "$dir" != "/usr/local/include" -a \
|
|
||||||
"$dir" != "/usr/include"; then
|
|
||||||
CFLAGS="-I$dir $CFLAGS"
|
|
||||||
CPPFLAGS="-I$dir $CPPFLAGS"
|
|
||||||
fi
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
break
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
AC_CHECK_HEADERS([rendezvous/rendezvous.h],, \
|
|
||||||
AC_MSG_ERROR([required C header missing!]))
|
|
||||||
AC_DEFINE(ZEROCONF, 1)
|
|
||||||
fi
|
|
||||||
|
|
||||||
# do IDENT requests using libident?
|
# do IDENT requests using libident?
|
||||||
|
|
||||||
x_identauth_on=no
|
x_identauth_on=no
|
||||||
|
@ -663,42 +612,29 @@ test "$x_strict_rfc_on" = "yes" \
|
||||||
&& echo "yes" \
|
&& echo "yes" \
|
||||||
|| echo "no"
|
|| echo "no"
|
||||||
|
|
||||||
echo $ECHO_N " Zeroconf support: $ECHO_C"
|
echo $ECHO_N " IDENT support: $ECHO_C"
|
||||||
case "$x_zeroconf_on" in
|
test "$x_identauth_on" = "yes" \
|
||||||
osx)
|
&& echo $ECHO_N "yes $ECHO_C" \
|
||||||
echo $ECHO_N "Apple $ECHO_C"
|
|| echo $ECHO_N "no $ECHO_C"
|
||||||
;;
|
|
||||||
howl)
|
|
||||||
echo $ECHO_N "Howl $ECHO_C"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo $ECHO_N "no $ECHO_C"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
echo $ECHO_N " IRC+ protocol: $ECHO_C"
|
echo $ECHO_N " IRC+ protocol: $ECHO_C"
|
||||||
test "$x_ircplus_on" = "yes" \
|
test "$x_ircplus_on" = "yes" \
|
||||||
&& echo "yes" \
|
&& echo "yes" \
|
||||||
|| echo "no"
|
|| echo "no"
|
||||||
|
|
||||||
echo $ECHO_N " IDENT support: $ECHO_C"
|
echo $ECHO_N " IPv6 protocol: $ECHO_C"
|
||||||
test "$x_identauth_on" = "yes" \
|
test "$x_ipv6_on" = "yes" \
|
||||||
&& echo $ECHO_N "yes $ECHO_C" \
|
&& echo $ECHO_N "yes $ECHO_C" \
|
||||||
|| echo $ECHO_N "no $ECHO_C"
|
|| echo $ECHO_N "no $ECHO_C"
|
||||||
echo $ECHO_N " I/O backend: $ECHO_C"
|
echo $ECHO_N " I/O backend: $ECHO_C"
|
||||||
echo "\"$x_io_backend\""
|
echo "\"$x_io_backend\""
|
||||||
|
|
||||||
echo $ECHO_N " IPv6 protocol: $ECHO_C"
|
echo $ECHO_N " PAM support: $ECHO_C"
|
||||||
test "$x_ipv6_on" = "yes" \
|
test "$x_pam_on" = "yes" \
|
||||||
&& echo $ECHO_N "yes $ECHO_C" \
|
&& echo $ECHO_N "yes $ECHO_C" \
|
||||||
|| echo $ECHO_N "no $ECHO_C"
|
|| echo $ECHO_N "no $ECHO_C"
|
||||||
echo $ECHO_N " SSL support: $ECHO_C"
|
echo $ECHO_N " SSL support: $ECHO_C"
|
||||||
echo "$x_ssl_lib"
|
echo "$x_ssl_lib"
|
||||||
|
|
||||||
echo $ECHO_N " PAM support: $ECHO_C"
|
|
||||||
test "$x_pam_on" = "yes" \
|
|
||||||
&& echo "yes" \
|
|
||||||
|| echo "no"
|
|
||||||
|
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# -eof-
|
# -eof-
|
||||||
|
|
|
@ -42,9 +42,6 @@
|
||||||
/* Define if TCP wrappers should be used */
|
/* Define if TCP wrappers should be used */
|
||||||
/*#define TCPWRAP 1*/
|
/*#define TCPWRAP 1*/
|
||||||
|
|
||||||
/* Define if support for Zeroconf should be included */
|
|
||||||
/*#define ZEROCONF 1*/
|
|
||||||
|
|
||||||
/* Define if zlib compression should be enabled */
|
/* Define if zlib compression should be enabled */
|
||||||
#define ZLIB 1
|
#define ZLIB 1
|
||||||
|
|
||||||
|
@ -103,13 +100,6 @@
|
||||||
/* Define if socklen_t exists */
|
/* Define if socklen_t exists */
|
||||||
#define HAVE_socklen_t 1
|
#define HAVE_socklen_t 1
|
||||||
|
|
||||||
#ifdef ZEROCONF
|
|
||||||
/* Define to 1 if you have the <DNSServiceDiscovery/DNSServiceDiscovery.h> header file. */
|
|
||||||
#define HAVE_DNSSERVICEDISCOVERY_DNSSERVICEDISCOVERY_H 1
|
|
||||||
/* Define to 1 if you have the `DNSServiceRegistrationCreate' function. */
|
|
||||||
#define HAVE_DNSSERVICEREGISTRATIONCREATE 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef PAM
|
#ifdef PAM
|
||||||
/* Define to 1 if you have the `pam_authenticate' function. */
|
/* Define to 1 if you have the `pam_authenticate' function. */
|
||||||
#define HAVE_PAM_AUTHENTICATE 1
|
#define HAVE_PAM_AUTHENTICATE 1
|
||||||
|
|
|
@ -32,7 +32,6 @@
|
||||||
FA322D490CEF74B1001761B3 /* match.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322D030CEF74B1001761B3 /* match.c */; };
|
FA322D490CEF74B1001761B3 /* match.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322D030CEF74B1001761B3 /* match.c */; };
|
||||||
FA322D4A0CEF74B1001761B3 /* ngircd.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322D060CEF74B1001761B3 /* ngircd.c */; };
|
FA322D4A0CEF74B1001761B3 /* ngircd.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322D060CEF74B1001761B3 /* ngircd.c */; };
|
||||||
FA322D4B0CEF74B1001761B3 /* parse.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322D080CEF74B1001761B3 /* parse.c */; };
|
FA322D4B0CEF74B1001761B3 /* parse.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322D080CEF74B1001761B3 /* parse.c */; };
|
||||||
FA322D4C0CEF74B1001761B3 /* rendezvous.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322D0A0CEF74B1001761B3 /* rendezvous.c */; };
|
|
||||||
FA322D4D0CEF74B1001761B3 /* resolve.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322D0C0CEF74B1001761B3 /* resolve.c */; };
|
FA322D4D0CEF74B1001761B3 /* resolve.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322D0C0CEF74B1001761B3 /* resolve.c */; };
|
||||||
FA322DBE0CEF7766001761B3 /* tool.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322D330CEF74B1001761B3 /* tool.c */; };
|
FA322DBE0CEF7766001761B3 /* tool.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322D330CEF74B1001761B3 /* tool.c */; };
|
||||||
FA322DC10CEF77CB001761B3 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = FA322DC00CEF77CB001761B3 /* libz.dylib */; };
|
FA322DC10CEF77CB001761B3 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = FA322DC00CEF77CB001761B3 /* libz.dylib */; };
|
||||||
|
@ -113,8 +112,6 @@
|
||||||
FA322D070CEF74B1001761B3 /* ngircd.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = ngircd.h; sourceTree = "<group>"; };
|
FA322D070CEF74B1001761B3 /* ngircd.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = ngircd.h; sourceTree = "<group>"; };
|
||||||
FA322D080CEF74B1001761B3 /* parse.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = parse.c; sourceTree = "<group>"; };
|
FA322D080CEF74B1001761B3 /* parse.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = parse.c; sourceTree = "<group>"; };
|
||||||
FA322D090CEF74B1001761B3 /* parse.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = parse.h; sourceTree = "<group>"; };
|
FA322D090CEF74B1001761B3 /* parse.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = parse.h; sourceTree = "<group>"; };
|
||||||
FA322D0A0CEF74B1001761B3 /* rendezvous.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = rendezvous.c; sourceTree = "<group>"; };
|
|
||||||
FA322D0B0CEF74B1001761B3 /* rendezvous.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = rendezvous.h; sourceTree = "<group>"; };
|
|
||||||
FA322D0C0CEF74B1001761B3 /* resolve.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = resolve.c; sourceTree = "<group>"; };
|
FA322D0C0CEF74B1001761B3 /* resolve.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = resolve.c; sourceTree = "<group>"; };
|
||||||
FA322D0D0CEF74B1001761B3 /* resolve.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = resolve.h; sourceTree = "<group>"; };
|
FA322D0D0CEF74B1001761B3 /* resolve.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = resolve.h; sourceTree = "<group>"; };
|
||||||
FA322D100CEF74B1001761B3 /* ansi2knr.1 */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.man; path = ansi2knr.1; sourceTree = "<group>"; };
|
FA322D100CEF74B1001761B3 /* ansi2knr.1 */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.man; path = ansi2knr.1; sourceTree = "<group>"; };
|
||||||
|
@ -191,7 +188,6 @@
|
||||||
FA322DA70CEF752C001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Makefile.am; sourceTree = "<group>"; };
|
FA322DA70CEF752C001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Makefile.am; sourceTree = "<group>"; };
|
||||||
FA322DA80CEF752C001761B3 /* ngircd-doc.css */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.css; path = "ngircd-doc.css"; sourceTree = "<group>"; };
|
FA322DA80CEF752C001761B3 /* ngircd-doc.css */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.css; path = "ngircd-doc.css"; sourceTree = "<group>"; };
|
||||||
FA322DA90CEF752C001761B3 /* SSL.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = SSL.txt; sourceTree = "<group>"; };
|
FA322DA90CEF752C001761B3 /* SSL.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = SSL.txt; sourceTree = "<group>"; };
|
||||||
FA322DAA0CEF752C001761B3 /* Zeroconf.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Zeroconf.txt; sourceTree = "<group>"; };
|
|
||||||
FA322DAD0CEF7538001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Makefile.am; sourceTree = "<group>"; };
|
FA322DAD0CEF7538001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Makefile.am; sourceTree = "<group>"; };
|
||||||
FA322DAE0CEF7538001761B3 /* ngircd.8.tmpl */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = ngircd.8.tmpl; sourceTree = "<group>"; };
|
FA322DAE0CEF7538001761B3 /* ngircd.8.tmpl */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = ngircd.8.tmpl; sourceTree = "<group>"; };
|
||||||
FA322DAF0CEF7538001761B3 /* ngircd.conf.5.tmpl */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = ngircd.conf.5.tmpl; sourceTree = "<group>"; };
|
FA322DAF0CEF7538001761B3 /* ngircd.conf.5.tmpl */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = ngircd.conf.5.tmpl; sourceTree = "<group>"; };
|
||||||
|
@ -354,8 +350,6 @@
|
||||||
FA322D090CEF74B1001761B3 /* parse.h */,
|
FA322D090CEF74B1001761B3 /* parse.h */,
|
||||||
FA99428B10E82A27007F27ED /* proc.c */,
|
FA99428B10E82A27007F27ED /* proc.c */,
|
||||||
FA99428A10E82A27007F27ED /* proc.h */,
|
FA99428A10E82A27007F27ED /* proc.h */,
|
||||||
FA322D0A0CEF74B1001761B3 /* rendezvous.c */,
|
|
||||||
FA322D0B0CEF74B1001761B3 /* rendezvous.h */,
|
|
||||||
FA322D0C0CEF74B1001761B3 /* resolve.c */,
|
FA322D0C0CEF74B1001761B3 /* resolve.c */,
|
||||||
FA322D0D0CEF74B1001761B3 /* resolve.h */,
|
FA322D0D0CEF74B1001761B3 /* resolve.h */,
|
||||||
FAA97C55124A271400D5BBA9 /* sighandlers.c */,
|
FAA97C55124A271400D5BBA9 /* sighandlers.c */,
|
||||||
|
@ -570,7 +564,6 @@
|
||||||
FA322DA10CEF752C001761B3 /* sample-ngircd.conf */,
|
FA322DA10CEF752C001761B3 /* sample-ngircd.conf */,
|
||||||
FA322DA20CEF752C001761B3 /* src */,
|
FA322DA20CEF752C001761B3 /* src */,
|
||||||
FA322DA90CEF752C001761B3 /* SSL.txt */,
|
FA322DA90CEF752C001761B3 /* SSL.txt */,
|
||||||
FA322DAA0CEF752C001761B3 /* Zeroconf.txt */,
|
|
||||||
);
|
);
|
||||||
name = doc;
|
name = doc;
|
||||||
path = ../../doc;
|
path = ../../doc;
|
||||||
|
@ -701,7 +694,6 @@
|
||||||
FA322D490CEF74B1001761B3 /* match.c in Sources */,
|
FA322D490CEF74B1001761B3 /* match.c in Sources */,
|
||||||
FA322D4A0CEF74B1001761B3 /* ngircd.c in Sources */,
|
FA322D4A0CEF74B1001761B3 /* ngircd.c in Sources */,
|
||||||
FA322D4B0CEF74B1001761B3 /* parse.c in Sources */,
|
FA322D4B0CEF74B1001761B3 /* parse.c in Sources */,
|
||||||
FA322D4C0CEF74B1001761B3 /* rendezvous.c in Sources */,
|
|
||||||
FA322D4D0CEF74B1001761B3 /* resolve.c in Sources */,
|
FA322D4D0CEF74B1001761B3 /* resolve.c in Sources */,
|
||||||
FA322DBE0CEF7766001761B3 /* tool.c in Sources */,
|
FA322DBE0CEF7766001761B3 /* tool.c in Sources */,
|
||||||
FAE5CC2E0CF2308A007D69B6 /* numeric.c in Sources */,
|
FAE5CC2E0CF2308A007D69B6 /* numeric.c in Sources */,
|
||||||
|
|
|
@ -19,7 +19,7 @@ SUFFIXES = .tmpl
|
||||||
|
|
||||||
static_docs = Bopm.txt FAQ.txt GIT.txt HowToRelease.txt PAM.txt Platforms.txt \
|
static_docs = Bopm.txt FAQ.txt GIT.txt HowToRelease.txt PAM.txt Platforms.txt \
|
||||||
Protocol.txt README-AUX.txt README-BeOS.txt README-Interix.txt RFC.txt \
|
Protocol.txt README-AUX.txt README-BeOS.txt README-Interix.txt RFC.txt \
|
||||||
SSL.txt Services.txt Zeroconf.txt
|
SSL.txt Services.txt
|
||||||
|
|
||||||
doc_templates = sample-ngircd.conf.tmpl
|
doc_templates = sample-ngircd.conf.tmpl
|
||||||
|
|
||||||
|
|
|
@ -1,40 +0,0 @@
|
||||||
|
|
||||||
ngIRCd - Next Generation IRC Server
|
|
||||||
|
|
||||||
(c)2001-2006 Alexander Barton
|
|
||||||
alex@barton.de, http://www.barton.de/
|
|
||||||
|
|
||||||
ngIRCd is free software and published under the
|
|
||||||
terms of the GNU General Public License.
|
|
||||||
|
|
||||||
-- Zeroconf.txt --
|
|
||||||
|
|
||||||
|
|
||||||
ngIRCd supports one aspect of Zeroconf Networking[1]: Multicast DNS (mDNS[2])
|
|
||||||
with DNS Service Discovery (DNS-SD[3]).
|
|
||||||
|
|
||||||
To use this features you can use one of two APIs:
|
|
||||||
|
|
||||||
a) Apple "Bonjour" API as used by Mac OS X,
|
|
||||||
b) the Howl[4] Zeroconf library or the Howl compatibility layer
|
|
||||||
of the newer Avahi[5] library.
|
|
||||||
|
|
||||||
When calling the configure script using the "--with-zeroconf" switch the
|
|
||||||
available API will be autodetected and the required additional libraries will
|
|
||||||
be linked to the ngircd binary as required.
|
|
||||||
|
|
||||||
ngIRCd then registers a DNS-SD service for each port it is listening on using
|
|
||||||
the service type "_ircu._tcp.".
|
|
||||||
|
|
||||||
|
|
||||||
Links:
|
|
||||||
|
|
||||||
[1] http://www.zeroconf.org/
|
|
||||||
[2] http://www.multicastdns.org/
|
|
||||||
[3] http://www.dns-sd.org/
|
|
||||||
[4] http://www.porchdogsoft.com/products/howl/
|
|
||||||
[5] http://avahi.org/
|
|
||||||
|
|
||||||
|
|
||||||
--
|
|
||||||
$Id: Zeroconf.txt,v 1.2 2006/08/03 14:37:29 alex Exp $
|
|
|
@ -272,12 +272,6 @@ to the PAM library at runtime; all users connecting without password are
|
||||||
allowed to connect, all passwords given will fail.
|
allowed to connect, all passwords given will fail.
|
||||||
Default: yes.
|
Default: yes.
|
||||||
.TP
|
.TP
|
||||||
\fBZeroConf\fR
|
|
||||||
If ngIRCd is compiled to register its services using ZeroConf (e.g. using
|
|
||||||
Howl, Avahi or on Mac OS X) this parameter can be used to disable service
|
|
||||||
registration at runtime.
|
|
||||||
Default: yes.
|
|
||||||
.TP
|
|
||||||
.SH [SERVER]
|
.SH [SERVER]
|
||||||
Other servers are configured in
|
Other servers are configured in
|
||||||
.I [Server]
|
.I [Server]
|
||||||
|
|
|
@ -21,7 +21,7 @@ sbin_PROGRAMS = ngircd
|
||||||
ngircd_SOURCES = ngircd.c array.c channel.c client.c conf.c conn.c conn-func.c \
|
ngircd_SOURCES = ngircd.c array.c channel.c client.c conf.c conn.c conn-func.c \
|
||||||
conn-ssl.c conn-zip.c hash.c io.c irc.c irc-channel.c irc-info.c irc-login.c \
|
conn-ssl.c conn-zip.c hash.c io.c irc.c irc-channel.c irc-info.c irc-login.c \
|
||||||
irc-mode.c irc-op.c irc-oper.c irc-server.c irc-write.c lists.c log.c \
|
irc-mode.c irc-op.c irc-oper.c irc-server.c irc-write.c lists.c log.c \
|
||||||
match.c op.c numeric.c pam.c parse.c proc.c rendezvous.c resolve.c sighandlers.c
|
match.c op.c numeric.c pam.c parse.c proc.c resolve.c sighandlers.c
|
||||||
|
|
||||||
ngircd_LDFLAGS = -L../portab -L../tool -L../ipaddr
|
ngircd_LDFLAGS = -L../portab -L../tool -L../ipaddr
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ noinst_HEADERS = ngircd.h array.h channel.h client.h conf.h conf-ssl.h conn.h \
|
||||||
conn-func.h conn-ssl.h conn-zip.h hash.h io.h irc.h irc-channel.h \
|
conn-func.h conn-ssl.h conn-zip.h hash.h io.h irc.h irc-channel.h \
|
||||||
irc-info.h irc-login.h irc-mode.h irc-op.h irc-oper.h irc-server.h \
|
irc-info.h irc-login.h irc-mode.h irc-op.h irc-oper.h irc-server.h \
|
||||||
irc-write.h lists.h log.h match.h numeric.h op.h pam.h parse.h proc.h \
|
irc-write.h lists.h log.h match.h numeric.h op.h pam.h parse.h proc.h \
|
||||||
rendezvous.h resolve.h sighandlers.h defines.h messages.h
|
resolve.h sighandlers.h defines.h messages.h
|
||||||
|
|
||||||
clean-local:
|
clean-local:
|
||||||
rm -f check-version check-help lint.out
|
rm -f check-version check-help lint.out
|
||||||
|
|
|
@ -355,7 +355,6 @@ Conf_Test( void )
|
||||||
printf(" DNS = %s\n", yesno_to_str(Conf_DNS));
|
printf(" DNS = %s\n", yesno_to_str(Conf_DNS));
|
||||||
printf(" Ident = %s\n", yesno_to_str(Conf_Ident));
|
printf(" Ident = %s\n", yesno_to_str(Conf_Ident));
|
||||||
printf(" PAM = %s\n", yesno_to_str(Conf_PAM));
|
printf(" PAM = %s\n", yesno_to_str(Conf_PAM));
|
||||||
printf(" ZeroConf = %s\n", yesno_to_str(Conf_ZeroConf));
|
|
||||||
puts("");
|
puts("");
|
||||||
|
|
||||||
opers_puts();
|
opers_puts();
|
||||||
|
@ -577,11 +576,6 @@ Set_Defaults_Optional(void)
|
||||||
#else
|
#else
|
||||||
Conf_PAM = false;
|
Conf_PAM = false;
|
||||||
#endif
|
#endif
|
||||||
#ifdef ZEROCONF
|
|
||||||
Conf_ZeroConf = true;
|
|
||||||
#else
|
|
||||||
Conf_ZeroConf = false;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -937,10 +931,6 @@ CheckLegacyNoOption(const char *Var, const char *Arg)
|
||||||
Conf_PAM = !Check_ArgIsTrue(Arg);
|
Conf_PAM = !Check_ArgIsTrue(Arg);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if(strcasecmp(Var, "NoZeroConf") == 0) {
|
|
||||||
Conf_ZeroConf = !Check_ArgIsTrue(Arg);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1278,11 +1268,6 @@ Handle_FEATURES(int Line, char *Var, char *Arg)
|
||||||
WarnPAM(Line);
|
WarnPAM(Line);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(strcasecmp(Var, "ZeroConf") == 0) {
|
|
||||||
/* register services using ZeroConf */
|
|
||||||
Conf_ZeroConf = Check_ArgIsTrue(Arg);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -152,9 +152,6 @@ GLOBAL bool Conf_Ident;
|
||||||
/* Enable all usage of PAM, even when compiled with support for it */
|
/* Enable all usage of PAM, even when compiled with support for it */
|
||||||
GLOBAL bool Conf_PAM;
|
GLOBAL bool Conf_PAM;
|
||||||
|
|
||||||
/* Enable service registration using "ZeroConf" */
|
|
||||||
GLOBAL bool Conf_ZeroConf;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* try to connect to remote systems using the ipv6 protocol,
|
* try to connect to remote systems using the ipv6 protocol,
|
||||||
* if they have an ipv6 address? (default yes)
|
* if they have an ipv6 address? (default yes)
|
||||||
|
|
|
@ -71,10 +71,6 @@
|
||||||
#include "resolve.h"
|
#include "resolve.h"
|
||||||
#include "tool.h"
|
#include "tool.h"
|
||||||
|
|
||||||
#ifdef ZEROCONF
|
|
||||||
# include "rendezvous.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "exp.h"
|
#include "exp.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -516,9 +512,6 @@ Conn_ExitListeners( void )
|
||||||
/* Close down all listening sockets */
|
/* Close down all listening sockets */
|
||||||
int *fd;
|
int *fd;
|
||||||
size_t arraylen;
|
size_t arraylen;
|
||||||
#ifdef ZEROCONF
|
|
||||||
Rendezvous_UnregisterListeners( );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
arraylen = array_length(&My_Listeners, sizeof (int));
|
arraylen = array_length(&My_Listeners, sizeof (int));
|
||||||
Log(LOG_INFO,
|
Log(LOG_INFO,
|
||||||
|
@ -575,9 +568,7 @@ NewListener(const char *listen_addr, UINT16 Port)
|
||||||
/* Create new listening socket on specified port */
|
/* Create new listening socket on specified port */
|
||||||
ng_ipaddr_t addr;
|
ng_ipaddr_t addr;
|
||||||
int sock, af;
|
int sock, af;
|
||||||
#ifdef ZEROCONF
|
|
||||||
char name[CLIENT_ID_LEN], *info;
|
|
||||||
#endif
|
|
||||||
if (!InitSinaddrListenAddr(&addr, listen_addr, Port))
|
if (!InitSinaddrListenAddr(&addr, listen_addr, Port))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
@ -613,38 +604,8 @@ NewListener(const char *listen_addr, UINT16 Port)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
Log(LOG_INFO, "Now listening on [%s]:%d (socket %d).", ng_ipaddr_tostr(&addr), Port, sock);
|
Log(LOG_INFO, "Now listening on [%s]:%d (socket %d).",
|
||||||
|
ng_ipaddr_tostr(&addr), Port, sock);
|
||||||
#ifdef ZEROCONF
|
|
||||||
/* Get best server description text */
|
|
||||||
if( ! Conf_ServerInfo[0] ) info = Conf_ServerName;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Use server info string */
|
|
||||||
info = NULL;
|
|
||||||
if( Conf_ServerInfo[0] == '[' )
|
|
||||||
{
|
|
||||||
/* Cut off leading hostname part in "[]" */
|
|
||||||
info = strchr( Conf_ServerInfo, ']' );
|
|
||||||
if( info )
|
|
||||||
{
|
|
||||||
info++;
|
|
||||||
while( *info == ' ' ) info++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if( ! info ) info = Conf_ServerInfo;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Add port number to description if non-standard */
|
|
||||||
if (Port != 6667)
|
|
||||||
snprintf(name, sizeof name, "%s (port %u)", info,
|
|
||||||
(unsigned int)Port);
|
|
||||||
else
|
|
||||||
strlcpy(name, info, sizeof name);
|
|
||||||
|
|
||||||
/* Register service */
|
|
||||||
Rendezvous_Register( name, MDNS_TYPE, Port );
|
|
||||||
#endif
|
|
||||||
return sock;
|
return sock;
|
||||||
} /* NewListener */
|
} /* NewListener */
|
||||||
|
|
||||||
|
@ -709,10 +670,6 @@ Conn_Handler(void)
|
||||||
while (!NGIRCd_SignalQuit && !NGIRCd_SignalRestart) {
|
while (!NGIRCd_SignalQuit && !NGIRCd_SignalRestart) {
|
||||||
t = time(NULL);
|
t = time(NULL);
|
||||||
|
|
||||||
#ifdef ZEROCONF
|
|
||||||
Rendezvous_Handler();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Check configured servers and established links */
|
/* Check configured servers and established links */
|
||||||
Check_Servers();
|
Check_Servers();
|
||||||
Check_Connections();
|
Check_Connections();
|
||||||
|
|
|
@ -108,11 +108,6 @@
|
||||||
#define CUT_TXTSUFFIX "[CUT]" /* Suffix for oversized messages that
|
#define CUT_TXTSUFFIX "[CUT]" /* Suffix for oversized messages that
|
||||||
have been shortened and cut off. */
|
have been shortened and cut off. */
|
||||||
|
|
||||||
#ifdef ZEROCONF
|
|
||||||
#define MDNS_TYPE "_ircu._tcp." /* Service type to register with mDNS */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -49,10 +49,6 @@
|
||||||
#include "io.h"
|
#include "io.h"
|
||||||
#include "irc.h"
|
#include "irc.h"
|
||||||
|
|
||||||
#ifdef ZEROCONF
|
|
||||||
#include "rendezvous.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "exp.h"
|
#include "exp.h"
|
||||||
#include "ngircd.h"
|
#include "ngircd.h"
|
||||||
|
|
||||||
|
@ -280,9 +276,6 @@ main( int argc, const char *argv[] )
|
||||||
* called with already dropped privileges ... */
|
* called with already dropped privileges ... */
|
||||||
Channel_Init( );
|
Channel_Init( );
|
||||||
Client_Init( );
|
Client_Init( );
|
||||||
#ifdef ZEROCONF
|
|
||||||
Rendezvous_Init( );
|
|
||||||
#endif
|
|
||||||
Conn_Init( );
|
Conn_Init( );
|
||||||
|
|
||||||
if (!io_library_init(CONNECTION_POOL)) {
|
if (!io_library_init(CONNECTION_POOL)) {
|
||||||
|
@ -330,9 +323,6 @@ main( int argc, const char *argv[] )
|
||||||
|
|
||||||
/* Alles abmelden */
|
/* Alles abmelden */
|
||||||
Conn_Exit( );
|
Conn_Exit( );
|
||||||
#ifdef ZEROCONF
|
|
||||||
Rendezvous_Exit( );
|
|
||||||
#endif
|
|
||||||
Client_Exit( );
|
Client_Exit( );
|
||||||
Channel_Exit( );
|
Channel_Exit( );
|
||||||
Log_Exit( );
|
Log_Exit( );
|
||||||
|
@ -371,11 +361,6 @@ Fill_Version( void )
|
||||||
strlcat( NGIRCd_VersionAddition, "+", sizeof NGIRCd_VersionAddition );
|
strlcat( NGIRCd_VersionAddition, "+", sizeof NGIRCd_VersionAddition );
|
||||||
strlcat( NGIRCd_VersionAddition, "TCPWRAP", sizeof NGIRCd_VersionAddition );
|
strlcat( NGIRCd_VersionAddition, "TCPWRAP", sizeof NGIRCd_VersionAddition );
|
||||||
#endif
|
#endif
|
||||||
#ifdef ZEROCONF
|
|
||||||
if( NGIRCd_VersionAddition[0] )
|
|
||||||
strlcat( NGIRCd_VersionAddition, "+", sizeof NGIRCd_VersionAddition );
|
|
||||||
strlcat( NGIRCd_VersionAddition, "ZEROCONF", sizeof NGIRCd_VersionAddition );
|
|
||||||
#endif
|
|
||||||
#ifdef IDENTAUTH
|
#ifdef IDENTAUTH
|
||||||
if( NGIRCd_VersionAddition[0] )
|
if( NGIRCd_VersionAddition[0] )
|
||||||
strlcat( NGIRCd_VersionAddition, "+", sizeof NGIRCd_VersionAddition );
|
strlcat( NGIRCd_VersionAddition, "+", sizeof NGIRCd_VersionAddition );
|
||||||
|
|
|
@ -1,379 +0,0 @@
|
||||||
/*
|
|
||||||
* ngIRCd -- The Next Generation IRC Daemon
|
|
||||||
* Copyright (c)2001-2010 by Alexander Barton (alex@barton.de)
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
* Please read the file COPYING, README and AUTHORS for more information.
|
|
||||||
*
|
|
||||||
* Rendezvous service registration.
|
|
||||||
*
|
|
||||||
* Supported APIs are:
|
|
||||||
* - Apple Mac OS X
|
|
||||||
* - Howl
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include "portab.h"
|
|
||||||
|
|
||||||
#ifdef ZEROCONF
|
|
||||||
|
|
||||||
|
|
||||||
#include "imp.h"
|
|
||||||
#include <assert.h>
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#ifdef HAVE_MACH_PORT_H
|
|
||||||
#include "mach/port.h"
|
|
||||||
#include "mach/message.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_DNSSERVICEDISCOVERY_DNSSERVICEDISCOVERY_H
|
|
||||||
#include <DNSServiceDiscovery/DNSServiceDiscovery.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_RENDEZVOUS_RENDEZVOUS_H
|
|
||||||
#include <rendezvous/rendezvous.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "defines.h"
|
|
||||||
#include "conn.h"
|
|
||||||
#include "conf.h"
|
|
||||||
#include "log.h"
|
|
||||||
|
|
||||||
#include "exp.h"
|
|
||||||
#include "rendezvous.h"
|
|
||||||
|
|
||||||
|
|
||||||
#if defined(HAVE_DNSSERVICEREGISTRATIONCREATE)
|
|
||||||
# define APPLE
|
|
||||||
#elif defined(HAVE_SW_DISCOVERY_INIT)
|
|
||||||
# define HOWL
|
|
||||||
#else
|
|
||||||
# error "Can't detect Rendezvous API!?"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#define MAX_RENDEZVOUS 1000
|
|
||||||
|
|
||||||
typedef struct _service
|
|
||||||
{
|
|
||||||
char Desc[CLIENT_ID_LEN];
|
|
||||||
#ifdef APPLE
|
|
||||||
dns_service_discovery_ref Discovery_Ref;
|
|
||||||
mach_port_t Mach_Port;
|
|
||||||
#endif
|
|
||||||
#ifdef HOWL
|
|
||||||
sw_discovery_oid Id;
|
|
||||||
#endif
|
|
||||||
} SERVICE;
|
|
||||||
|
|
||||||
static SERVICE My_Rendezvous[MAX_RENDEZVOUS];
|
|
||||||
|
|
||||||
|
|
||||||
static void Unregister( int Idx );
|
|
||||||
|
|
||||||
|
|
||||||
/* -- Apple API -- */
|
|
||||||
|
|
||||||
#ifdef APPLE
|
|
||||||
|
|
||||||
#define MAX_MACH_MSG_SIZE 512
|
|
||||||
|
|
||||||
static void Registration_Reply_Handler( DNSServiceRegistrationReplyErrorType ErrCode, void *Context );
|
|
||||||
|
|
||||||
#endif /* Apple */
|
|
||||||
|
|
||||||
|
|
||||||
/* -- Howl API -- */
|
|
||||||
|
|
||||||
#ifdef HOWL
|
|
||||||
|
|
||||||
static sw_discovery My_Discovery_Session = NULL;
|
|
||||||
static sw_salt My_Salt;
|
|
||||||
|
|
||||||
static sw_result HOWL_API Registration_Reply_Handler( sw_discovery Session, sw_discovery_publish_status Status, sw_discovery_oid Id, sw_opaque Extra );
|
|
||||||
|
|
||||||
#endif /* Howl */
|
|
||||||
|
|
||||||
|
|
||||||
GLOBAL void Rendezvous_Init( void )
|
|
||||||
{
|
|
||||||
/* Initialize structures */
|
|
||||||
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < MAX_RENDEZVOUS; i++)
|
|
||||||
My_Rendezvous[i].Desc[0] = '\0';
|
|
||||||
|
|
||||||
if (!Conf_ZeroConf)
|
|
||||||
return;
|
|
||||||
|
|
||||||
#ifdef HOWL
|
|
||||||
if( sw_discovery_init( &My_Discovery_Session ) != SW_OKAY )
|
|
||||||
{
|
|
||||||
Log( LOG_EMERG, "Can't initialize Rendezvous (Howl): sw_discovery_init() failed!" );
|
|
||||||
Log( LOG_ALERT, "%s exiting due to fatal errors!", PACKAGE_NAME );
|
|
||||||
exit( 1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
if( sw_discovery_salt( My_Discovery_Session, &My_Salt ) != SW_OKAY )
|
|
||||||
{
|
|
||||||
Log( LOG_EMERG, "Can't initialize Rendezvous (Howl): sw_discovery_salt() failed!" );
|
|
||||||
Log( LOG_ALERT, "%s exiting due to fatal errors!", PACKAGE_NAME );
|
|
||||||
exit( 1 );
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
} /* Rendezvous_Init */
|
|
||||||
|
|
||||||
|
|
||||||
GLOBAL void Rendezvous_Exit( void )
|
|
||||||
{
|
|
||||||
/* Clean up & exit module */
|
|
||||||
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for( i = 0; i < MAX_RENDEZVOUS; i++ )
|
|
||||||
{
|
|
||||||
if( My_Rendezvous[i].Desc[0] ) Unregister( i );
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef HOWL
|
|
||||||
sw_discovery_fina( My_Discovery_Session );
|
|
||||||
#endif
|
|
||||||
} /* Rendezvous_Exit */
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Register ZeroConf service
|
|
||||||
*/
|
|
||||||
GLOBAL bool Rendezvous_Register( char *Name, char *Type, UINT16 Port )
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (!Conf_ZeroConf)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
/* Search free port structure */
|
|
||||||
for( i = 0; i < MAX_RENDEZVOUS; i++ ) if( ! My_Rendezvous[i].Desc[0] ) break;
|
|
||||||
if( i >= MAX_RENDEZVOUS )
|
|
||||||
{
|
|
||||||
Log( LOG_ERR, "Can't register \"%s\" with Rendezvous: limit (%d) reached!", Name, MAX_RENDEZVOUS );
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
strlcpy( My_Rendezvous[i].Desc, Name, sizeof( My_Rendezvous[i].Desc ));
|
|
||||||
|
|
||||||
#ifdef APPLE
|
|
||||||
/* Register new service */
|
|
||||||
My_Rendezvous[i].Discovery_Ref = DNSServiceRegistrationCreate( Name, Type, "", htonl( Port ), "", Registration_Reply_Handler, &My_Rendezvous[i] );
|
|
||||||
if( ! My_Rendezvous[i].Discovery_Ref )
|
|
||||||
{
|
|
||||||
Log( LOG_ERR, "Can't register \"%s\" with Rendezvous: can't register service!", My_Rendezvous[i].Desc );
|
|
||||||
My_Rendezvous[i].Desc[0] = '\0';
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Get and save the corresponding Mach Port */
|
|
||||||
My_Rendezvous[i].Mach_Port = DNSServiceDiscoveryMachPort( My_Rendezvous[i].Discovery_Ref );
|
|
||||||
if( ! My_Rendezvous[i].Mach_Port )
|
|
||||||
{
|
|
||||||
Log( LOG_ERR, "Can't register \"%s\" with Rendezvous: got no Mach Port!", My_Rendezvous[i].Desc );
|
|
||||||
/* Here we actually leek a descriptor :-( */
|
|
||||||
My_Rendezvous[i].Discovery_Ref = 0;
|
|
||||||
My_Rendezvous[i].Desc[0] = '\0';
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
#endif /* Apple */
|
|
||||||
|
|
||||||
#ifdef HOWL
|
|
||||||
if( sw_discovery_publish( My_Discovery_Session, 0, Name, Type, NULL, NULL, Port, NULL, 0, Registration_Reply_Handler, &My_Rendezvous[i], &My_Rendezvous[i].Id ) != SW_OKAY )
|
|
||||||
{
|
|
||||||
Log( LOG_ERR, "Can't register \"%s\" with Rendezvous: can't register service!", My_Rendezvous[i].Desc );
|
|
||||||
My_Rendezvous[i].Desc[0] = '\0';
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
#endif /* Howl */
|
|
||||||
|
|
||||||
Log( LOG_DEBUG, "Rendezvous: Registering \"%s\" ...", My_Rendezvous[i].Desc );
|
|
||||||
return true;
|
|
||||||
} /* Rendezvous_Register */
|
|
||||||
|
|
||||||
|
|
||||||
GLOBAL bool Rendezvous_Unregister( char *Name )
|
|
||||||
{
|
|
||||||
/* Unregister service from rendezvous */
|
|
||||||
|
|
||||||
int i;
|
|
||||||
bool ok;
|
|
||||||
|
|
||||||
ok = false;
|
|
||||||
for( i = 0; i < MAX_RENDEZVOUS; i++ )
|
|
||||||
{
|
|
||||||
if( strcmp( Name, My_Rendezvous[i].Desc ) == 0 )
|
|
||||||
{
|
|
||||||
Unregister( i );
|
|
||||||
ok = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ok;
|
|
||||||
} /* Rendezvous_Unregister */
|
|
||||||
|
|
||||||
|
|
||||||
GLOBAL void Rendezvous_UnregisterListeners( void )
|
|
||||||
{
|
|
||||||
/* Unregister all our listening sockets from Rendezvous */
|
|
||||||
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for( i = 0; i < MAX_RENDEZVOUS; i++ )
|
|
||||||
{
|
|
||||||
if( My_Rendezvous[i].Desc[0] ) Unregister( i );
|
|
||||||
}
|
|
||||||
} /* Rendezvous_UnregisterListeners */
|
|
||||||
|
|
||||||
|
|
||||||
GLOBAL void Rendezvous_Handler( void )
|
|
||||||
{
|
|
||||||
/* Handle all Rendezvous stuff; this function must be called
|
|
||||||
* periodically from the run loop of the main program */
|
|
||||||
|
|
||||||
if (!Conf_ZeroConf)
|
|
||||||
return;
|
|
||||||
|
|
||||||
#ifdef APPLE
|
|
||||||
int i;
|
|
||||||
char buffer[MAX_MACH_MSG_SIZE];
|
|
||||||
mach_msg_return_t result;
|
|
||||||
mach_msg_header_t *msg;
|
|
||||||
|
|
||||||
for( i = 0; i < MAX_RENDEZVOUS; i++ )
|
|
||||||
{
|
|
||||||
if( ! My_Rendezvous[i].Discovery_Ref ) continue;
|
|
||||||
|
|
||||||
/* Read message from Mach Port */
|
|
||||||
msg = (mach_msg_header_t *)buffer;
|
|
||||||
result = mach_msg( msg, MACH_RCV_MSG|MACH_RCV_TIMEOUT, 0, MAX_MACH_MSG_SIZE, My_Rendezvous[i].Mach_Port, 1, 0 );
|
|
||||||
|
|
||||||
/* Handle message */
|
|
||||||
if( result == MACH_MSG_SUCCESS ) DNSServiceDiscovery_handleReply( msg );
|
|
||||||
#ifdef DEBUG
|
|
||||||
else if( result != MACH_RCV_TIMED_OUT ) Log( LOG_DEBUG, "mach_msg(): %ld", (long)result );
|
|
||||||
#endif /* Debug */
|
|
||||||
}
|
|
||||||
#endif /* Apple */
|
|
||||||
|
|
||||||
#ifdef HOWL
|
|
||||||
sw_ulong msecs = 10;
|
|
||||||
sw_salt_step( My_Salt, &msecs );
|
|
||||||
#endif
|
|
||||||
} /* Rendezvous_Handler */
|
|
||||||
|
|
||||||
|
|
||||||
static void Unregister( int Idx )
|
|
||||||
{
|
|
||||||
/* Unregister service */
|
|
||||||
|
|
||||||
#ifdef APPLE
|
|
||||||
DNSServiceDiscoveryDeallocate( My_Rendezvous[Idx].Discovery_Ref );
|
|
||||||
#endif /* Apple */
|
|
||||||
|
|
||||||
#ifdef HOWL
|
|
||||||
if( sw_discovery_cancel( My_Discovery_Session, My_Rendezvous[Idx].Id ) != SW_OKAY )
|
|
||||||
{
|
|
||||||
Log( LOG_ERR, "Rendezvous: Failed to unregister \"%s\"!", My_Rendezvous[Idx].Desc );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif /* Howl */
|
|
||||||
|
|
||||||
Log( LOG_INFO, "Unregistered \"%s\" from Rendezvous.", My_Rendezvous[Idx].Desc );
|
|
||||||
My_Rendezvous[Idx].Desc[0] = '\0';
|
|
||||||
} /* Unregister */
|
|
||||||
|
|
||||||
|
|
||||||
/* -- Apple API -- */
|
|
||||||
|
|
||||||
#ifdef APPLE
|
|
||||||
|
|
||||||
|
|
||||||
static void Registration_Reply_Handler( DNSServiceRegistrationReplyErrorType ErrCode, void *Context )
|
|
||||||
{
|
|
||||||
SERVICE *s = (SERVICE *)Context;
|
|
||||||
char txt[50];
|
|
||||||
|
|
||||||
if( ErrCode == kDNSServiceDiscoveryNoError )
|
|
||||||
{
|
|
||||||
/* Success! */
|
|
||||||
Log( LOG_INFO, "Successfully registered \"%s\" with Rendezvous.", s->Desc );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch( ErrCode )
|
|
||||||
{
|
|
||||||
case kDNSServiceDiscoveryAlreadyRegistered:
|
|
||||||
strcpy( txt, "name already registered!" );
|
|
||||||
break;
|
|
||||||
case kDNSServiceDiscoveryNameConflict:
|
|
||||||
strcpy( txt, "name conflict!" );
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
snprintf(txt, sizeof txt, "error code %ld!",
|
|
||||||
(long)ErrCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
Log( LOG_INFO, "Can't register \"%s\" with Rendezvous: %s", s->Desc, txt );
|
|
||||||
s->Desc[0] = '\0';
|
|
||||||
} /* Registration_Reply_Handler */
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* Apple */
|
|
||||||
|
|
||||||
|
|
||||||
/* -- Howl API -- */
|
|
||||||
|
|
||||||
#ifdef HOWL
|
|
||||||
|
|
||||||
|
|
||||||
static sw_result HOWL_API Registration_Reply_Handler( sw_discovery Session, sw_discovery_publish_status Status, UNUSED sw_discovery_oid Id, sw_opaque Extra )
|
|
||||||
{
|
|
||||||
SERVICE *s = (SERVICE *)Extra;
|
|
||||||
char txt[50];
|
|
||||||
|
|
||||||
assert( Session == My_Discovery_Session );
|
|
||||||
assert( Extra != NULL );
|
|
||||||
|
|
||||||
if( Status == SW_DISCOVERY_PUBLISH_STARTED || Status == SW_DISCOVERY_PUBLISH_STOPPED )
|
|
||||||
{
|
|
||||||
/* Success! */
|
|
||||||
Log( LOG_INFO, "Successfully registered \"%s\" with Rendezvous.", s->Desc );
|
|
||||||
return SW_OKAY;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch( Status )
|
|
||||||
{
|
|
||||||
case SW_DISCOVERY_PUBLISH_NAME_COLLISION:
|
|
||||||
strcpy( txt, "name conflict!" );
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
snprintf(txt, sizeof txt, "error code %ld!",
|
|
||||||
(long)Status);
|
|
||||||
}
|
|
||||||
|
|
||||||
Log( LOG_INFO, "Can't register \"%s\" with Rendezvous: %s", s->Desc, txt );
|
|
||||||
s->Desc[0] = '\0';
|
|
||||||
|
|
||||||
return SW_OKAY;
|
|
||||||
} /* Registration_Reply_Handler */
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* Howl */
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* ZEROCONF */
|
|
||||||
|
|
||||||
|
|
||||||
/* -eof- */
|
|
|
@ -1,39 +0,0 @@
|
||||||
/*
|
|
||||||
* ngIRCd -- The Next Generation IRC Daemon
|
|
||||||
* Copyright (c)2001-2003 by Alexander Barton (alex@barton.de)
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
* Please read the file COPYING, README and AUTHORS for more information.
|
|
||||||
*
|
|
||||||
* $Id: rendezvous.h,v 1.4 2006/05/10 21:24:01 alex Exp $
|
|
||||||
*
|
|
||||||
* "Rendezvous" functions (Header)
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef ZEROCONF
|
|
||||||
|
|
||||||
#ifndef __rdezvous_h__
|
|
||||||
#define __rdezvous_h__
|
|
||||||
|
|
||||||
|
|
||||||
GLOBAL void Rendezvous_Init( void );
|
|
||||||
GLOBAL void Rendezvous_Exit( void );
|
|
||||||
|
|
||||||
GLOBAL bool Rendezvous_Register( char *Name, char *Type, UINT16 Port );
|
|
||||||
|
|
||||||
GLOBAL bool Rendezvous_Unregister( char *Name );
|
|
||||||
GLOBAL void Rendezvous_UnregisterListeners( void );
|
|
||||||
|
|
||||||
GLOBAL void Rendezvous_Handler( void );
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* __rdezvous_h__ */
|
|
||||||
|
|
||||||
#endif /* ZEROCONF */
|
|
||||||
|
|
||||||
|
|
||||||
/* -eof- */
|
|
Loading…
Reference in New Issue