gaim/gaim

First version of the Bonjour protocol plugin
oldstatus
2005-08-21, Juanjo Molinero Horno
83d5858a5b9b
Parents 072cae7dcf90
Children c306cd26d61c
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
+# PARTICULAR PURPOSE.
+
+
+
+
+SOURCES = $(libbonjour_a_SOURCES) $(libbonjour_la_SOURCES)
+
+srcdir = .
+top_srcdir = ../../..
+
+pkgdatadir = $(datadir)/gaim
+pkglibdir = $(libdir)/gaim
+pkgincludedir = $(includedir)/gaim
+top_builddir = ../../..
+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)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+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) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+ARFLAGS = cru
+libbonjour_a_AR = $(AR) $(ARFLAGS)
+libbonjour_a_LIBADD =
+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/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(pkgdir)"
+pkgLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(pkg_LTLIBRARIES)
+libbonjour_la_LIBADD =
+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) \
+ $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+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)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = ${SHELL} /home/juanjo/Desktop/Projects/Gaim/oldstatus/missing --run aclocal-1.9
+ALLOCA =
+AMDEP_FALSE = #
+AMDEP_TRUE =
+AMTAR = ${SHELL} /home/juanjo/Desktop/Projects/Gaim/oldstatus/missing --run tar
+AO_CFLAGS =
+AO_LIBS = -lao -ldl
+AR = ar
+AUDIOFILE_CFLAGS =
+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
+AWK = mawk
+BINRELOC_CFLAGS = -DENABLE_BINRELOC
+BINRELOC_LIBS =
+BUILD_GEVOLUTION_FALSE =
+BUILD_GEVOLUTION_TRUE = #
+BUILD_INCLUDED_LIBINTL = no
+CATOBJEXT = .gmo
+CC = gcc
+CCDEPMODE = depmode=gcc3
+CFLAGS = -g -O2 -Wall -g3
+CPP = gcc -E
+CPPFLAGS =
+CXX = g++
+CXXCPP = g++ -E
+CXXDEPMODE = depmode=gcc3
+CXXFLAGS = -g -O2
+CYGPATH_W = echo
+DATADIRNAME = share
+DEBUG_CFLAGS =
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+DISTRIB_FALSE =
+DISTRIB_TRUE = #
+DOT = true
+DOXYGEN = true
+DYNALOADER_A =
+DYNAMIC_BONJOUR_FALSE = #
+DYNAMIC_BONJOUR_TRUE =
+DYNAMIC_GG_FALSE = #
+DYNAMIC_GG_TRUE =
+DYNAMIC_IRC_FALSE = #
+DYNAMIC_IRC_TRUE =
+DYNAMIC_JABBER_FALSE = #
+DYNAMIC_JABBER_TRUE =
+DYNAMIC_MSN_FALSE = #
+DYNAMIC_MSN_TRUE =
+DYNAMIC_NAPSTER_FALSE = #
+DYNAMIC_NAPSTER_TRUE =
+DYNAMIC_NOVELL_FALSE = #
+DYNAMIC_NOVELL_TRUE =
+DYNAMIC_OSCAR_FALSE = #
+DYNAMIC_OSCAR_TRUE =
+DYNAMIC_PRPLS = bonjour gg irc jabber msn napster novell oscar silc yahoo zephyr
+DYNAMIC_SILC_FALSE = #
+DYNAMIC_SILC_TRUE =
+DYNAMIC_TOC_FALSE =
+DYNAMIC_TOC_TRUE = #
+DYNAMIC_TREPIA_FALSE =
+DYNAMIC_TREPIA_TRUE = #
+DYNAMIC_YAHOO_FALSE = #
+DYNAMIC_YAHOO_TRUE =
+DYNAMIC_ZEPHYR_FALSE = #
+DYNAMIC_ZEPHYR_TRUE =
+ECHO = echo
+ECHO_C =
+ECHO_N = -n
+ECHO_T =
+EGREP = grep -E
+EVOLUTION_ADDRESSBOOK_CFLAGS =
+EVOLUTION_ADDRESSBOOK_LIBS =
+EXEEXT =
+EXTERNAL_LIBZEPHYR_FALSE =
+EXTERNAL_LIBZEPHYR_TRUE = #
+F77 =
+FFLAGS =
+GENCAT = gencat
+GLIBC21 = yes
+GLIB_CFLAGS = -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
+GLIB_GENMARSHAL = glib-genmarshal
+GLIB_LIBS = -lglib-2.0
+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
+HAVE_ASPRINTF = 1
+HAVE_DOXYGEN_FALSE = #
+HAVE_DOXYGEN_TRUE =
+HAVE_POSIX_PRINTF = 1
+HAVE_SNPRINTF = 1
+HAVE_WPRINTF = 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
+INSTOBJEXT = .mo
+INTLBISON = :
+INTLLIBS =
+INTLOBJS =
+INTL_LIBTOOL_SUFFIX_PREFIX =
+KRB4_CFLAGS =
+KRB4_LDFLAGS =
+KRB4_LIBS =
+LDADD =
+LDFLAGS =
+LIBICONV =
+LIBINTL =
+LIBOBJS =
+LIBPERL_A =
+LIBS = -lnsl
+LIBTOOL = $(SHELL) $(top_builddir)/libtool --silent
+LN_S = ln -s
+LTLIBICONV =
+LTLIBINTL =
+LTLIBOBJS =
+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
+OBJEXT = o
+PACKAGE = gaim
+PACKAGE_BUGREPORT = gaim-devel@lists.sourceforge.net
+PACKAGE_NAME = gaim
+PACKAGE_STRING = gaim 1.5.1cvs
+PACKAGE_TARNAME = gaim
+PACKAGE_VERSION = 1.5.1cvs
+PATH_SEPARATOR = :
+PERL = perl
+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
+PERL_MM_PARAMS =
+PKG_CONFIG = /usr/bin/pkg-config
+PLUGINS_FALSE = #
+PLUGINS_TRUE =
+POSUB = po
+PRPLS_FALSE = #
+PRPLS_TRUE =
+RANLIB = ranlib
+SET_MAKE =
+SHELL = /bin/sh
+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
+STATIC_BONJOUR_FALSE =
+STATIC_BONJOUR_TRUE = #
+STATIC_GG_FALSE =
+STATIC_GG_TRUE = #
+STATIC_IRC_FALSE =
+STATIC_IRC_TRUE = #
+STATIC_JABBER_FALSE =
+STATIC_JABBER_TRUE = #
+STATIC_LINK_LIBS =
+STATIC_MSN_FALSE =
+STATIC_MSN_TRUE = #
+STATIC_NAPSTER_FALSE =
+STATIC_NAPSTER_TRUE = #
+STATIC_NOVELL_FALSE =
+STATIC_NOVELL_TRUE = #
+STATIC_OSCAR_FALSE =
+STATIC_OSCAR_TRUE = #
+STATIC_PRPLS =
+STATIC_SILC_FALSE =
+STATIC_SILC_TRUE = #
+STATIC_TOC_FALSE =
+STATIC_TOC_TRUE = #
+STATIC_TREPIA_FALSE =
+STATIC_TREPIA_TRUE = #
+STATIC_YAHOO_FALSE =
+STATIC_YAHOO_TRUE = #
+STATIC_ZEPHYR_FALSE =
+STATIC_ZEPHYR_TRUE = #
+STRIP = strip
+TCL_CFLAGS =
+TCL_LIBS = -ldl -lieee -lm
+TK_LIBS =
+USE_GNUTLS_FALSE = #
+USE_GNUTLS_TRUE =
+USE_INCLUDED_LIBINTL = no
+USE_NLS = yes
+USE_NSS_FALSE = #
+USE_NSS_TRUE =
+USE_PERL_FALSE = #
+USE_PERL_TRUE =
+USE_TCL_FALSE =
+USE_TCL_TRUE = #
+USE_TK_FALSE =
+USE_TK_TRUE = #
+VERSION = 1.5.1cvs
+XGETTEXT = /usr/bin/xgettext
+XSS_LIBS =
+X_CFLAGS = -I/usr/X11R6/include
+X_EXTRA_LIBS =
+X_LIBS = -L/usr/X11R6/lib
+X_PRE_LIBS = -lSM -lICE
+ZEPHYR_CFLAGS =
+ZEPHYR_LDFLAGS =
+ZEPHYR_LIBS =
+ac_ct_AR = ar
+ac_ct_CC = gcc
+ac_ct_CXX = g++
+ac_ct_F77 =
+ac_ct_RANLIB = ranlib
+ac_ct_STRIP = strip
+am__fastdepCC_FALSE = #
+am__fastdepCC_TRUE =
+am__fastdepCXX_FALSE = #
+am__fastdepCXX_TRUE =
+am__include = include
+am__leading_dot = .
+am__quote =
+am__tar = ${AMTAR} chof - "$$tardir"
+am__untar = ${AMTAR} xf -
+bindir = ${exec_prefix}/bin
+build = powerpc-unknown-linux-gnu
+build_alias =
+build_cpu = powerpc
+build_os = linux-gnu
+build_vendor = unknown
+datadir = ${prefix}/share
+enable_dot = yes
+enable_doxygen = yes
+exec_prefix = ${prefix}
+gaimpath = /usr/local/bin/gaim
+host = powerpc-unknown-linux-gnu
+host_alias =
+host_cpu = powerpc
+host_os = linux-gnu
+host_vendor = unknown
+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
+mandir = ${prefix}/man
+mkdir_p = mkdir -p --
+oldincludedir = /usr/include
+perlpath = /usr/bin/perl
+prefix = /usr/local
+program_transform_name = s,x,x,
+sbindir = ${exec_prefix}/sbin
+sedpath = /bin/sed
+sharedstatedir = ${prefix}/com
+sysconfdir = ${prefix}/etc
+target = powerpc-unknown-linux-gnu
+target_alias =
+target_cpu = powerpc
+target_os = linux-gnu
+target_vendor = unknown
+EXTRA_DIST = \
+ Makefile.mingw
+
+pkgdir = $(libdir)/gaim
+BONJOURSOURCES = \
+ bonjour.c \
+ buddy.c \
+ dns_sd.c \
+ jabber.c
+
+AM_CFLAGS = $(st)
+libbonjour_la_LDFLAGS = -module -avoid-version $(GLIB_LIBS) $(HOWL_LIBS)
+st =
+#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)
+AM_CPPFLAGS = \
+ -I$(top_srcdir)/src \
+ $(GLIB_CFLAGS) \
+ $(DEBUG_CFLAGS) \
+ $(HOWL_CFLAGS)
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/protocols/bonjour/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/protocols/bonjour/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *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);; \
+ esac;
+
+$(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
+
+clean-noinstLIBRARIES:
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+libbonjour.a: $(libbonjour_a_OBJECTS) $(libbonjour_a_DEPENDENCIES)
+ -rm -f libbonjour.a
+ $(libbonjour_a_AR) libbonjour.a $(libbonjour_a_OBJECTS) $(libbonjour_a_LIBADD)
+ $(RANLIB) libbonjour.a
+install-pkgLTLIBRARIES: $(pkg_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ test -z "$(pkgdir)" || $(mkdir_p) "$(DESTDIR)$(pkgdir)"
+ @list='$(pkg_LTLIBRARIES)'; for p in $$list; do \
+ if test -f $$p; then \
+ f=$(am__strip_dir) \
+ 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"; \
+ else :; fi; \
+ done
+
+uninstall-pkgLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @set -x; list='$(pkg_LTLIBRARIES)'; for p in $$list; do \
+ p=$(am__strip_dir) \
+ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(pkgdir)/$$p'"; \
+ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(pkgdir)/$$p"; \
+ done
+
+clean-pkgLTLIBRARIES:
+ -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"; \
+ done
+libbonjour.la: $(libbonjour_la_OBJECTS) $(libbonjour_la_DEPENDENCIES)
+ $(LINK) $(am_libbonjour_la_rpath) $(libbonjour_la_LDFLAGS) $(libbonjour_la_OBJECTS) $(libbonjour_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+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
+
+.c.o:
+ 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) \
+# $(COMPILE) -c $<
+
+.c.obj:
+ 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) '$<'`
+
+.c.lo:
+ 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`
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+
+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; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(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) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ 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 \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LIBRARIES) $(LTLIBRARIES)
+installdirs:
+ for dir in "$(DESTDIR)$(pkgdir)"; do \
+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(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
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -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: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \
+ clean-pkgLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pkgLTLIBRARIES
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+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.
+.NOEXPORT:
--- /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 @@
+EXTRA_DIST = \
+ Makefile.mingw
+
+pkgdir = $(libdir)/gaim
+
+BONJOURSOURCES = \
+ bonjour.c \
+ buddy.c \
+ dns_sd.c \
+ jabber.c
+
+AM_CFLAGS = $(st)
+
+libbonjour_la_LDFLAGS = -module -avoid-version $(GLIB_LIBS) $(HOWL_LIBS)
+
+if STATIC_BONJOUR
+
+st = -DGAIM_STATIC_PRPL
+noinst_LIBRARIES = libbonjour.a
+libbonjour_a_SOURCES = $(BONJOURSOURCES)
+libbonjour_a_CFLAGS = $(AM_CFLAGS)
+
+else
+
+st =
+pkg_LTLIBRARIES = libbonjour.la
+libbonjour_la_SOURCES = $(BONJOURSOURCES)
+
+endif
+
+
+AM_CPPFLAGS = \
+ -I$(top_srcdir)/src \
+ $(GLIB_CFLAGS) \
+ $(DEBUG_CFLAGS) \
+ $(HOWL_CFLAGS)
--- /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.
+# @configure_input@
+
+# 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
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+SOURCES = $(libbonjour_a_SOURCES) $(libbonjour_la_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+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) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+ARFLAGS = cru
+libbonjour_a_AR = $(AR) $(ARFLAGS)
+libbonjour_a_LIBADD =
+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/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(pkgdir)"
+pkgLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(pkg_LTLIBRARIES)
+libbonjour_la_LIBADD =
+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) \
+ $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+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)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AO_CFLAGS = @AO_CFLAGS@
+AO_LIBS = @AO_LIBS@
+AR = @AR@
+AUDIOFILE_CFLAGS = @AUDIOFILE_CFLAGS@
+AUDIOFILE_CONFIG = @AUDIOFILE_CONFIG@
+AUDIOFILE_LIBS = @AUDIOFILE_LIBS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+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@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEBUG_CFLAGS = @DEBUG_CFLAGS@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISTRIB_FALSE = @DISTRIB_FALSE@
+DISTRIB_TRUE = @DISTRIB_TRUE@
+DOT = @DOT@
+DOXYGEN = @DOXYGEN@
+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@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EVOLUTION_ADDRESSBOOK_CFLAGS = @EVOLUTION_ADDRESSBOOK_CFLAGS@
+EVOLUTION_ADDRESSBOOK_LIBS = @EVOLUTION_ADDRESSBOOK_LIBS@
+EXEEXT = @EXEEXT@
+EXTERNAL_LIBZEPHYR_FALSE = @EXTERNAL_LIBZEPHYR_FALSE@
+EXTERNAL_LIBZEPHYR_TRUE = @EXTERNAL_LIBZEPHYR_TRUE@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GENCAT = @GENCAT@
+GLIBC21 = @GLIBC21@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMSGFMT = @GMSGFMT@
+GNUTLS_CFLAGS = @GNUTLS_CFLAGS@
+GNUTLS_LIBS = @GNUTLS_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GTKSPELL_CFLAGS = @GTKSPELL_CFLAGS@
+GTKSPELL_LIBS = @GTKSPELL_LIBS@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+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@
+HOWL_LIBS = @HOWL_LIBS@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLBISON = @INTLBISON@
+INTLLIBS = @INTLLIBS@
+INTLOBJS = @INTLOBJS@
+INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+KRB4_CFLAGS = @KRB4_CFLAGS@
+KRB4_LDFLAGS = @KRB4_LDFLAGS@
+KRB4_LIBS = @KRB4_LIBS@
+LDADD = @LDADD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBPERL_A = @LIBPERL_A@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+NSS_CFLAGS = @NSS_CFLAGS@
+NSS_LIBS = @NSS_LIBS@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+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 = @PERL@
+PERL_CFLAGS = @PERL_CFLAGS@
+PERL_LIBS = @PERL_LIBS@
+PERL_MM_PARAMS = @PERL_MM_PARAMS@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINS_FALSE = @PLUGINS_FALSE@
+PLUGINS_TRUE = @PLUGINS_TRUE@
+POSUB = @POSUB@
+PRPLS_FALSE = @PRPLS_FALSE@
+PRPLS_TRUE = @PRPLS_TRUE@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SILC_CFLAGS = @SILC_CFLAGS@
+SILC_LIBS = @SILC_LIBS@
+SM_LIBS = @SM_LIBS@
+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@
+STRIP = @STRIP@
+TCL_CFLAGS = @TCL_CFLAGS@
+TCL_LIBS = @TCL_LIBS@
+TK_LIBS = @TK_LIBS@
+USE_GNUTLS_FALSE = @USE_GNUTLS_FALSE@
+USE_GNUTLS_TRUE = @USE_GNUTLS_TRUE@
+USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_NLS = @USE_NLS@
+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@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XSS_LIBS = @XSS_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZEPHYR_CFLAGS = @ZEPHYR_CFLAGS@
+ZEPHYR_LDFLAGS = @ZEPHYR_LDFLAGS@
+ZEPHYR_LIBS = @ZEPHYR_LIBS@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+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@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+enable_dot = @enable_dot@
+enable_doxygen = @enable_doxygen@
+exec_prefix = @exec_prefix@
+gaimpath = @gaimpath@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+perlpath = @perlpath@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sedpath = @sedpath@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+EXTRA_DIST = \
+ Makefile.mingw
+
+pkgdir = $(libdir)/gaim
+BONJOURSOURCES = \
+ bonjour.c \
+ buddy.c \
+ dns_sd.c \
+ jabber.c
+
+AM_CFLAGS = $(st)
+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)
+AM_CPPFLAGS = \
+ -I$(top_srcdir)/src \
+ $(GLIB_CFLAGS) \
+ $(DEBUG_CFLAGS) \
+ $(HOWL_CFLAGS)
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/protocols/bonjour/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/protocols/bonjour/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *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);; \
+ esac;
+
+$(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
+
+clean-noinstLIBRARIES:
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+libbonjour.a: $(libbonjour_a_OBJECTS) $(libbonjour_a_DEPENDENCIES)
+ -rm -f libbonjour.a
+ $(libbonjour_a_AR) libbonjour.a $(libbonjour_a_OBJECTS) $(libbonjour_a_LIBADD)
+ $(RANLIB) libbonjour.a
+install-pkgLTLIBRARIES: $(pkg_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ test -z "$(pkgdir)" || $(mkdir_p) "$(DESTDIR)$(pkgdir)"
+ @list='$(pkg_LTLIBRARIES)'; for p in $$list; do \
+ if test -f $$p; then \
+ f=$(am__strip_dir) \
+ 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"; \
+ else :; fi; \
+ done
+
+uninstall-pkgLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @set -x; list='$(pkg_LTLIBRARIES)'; for p in $$list; do \
+ p=$(am__strip_dir) \
+ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(pkgdir)/$$p'"; \
+ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(pkgdir)/$$p"; \
+ done
+
+clean-pkgLTLIBRARIES:
+ -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"; \
+ done
+libbonjour.la: $(libbonjour_la_OBJECTS) $(libbonjour_la_DEPENDENCIES)
+ $(LINK) $(am_libbonjour_la_rpath) $(libbonjour_la_LDFLAGS) $(libbonjour_la_OBJECTS) $(libbonjour_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@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@
+
+.c.o:
+@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 $<
+
+.c.obj:
+@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) '$<'`
+
+.c.lo:
+@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`
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+
+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; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(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) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ 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 \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LIBRARIES) $(LTLIBRARIES)
+installdirs:
+ for dir in "$(DESTDIR)$(pkgdir)"; do \
+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(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
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -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: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \
+ clean-pkgLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pkgLTLIBRARIES
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+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.
+.NOEXPORT:
--- /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 @@
+#
+# Makefile.mingw
+#
+# Description: Makefile for win32 (mingw) version of libbonjour
+#
+
+#
+# PATHS
+#
+
+INCLUDE_DIR := .
+GTK_TOP := ../../../../win32-dev/gtk_2_0
+GAIM_TOP := ../../..
+BONJOUR_ROOT := .
+GAIM_INSTALL_DIR := $(GAIM_TOP)/win32-install-dir
+
+##
+## VARIABLE DEFINITIONS
+##
+
+TARGET = libbonjour
+
+# Compiler Options
+
+CFLAGS =
+
+DEFINES =
+
+# Static or Plugin...
+ifeq ($(TYPE),STATIC)
+ DEFINES += -DSTATIC
+ DLL_INSTALL_DIR = $(GAIM_INSTALL_DIR)
+else
+ifeq ($(TYPE),PLUGIN)
+ DLL_INSTALL_DIR = $(GAIM_INSTALL_DIR)/plugins
+endif
+endif
+
+
+##
+## INCLUDE MAKEFILES
+##
+
+include $(GAIM_TOP)/src/win32/global.mak
+
+##
+## INCLUDE PATHS
+##
+
+INCLUDE_PATHS += -I$(BONJOUR_ROOT) \
+ -I$(GTK_TOP)/include \
+ -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 \
+ -I$(GAIM_TOP)/src/win32 \
+ -I$(GAIM_TOP)
+
+
+LIB_PATHS = -L$(GTK_TOP)/lib \
+ -L$(GAIM_TOP)/src
+
+
+##
+## SOURCES, OBJECTS
+##
+
+C_SRC = rendezvous.c
+
+
+OBJECTS = $(C_SRC:%.c=%.o)
+
+
+##
+## LIBRARIES
+##
+
+LIBS = -lgtk-win32-2.0 \
+ -lglib-2.0 \
+ -lgdk-win32-2.0 \
+ -lgmodule-2.0 \
+ -lgobject-2.0 \
+ -lws2_32 \
+ -lintl \
+ -lgaim
+
+
+##
+## RULES
+##
+
+# How to make a C file
+
+%.o: %.c
+ $(CC) $(CFLAGS) $(DEFINES) $(INCLUDE_PATHS) -o $@ -c $<
+
+##
+## TARGET DEFINITIONS
+##
+
+.PHONY: all clean
+
+all: $(TARGET).dll
+
+install:
+ cp $(BONJOUR_ROOT)/$(TARGET).dll $(DLL_INSTALL_DIR)
+
+
+##
+## BUILD Dependencies
+##
+
+$(GAIM_TOP)/src/gaim.lib:
+ $(MAKE) -C $(GAIM_TOP)/src -f Makefile.mingw gaim.lib
+
+##
+## BUILD DLL
+##
+
+$(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
+
+##
+## CLEAN RULES
+##
+
+clean:
+ rm -rf *.o
+ rm -rf $(TARGET).dll
+ rm -rf $(TARGET).lib
--- /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
+ * source distribution.
+ *
+ * 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.h>
+
+#include "internal.h"
+#include "account.h"
+#include "accountopt.h"
+#include "version.h"
+#include "debug.h"
+
+#include "bonjour.h"
+#include "dns_sd.h"
+#include "jabber.h"
+#include "buddy.h"
+
+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);
+ bd = gc->proto_data;
+
+ // 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");
+
+ // Free the data
+ g_free(bd->jabber_data);
+ g_free(bd);
+ return;
+ }
+
+ // 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);
+ GSList* buddies;
+ GSList* l;
+ 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);
+ if (bd != NULL) {
+ 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);
+ }
+ g_slist_free(buddies);
+ }
+
+ // 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)
+{
+ if(!to || !msg)
+ return 0;
+
+ bonjour_jabber_send_message(((BonjourData*)(connection->proto_data))->jabber_data, to, msg);
+
+ return 1;
+}
+
+void bonjour_set_status(GaimConnection* connection, const char* state, const char* message)
+{
+ char* status_dns_sd = NULL;
+ char *stripped = NULL;
+
+ if(message) {
+ 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);
+ if(connection->away){
+ 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)
+{
+ GList *types = NULL;
+
+ 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);
+
+ return types;
+}
+
+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,
+ char **nw, char **ne)
+{
+ switch (b->uc) {
+ case BONJOUR_STATE_AWAY:
+ *se = "away";
+ break;
+ case BONJOUR_STATE_DND:
+ *se = "dnd";
+ break;
+ case BONJOUR_STATE_ERROR:
+ *se = "error";
+ break;
+ }
+}
+
+static char* bonjour_status_text(GaimBuddy *b)
+{
+ BonjourBuddy* bb = (BonjourBuddy*)b->proto_data;
+
+ if (bb->msg != NULL) {
+ return g_strdup(bb->msg);
+ } else {
+ return g_strdup("");
+ }
+}
+
+static char* bonjour_tooltip_text(GaimBuddy *b)
+{
+ char* status = NULL;
+
+ switch (b->uc) {
+ case BONJOUR_STATE_AVAILABLE:
+ status = g_strdup(_("Online"));
+ break;
+ case BONJOUR_STATE_AWAY:
+ status = g_strdup(_("Away"));
+ break;
+ case BONJOUR_STATE_DND:
+ status = g_strdup(_("Do Not Disturb"));
+ break;
+ case BONJOUR_STATE_ERROR:
+ status = g_strdup("Error");
+ break;
+ }
+
+ return g_strconcat("\n<b>Status: </b>", status, NULL);
+}
+
+static GaimPlugin *my_protocol = NULL;
+
+static GaimPluginProtocolInfo prpl_info =
+{
+ OPT_PROTO_NO_PASSWORD,
+ 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 */
+ NULL, /* chat_info_defaults */
+ bonjour_login, /* login */
+ bonjour_close, /* close */
+ bonjour_send_im, /* send_im */
+ NULL, /* set_info */
+ NULL, /* send_typing */
+ NULL, /* get_info */
+ bonjour_set_status, /* set_status */
+ NULL, /* set_idle */
+ NULL, /* change_passwd */
+ NULL, /* add_buddy */
+ NULL, /* add_buddies */
+ NULL, /* remove_buddy */
+ NULL, /* remove_buddies */
+ NULL, /* add_permit */
+ NULL, /* add_deny */
+ NULL, /* rem_permit */
+ NULL, /* rem_deny */
+ NULL, /* set_permit_deny */
+ NULL, /* warn */
+ NULL, /* join_chat */
+ NULL, /* reject_chat */
+ NULL, /* get_chat_name */
+ NULL, /* chat_invite */
+ NULL, /* chat_leave */
+ NULL, /* chat_whisper */
+ NULL, /* chat_send */
+ NULL, /* keepalive */
+ NULL, /* register_user */
+ NULL, /* get_cb_info */
+ NULL, /* get_cb_away */
+ NULL, /* alias_buddy */
+ NULL, /* group_buddy */
+ NULL, /* rename_group */
+ NULL, /* buddy_free */
+ bonjour_convo_closed, /* convo_closed */
+ NULL, /* normalize */
+ 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 */
+ NULL /* send_file */
+};
+
+static GaimPluginInfo info =
+{
+ GAIM_PLUGIN_MAGIC,
+ GAIM_MAJOR_VERSION,
+ GAIM_MINOR_VERSION,
+ GAIM_PLUGIN_PROTOCOL, /**< type */
+ NULL, /**< ui_requirement */
+ 0, /**< flags */
+ NULL, /**< dependencies */
+ GAIM_PRIORITY_DEFAULT, /**< priority */
+
+ "prpl-bonjour", /**< id */
+ "Bonjour", /**< name */
+ VERSION, /**< version */
+ /** summary */
+ N_("Bonjour Protocol Plugin"),
+ /** description */
+ N_("Bonjour Protocol Plugin"),
+ NULL, /**< author */
+ GAIM_WEBSITE, /**< homepage */
+
+ NULL, /**< load */
+ NULL, /**< unload */
+ NULL, /**< destroy */
+
+ NULL, /**< ui_info */
+ &prpl_info, /**< extra_info */
+ NULL, /**< prefs_info */
+ NULL
+};
+
+static void
+init_plugin(GaimPlugin *plugin)
+{
+ GaimAccountUserSplit *split;
+ GaimAccountOption *option;
+ char hostname[255];
+
+ 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);
+ */
+
+ my_protocol = plugin;
+}
+
+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
+ *
+ * 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
+ * source distribution.
+ *
+ * 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_H_
+#define _BONJOUR_H_
+
+#include <howl.h>
+
+#include "dns_sd.h"
+#include "jabber.h"
+
+#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;
+}BonjourData;
+
+#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.
+ */
+
+
+#include <glib.h>
+#include <stdlib.h>
+
+#include "buddy.h"
+#include "account.h"
+#include "blist.h"
+#include "bonjour.h"
+#include "debug.h"
+
+/**
+ * Creates a new buddy.
+ */
+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;
+
+ return buddy;
+}
+
+/**
+ * Check if all the compulsory buddy data is present.
+ */
+gboolean bonjour_buddy_check(BonjourBuddy* buddy)
+{
+ if(buddy->name == NULL){
+ return FALSE;
+ }
+
+ if(buddy->first == NULL){
+ return FALSE;
+ }
+
+ if(buddy->last == NULL){
+ return FALSE;
+ }
+
+ if(buddy->port_p2pj == -1){
+ return FALSE;
+ }
+
+ if(buddy->status == NULL){
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/**
+ * 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;
+ gint buddy_status;
+
+ // 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;
+ } else {
+ buddy_status = BONJOUR_STATE_ERROR;
+ }
+
+ if (gb != NULL) {
+ // The buddy already exists
+ serv_got_update(account->gc, gb->name, TRUE, gb->evil, gb->signon, gb->idle, buddy_status);
+ } else {
+ // 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);
+ g_free(buddy_alias);
+ }
+}
+
+/**
+ * Deletes a buddy from memory.
+ */
+void bonjour_buddy_delete(BonjourBuddy* buddy)
+{
+ g_free(buddy->name);
+ g_free(buddy->first);
+ g_free(buddy->phsh);
+ g_free(buddy->status);
+ g_free(buddy->email);
+ g_free(buddy->last);
+ g_free(buddy->jid);
+ g_free(buddy->AIM);
+ g_free(buddy->vc);
+ g_free(buddy->ip);
+ g_free(buddy->msg);
+
+ if (buddy->conversation != NULL) {
+ g_free(buddy->conversation->buddy_name);
+ g_free(buddy->conversation);
+ }
+
+ free(buddy);
+}
--- /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.
+ */
+
+#ifndef _BONJOUR_BUDDY
+#define _BONJOUR_BUDDY
+
+#include <howl.h>
+#include <glib.h>
+
+#include "account.h"
+#include "jabber.h"
+
+typedef struct _bonjour_buddy{
+ 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;
+ BonjourJabberConversation* conversation;
+}BonjourBuddy;
+
+/**
+ * Creates a new buddy.
+ */
+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);
+
+#endif
--- /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.
+ */
+
+#include <string.h>
+
+#include "dns_sd.h"
+#include "bonjour.h"
+#include "buddy.h"
+#include "debug.h"
+
+// Private data
+
+typedef struct _dns_sd_packet{
+ gchar* name;
+ gchar* txtvers;
+ gchar* version;
+ gchar* first;
+ gchar* last;
+ gint port_p2pj;
+ gchar* phsh;
+ gchar* status;
+ gchar* message;
+ gchar* email;
+ gchar* vc;
+ gchar* jid;
+ gchar* AIM;
+}dns_sd_packet;
+
+// End private data
+
+// Private functions
+
+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
+ switch(status){
+ case SW_DISCOVERY_PUBLISH_STARTED :
+ gaim_debug_info("bonjour", "_publish_reply --> Service started\n");
+ break;
+ case SW_DISCOVERY_PUBLISH_STOPPED :
+ gaim_debug_info("bonjour", "_publish_reply --> Service stopped\n");
+ break;
+ case SW_DISCOVERY_PUBLISH_NAME_COLLISION :
+ gaim_debug_info("bonjour", "_publish_reply --> Name collision\n");
+ break;
+ case SW_DISCOVERY_PUBLISH_INVALID :
+ gaim_debug_info("bonjour", "_publish_reply --> Service invalid\n");
+ break;
+ }
+
+ return SW_OKAY;
+}
+
+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,
+ sw_opaque extra)
+{
+ BonjourBuddy* buddy;
+ GaimAccount* account = (GaimAccount*)extra;
+ gchar* txtvers = NULL;
+ gchar* version = NULL;
+ gchar* first = NULL;
+ gint port_p2pj = -1;
+ gchar* phsh = NULL;
+ gchar* status = NULL;
+ gchar* email = NULL;
+ gchar* last = NULL;
+ gchar* jid = NULL;
+ gchar* AIM = NULL;
+ gchar* vc = NULL;
+ gchar* msg = NULL;
+ gint address_length = 16;
+ gchar* ip = NULL;
+ 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) {
+ jid = g_strdup(value);
+ } else if (strcmp(key, "AIM") == 0) {
+ AIM = g_strdup(value);
+ } else if (strcmp(key, "vc") == 0) {
+ vc = g_strdup(value);
+ } else if (strcmp(key, "phsh") == 0) {
+ phsh = g_strdup(value);
+ } else if (strcmp(key, "msg") == 0) {
+ msg = g_strdup(value);
+ }
+ }
+ }
+
+ // Put the parameters of the text_record in a buddy and add the buddy to
+ // the buddy list
+ 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
+ g_free(txtvers);
+ g_free(version);
+ g_free(first);
+ g_free(last);
+ g_free(status);
+ g_free(email);
+ g_free(jid);
+ g_free(AIM);
+ g_free(vc);
+ g_free(phsh);
+ g_free(msg);
+
+ return SW_OKAY;
+}
+
+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;
+ GaimBuddy* gb = NULL;
+
+ switch(status){
+ case SW_DISCOVERY_BROWSE_INVALID:
+ gaim_debug_warning("bonjour", "_browser_reply --> Invalid\n");
+ break;
+ case SW_DISCOVERY_BROWSE_RELEASE:
+ gaim_debug_warning("bonjour", "_browser_reply --> Release\n");
+ break;
+ case SW_DISCOVERY_BROWSE_ADD_DOMAIN:
+ gaim_debug_warning("bonjour", "_browser_reply --> Add domain\n");
+ break;
+ case SW_DISCOVERY_BROWSE_ADD_DEFAULT_DOMAIN:
+ gaim_debug_warning("bonjour", "_browser_reply --> Add default domain\n");
+ break;
+ case SW_DISCOVERY_BROWSE_REMOVE_DOMAIN:
+ gaim_debug_warning("bonjour", "_browser_reply --> Remove domain\n");
+ break;
+ 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");
+ }
+ }
+ break;
+ case SW_DISCOVERY_BROWSE_REMOVE_SERVICE:
+ gaim_debug_info("bonjour", "_browser_reply --> Remove service\n");
+ gb = gaim_find_buddy((GaimAccount*)extra, name);
+ if (gb != NULL) {
+ bonjour_buddy_delete(gb->proto_data);
+ gaim_blist_remove_buddy(gb);
+ }
+ break;
+ case SW_DISCOVERY_BROWSE_RESOLVED:
+ gaim_debug_info("bonjour", "_browse_reply --> Resolved\n");
+ break;
+ default:
+ break;
+ }
+
+ return SW_OKAY;
+}
+
+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.");
+ return;
+ }
+
+ 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);
+
+ // Publish the service
+ 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.");
+ return;
+ }
+
+ // Free the memory used by temp data
+ sw_text_record_fina(dns_data);
+}
+
+void _dns_sd_packet_free(dns_sd_packet* packet)
+{
+ g_free(packet);
+}
+
+int _dns_sd_register(BonjourDnsSd* data)
+{
+ dns_sd_packet* packet;
+
+ // 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->message = "";
+ packet->email = data->email;
+ packet->vc = data->vc;
+ 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);
+
+ return 0;
+}
+
+gboolean _dns_sd_handle_packets(GIOChannel* source, GIOCondition condition, gpointer data)
+{
+ sw_discovery_read_socket(*((sw_discovery*)data));
+ return TRUE;
+}
+
+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.");
+ return NULL;
+ }
+
+ // Yields control of the cpu to the daemon
+ sw_discovery_run(*(dns_sd_data->session));
+
+ return NULL;
+}
+
+// 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));
+
+ return data;
+}
+
+/**
+ * Deallocate the space of the dns-sd data.
+ */
+void bonjour_dns_sd_free(BonjourDnsSd* data)
+{
+ g_free(data->session);
+ g_free(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)
+{
+ dns_sd_packet* packet;
+
+ // 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->vc = data->vc;
+ 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
+ * bonjour peers.
+ */
+void bonjour_dns_sd_start(BonjourDnsSd* data)
+{
+ GIOChannel* io_channel;
+ gint dns_sd_socket;
+ 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.");
+ return;
+ }
+
+ // 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_init (NULL);
+ }
+ 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.");
+ return;
+ }
+
+ // 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));
+
+ return 0;
+}
--- /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.
+ */
+
+#ifndef _BONJOUR_DNS_SD
+#define _BONJOUR_DNS_SD
+
+#include <howl.h>
+#include <glib.h>
+#include "account.h"
+
+#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{
+ sw_discovery* session;
+ GaimAccount* account;
+ gchar* name;
+ gchar* txtvers;
+ gchar* version;
+ gchar* first;
+ gchar* last;
+ gint port_p2pj;
+ gchar* phsh;
+ gchar* status;
+ gchar* email;
+ gchar* vc;
+ gchar* jid;
+ gchar* AIM;
+ GHashTable* buddies;
+}BonjourDnsSd;
+
+/**
+ * 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
+ * bonjour peers.
+ */
+void bonjour_dns_sd_start(BonjourDnsSd* data);
+
+/**
+ * Unregister the "_presence._tcp" service at the mDNS daemon.
+ */
+int bonjour_dns_sd_stop(BonjourDnsSd* data);
+
+#endif
--- /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
+(5) I18n
+(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
+(9) Avatars
+(10) File transfers
+(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
+ * source distribution.
+ *
+ * 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 <sys/socket.h>
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <glib.h>
+#include <glib/gprintf.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include "network.h"
+#include "eventloop.h"
+#include "connection.h"
+#include "blist.h"
+#include "xmlnode.h"
+#include "debug.h"
+#include "notify.h"
+#include "util.h"
+
+#include "jabber.h"
+#include "bonjour.h"
+#include "buddy.h"
+
+gint _connect_to_buddy(GaimBuddy* gb)
+{
+ gint socket_fd;
+ 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));
+
+ return socket_fd;
+}
+
+char* _font_size_gaim_to_ichat(int size)
+{
+ GString* result = NULL;
+
+ switch(size){
+ case 1 :
+ result = g_string_new("8");
+ break;
+ case 2 :
+ result = g_string_new("10");
+ break;
+ case 3 :
+ result = g_string_new("12");
+ break;
+ case 4 :
+ result = g_string_new("14");
+ break;
+ case 5 :
+ result = g_string_new("17");
+ break;
+ case 6 :
+ result = g_string_new("21");
+ break;
+ case 7 :
+ result = g_string_new("24");
+ break;
+ default:
+ result = g_string_new("12");
+ }
+
+ return g_string_free(result, FALSE);
+}
+
+char* _font_size_ichat_to_gaim(int size)
+{
+ GString* result = NULL;
+
+ if (size > 24) {
+ 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");
+ } else {
+ result = g_string_new("1");
+ }
+}
+void _jabber_parse_and_write_message_to_ui(char* message, GaimConnection* connection, GaimBuddy* gb)
+{
+ xmlnode* body_node = NULL;
+ char* body = 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;
+ gint garbage = -1;
+ xmlnode* message_node = NULL;
+
+ // Parsing of the message
+ message_node = xmlnode_from_str(message, strlen(message));
+ if (message_node == NULL) {
+ return;
+ }
+
+ 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);
+ } else {
+ return;
+ }
+
+ 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) {
+ isHTML = TRUE;
+ 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);
+ }
+ } else {
+ isHTML = FALSE;
+ }
+ } else {
+ isHTML = FALSE;
+ }
+
+ }
+
+ 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);
+ g_free(body);
+ g_free(html_body);
+ return;
+ }
+ }
+
+ // Compose the message
+ if (isHTML) {
+ 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);
+ g_free(body);
+ g_free(html_body);
+}
+
+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) {
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+}
+
+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);
+ return -1;
+ }
+ }
+
+ *message = data->str;
+ g_string_free(data, FALSE);
+
+ return total_message_length;
+}
+
+gint _send_data(gint socket, char* message)
+{
+ gint message_len = strlen(message) + 1;
+ gint parcial_sent = 0;
+ 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;
+ } else {
+ return -1;
+ }
+ }
+
+ return strlen(message) + 1;
+}
+
+void _client_socket_handler(gpointer data, gint socket, GaimInputCondition condition)
+{
+ char* message = NULL;
+ gint message_length;
+ GaimBuddy* gb = (GaimBuddy*)data;
+ GaimAccount* account = gb->account;
+ GaimConversation* conversation;
+ char* closed_conv_message;
+ BonjourBuddy* bb = (BonjourBuddy*)gb->proto_data;
+ gboolean closed_conversation = FALSE;
+ char* error_message;
+
+ // 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);
+ return;
+ } else if (message_length == 0) { // The other end has closed the socket
+ closed_conversation = TRUE;
+ } else {
+ message[message_length] = '\0';
+
+ while (g_ascii_iscntrl(message[message_length - 1])) {
+ message[message_length - 1] = '\0';
+ message_length--;
+ }
+ }
+
+ // Check if the start of the doctype has been receiced, if not check that the current
+ // data is the doctype
+ 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);
+ }
+ }
+ }
+ return;
+ }
+
+ // 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));
+ return;
+ }
+
+ // 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)
+{
+ GaimBuddy* gb = NULL;
+ struct sockaddr_in their_addr; // connector's address information
+ int sin_size = sizeof(struct sockaddr);
+ int client_socket;
+ BonjourBuddy* bb = NULL;
+ char* address_text = NULL;
+ GaimBuddyList* bl = gaim_get_blist();
+
+ //Check that it is a read condition
+ if (condition != GAIM_INPUT_READ) {
+ return;
+ }
+
+ if ((client_socket = accept(server_socket, (struct sockaddr *)&their_addr, &sin_size)) == -1) {
+ return;
+ }
+ 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);
+ if (gb == NULL) {
+ gaim_debug_info("bonjour", "We don't like invisible buddies, this is not a superheros comic\n");
+ close(client_socket);
+ return;
+ }
+ 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);
+ } else {
+ close(client_socket);
+ }
+}
+
+gint bonjour_jabber_start(BonjourJabber* data)
+{
+ struct sockaddr_in my_addr;
+ int yes = 1;
+ 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");
+ return -1;
+ }
+
+ // 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");
+ return -1;
+ }
+
+ 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");
+ return -1;
+ }
+
+ 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");
+ return -1;
+ }
+
+ 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);
+
+ return 0;
+}
+
+void bonjour_jabber_send_message(BonjourJabber* data, const gchar* to, const gchar* body)
+{
+ xmlnode* message_node = NULL;
+ gchar* message = 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) {
+ // Start the stream
+ 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;
+ return;
+ }
+
+ bb->conversation->stream_started = TRUE;
+ }
+
+ // Send the message
+ 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)
+{
+ GaimBuddy* gb = NULL;
+ BonjourBuddy* bb = NULL;
+ GSList* buddies;
+ GSList* l;
+
+ // Close the server socket and remove all the watcher
+ close(data->socket);
+ 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);
+ }
+ }
+ g_slist_free(buddies);
+ }
+}
--- /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
+ *
+ * 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
+ * source distribution.
+ *
+ * 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_
+
+#include "account.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{
+ gint port;
+ gint socket;
+ gint watcher_id;
+ char* name;
+ GaimAccount* account;
+}BonjourJabber;
+
+typedef struct _bonjour_jabber_conversation{
+ gint socket;
+ gint watcher_id;
+ gchar* buddy_name;
+ gboolean start_step_one;
+ gboolean start_step_two;
+ gboolean stream_started;
+ gint message_id;
+}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>
+</stream:stream>