First version of the Bonjour protocol plugin
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/protocols/bonjour/Makefile Sun Aug 21 18:56:40 2005 -0400
@@ -0,0 +1,728 @@
+# Makefile.in generated by automake 1.9.4 from Makefile.am. +# src/protocols/bonjour/Makefile. Generated from Makefile.in by configure. +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +SOURCES = $(libbonjour_a_SOURCES) $(libbonjour_la_SOURCES) +pkgdatadir = $(datadir)/gaim +pkglibdir = $(libdir)/gaim +pkgincludedir = $(includedir)/gaim +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = /usr/bin/install -c +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +build_triplet = powerpc-unknown-linux-gnu +host_triplet = powerpc-unknown-linux-gnu +target_triplet = powerpc-unknown-linux-gnu +subdir = src/protocols/bonjour +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +LIBRARIES = $(noinst_LIBRARIES) +libbonjour_a_AR = $(AR) $(ARFLAGS) +am__libbonjour_a_SOURCES_DIST = bonjour.c buddy.c dns_sd.c jabber.c +am__objects_1 = libbonjour_a-bonjour.$(OBJEXT) \ + libbonjour_a-buddy.$(OBJEXT) libbonjour_a-dns_sd.$(OBJEXT) \ + libbonjour_a-jabber.$(OBJEXT) +#am_libbonjour_a_OBJECTS = $(am__objects_1) +libbonjour_a_OBJECTS = $(am_libbonjour_a_OBJECTS) +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(pkgdir)" +pkgLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(pkg_LTLIBRARIES) +am__libbonjour_la_SOURCES_DIST = bonjour.c buddy.c dns_sd.c jabber.c +am__objects_2 = bonjour.lo buddy.lo dns_sd.lo jabber.lo +am_libbonjour_la_OBJECTS = $(am__objects_2) +libbonjour_la_OBJECTS = $(am_libbonjour_la_OBJECTS) +am_libbonjour_la_rpath = -rpath $(pkgdir) +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ +LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(libbonjour_a_SOURCES) $(libbonjour_la_SOURCES) +DIST_SOURCES = $(am__libbonjour_a_SOURCES_DIST) \ + $(am__libbonjour_la_SOURCES_DIST) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /home/juanjo/Desktop/Projects/Gaim/oldstatus/missing --run aclocal-1.9 +AMTAR = ${SHELL} /home/juanjo/Desktop/Projects/Gaim/oldstatus/missing --run tar +AUDIOFILE_CONFIG = /usr/bin/audiofile-config +AUDIOFILE_LIBS = -L/usr/lib -laudiofile -lm +AUTOCONF = ${SHELL} /home/juanjo/Desktop/Projects/Gaim/oldstatus/missing --run autoconf +AUTOHEADER = ${SHELL} /home/juanjo/Desktop/Projects/Gaim/oldstatus/missing --run autoheader +AUTOMAKE = ${SHELL} /home/juanjo/Desktop/Projects/Gaim/oldstatus/missing --run automake-1.9 +BINRELOC_CFLAGS = -DENABLE_BINRELOC +BUILD_GEVOLUTION_FALSE = +BUILD_GEVOLUTION_TRUE = # +BUILD_INCLUDED_LIBINTL = no +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 -Wall -g3 +CXXDEPMODE = depmode=gcc3 +DYNAMIC_BONJOUR_FALSE = # +DYNAMIC_JABBER_FALSE = # +DYNAMIC_NAPSTER_FALSE = # +DYNAMIC_NOVELL_FALSE = # +DYNAMIC_PRPLS = bonjour gg irc jabber msn napster novell oscar silc yahoo zephyr +DYNAMIC_ZEPHYR_FALSE = # +EVOLUTION_ADDRESSBOOK_CFLAGS = +EVOLUTION_ADDRESSBOOK_LIBS = +EXTERNAL_LIBZEPHYR_FALSE = +EXTERNAL_LIBZEPHYR_TRUE = # +GLIB_CFLAGS = -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include +GLIB_GENMARSHAL = glib-genmarshal +GLIB_MKENUMS = glib-mkenums +GMSGFMT = /usr/bin/msgfmt +GNUTLS_CFLAGS = -INONE/include +GNUTLS_LIBS = -lgnutls -lgcrypt +GOBJECT_QUERY = gobject-query +GTKSPELL_CFLAGS = -DXTHREADS -I/usr/include/gtkspell-2.0 -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/X11R6/include -I/usr/include/atk-1.0 -I/usr/include/pango-1.0 -I/usr/include/freetype2 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include +GTKSPELL_LIBS = -lgtkspell -laspell -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangoxft-1.0 -lpangox-1.0 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 +GTK_CFLAGS = -DXTHREADS -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/X11R6/include -I/usr/include/atk-1.0 -I/usr/include/pango-1.0 -I/usr/include/freetype2 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include +GTK_LIBS = -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangoxft-1.0 -lpangox-1.0 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 +HOWL_CFLAGS = -I/usr/local/include/howl +HOWL_LIBS = -L/usr/local/lib -lhowl -lpthread +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s +INTL_LIBTOOL_SUFFIX_PREFIX = +LIBTOOL = $(SHELL) $(top_builddir)/libtool --silent +MAKEINFO = ${SHELL} /home/juanjo/Desktop/Projects/Gaim/oldstatus/missing --run makeinfo +MKINSTALLDIRS = $(top_builddir)/./mkinstalldirs +MSGFMT = /usr/bin/msgfmt +MSGMERGE = /usr/bin/msgmerge +NSS_CFLAGS = -I/usr/include/mozilla/nss -I/usr/include/mozilla/nspr +NSS_LIBS = -L/usr/lib/mozilla -lnss3 -lsmime3 -lssl3 -lsoftokn3 -lplds4 -lplc4 -lnspr4 -ldl -lc -lpthread +PACKAGE_BUGREPORT = gaim-devel@lists.sourceforge.net +PACKAGE_STRING = gaim 1.5.1cvs +PACKAGE_VERSION = 1.5.1cvs +PERL_CFLAGS = -D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/lib/perl/5.8/CORE +PERL_LIBS = -Wl,-E -L/usr/local/lib /usr/lib/perl/5.8/auto/DynaLoader/DynaLoader.a -L/usr/lib/perl/5.8/CORE -lperl -ldl -lm -lpthread -lcrypt +PKG_CONFIG = /usr/bin/pkg-config +SILC_CFLAGS = -I/usr/include/silc +SILC_LIBS = -lsilcclient -lsilc +SM_LIBS = -L/usr/X11R6/lib -lSM -lICE +SOUND_LIBS = -lao -ldl -L/usr/lib -laudiofile -lm +STARTUP_NOTIFICATION_CFLAGS = -I/usr/include/startup-notification-1.0 +STARTUP_NOTIFICATION_LIBS = -lstartup-notification-1 +TCL_LIBS = -ldl -lieee -lm +USE_INCLUDED_LIBINTL = no +XGETTEXT = /usr/bin/xgettext +X_CFLAGS = -I/usr/X11R6/include +X_LIBS = -L/usr/X11R6/lib +am__fastdepCXX_FALSE = # +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = powerpc-unknown-linux-gnu +datadir = ${prefix}/share +gaimpath = /usr/local/bin/gaim +host = powerpc-unknown-linux-gnu +includedir = ${prefix}/include +infodir = ${prefix}/info +install_sh = /home/juanjo/Desktop/Projects/Gaim/oldstatus/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localstatedir = ${prefix}/var +oldincludedir = /usr/include +perlpath = /usr/bin/perl +program_transform_name = s,x,x, +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +sysconfdir = ${prefix}/etc +target = powerpc-unknown-linux-gnu +libbonjour_la_LDFLAGS = -module -avoid-version $(GLIB_LIBS) $(HOWL_LIBS) +#st = -DGAIM_STATIC_PRPL +#noinst_LIBRARIES = libbonjour.a +#libbonjour_a_SOURCES = $(BONJOURSOURCES) +#libbonjour_a_CFLAGS = $(AM_CFLAGS) +pkg_LTLIBRARIES = libbonjour.la +libbonjour_la_SOURCES = $(BONJOURSOURCES) +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + case '$(am__configure_deps)' in \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/protocols/bonjour/Makefile'; \ + $(AUTOMAKE) --gnu src/protocols/bonjour/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +libbonjour.a: $(libbonjour_a_OBJECTS) $(libbonjour_a_DEPENDENCIES) + $(libbonjour_a_AR) libbonjour.a $(libbonjour_a_OBJECTS) $(libbonjour_a_LIBADD) +install-pkgLTLIBRARIES: $(pkg_LTLIBRARIES) + test -z "$(pkgdir)" || $(mkdir_p) "$(DESTDIR)$(pkgdir)" + @list='$(pkg_LTLIBRARIES)'; for p in $$list; do \ + echo " $(LIBTOOL) --mode=install $(pkgLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(pkgdir)/$$f'"; \ + $(LIBTOOL) --mode=install $(pkgLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(pkgdir)/$$f"; \ +uninstall-pkgLTLIBRARIES: + @set -x; list='$(pkg_LTLIBRARIES)'; for p in $$list; do \ + echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(pkgdir)/$$p'"; \ + $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(pkgdir)/$$p"; \ + -test -z "$(pkg_LTLIBRARIES)" || rm -f $(pkg_LTLIBRARIES) + @list='$(pkg_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ +libbonjour.la: $(libbonjour_la_OBJECTS) $(libbonjour_la_DEPENDENCIES) + $(LINK) $(am_libbonjour_la_rpath) $(libbonjour_la_LDFLAGS) $(libbonjour_la_OBJECTS) $(libbonjour_la_LIBADD) $(LIBS) +include ./$(DEPDIR)/bonjour.Plo +include ./$(DEPDIR)/buddy.Plo +include ./$(DEPDIR)/dns_sd.Plo +include ./$(DEPDIR)/jabber.Plo +include ./$(DEPDIR)/libbonjour_a-bonjour.Po +include ./$(DEPDIR)/libbonjour_a-buddy.Po +include ./$(DEPDIR)/libbonjour_a-dns_sd.Po +include ./$(DEPDIR)/libbonjour_a-jabber.Po + if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ + then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ + if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ + then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c `$(CYGPATH_W) '$<'` + if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ + then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +# source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LTCOMPILE) -c -o $@ $< +libbonjour_a-bonjour.o: bonjour.c + if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -MT libbonjour_a-bonjour.o -MD -MP -MF "$(DEPDIR)/libbonjour_a-bonjour.Tpo" -c -o libbonjour_a-bonjour.o `test -f 'bonjour.c' || echo '$(srcdir)/'`bonjour.c; \ + then mv -f "$(DEPDIR)/libbonjour_a-bonjour.Tpo" "$(DEPDIR)/libbonjour_a-bonjour.Po"; else rm -f "$(DEPDIR)/libbonjour_a-bonjour.Tpo"; exit 1; fi +# source='bonjour.c' object='libbonjour_a-bonjour.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -c -o libbonjour_a-bonjour.o `test -f 'bonjour.c' || echo '$(srcdir)/'`bonjour.c +libbonjour_a-bonjour.obj: bonjour.c + if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -MT libbonjour_a-bonjour.obj -MD -MP -MF "$(DEPDIR)/libbonjour_a-bonjour.Tpo" -c -o libbonjour_a-bonjour.obj `if test -f 'bonjour.c'; then $(CYGPATH_W) 'bonjour.c'; else $(CYGPATH_W) '$(srcdir)/bonjour.c'; fi`; \ + then mv -f "$(DEPDIR)/libbonjour_a-bonjour.Tpo" "$(DEPDIR)/libbonjour_a-bonjour.Po"; else rm -f "$(DEPDIR)/libbonjour_a-bonjour.Tpo"; exit 1; fi +# source='bonjour.c' object='libbonjour_a-bonjour.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -c -o libbonjour_a-bonjour.obj `if test -f 'bonjour.c'; then $(CYGPATH_W) 'bonjour.c'; else $(CYGPATH_W) '$(srcdir)/bonjour.c'; fi` +libbonjour_a-buddy.o: buddy.c + if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -MT libbonjour_a-buddy.o -MD -MP -MF "$(DEPDIR)/libbonjour_a-buddy.Tpo" -c -o libbonjour_a-buddy.o `test -f 'buddy.c' || echo '$(srcdir)/'`buddy.c; \ + then mv -f "$(DEPDIR)/libbonjour_a-buddy.Tpo" "$(DEPDIR)/libbonjour_a-buddy.Po"; else rm -f "$(DEPDIR)/libbonjour_a-buddy.Tpo"; exit 1; fi +# source='buddy.c' object='libbonjour_a-buddy.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -c -o libbonjour_a-buddy.o `test -f 'buddy.c' || echo '$(srcdir)/'`buddy.c +libbonjour_a-buddy.obj: buddy.c + if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -MT libbonjour_a-buddy.obj -MD -MP -MF "$(DEPDIR)/libbonjour_a-buddy.Tpo" -c -o libbonjour_a-buddy.obj `if test -f 'buddy.c'; then $(CYGPATH_W) 'buddy.c'; else $(CYGPATH_W) '$(srcdir)/buddy.c'; fi`; \ + then mv -f "$(DEPDIR)/libbonjour_a-buddy.Tpo" "$(DEPDIR)/libbonjour_a-buddy.Po"; else rm -f "$(DEPDIR)/libbonjour_a-buddy.Tpo"; exit 1; fi +# source='buddy.c' object='libbonjour_a-buddy.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -c -o libbonjour_a-buddy.obj `if test -f 'buddy.c'; then $(CYGPATH_W) 'buddy.c'; else $(CYGPATH_W) '$(srcdir)/buddy.c'; fi` +libbonjour_a-dns_sd.o: dns_sd.c + if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -MT libbonjour_a-dns_sd.o -MD -MP -MF "$(DEPDIR)/libbonjour_a-dns_sd.Tpo" -c -o libbonjour_a-dns_sd.o `test -f 'dns_sd.c' || echo '$(srcdir)/'`dns_sd.c; \ + then mv -f "$(DEPDIR)/libbonjour_a-dns_sd.Tpo" "$(DEPDIR)/libbonjour_a-dns_sd.Po"; else rm -f "$(DEPDIR)/libbonjour_a-dns_sd.Tpo"; exit 1; fi +# source='dns_sd.c' object='libbonjour_a-dns_sd.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -c -o libbonjour_a-dns_sd.o `test -f 'dns_sd.c' || echo '$(srcdir)/'`dns_sd.c +libbonjour_a-dns_sd.obj: dns_sd.c + if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -MT libbonjour_a-dns_sd.obj -MD -MP -MF "$(DEPDIR)/libbonjour_a-dns_sd.Tpo" -c -o libbonjour_a-dns_sd.obj `if test -f 'dns_sd.c'; then $(CYGPATH_W) 'dns_sd.c'; else $(CYGPATH_W) '$(srcdir)/dns_sd.c'; fi`; \ + then mv -f "$(DEPDIR)/libbonjour_a-dns_sd.Tpo" "$(DEPDIR)/libbonjour_a-dns_sd.Po"; else rm -f "$(DEPDIR)/libbonjour_a-dns_sd.Tpo"; exit 1; fi +# source='dns_sd.c' object='libbonjour_a-dns_sd.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -c -o libbonjour_a-dns_sd.obj `if test -f 'dns_sd.c'; then $(CYGPATH_W) 'dns_sd.c'; else $(CYGPATH_W) '$(srcdir)/dns_sd.c'; fi` +libbonjour_a-jabber.o: jabber.c + if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -MT libbonjour_a-jabber.o -MD -MP -MF "$(DEPDIR)/libbonjour_a-jabber.Tpo" -c -o libbonjour_a-jabber.o `test -f 'jabber.c' || echo '$(srcdir)/'`jabber.c; \ + then mv -f "$(DEPDIR)/libbonjour_a-jabber.Tpo" "$(DEPDIR)/libbonjour_a-jabber.Po"; else rm -f "$(DEPDIR)/libbonjour_a-jabber.Tpo"; exit 1; fi +# source='jabber.c' object='libbonjour_a-jabber.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -c -o libbonjour_a-jabber.o `test -f 'jabber.c' || echo '$(srcdir)/'`jabber.c +libbonjour_a-jabber.obj: jabber.c + if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -MT libbonjour_a-jabber.obj -MD -MP -MF "$(DEPDIR)/libbonjour_a-jabber.Tpo" -c -o libbonjour_a-jabber.obj `if test -f 'jabber.c'; then $(CYGPATH_W) 'jabber.c'; else $(CYGPATH_W) '$(srcdir)/jabber.c'; fi`; \ + then mv -f "$(DEPDIR)/libbonjour_a-jabber.Tpo" "$(DEPDIR)/libbonjour_a-jabber.Po"; else rm -f "$(DEPDIR)/libbonjour_a-jabber.Tpo"; exit 1; fi +# source='jabber.c' object='libbonjour_a-jabber.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -c -o libbonjour_a-jabber.obj `if test -f 'jabber.c'; then $(CYGPATH_W) 'jabber.c'; else $(CYGPATH_W) '$(srcdir)/jabber.c'; fi` +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + here=`$(am__cd) $(top_builddir) && pwd` \ + && gtags -i $(GTAGS_ARGS) $$here + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + $(mkdir_p) "$(distdir)$$dir"; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ +all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) + for dir in "$(DESTDIR)$(pkgdir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ +install-exec: install-exec-am +install-data: install-data-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +installcheck: installcheck-am + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ + clean-pkgLTLIBRARIES mostlyclean-am +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-libtool distclean-tags +install-data-am: install-pkgLTLIBRARIES +install-info: install-info-am +maintainer-clean: maintainer-clean-am +maintainer-clean-am: distclean-am maintainer-clean-generic +mostlyclean: mostlyclean-am +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ +uninstall-am: uninstall-info-am uninstall-pkgLTLIBRARIES +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLIBRARIES clean-pkgLTLIBRARIES ctags \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-exec install-exec-am install-info \ + install-info-am install-man install-pkgLTLIBRARIES \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-info-am uninstall-pkgLTLIBRARIES +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/protocols/bonjour/Makefile.am Sun Aug 21 18:56:40 2005 -0400
@@ -0,0 +1,36 @@
+libbonjour_la_LDFLAGS = -module -avoid-version $(GLIB_LIBS) $(HOWL_LIBS) +noinst_LIBRARIES = libbonjour.a +libbonjour_a_SOURCES = $(BONJOURSOURCES) +libbonjour_a_CFLAGS = $(AM_CFLAGS) +pkg_LTLIBRARIES = libbonjour.la +libbonjour_la_SOURCES = $(BONJOURSOURCES) --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/protocols/bonjour/Makefile.in Sun Aug 21 18:56:40 2005 -0400
@@ -0,0 +1,728 @@
+# Makefile.in generated by automake 1.9.4 from Makefile.am. +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +SOURCES = $(libbonjour_a_SOURCES) $(libbonjour_la_SOURCES) +top_srcdir = @top_srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +target_triplet = @target@ +subdir = src/protocols/bonjour +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +LIBRARIES = $(noinst_LIBRARIES) +libbonjour_a_AR = $(AR) $(ARFLAGS) +am__libbonjour_a_SOURCES_DIST = bonjour.c buddy.c dns_sd.c jabber.c +am__objects_1 = libbonjour_a-bonjour.$(OBJEXT) \ + libbonjour_a-buddy.$(OBJEXT) libbonjour_a-dns_sd.$(OBJEXT) \ + libbonjour_a-jabber.$(OBJEXT) +@STATIC_BONJOUR_TRUE@am_libbonjour_a_OBJECTS = $(am__objects_1) +libbonjour_a_OBJECTS = $(am_libbonjour_a_OBJECTS) +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(pkgdir)" +pkgLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(pkg_LTLIBRARIES) +am__libbonjour_la_SOURCES_DIST = bonjour.c buddy.c dns_sd.c jabber.c +am__objects_2 = bonjour.lo buddy.lo dns_sd.lo jabber.lo +@STATIC_BONJOUR_FALSE@am_libbonjour_la_OBJECTS = $(am__objects_2) +libbonjour_la_OBJECTS = $(am_libbonjour_la_OBJECTS) +@STATIC_BONJOUR_FALSE@am_libbonjour_la_rpath = -rpath $(pkgdir) +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ +LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(libbonjour_a_SOURCES) $(libbonjour_la_SOURCES) +DIST_SOURCES = $(am__libbonjour_a_SOURCES_DIST) \ + $(am__libbonjour_la_SOURCES_DIST) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AUDIOFILE_CFLAGS = @AUDIOFILE_CFLAGS@ +AUDIOFILE_CONFIG = @AUDIOFILE_CONFIG@ +AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ +AUTOHEADER = @AUTOHEADER@ +BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ +BINRELOC_LIBS = @BINRELOC_LIBS@ +BUILD_GEVOLUTION_FALSE = @BUILD_GEVOLUTION_FALSE@ +BUILD_GEVOLUTION_TRUE = @BUILD_GEVOLUTION_TRUE@ +BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ +CXXDEPMODE = @CXXDEPMODE@ +DATADIRNAME = @DATADIRNAME@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DISTRIB_FALSE = @DISTRIB_FALSE@ +DISTRIB_TRUE = @DISTRIB_TRUE@ +DYNALOADER_A = @DYNALOADER_A@ +DYNAMIC_BONJOUR_FALSE = @DYNAMIC_BONJOUR_FALSE@ +DYNAMIC_BONJOUR_TRUE = @DYNAMIC_BONJOUR_TRUE@ +DYNAMIC_GG_FALSE = @DYNAMIC_GG_FALSE@ +DYNAMIC_GG_TRUE = @DYNAMIC_GG_TRUE@ +DYNAMIC_IRC_FALSE = @DYNAMIC_IRC_FALSE@ +DYNAMIC_IRC_TRUE = @DYNAMIC_IRC_TRUE@ +DYNAMIC_JABBER_FALSE = @DYNAMIC_JABBER_FALSE@ +DYNAMIC_JABBER_TRUE = @DYNAMIC_JABBER_TRUE@ +DYNAMIC_MSN_FALSE = @DYNAMIC_MSN_FALSE@ +DYNAMIC_MSN_TRUE = @DYNAMIC_MSN_TRUE@ +DYNAMIC_NAPSTER_FALSE = @DYNAMIC_NAPSTER_FALSE@ +DYNAMIC_NAPSTER_TRUE = @DYNAMIC_NAPSTER_TRUE@ +DYNAMIC_NOVELL_FALSE = @DYNAMIC_NOVELL_FALSE@ +DYNAMIC_NOVELL_TRUE = @DYNAMIC_NOVELL_TRUE@ +DYNAMIC_OSCAR_FALSE = @DYNAMIC_OSCAR_FALSE@ +DYNAMIC_OSCAR_TRUE = @DYNAMIC_OSCAR_TRUE@ +DYNAMIC_PRPLS = @DYNAMIC_PRPLS@ +DYNAMIC_SILC_FALSE = @DYNAMIC_SILC_FALSE@ +DYNAMIC_SILC_TRUE = @DYNAMIC_SILC_TRUE@ +DYNAMIC_TOC_FALSE = @DYNAMIC_TOC_FALSE@ +DYNAMIC_TOC_TRUE = @DYNAMIC_TOC_TRUE@ +DYNAMIC_TREPIA_FALSE = @DYNAMIC_TREPIA_FALSE@ +DYNAMIC_TREPIA_TRUE = @DYNAMIC_TREPIA_TRUE@ +DYNAMIC_YAHOO_FALSE = @DYNAMIC_YAHOO_FALSE@ +DYNAMIC_YAHOO_TRUE = @DYNAMIC_YAHOO_TRUE@ +DYNAMIC_ZEPHYR_FALSE = @DYNAMIC_ZEPHYR_FALSE@ +DYNAMIC_ZEPHYR_TRUE = @DYNAMIC_ZEPHYR_TRUE@ +EVOLUTION_ADDRESSBOOK_CFLAGS = @EVOLUTION_ADDRESSBOOK_CFLAGS@ +EVOLUTION_ADDRESSBOOK_LIBS = @EVOLUTION_ADDRESSBOOK_LIBS@ +EXTERNAL_LIBZEPHYR_FALSE = @EXTERNAL_LIBZEPHYR_FALSE@ +EXTERNAL_LIBZEPHYR_TRUE = @EXTERNAL_LIBZEPHYR_TRUE@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GNUTLS_CFLAGS = @GNUTLS_CFLAGS@ +GNUTLS_LIBS = @GNUTLS_LIBS@ +GOBJECT_QUERY = @GOBJECT_QUERY@ +GTKSPELL_CFLAGS = @GTKSPELL_CFLAGS@ +GTKSPELL_LIBS = @GTKSPELL_LIBS@ +GTK_CFLAGS = @GTK_CFLAGS@ +HAVE_ASPRINTF = @HAVE_ASPRINTF@ +HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@ +HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@ +HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ +HAVE_SNPRINTF = @HAVE_SNPRINTF@ +HAVE_WPRINTF = @HAVE_WPRINTF@ +HOWL_CFLAGS = @HOWL_CFLAGS@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ +KRB4_CFLAGS = @KRB4_CFLAGS@ +KRB4_LDFLAGS = @KRB4_LDFLAGS@ +LTLIBICONV = @LTLIBICONV@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +NSS_CFLAGS = @NSS_CFLAGS@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PERL_CFLAGS = @PERL_CFLAGS@ +PERL_MM_PARAMS = @PERL_MM_PARAMS@ +PKG_CONFIG = @PKG_CONFIG@ +PLUGINS_FALSE = @PLUGINS_FALSE@ +PLUGINS_TRUE = @PLUGINS_TRUE@ +PRPLS_FALSE = @PRPLS_FALSE@ +PRPLS_TRUE = @PRPLS_TRUE@ +SILC_CFLAGS = @SILC_CFLAGS@ +SOUND_LIBS = @SOUND_LIBS@ +STARTUP_NOTIFICATION_CFLAGS = @STARTUP_NOTIFICATION_CFLAGS@ +STARTUP_NOTIFICATION_LIBS = @STARTUP_NOTIFICATION_LIBS@ +STATIC_BONJOUR_FALSE = @STATIC_BONJOUR_FALSE@ +STATIC_BONJOUR_TRUE = @STATIC_BONJOUR_TRUE@ +STATIC_GG_FALSE = @STATIC_GG_FALSE@ +STATIC_GG_TRUE = @STATIC_GG_TRUE@ +STATIC_IRC_FALSE = @STATIC_IRC_FALSE@ +STATIC_IRC_TRUE = @STATIC_IRC_TRUE@ +STATIC_JABBER_FALSE = @STATIC_JABBER_FALSE@ +STATIC_JABBER_TRUE = @STATIC_JABBER_TRUE@ +STATIC_LINK_LIBS = @STATIC_LINK_LIBS@ +STATIC_MSN_FALSE = @STATIC_MSN_FALSE@ +STATIC_MSN_TRUE = @STATIC_MSN_TRUE@ +STATIC_NAPSTER_FALSE = @STATIC_NAPSTER_FALSE@ +STATIC_NAPSTER_TRUE = @STATIC_NAPSTER_TRUE@ +STATIC_NOVELL_FALSE = @STATIC_NOVELL_FALSE@ +STATIC_NOVELL_TRUE = @STATIC_NOVELL_TRUE@ +STATIC_OSCAR_FALSE = @STATIC_OSCAR_FALSE@ +STATIC_OSCAR_TRUE = @STATIC_OSCAR_TRUE@ +STATIC_PRPLS = @STATIC_PRPLS@ +STATIC_SILC_FALSE = @STATIC_SILC_FALSE@ +STATIC_SILC_TRUE = @STATIC_SILC_TRUE@ +STATIC_TOC_FALSE = @STATIC_TOC_FALSE@ +STATIC_TOC_TRUE = @STATIC_TOC_TRUE@ +STATIC_TREPIA_FALSE = @STATIC_TREPIA_FALSE@ +STATIC_TREPIA_TRUE = @STATIC_TREPIA_TRUE@ +STATIC_YAHOO_FALSE = @STATIC_YAHOO_FALSE@ +STATIC_YAHOO_TRUE = @STATIC_YAHOO_TRUE@ +STATIC_ZEPHYR_FALSE = @STATIC_ZEPHYR_FALSE@ +STATIC_ZEPHYR_TRUE = @STATIC_ZEPHYR_TRUE@ +TCL_CFLAGS = @TCL_CFLAGS@ +USE_GNUTLS_FALSE = @USE_GNUTLS_FALSE@ +USE_GNUTLS_TRUE = @USE_GNUTLS_TRUE@ +USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ +USE_NSS_FALSE = @USE_NSS_FALSE@ +USE_NSS_TRUE = @USE_NSS_TRUE@ +USE_PERL_FALSE = @USE_PERL_FALSE@ +USE_PERL_TRUE = @USE_PERL_TRUE@ +USE_TCL_FALSE = @USE_TCL_FALSE@ +USE_TCL_TRUE = @USE_TCL_TRUE@ +USE_TK_FALSE = @USE_TK_FALSE@ +USE_TK_TRUE = @USE_TK_TRUE@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +ZEPHYR_CFLAGS = @ZEPHYR_CFLAGS@ +ZEPHYR_LDFLAGS = @ZEPHYR_LDFLAGS@ +ZEPHYR_LIBS = @ZEPHYR_LIBS@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +build_alias = @build_alias@ +build_vendor = @build_vendor@ +enable_dot = @enable_dot@ +enable_doxygen = @enable_doxygen@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +host_vendor = @host_vendor@ +includedir = @includedir@ +install_sh = @install_sh@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +oldincludedir = @oldincludedir@ +program_transform_name = @program_transform_name@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_vendor = @target_vendor@ +libbonjour_la_LDFLAGS = -module -avoid-version $(GLIB_LIBS) $(HOWL_LIBS) +@STATIC_BONJOUR_FALSE@st = +@STATIC_BONJOUR_TRUE@st = -DGAIM_STATIC_PRPL +@STATIC_BONJOUR_TRUE@noinst_LIBRARIES = libbonjour.a +@STATIC_BONJOUR_TRUE@libbonjour_a_SOURCES = $(BONJOURSOURCES) +@STATIC_BONJOUR_TRUE@libbonjour_a_CFLAGS = $(AM_CFLAGS) +@STATIC_BONJOUR_FALSE@pkg_LTLIBRARIES = libbonjour.la +@STATIC_BONJOUR_FALSE@libbonjour_la_SOURCES = $(BONJOURSOURCES) +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + case '$(am__configure_deps)' in \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/protocols/bonjour/Makefile'; \ + $(AUTOMAKE) --gnu src/protocols/bonjour/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +libbonjour.a: $(libbonjour_a_OBJECTS) $(libbonjour_a_DEPENDENCIES) + $(libbonjour_a_AR) libbonjour.a $(libbonjour_a_OBJECTS) $(libbonjour_a_LIBADD) +install-pkgLTLIBRARIES: $(pkg_LTLIBRARIES) + test -z "$(pkgdir)" || $(mkdir_p) "$(DESTDIR)$(pkgdir)" + @list='$(pkg_LTLIBRARIES)'; for p in $$list; do \ + echo " $(LIBTOOL) --mode=install $(pkgLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(pkgdir)/$$f'"; \ + $(LIBTOOL) --mode=install $(pkgLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(pkgdir)/$$f"; \ +uninstall-pkgLTLIBRARIES: + @set -x; list='$(pkg_LTLIBRARIES)'; for p in $$list; do \ + echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(pkgdir)/$$p'"; \ + $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(pkgdir)/$$p"; \ + -test -z "$(pkg_LTLIBRARIES)" || rm -f $(pkg_LTLIBRARIES) + @list='$(pkg_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ +libbonjour.la: $(libbonjour_la_OBJECTS) $(libbonjour_la_DEPENDENCIES) + $(LINK) $(am_libbonjour_la_rpath) $(libbonjour_la_LDFLAGS) $(libbonjour_la_OBJECTS) $(libbonjour_la_LIBADD) $(LIBS) +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bonjour.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/buddy.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dns_sd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jabber.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbonjour_a-bonjour.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbonjour_a-buddy.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbonjour_a-dns_sd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbonjour_a-jabber.Po@am__quote@ +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< +libbonjour_a-bonjour.o: bonjour.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -MT libbonjour_a-bonjour.o -MD -MP -MF "$(DEPDIR)/libbonjour_a-bonjour.Tpo" -c -o libbonjour_a-bonjour.o `test -f 'bonjour.c' || echo '$(srcdir)/'`bonjour.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libbonjour_a-bonjour.Tpo" "$(DEPDIR)/libbonjour_a-bonjour.Po"; else rm -f "$(DEPDIR)/libbonjour_a-bonjour.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bonjour.c' object='libbonjour_a-bonjour.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -c -o libbonjour_a-bonjour.o `test -f 'bonjour.c' || echo '$(srcdir)/'`bonjour.c +libbonjour_a-bonjour.obj: bonjour.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -MT libbonjour_a-bonjour.obj -MD -MP -MF "$(DEPDIR)/libbonjour_a-bonjour.Tpo" -c -o libbonjour_a-bonjour.obj `if test -f 'bonjour.c'; then $(CYGPATH_W) 'bonjour.c'; else $(CYGPATH_W) '$(srcdir)/bonjour.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libbonjour_a-bonjour.Tpo" "$(DEPDIR)/libbonjour_a-bonjour.Po"; else rm -f "$(DEPDIR)/libbonjour_a-bonjour.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bonjour.c' object='libbonjour_a-bonjour.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -c -o libbonjour_a-bonjour.obj `if test -f 'bonjour.c'; then $(CYGPATH_W) 'bonjour.c'; else $(CYGPATH_W) '$(srcdir)/bonjour.c'; fi` +libbonjour_a-buddy.o: buddy.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -MT libbonjour_a-buddy.o -MD -MP -MF "$(DEPDIR)/libbonjour_a-buddy.Tpo" -c -o libbonjour_a-buddy.o `test -f 'buddy.c' || echo '$(srcdir)/'`buddy.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libbonjour_a-buddy.Tpo" "$(DEPDIR)/libbonjour_a-buddy.Po"; else rm -f "$(DEPDIR)/libbonjour_a-buddy.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='buddy.c' object='libbonjour_a-buddy.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -c -o libbonjour_a-buddy.o `test -f 'buddy.c' || echo '$(srcdir)/'`buddy.c +libbonjour_a-buddy.obj: buddy.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -MT libbonjour_a-buddy.obj -MD -MP -MF "$(DEPDIR)/libbonjour_a-buddy.Tpo" -c -o libbonjour_a-buddy.obj `if test -f 'buddy.c'; then $(CYGPATH_W) 'buddy.c'; else $(CYGPATH_W) '$(srcdir)/buddy.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libbonjour_a-buddy.Tpo" "$(DEPDIR)/libbonjour_a-buddy.Po"; else rm -f "$(DEPDIR)/libbonjour_a-buddy.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='buddy.c' object='libbonjour_a-buddy.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -c -o libbonjour_a-buddy.obj `if test -f 'buddy.c'; then $(CYGPATH_W) 'buddy.c'; else $(CYGPATH_W) '$(srcdir)/buddy.c'; fi` +libbonjour_a-dns_sd.o: dns_sd.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -MT libbonjour_a-dns_sd.o -MD -MP -MF "$(DEPDIR)/libbonjour_a-dns_sd.Tpo" -c -o libbonjour_a-dns_sd.o `test -f 'dns_sd.c' || echo '$(srcdir)/'`dns_sd.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libbonjour_a-dns_sd.Tpo" "$(DEPDIR)/libbonjour_a-dns_sd.Po"; else rm -f "$(DEPDIR)/libbonjour_a-dns_sd.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dns_sd.c' object='libbonjour_a-dns_sd.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -c -o libbonjour_a-dns_sd.o `test -f 'dns_sd.c' || echo '$(srcdir)/'`dns_sd.c +libbonjour_a-dns_sd.obj: dns_sd.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -MT libbonjour_a-dns_sd.obj -MD -MP -MF "$(DEPDIR)/libbonjour_a-dns_sd.Tpo" -c -o libbonjour_a-dns_sd.obj `if test -f 'dns_sd.c'; then $(CYGPATH_W) 'dns_sd.c'; else $(CYGPATH_W) '$(srcdir)/dns_sd.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libbonjour_a-dns_sd.Tpo" "$(DEPDIR)/libbonjour_a-dns_sd.Po"; else rm -f "$(DEPDIR)/libbonjour_a-dns_sd.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dns_sd.c' object='libbonjour_a-dns_sd.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -c -o libbonjour_a-dns_sd.obj `if test -f 'dns_sd.c'; then $(CYGPATH_W) 'dns_sd.c'; else $(CYGPATH_W) '$(srcdir)/dns_sd.c'; fi` +libbonjour_a-jabber.o: jabber.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -MT libbonjour_a-jabber.o -MD -MP -MF "$(DEPDIR)/libbonjour_a-jabber.Tpo" -c -o libbonjour_a-jabber.o `test -f 'jabber.c' || echo '$(srcdir)/'`jabber.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libbonjour_a-jabber.Tpo" "$(DEPDIR)/libbonjour_a-jabber.Po"; else rm -f "$(DEPDIR)/libbonjour_a-jabber.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='jabber.c' object='libbonjour_a-jabber.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -c -o libbonjour_a-jabber.o `test -f 'jabber.c' || echo '$(srcdir)/'`jabber.c +libbonjour_a-jabber.obj: jabber.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -MT libbonjour_a-jabber.obj -MD -MP -MF "$(DEPDIR)/libbonjour_a-jabber.Tpo" -c -o libbonjour_a-jabber.obj `if test -f 'jabber.c'; then $(CYGPATH_W) 'jabber.c'; else $(CYGPATH_W) '$(srcdir)/jabber.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libbonjour_a-jabber.Tpo" "$(DEPDIR)/libbonjour_a-jabber.Po"; else rm -f "$(DEPDIR)/libbonjour_a-jabber.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='jabber.c' object='libbonjour_a-jabber.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbonjour_a_CFLAGS) $(CFLAGS) -c -o libbonjour_a-jabber.obj `if test -f 'jabber.c'; then $(CYGPATH_W) 'jabber.c'; else $(CYGPATH_W) '$(srcdir)/jabber.c'; fi` +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + here=`$(am__cd) $(top_builddir) && pwd` \ + && gtags -i $(GTAGS_ARGS) $$here + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + $(mkdir_p) "$(distdir)$$dir"; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ +all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) + for dir in "$(DESTDIR)$(pkgdir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ +install-exec: install-exec-am +install-data: install-data-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +installcheck: installcheck-am + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ + clean-pkgLTLIBRARIES mostlyclean-am +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-libtool distclean-tags +install-data-am: install-pkgLTLIBRARIES +install-info: install-info-am +maintainer-clean: maintainer-clean-am +maintainer-clean-am: distclean-am maintainer-clean-generic +mostlyclean: mostlyclean-am +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ +uninstall-am: uninstall-info-am uninstall-pkgLTLIBRARIES +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLIBRARIES clean-pkgLTLIBRARIES ctags \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-exec install-exec-am install-info \ + install-info-am install-man install-pkgLTLIBRARIES \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-info-am uninstall-pkgLTLIBRARIES +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/protocols/bonjour/Makefile.mingw Sun Aug 21 18:56:40 2005 -0400
@@ -0,0 +1,133 @@
+# Description: Makefile for win32 (mingw) version of libbonjour +GTK_TOP := ../../../../win32-dev/gtk_2_0 +GAIM_INSTALL_DIR := $(GAIM_TOP)/win32-install-dir + DLL_INSTALL_DIR = $(GAIM_INSTALL_DIR) + DLL_INSTALL_DIR = $(GAIM_INSTALL_DIR)/plugins +include $(GAIM_TOP)/src/win32/global.mak +INCLUDE_PATHS += -I$(BONJOUR_ROOT) \ + -I$(GTK_TOP)/include/gtk-2.0 \ + -I$(GTK_TOP)/include/glib-2.0 \ + -I$(GTK_TOP)/include/pango-1.0 \ + -I$(GTK_TOP)/include/atk-1.0 \ + -I$(GTK_TOP)/lib/glib-2.0/include \ + -I$(GTK_TOP)/lib/gtk-2.0/include \ + -I$(GAIM_TOP)/src/win32 \ +LIB_PATHS = -L$(GTK_TOP)/lib \ +OBJECTS = $(C_SRC:%.c=%.o) +LIBS = -lgtk-win32-2.0 \ + $(CC) $(CFLAGS) $(DEFINES) $(INCLUDE_PATHS) -o $@ -c $< + cp $(BONJOUR_ROOT)/$(TARGET).dll $(DLL_INSTALL_DIR) +$(GAIM_TOP)/src/gaim.lib: + $(MAKE) -C $(GAIM_TOP)/src -f Makefile.mingw gaim.lib +$(TARGET).dll: $(OBJECTS) $(GAIM_TOP)/src/gaim.lib + $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -Wl,--out-implib,$(TARGET).lib -o $(TARGET).dll --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/protocols/bonjour/bonjour.c Sun Aug 21 18:56:40 2005 -0400
@@ -0,0 +1,366 @@
+ * gaim - Bonjour Protocol Plugin + * Gaim is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * 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. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +void bonjour_login(GaimAccount* account) + GaimConnection *gc = gaim_account_get_connection(account); + GaimGroup* bonjour_group = NULL; + BonjourData* bd = NULL; + gc->flags |= GAIM_CONNECTION_HTML; + gc->proto_data = g_new(BonjourData, 1); + // Start waiting for jabber connections (iChat style) + bd->jabber_data = g_new(BonjourJabber, 1); + bd->jabber_data->name = gc->account->username; + bd->jabber_data->port = gaim_account_get_int(account, "port", BONJOUR_DEFAULT_PORT_INT); + bd->jabber_data->account = account; + if (bonjour_jabber_start(bd->jabber_data) == -1) { + // Send a message about the connection error + gaim_debug_error("bonjour", "Unable to listen to ichat connections"); + g_free(bd->jabber_data); + // Connect to the mDNS daemon looking for buddies in the LAN + bd->dns_sd_data = bonjour_dns_sd_new(); + bd->dns_sd_data->name = (sw_string)gaim_account_get_username(account); + bd->dns_sd_data->txtvers = "1"; + bd->dns_sd_data->version = "1"; + bd->dns_sd_data->first = gaim_account_get_string(account, "first", "Juanjo"); + bd->dns_sd_data->last = gaim_account_get_string(account, "last", ""); + bd->dns_sd_data->port_p2pj = gaim_account_get_int(account, "port", BONJOUR_DEFAULT_PORT_INT); + bd->dns_sd_data->phsh = ""; + bd->dns_sd_data->status = "avail"; //<-- Check the real status if different from avail + bd->dns_sd_data->email = gaim_account_get_string(account, "email", ""); + bd->dns_sd_data->vc = ""; + bd->dns_sd_data->jid = ""; + bd->dns_sd_data->AIM = ""; + bd->dns_sd_data->account = account; + bonjour_dns_sd_start(bd->dns_sd_data); + // Create a group for bonjour buddies + bonjour_group = gaim_group_new(BONJOUR_GROUP_NAME); + gaim_blist_add_group(bonjour_group, NULL); + // Show the buddy list by telling Gaim we have already connected + gaim_connection_set_state(gc, GAIM_CONNECTED); +void bonjour_close(GaimConnection* connection) + GaimGroup* bonjour_group = gaim_find_group(BONJOUR_GROUP_NAME); + BonjourData* bd = (BonjourData*)connection->proto_data; + // Stop waiting for conversations + bonjour_jabber_stop(bd->jabber_data); + g_free(bd->jabber_data); + // Stop looking for buddies in the LAN + if (connection != NULL) { + bonjour_dns_sd_stop(bd->dns_sd_data); + bonjour_dns_sd_free(bd->dns_sd_data); + // Remove all the bonjour buddies + if(connection != NULL){ + buddies = gaim_find_buddies(connection->account, connection->account->username); + for(l = buddies; l; l = l->next){ + bonjour_buddy_delete(((GaimBuddy*)(l->data))->proto_data); + gaim_blist_remove_buddy(l->data); + // Delete the bonjour group + gaim_blist_remove_group(bonjour_group); +const char* bonjour_list_icon(GaimAccount* account, GaimBuddy* buddy) + return BONJOUR_ICON_NAME; +int bonjour_send_im(GaimConnection* connection, const char* to, const char* msg, GaimConvImFlags flags) + bonjour_jabber_send_message(((BonjourData*)(connection->proto_data))->jabber_data, to, msg); +void bonjour_set_status(GaimConnection* connection, const char* state, const char* message) + char* status_dns_sd = NULL; + stripped = g_strdup(message); + } else if(!state || strcmp(state, GAIM_AWAY_CUSTOM)) { // Sacado del plugin de jabber + stripped = g_strdup(""); +gaim_debug_warning("bonjour", "Set status: %s - %s\n", state, stripped); + g_free(connection->away); + connection->away = stripped; + if (g_ascii_strcasecmp(state, _("Online")) == 0) { + status_dns_sd = g_strdup("avail"); + } else if (g_ascii_strcasecmp(state, _("Away")) == 0) { + status_dns_sd = g_strdup("away"); + } else if (g_ascii_strcasecmp(state, _("Do Not Disturb")) == 0) { + status_dns_sd = g_strdup("dnd"); + if (status_dns_sd != NULL) { + bonjour_dns_sd_send_status(((BonjourData*)(connection->proto_data))->dns_sd_data, + status_dns_sd, stripped); +static GList* bonjour_status_types(GaimConnection* connection) + types = g_list_append(types, _("Online")); + types = g_list_append(types, _("Away")); + types = g_list_append(types, _("Do Not Disturb")); + types = g_list_append(types, GAIM_AWAY_CUSTOM); +static void bonjour_convo_closed(GaimConnection* connection, const char* who) + GaimBuddy* buddy = gaim_find_buddy(connection->account, who); + bonjour_jabber_close_conversation(((BonjourData*)(connection->proto_data))->jabber_data, buddy); +static void bonjour_list_emblems(GaimBuddy *b, char **se, char **sw, + case BONJOUR_STATE_AWAY: + case BONJOUR_STATE_DND: + case BONJOUR_STATE_ERROR: +static char* bonjour_status_text(GaimBuddy *b) + BonjourBuddy* bb = (BonjourBuddy*)b->proto_data; + return g_strdup(bb->msg); +static char* bonjour_tooltip_text(GaimBuddy *b) + case BONJOUR_STATE_AVAILABLE: + status = g_strdup(_("Online")); + case BONJOUR_STATE_AWAY: + status = g_strdup(_("Away")); + case BONJOUR_STATE_DND: + status = g_strdup(_("Do Not Disturb")); + case BONJOUR_STATE_ERROR: + status = g_strdup("Error"); + return g_strconcat("\n<b>Status: </b>", status, NULL); +static GaimPlugin *my_protocol = NULL; +static GaimPluginProtocolInfo prpl_info = + NULL, /* user_splits */ + NULL, /* protocol_options */ + {"png", 0, 0, 96, 96, GAIM_ICON_SCALE_DISPLAY}, /* icon_spec */ + bonjour_list_icon, /* list_icon */ + bonjour_list_emblems, /* list_emblems */ + bonjour_status_text, /* status_text */ + bonjour_tooltip_text, /* tooltip_text */ + bonjour_status_types, /* status_types */ + NULL, /* blist_node_menu */ + NULL, /* chat_info_defaults */ + bonjour_login, /* login */ + bonjour_close, /* close */ + bonjour_send_im, /* send_im */ + NULL, /* send_typing */ + bonjour_set_status, /* set_status */ + NULL, /* change_passwd */ + NULL, /* add_buddies */ + NULL, /* remove_buddy */ + NULL, /* remove_buddies */ + NULL, /* set_permit_deny */ + NULL, /* reject_chat */ + NULL, /* get_chat_name */ + NULL, /* chat_invite */ + NULL, /* chat_whisper */ + NULL, /* register_user */ + NULL, /* get_cb_info */ + NULL, /* get_cb_away */ + NULL, /* alias_buddy */ + NULL, /* group_buddy */ + NULL, /* rename_group */ + bonjour_convo_closed, /* convo_closed */ + NULL, /* set_buddy_icon */ + NULL, /* remove_group */ + NULL, /* get_cb_real_name */ + NULL, /* set_chat_topic */ + NULL, /* find_blist_chat */ + NULL, /* roomlist_get_list */ + NULL, /* roomlist_cancel */ + NULL, /* roomlist_expand_category */ + NULL, /* can_receive_file */ +static GaimPluginInfo info = + GAIM_PLUGIN_PROTOCOL, /**< type */ + NULL, /**< ui_requirement */ + NULL, /**< dependencies */ + GAIM_PRIORITY_DEFAULT, /**< priority */ + "prpl-bonjour", /**< id */ + "Bonjour", /**< name */ + VERSION, /**< version */ + N_("Bonjour Protocol Plugin"), + N_("Bonjour Protocol Plugin"), + GAIM_WEBSITE, /**< homepage */ + &prpl_info, /**< extra_info */ + NULL, /**< prefs_info */ +init_plugin(GaimPlugin *plugin) + GaimAccountUserSplit *split; + GaimAccountOption *option; + if (gethostname(hostname, 255) != 0) { + gaim_debug_warning("rendezvous", "Error %d when getting host name. Using \"localhost.\"\n", errno); + strcpy(hostname, "localhost"); + // Creating the user splits + split = gaim_account_user_split_new(_("Host name"), hostname, '@'); + prpl_info.user_splits = g_list_append(prpl_info.user_splits, split); + // Creating the options for the protocol + option = gaim_account_option_int_new(_("Port"), "port", 5298); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); + option = gaim_account_option_string_new(_("First name"), "first", "Gaim"); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); + option = gaim_account_option_string_new(_("Last name"), "last", "User"); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); + option = gaim_account_option_string_new(_("Email"), "email", ""); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); + option = gaim_account_option_string_new(_("Status Message"), "message", "Available"); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); +GAIM_INIT_PLUGIN(bonjour, init_plugin, info); --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/protocols/bonjour/bonjour.h Sun Aug 21 18:56:40 2005 -0400
@@ -0,0 +1,48 @@
+ * @file bonjour.h The Gaim interface to mDNS and peer to peer Jabber. + * Gaim is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * 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. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +#define BONJOUR_GROUP_NAME "Bonjour" +#define BONJOUR_PROTOCOL_NAME "bonjour" +#define BONJOUR_ICON_NAME "bonjour" +#define BONJOUR_STATE_AWAY (0x02 | UC_UNAVAILABLE) +#define BONJOUR_STATE_AVAILABLE (0x04) +#define BONJOUR_STATE_DND (0x10 | UC_UNAVAILABLE) +#define BONJOUR_STATE_ERROR (0x20 | UC_UNAVAILABLE) +typedef struct _bonjour_data{ + BonjourDnsSd* dns_sd_data; + BonjourJabber* jabber_data; +#endif /* _BONJOUR_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/protocols/bonjour/buddy.c Sun Aug 21 18:56:40 2005 -0400
@@ -0,0 +1,147 @@
+ * 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. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +BonjourBuddy* bonjour_buddy_new(gchar* name, gchar* first, gint port_p2pj, + gchar* phsh, gchar* status, gchar* email, gchar* last, gchar* jid, gchar* AIM, + gchar* vc, gchar* ip, gchar* msg) + BonjourBuddy* buddy = malloc(sizeof(BonjourBuddy)); + buddy->name = g_strdup(name); + buddy->first = g_strdup(first); + buddy->port_p2pj = port_p2pj; + buddy->phsh = g_strdup(phsh); + buddy->status = g_strdup(status); + buddy->email = g_strdup(email); + buddy->last = g_strdup(last); + buddy->jid = g_strdup(jid); + buddy->AIM = g_strdup(AIM); + buddy->vc = g_strdup(vc); + buddy->ip = g_strdup(ip); + buddy->msg = g_strdup(msg); + buddy->conversation = NULL; + * Check if all the compulsory buddy data is present. +gboolean bonjour_buddy_check(BonjourBuddy* buddy) + if(buddy->name == NULL){ + if(buddy->first == NULL){ + if(buddy->last == NULL){ + if(buddy->port_p2pj == -1){ + if(buddy->status == NULL){ + * If the buddy doesn't previoulsy exists, it is created. Else, its data is changed (???) +void bonjour_buddy_add_to_gaim(BonjourBuddy* buddy, GaimAccount* account) + GaimBuddy* gb = gaim_find_buddy(account, buddy->name); + GaimGroup* bonjour_group = gaim_find_group(BONJOUR_GROUP_NAME); + gchar* buddy_alias = NULL; + // Create the alias for the buddy using the first and the last name + buddy_alias = g_strconcat(buddy->first, " ", buddy->last, NULL); + // Transformation between the bonjour status and Gaim status + if (g_ascii_strcasecmp("avail", buddy->status) == 0) { + buddy_status = BONJOUR_STATE_AVAILABLE; + } else if (g_ascii_strcasecmp("away", buddy->status) == 0) { + buddy_status = BONJOUR_STATE_AWAY; + } else if (g_ascii_strcasecmp("dnd", buddy->status) == 0) { + buddy_status = BONJOUR_STATE_DND; + buddy_status = BONJOUR_STATE_ERROR; + // The buddy already exists + serv_got_update(account->gc, gb->name, TRUE, gb->evil, gb->signon, gb->idle, buddy_status); + // We have to create the buddy + gb = gaim_buddy_new(account, buddy->name, buddy_alias); + gb->node.flags = GAIM_BLIST_NODE_FLAG_NO_SAVE; + gb->proto_data = buddy; + gaim_blist_add_buddy(gb, NULL, bonjour_group, NULL); + gaim_blist_server_alias_buddy(gb, buddy_alias); + gaim_blist_update_buddy_status(gb, buddy_status); + gaim_blist_update_buddy_presence(gb, TRUE); + gaim_blist_update_buddy_signon(gb, 0); + gaim_blist_update_buddy_idle(gb, 0); + gaim_blist_update_buddy_evil(gb, 0); + * Deletes a buddy from memory. +void bonjour_buddy_delete(BonjourBuddy* buddy) + if (buddy->conversation != NULL) { + g_free(buddy->conversation->buddy_name); + g_free(buddy->conversation); --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/protocols/bonjour/buddy.h Sun Aug 21 18:56:40 2005 -0400
@@ -0,0 +1,64 @@
+ * 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. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +typedef struct _bonjour_buddy{ + BonjourJabberConversation* conversation; +BonjourBuddy* bonjour_buddy_new(gchar* name, gchar* first, gint port_p2pj, + gchar* phsh, gchar* status, gchar* email, gchar* last, gchar* jid, gchar* AIM, + gchar* vc, gchar* ip, gchar* msg); + * Check if all the compulsory buddy data is present. +gboolean bonjour_buddy_check(BonjourBuddy* buddy); + * If the buddy doesn't previoulsy exists, it is created. Else, its data is changed (???) +void bonjour_buddy_add_to_gaim(BonjourBuddy* buddy, GaimAccount* account); + * Deletes a buddy from memory. +void bonjour_buddy_delete(BonjourBuddy* buddy); --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/protocols/bonjour/dns_sd.c Sun Aug 21 18:56:40 2005 -0400
@@ -0,0 +1,423 @@
+ * 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. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +typedef struct _dns_sd_packet{ +static sw_result HOWL_API _publish_reply(sw_discovery discovery, + sw_discovery_oid oid, sw_discovery_publish_status status, sw_opaque extra) +gaim_debug_warning("bonjour", "_publish_reply --> Start\n"); + // Check the answer from the mDNS daemon + case SW_DISCOVERY_PUBLISH_STARTED : + gaim_debug_info("bonjour", "_publish_reply --> Service started\n"); + case SW_DISCOVERY_PUBLISH_STOPPED : + gaim_debug_info("bonjour", "_publish_reply --> Service stopped\n"); + case SW_DISCOVERY_PUBLISH_NAME_COLLISION : + gaim_debug_info("bonjour", "_publish_reply --> Name collision\n"); + case SW_DISCOVERY_PUBLISH_INVALID : + gaim_debug_info("bonjour", "_publish_reply --> Service invalid\n"); +static sw_result HOWL_API _resolve_reply(sw_discovery discovery, + sw_discovery_oid oid, sw_uint32 interface_index, sw_const_string name, + sw_const_string type, sw_const_string domain, sw_ipv4_address address, + sw_port port, sw_octets text_record, sw_ulong text_record_len, + GaimAccount* account = (GaimAccount*)extra; + gint address_length = 16; + sw_text_record_iterator iterator; + sw_int8 key[SW_TEXT_RECORD_MAX_LEN]; + sw_int8 value[SW_TEXT_RECORD_MAX_LEN]; + sw_uint32 value_length; +gaim_debug_info("bonjour", "_resolve_reply\n"); + sw_discovery_cancel(discovery, oid); + // Get the ip as a string + ip = malloc(address_length); + sw_ipv4_address_name(address, ip, address_length); + // Obtain the parameters from the text_record + if ((text_record_len > 0) && (text_record) && (*text_record != '\0')) { + sw_text_record_iterator_init(&iterator, text_record, text_record_len); + while (sw_text_record_iterator_next(iterator, key, value, &value_length) == SW_OKAY) { + // Compare the keys with the possible ones and save them on + // the appropiate place of the buddy_list + if (strcmp(key, "txtvers") == 0) { + txtvers = g_strdup(value); + } else if (strcmp(key, "version") == 0) { + version = g_strdup(value); + } else if (strcmp(key, "1st") == 0) { + first = g_strdup(value); + } else if (strcmp(key, "port.p2pj") == 0) { + port_p2pj = atoi(value); + } else if (strcmp(key, "status") == 0) { + status = g_strdup(value); + } else if (strcmp(key, "email") == 0) { + email = g_strdup(value); + } else if (strcmp(key, "last") == 0) { + last = g_strdup(value); + } else if (strcmp(key, "jid") == 0) { + } else if (strcmp(key, "AIM") == 0) { + } else if (strcmp(key, "vc") == 0) { + } else if (strcmp(key, "phsh") == 0) { + phsh = g_strdup(value); + } else if (strcmp(key, "msg") == 0) { + // Put the parameters of the text_record in a buddy and add the buddy to + buddy = bonjour_buddy_new((gchar*)name, first, port_p2pj, phsh, status, email, + last, jid, AIM, vc, ip, msg); + if (bonjour_buddy_check(buddy) == FALSE) { + return SW_DISCOVERY_E_UNKNOWN; + // Look for the buddy within the buddy list, if exist, change the status information, + // else create a new buddy within the group Bonjour + bonjour_buddy_add_to_gaim(buddy, account); + // Free all the temporal strings +static sw_result HOWL_API _browser_reply(sw_discovery discovery, sw_discovery_oid oid, + sw_discovery_browse_status status, sw_uint32 interface_index, sw_const_string name, + sw_const_string type, sw_const_string domain, sw_opaque_t extra) + sw_discovery_resolve_id rid; + GaimAccount* account = (GaimAccount*)extra; + case SW_DISCOVERY_BROWSE_INVALID: + gaim_debug_warning("bonjour", "_browser_reply --> Invalid\n"); + case SW_DISCOVERY_BROWSE_RELEASE: + gaim_debug_warning("bonjour", "_browser_reply --> Release\n"); + case SW_DISCOVERY_BROWSE_ADD_DOMAIN: + gaim_debug_warning("bonjour", "_browser_reply --> Add domain\n"); + case SW_DISCOVERY_BROWSE_ADD_DEFAULT_DOMAIN: + gaim_debug_warning("bonjour", "_browser_reply --> Add default domain\n"); + case SW_DISCOVERY_BROWSE_REMOVE_DOMAIN: + gaim_debug_warning("bonjour", "_browser_reply --> Remove domain\n"); + case SW_DISCOVERY_BROWSE_ADD_SERVICE: + // A new peer has join the network and uses iChat bonjour + gaim_debug_info("bonjour", "_browser_reply --> Add service\n"); + if (g_ascii_strcasecmp(name, account->username) != 0){ + if (sw_discovery_resolve(discovery, interface_index, name, type, + domain, _resolve_reply, extra, &rid) != SW_OKAY) { + gaim_debug_warning("bonjour", "_browser_reply --> Cannot send resolve\n"); + case SW_DISCOVERY_BROWSE_REMOVE_SERVICE: + gaim_debug_info("bonjour", "_browser_reply --> Remove service\n"); + gb = gaim_find_buddy((GaimAccount*)extra, name); + bonjour_buddy_delete(gb->proto_data); + gaim_blist_remove_buddy(gb); + case SW_DISCOVERY_BROWSE_RESOLVED: + gaim_debug_info("bonjour", "_browse_reply --> Resolved\n"); +dns_sd_packet* _dns_sd_packet_new() + return g_new(dns_sd_packet, 1); +void _dns_sd_send_packet(dns_sd_packet* packet, sw_discovery* session) + sw_text_record dns_data; + sw_discovery_publish_id session_id; +gaim_debug_warning("bonjour", "dns_sd send packet --> Fill data for the service\n"); + // Fill the data for the service + if(sw_text_record_init(&dns_data) != SW_OKAY){ + gaim_debug_error("bonjour", "Unable to initialize the data for the mDNS."); + sw_text_record_add_key_and_string_value(dns_data, "txtvers", packet->txtvers); + sw_text_record_add_key_and_string_value(dns_data, "version", packet->version); + sw_text_record_add_key_and_string_value(dns_data, "1st", packet->first); + sw_text_record_add_key_and_string_value(dns_data, "last", packet->last); + // sw_text_record_add_key_and_string_value(dns_data, "port.p2pj", itoa(packet->port_p2pj)); + sw_text_record_add_key_and_string_value(dns_data, "port.p2pj", BONJOUR_DEFAULT_PORT); + sw_text_record_add_key_and_string_value(dns_data, "phsh", packet->phsh); + sw_text_record_add_key_and_string_value(dns_data, "status", packet->status); + sw_text_record_add_key_and_string_value(dns_data, "msg", packet->message); + sw_text_record_add_key_and_string_value(dns_data, "email", packet->email); + sw_text_record_add_key_and_string_value(dns_data, "vc", packet->vc); + sw_text_record_add_key_and_string_value(dns_data, "jid", packet->jid); + sw_text_record_add_key_and_string_value(dns_data, "AIM", packet->AIM); + if(sw_discovery_publish(*session, 0, packet->name, ICHAT_SERVICE, NULL, + NULL, packet->port_p2pj, sw_text_record_bytes(dns_data), sw_text_record_len(dns_data), + _publish_reply, NULL, &session_id) != SW_OKAY){ + gaim_debug_error("bonjour", "Unable to publish or change the status of the _presence._tcp service."); + // Free the memory used by temp data + sw_text_record_fina(dns_data); +void _dns_sd_packet_free(dns_sd_packet* packet) +int _dns_sd_register(BonjourDnsSd* data) + // Create a new dns-sd packet + packet = _dns_sd_packet_new(); + packet->name = data->name; + packet->txtvers = data->txtvers; + packet->version = data->version; + packet->first = data->first; + packet->last = data->last; + packet->port_p2pj = data->port_p2pj; + packet->phsh = data->phsh; + packet->status = data->status; + packet->email = data->email; + packet->jid = data->jid; + packet->AIM = data->AIM; + // Send the dns-sd packet + _dns_sd_send_packet(packet, data->session); + // Free the dns-sd packet + _dns_sd_packet_free(packet); +gboolean _dns_sd_handle_packets(GIOChannel* source, GIOCondition condition, gpointer data) + sw_discovery_read_socket(*((sw_discovery*)data)); +gpointer _dns_sd_wait_for_connections(gpointer data) + sw_discovery_oid session_id; + BonjourDnsSd* dns_sd_data = (BonjourDnsSd*)data; +gaim_debug_error("bonjour", "Wait for connections\n"); + // Advise the daemon that we are waiting for connections + if(sw_discovery_browse(*(dns_sd_data->session), 0, ICHAT_SERVICE, NULL, _browser_reply, + dns_sd_data->account, &session_id) != SW_OKAY){ + gaim_debug_error("bonjour", "Unable to get service."); + // Yields control of the cpu to the daemon + sw_discovery_run(*(dns_sd_data->session)); +// End private functions + * Allocate space for the dns-sd data. +BonjourDnsSd* bonjour_dns_sd_new() + BonjourDnsSd* data = g_new(BonjourDnsSd, 1); + data->session = g_malloc(sizeof(sw_discovery)); + * Deallocate the space of the dns-sd data. +void bonjour_dns_sd_free(BonjourDnsSd* data) + * Send a new dns-sd packet updating our status. +void bonjour_dns_sd_send_status(BonjourDnsSd* data, char* status_dns_sd, const char* status_message) + // Create a new dns-sd packet + packet = _dns_sd_packet_new(); + packet->name = data->name; + packet->txtvers = data->txtvers; + packet->version = data->version; + packet->first = data->first; + packet->last = data->last; + packet->port_p2pj = data->port_p2pj; + packet->phsh = data->phsh; + packet->status = status_dns_sd; + packet->message = g_strdup(status_message); + packet->email = data->email; + packet->jid = data->jid; + packet->AIM = data->AIM; + // Send the dns-sd packet + _dns_sd_send_packet(packet, data->session); + // Free the dns-sd packet + _dns_sd_packet_free(packet); + * Advertise our presence within the dns-sd daemon and start browsing for other +void bonjour_dns_sd_start(BonjourDnsSd* data) + GIOChannel* io_channel; + sw_discovery_oid session_id; + // Initilizations of the dns-sd data and session + data->session = malloc(sizeof(sw_discovery)); + if(sw_discovery_init(data->session) != SW_OKAY){ + gaim_debug_error("bonjour", "Unable to initialize a mDNS session."); + // Register our bonjour IM client at the mDNS daemon + _dns_sd_register(data); + // Wait for new bonjour IM client connections, we should start a new thread + if (!g_thread_supported ()){ + g_thread_create(_dns_sd_wait_for_connections, data, FALSE, NULL); + // Advise the daemon that we are waiting for connections + if(sw_discovery_browse(*(data->session), 0, ICHAT_SERVICE, NULL, _browser_reply, + data->account, &session_id) != SW_OKAY){ + gaim_debug_error("bonjour", "Unable to get service."); + // Yields control of the cpu to the daemon + //sw_discovery_run(*(dns_sd_data->session)); + // Get the socket that communicates with the mDNS daemon and binf it to a + // callback that will handle the dns_sd packets + dns_sd_socket = sw_discovery_socket(*(data->session)); + io_channel = g_io_channel_unix_new(dns_sd_socket); + g_io_add_watch(io_channel, G_IO_IN, _dns_sd_handle_packets, data->session); // Add more for other conditions like when the conn. has been broken + * Unregister the "_presence._tcp" service at the mDNS daemon. +int bonjour_dns_sd_stop(BonjourDnsSd* data) + sw_discovery_stop_run(*(data->session)); --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/protocols/bonjour/dns_sd.h Sun Aug 21 18:56:40 2005 -0400
@@ -0,0 +1,75 @@
+ * 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. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +#define BONJOUR_DEFAULT_PORT "5298" +#define BONJOUR_DEFAULT_PORT_INT 5298 +#define ICHAT_SERVICE "_presence._tcp." + * Data to be used by the dns-sd connection. +typedef struct _bonjour_dns_sd{ + * Allocate space for the dns-sd data. +BonjourDnsSd* bonjour_dns_sd_new(); + * Deallocate the space of the dns-sd data. +void bonjour_dns_sd_free(BonjourDnsSd* data); + * Send a new dns-sd packet updating our status. +void bonjour_dns_sd_send_status(BonjourDnsSd* data, char* status_dns_sd, const char* status_message); + * Advertise our presence within the dns-sd daemon and start browsing for other +void bonjour_dns_sd_start(BonjourDnsSd* data); + * Unregister the "_presence._tcp" service at the mDNS daemon. +int bonjour_dns_sd_stop(BonjourDnsSd* data); --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/protocols/bonjour/issues.txt Sun Aug 21 18:56:40 2005 -0400
@@ -0,0 +1,18 @@
+========================================== +============= Known issues =============== +========================================== +(1) Messages are limited in length (5000 char) <-- FIXED +(2) Messages formated by Gaim didn't work <-- FIXED +(3) iChat sends the size in points, Gaim wants a 1..7 range <-- FIXED Gaim2iChat (iChat2Gaim left) +(4) When the other end closes the socket without sending the end of stream, Gaim crashes and coredump <-- FIXED +(6) Status changes don't work +(7) When the conversation is closed in Gaim with the X button, we don't send the end of stream <-- FIXED +(8) The server socket is not reusable, after an error, you cannot connect for a while <-- FIXED +(11) Typing notifications +(12) Gaim HTML syntax is not shown properly <-- FIXED +(13) Strange messages creates coredump <-- FIXED +(14) Check if it works on win32 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/protocols/bonjour/jabber.c Sun Aug 21 18:56:40 2005 -0400
@@ -0,0 +1,572 @@
+ * gaim - Bonjour Protocol Plugin + * Gaim is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * 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. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +#include <glib/gprintf.h> +gint _connect_to_buddy(GaimBuddy* gb) + struct sockaddr_in buddy_address; + // Create a socket and make it non-blocking + socket_fd = socket(AF_INET, SOCK_STREAM, 0); + fcntl(socket_fd, F_SETFL, O_NONBLOCK); + buddy_address.sin_family = AF_INET; + buddy_address.sin_port = htons(((BonjourBuddy*)(gb->proto_data))->port_p2pj); + inet_aton(((BonjourBuddy*)(gb->proto_data))->ip, &(buddy_address.sin_addr)); + memset(&(buddy_address.sin_zero), '\0', 8); + connect(socket_fd, (struct sockaddr*)&buddy_address, sizeof(struct sockaddr)); +char* _font_size_gaim_to_ichat(int size) + GString* result = NULL; + result = g_string_new("8"); + result = g_string_new("10"); + result = g_string_new("12"); + result = g_string_new("14"); + result = g_string_new("17"); + result = g_string_new("21"); + result = g_string_new("24"); + result = g_string_new("12"); + return g_string_free(result, FALSE); +char* _font_size_ichat_to_gaim(int size) + GString* result = NULL; + result = g_string_new("7"); + } else if(size >= 21) { + result = g_string_new("6"); + } else if(size >= 17) { + result = g_string_new("5"); + } else if(size >= 14) { + result = g_string_new("4"); + } else if(size >= 12) { + result = g_string_new("3"); + } else if(size >= 10) { + result = g_string_new("2"); + result = g_string_new("1"); +void _jabber_parse_and_write_message_to_ui(char* message, GaimConnection* connection, GaimBuddy* gb) + xmlnode* body_node = NULL; + xmlnode* html_node = NULL; + gboolean isHTML = FALSE; + xmlnode* html_body_node = NULL; + char* ichat_balloon_color = NULL; + char* ichat_text_color = NULL; + xmlnode* html_body_font_node = NULL; + char* font_face = NULL; + char* font_size = NULL; + char* font_color = NULL; + char* html_body = NULL; + xmlnode* events_node = NULL; + gboolean composing_event = FALSE; + xmlnode* message_node = NULL; + // Parsing of the message + message_node = xmlnode_from_str(message, strlen(message)); + if (message_node == NULL) { + body_node = xmlnode_get_child(message_node, "body"); + gaim_debug_info("bonjour", "body node --> %s\n", xmlnode_to_str(body_node, NULL)); + if (body_node != NULL) { + body = xmlnode_get_data(body_node); + html_node = xmlnode_get_child(message_node, "html"); + gaim_debug_info("bonjour", "html node --> %s\n", xmlnode_to_str(html_node, NULL)); + if (html_node != NULL) { + html_body_node = xmlnode_get_child(html_node, "body"); + if (html_body_node != NULL) { + ichat_balloon_color = xmlnode_get_attrib(html_body_node, "ichatballooncolor"); + ichat_text_color = xmlnode_get_attrib(html_body_node, "ichattextcolor"); + html_body_font_node = xmlnode_get_child(html_body_node, "font"); + if (html_body_font_node != NULL) { // Types of messages sent by iChat + font_face = xmlnode_get_attrib(html_body_font_node, "face"); + // The absolute iChat font sizes should be converted to 1..7 range + font_size = xmlnode_get_attrib(html_body_font_node, "ABSZ"); + if (font_size != NULL) { + font_size = _font_size_ichat_to_gaim(atoi(font_size)); //<-- This call will probably leak memory + font_color = xmlnode_get_attrib(html_body_font_node, "color"); + html_body = xmlnode_get_data(html_body_font_node); + if (html_body == NULL) { // This is the kind of formated messages that Gaim creates + html_body = xmlnode_to_str(html_body_font_node, &garbage); + events_node = xmlnode_get_child_with_namespace(message_node, "x", "jabber:x:event"); + if (events_node != NULL) { + if (xmlnode_get_child(events_node, "composing") != NULL) { + composing_event = TRUE; + if (xmlnode_get_child(events_node, "id") != NULL) { // The user is just typing + xmlnode_free(message_node); + if (font_face == NULL) font_face = "Helvetica"; + if (font_size == NULL) font_size = "3"; + if (ichat_text_color == NULL) ichat_text_color = "#000000"; + if (ichat_balloon_color == NULL) ichat_balloon_color = "#FFFFFF"; + body = g_strconcat("<font face='", font_face, "' size='", font_size, "' color='", ichat_text_color, + "' back='", ichat_balloon_color, "'>", html_body, "</font>", NULL); + gaim_debug_info("bonjour", "message sent to the UI --> %s\n", body); + // Send the message to the UI + serv_got_im(connection, gb->name, body, 0, time(NULL)); + // Free all the strings and nodes (the attributes are freed with their nodes) + xmlnode_free(message_node); +gboolean _check_buddy_by_address(gpointer key, gpointer value, gpointer address) + GaimBuddy* gb = (GaimBuddy*)value; + BonjourBuddy* bb = (BonjourBuddy*)gb->proto_data; + if (g_strcasecmp(bb->ip, (char*)address) == 0) { +gint _read_data(gint socket, char** message) + GString* data = g_string_new(""); + char parcial_data[512]; + gint total_message_length = 0; + gint parcial_message_length = 0; + // Read chunks of 512 bytes till the end of the data + while ((parcial_message_length = recv(socket, parcial_data, 512, 0)) > 0) { + if (parcial_message_length != -1) { + g_string_append_len(data, parcial_data, parcial_message_length); + total_message_length += parcial_message_length; + } else { // If there is some problem on the transmission we return -1 + g_string_free(data, TRUE); + g_string_free(data, FALSE); + return total_message_length; +gint _send_data(gint socket, char* message) + gint message_len = strlen(message) + 1; + gchar* parcial_message = message; + while ((parcial_sent = send(socket, parcial_message, message_len, 0)) < message_len) { + if (parcial_sent != -1) { + parcial_message += parcial_sent; + message_len -= parcial_sent; + return strlen(message) + 1; +void _client_socket_handler(gpointer data, gint socket, GaimInputCondition condition) + GaimBuddy* gb = (GaimBuddy*)data; + GaimAccount* account = gb->account; + GaimConversation* conversation; + char* closed_conv_message; + BonjourBuddy* bb = (BonjourBuddy*)gb->proto_data; + gboolean closed_conversation = FALSE; + // Read the data from the socket + if ((message_length = _read_data(socket, &message)) == -1) { + // There have been an error reading from the socket + error_message = strerror(errno); + gaim_debug_error("bonjour", "eohhh:%s\n", error_message); + } else if (message_length == 0) { // The other end has closed the socket + closed_conversation = TRUE; + message[message_length] = '\0'; + while (g_ascii_iscntrl(message[message_length - 1])) { + message[message_length - 1] = '\0'; + // Check if the start of the doctype has been receiced, if not check that the current + if (!(bb->conversation->start_step_one)) { + if (g_str_has_prefix(message, DOCTYPE_DECLARATION)){ + bb->conversation->start_step_one = TRUE; + // Check if the start of the stream has been received, if not check that the current + // data is the start of the stream + if (!(bb->conversation->start_step_two)) { + if (g_str_has_suffix(message, STREAM_START)) { + bb->conversation->start_step_two = TRUE; + // If we haven't done it yet, we have to sent the start of the stream to the other buddy + if (!(bb->conversation->stream_started)) { + if (send(bb->conversation->socket, CONVERSATION_START, strlen(CONVERSATION_START) + 1, 0) == -1) { + gaim_debug_error("bonjour", "Unable to start a conversation with %s\n", bb->name); + // Check that this is not the end of the conversation + if (g_str_has_prefix(message, STREAM_END) || (closed_conversation == TRUE)) { + // Close the socket, clear the watcher and free memory + close(bb->conversation->socket); + gaim_input_remove(bb->conversation->watcher_id); + g_free(bb->conversation->buddy_name); + g_free(bb->conversation); + bb->conversation = NULL; + // Inform the user that the conversation has been closed + conversation = gaim_find_conversation_with_account(gb->name, account); + closed_conv_message = g_strconcat(gb->name, " has closed the conversation.", NULL); + gaim_conversation_write(conversation, NULL, closed_conv_message, GAIM_MESSAGE_SYSTEM, time(NULL)); + // Parse the message to get the data and send to the ui + _jabber_parse_and_write_message_to_ui(message, account->gc, gb); +void _server_socket_handler(gpointer data, int server_socket, GaimInputCondition condition) + struct sockaddr_in their_addr; // connector's address information + int sin_size = sizeof(struct sockaddr); + BonjourBuddy* bb = NULL; + char* address_text = NULL; + GaimBuddyList* bl = gaim_get_blist(); + //Check that it is a read condition + if (condition != GAIM_INPUT_READ) { + if ((client_socket = accept(server_socket, (struct sockaddr *)&their_addr, &sin_size)) == -1) { + fcntl(client_socket, F_SETFL, O_NONBLOCK); + // Look for the buddy that has open the conversation and fill information + address_text = inet_ntoa(their_addr.sin_addr); + gb = (GaimBuddy*)g_hash_table_find(bl->buddies, _check_buddy_by_address, address_text); + gaim_debug_info("bonjour", "We don't like invisible buddies, this is not a superheros comic\n"); + bb = (BonjourBuddy*)gb->proto_data; + // Check if the conversation has been previously started + if (bb->conversation == NULL) { + bb->conversation = g_new(BonjourJabberConversation, 1); + bb->conversation->socket = client_socket; + bb->conversation->start_step_one = FALSE; + bb->conversation->start_step_two = FALSE; + bb->conversation->stream_started = FALSE; + bb->conversation->buddy_name = g_strdup(gb->name); + bb->conversation->message_id = 1; + // Open a watcher for the client socket + bb->conversation->watcher_id = gaim_input_add(client_socket, GAIM_INPUT_READ, + _client_socket_handler, gb); +gint bonjour_jabber_start(BonjourJabber* data) + struct sockaddr_in my_addr; + char* error_message = NULL; + // Open a listening socket for incoming conversations + if ((data->socket = socket(AF_INET, SOCK_STREAM, 0)) == -1) { + gaim_debug_error("bonjour", "Cannot get socket\n"); + error_message = strerror(errno); + gaim_debug_error("bonjour", "%s\n", error_message); + gaim_connection_error(data->account->gc, "Cannot open socket"); + // Make the socket reusable + if (setsockopt(data->socket, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1) { + gaim_debug_error("bonjour", "Cannot make socket reusable\n"); + error_message = strerror(errno); + gaim_debug_error("bonjour", "%s\n", error_message); + gaim_connection_error(data->account->gc, "Error setting socket options"); + my_addr.sin_family = AF_INET; + my_addr.sin_port = data->port; + my_addr.sin_addr.s_addr = INADDR_ANY; + memset(&(my_addr.sin_zero), '\0', 8); + if (bind(data->socket, (struct sockaddr*)&my_addr, sizeof(struct sockaddr)) == -1) { + gaim_debug_error("bonjour", "Cannot bind socket\n"); + error_message = strerror(errno); + gaim_debug_error("bonjour", "%s\n", error_message); + gaim_connection_error(data->account->gc, "Cannot bind socket to port"); + if (listen(data->socket, 10) == -1) { + gaim_debug_error("bonjour", "Cannot listen to socket\n"); + error_message = strerror(errno); + gaim_debug_error("bonjour", "%s\n", error_message); + gaim_connection_error(data->account->gc, "Cannot listen to socket"); + gaim_debug_info("bonjour", "Listening on port %d with socket %d\n", data->port, data->socket); + // Open a watcher in the socket we have just opened + data->watcher_id = gaim_input_add(data->socket, GAIM_INPUT_READ, _server_socket_handler, data); +void bonjour_jabber_send_message(BonjourJabber* data, const gchar* to, const gchar* body) + xmlnode* message_node = NULL; + gint message_length = -1; + xmlnode* message_body_node = NULL; + xmlnode* message_html_node = NULL; + xmlnode* message_html_body_node = NULL; + xmlnode* message_html_body_font_node = NULL; + xmlnode* message_x_node = NULL; + GaimBuddy* gb = gaim_find_buddy(data->account, to); + BonjourBuddy* bb = (BonjourBuddy*)gb->proto_data; + char* conv_message = NULL; + GaimConversation* conversation = NULL; + char* message_from_ui = NULL; + char* stripped_message = NULL; + // Enclose the message from the UI within a "font" node + message_body_node = xmlnode_new("body"); + stripped_message = gaim_markup_strip_html(body); + xmlnode_insert_data(message_body_node, stripped_message, strlen(stripped_message)); + message_from_ui = g_strconcat("<font>", body, "</font>", NULL); + message_html_body_font_node = xmlnode_from_str(message_from_ui, strlen(message_from_ui)); + message_html_body_node = xmlnode_new("body"); + xmlnode_insert_child(message_html_body_node, message_html_body_font_node); + message_html_node = xmlnode_new("html"); + xmlnode_set_attrib(message_html_node, "xmlns", "http://www.w3.org/1999/xhtml"); + xmlnode_insert_child(message_html_node, message_html_body_node); + message_x_node = xmlnode_new("x"); + xmlnode_set_attrib(message_x_node, "xmlns", "jabber:x:event"); + xmlnode_insert_child(message_x_node, xmlnode_new("composing")); + message_node = xmlnode_new("message"); + xmlnode_set_attrib(message_node, "to", ((BonjourBuddy*)(gb->proto_data))->name); + xmlnode_set_attrib(message_node, "type", "chat"); + xmlnode_insert_child(message_node, message_body_node); + xmlnode_insert_child(message_node, message_html_node); + xmlnode_insert_child(message_node, message_x_node); + message = xmlnode_to_str(message_node, &message_length); + // Check if there is a previously open conversation + if (bb->conversation == NULL) { + bb->conversation = g_new(BonjourJabberConversation, 1); + bb->conversation->socket = _connect_to_buddy(gb);; + bb->conversation->start_step_one = FALSE; + bb->conversation->start_step_two = FALSE; + bb->conversation->stream_started = FALSE; + bb->conversation->buddy_name = g_strdup(gb->name); + bb->conversation->watcher_id = gaim_input_add(bb->conversation->socket, + GAIM_INPUT_READ, _client_socket_handler, gb); + // Check if the stream for the conversation has been started + if (bb->conversation->stream_started == FALSE) { + if (send(bb->conversation->socket, CONVERSATION_START, strlen(CONVERSATION_START) + 1, 0) == -1) { + gaim_debug_error("bonjour", "Unable to start a conversation\n"); + conv_message = g_strdup("Unable to send the message, the conversation couldn't be started."); + conversation = gaim_find_conversation_with_account(bb->name, data->account); + gaim_conversation_write(conversation, NULL, conv_message, GAIM_MESSAGE_SYSTEM, time(NULL)); + close(bb->conversation->socket); + gaim_input_remove(bb->conversation->watcher_id); + // Free all the data related to the conversation + g_free(bb->conversation->buddy_name); + g_free(bb->conversation); + bb->conversation = NULL; + bb->conversation->stream_started = TRUE; + if (_send_data(bb->conversation->socket, message) == -1) { // This only works with small amounts of data + gaim_debug_error("bonjour", "Unable to send the message\n"); + conv_message = g_strdup("Unable to send the message."); + conversation = gaim_find_conversation_with_account(bb->name, data->account); + gaim_conversation_write(conversation, NULL, conv_message, GAIM_MESSAGE_SYSTEM, time(NULL)); + gaim_debug_info("bonjour", "Sent message to %s -->\n%s\n", to, message); +void bonjour_jabber_close_conversation(BonjourJabber* data, GaimBuddy* gb) + BonjourBuddy* bb = (BonjourBuddy*)gb->proto_data; + if (bb->conversation != NULL) { + // Send the end of the stream to the other end of the conversation + send(bb->conversation->socket, STREAM_END, strlen(STREAM_END) + 1, 0); + // Close the socket and remove the watcher + close(bb->conversation->socket); + gaim_input_remove(bb->conversation->watcher_id); + // Free all the data related to the conversation + g_free(bb->conversation->buddy_name); + g_free(bb->conversation); +void bonjour_jabber_stop(BonjourJabber* data) + BonjourBuddy* bb = NULL; + // Close the server socket and remove all the watcher + gaim_input_remove(data->watcher_id); + // Close all the sockets and remove all the watchers after sending end streams + if(data->account->gc != NULL){ + buddies = gaim_find_buddies(data->account, data->account->username); + for(l = buddies; l; l = l->next){ + gb = (GaimBuddy*)l->data; + bb = (BonjourBuddy*)gb->proto_data; + if (bb->conversation != NULL) { + send(bb->conversation->socket, STREAM_END, strlen(STREAM_END) + 1, 0); + close(bb->conversation->socket); + gaim_input_remove(bb->conversation->watcher_id); --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/protocols/bonjour/jabber.h Sun Aug 21 18:56:40 2005 -0400
@@ -0,0 +1,67 @@
+ * @file jabber.h The Gaim interface to mDNS and peer to peer Jabber. + * Gaim is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * 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. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +#ifndef _BONJOUR_JABBER_H_ +#define _BONJOUR_JABBER_H_ +#define DOCTYPE_DECLARATION "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +#define STREAM_START "<stream:stream xmlns=\"jabber:client\" xmlns:stream=\"http://etherx.jabber.org/streams\" >" +#define CONVERSATION_START "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<stream:stream xmlns=\"jabber:client\" xmlns:stream=\"http://etherx.jabber.org/streams\" >\n" +#define STREAM_END "</stream:stream>" +typedef struct _bonjour_jabber{ +typedef struct _bonjour_jabber_conversation{ + gboolean start_step_one; + gboolean start_step_two; + gboolean stream_started; +}BonjourJabberConversation; + * Start listening for jabber connections. Returns 0 if the connection could be + * stablished, -1 if a problem appears. +gint bonjour_jabber_start(BonjourJabber* data); +void bonjour_jabber_send_message(BonjourJabber* data, const gchar* to, const gchar* body); +void bonjour_jabber_close_conversation(BonjourJabber* data, GaimBuddy* gb); +void bonjour_jabber_stop(BonjourJabber* data); +#endif /* _BONJOUR_JABBER_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/protocols/bonjour/messages.txt Sun Aug 21 18:56:40 2005 -0400
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" ?> +<stream:stream xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" > +<message to="yo@chloe" type="chat"><body>hola</body><html xmlns="html://www.w3.org/1999/xhtml"><body ichatballoncolor="#111111" ichattextcolor="#000000"><font face="Courier" ABSZ="3">hola</font></body></html><x xmlns="jabber:x:event"><composing /></x></message>