Date: Fri, 2 Jul 2004 10:08:55 +0800 (CST) From: Cheng-Lung Sung <clsung@dragon2.net> To: FreeBSD-gnats-submit@FreeBSD.org Cc: clsung@tiger2.net Subject: ports/68578: [maintainer-update] cicq to 4.10.0 Message-ID: <20040702020855.20B4115378@mail.dragon2.net> Resent-Message-ID: <200407020210.i622AKlj041042@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 68578 >Category: ports >Synopsis: [maintainer-update] cicq to 4.10.0 >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: maintainer-update >Submitter-Id: current-users >Arrival-Date: Fri Jul 02 02:10:19 GMT 2004 >Closed-Date: >Last-Modified: >Originator: Cheng-Lung Sung >Release: FreeBSD 4.9-RELEASE i386 >Organization: FreeBSD @ Taiwan >Environment: System: FreeBSD sungsung.csie.nctu.edu.tw 4.9-RELEASE FreeBSD 4.9-RELEASE #5: Wed Oct 29 20:13:25 CST 2003 root@sungsung.csie.nctu.edu.tw:/usr/obj/usr/src/sys/SUNGSUNG i386 >Description: - from 4.9.12 to 4.10.0 - new libmsn (rewrite in C++) - MSN nickname change in multichar still suffer. >How-To-Repeat: >Fix: diff -ruN /usr/ports/net/centericq/Makefile ./centericq/Makefile --- /usr/ports/net/centericq/Makefile Wed May 19 08:35:01 2004 +++ ./centericq/Makefile Thu Jul 1 16:16:08 2004 @@ -7,7 +7,7 @@ # PORTNAME= centericq -PORTVERSION= 4.9.12 +PORTVERSION= 4.10.0 CATEGORIES= net MASTER_SITES= http://centericq.de/archive/source/releases/ diff -ruN /usr/ports/net/centericq/distinfo ./centericq/distinfo --- /usr/ports/net/centericq/distinfo Wed May 19 08:35:01 2004 +++ ./centericq/distinfo Thu Jul 1 16:16:22 2004 @@ -1,2 +1,2 @@ -MD5 (centericq-4.9.12.tar.gz) = 8207170072d02a6eff8a23cc7f801c41 -SIZE (centericq-4.9.12.tar.gz) = 1631402 +MD5 (centericq-4.10.0.tar.gz) = 17219b87beec99688e9050cc44d68cd9 +SIZE (centericq-4.10.0.tar.gz) = 1729711 diff -ruN /usr/ports/net/centericq/files/msn-Makefile.in ./centericq/files/msn-Makefile.in --- /usr/ports/net/centericq/files/msn-Makefile.in Sun Jan 18 08:35:45 2004 +++ ./centericq/files/msn-Makefile.in Thu Jan 1 08:00:00 1970 @@ -1,32 +0,0 @@ ---- Makefile.in.orig Sat Jan 17 04:40:32 2004 -+++ Makefile.in Sat Jan 17 16:49:48 2004 -@@ -92,10 +92,10 @@ - USE_NLS = @USE_NLS@ - VERSION = @VERSION@ - --SUBDIRS = firetalk-0.1 kkconsui-0.1 kkstrtext-0.1 libicq2000-0.1 libjabber-0.1 libyahoo2-0.1 kksystr-0.1 connwrap-0.1 intl po misc share src -+SUBDIRS = firetalk-0.1 kkconsui-0.1 kkstrtext-0.1 libicq2000-0.1 libjabber-0.1 libyahoo2-0.1 kksystr-0.1 connwrap-0.1 intl po misc share blip-0.1 src - - # END OF MOTOR DIST TARGETS # --EXTRA_DIST = centericq.1 centericq.motor config.rpath FAQ NEWS TODO README THANKS AUTHORS INSTALL ABOUT-NLS ChangeLog COPYING centericq.spec firetalk-0.1/* kkconsui-0.1/* kkstrtext-0.1/* libicq2000-0.1/* libjabber-0.1/* libyahoo2-0.1/* kksystr-0.1/* connwrap-0.1/* -+EXTRA_DIST = centericq.1 centericq.motor config.rpath FAQ NEWS TODO README THANKS AUTHORS INSTALL ABOUT-NLS ChangeLog COPYING centericq.spec firetalk-0.1/* kkconsui-0.1/* kkstrtext-0.1/* libicq2000-0.1/* libjabber-0.1/* libyahoo2-0.1/* kksystr-0.1/* connwrap-0.1/* blip-0.1/* - AUTOMAKE_OPTIONS = foreign - ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 - mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -@@ -289,6 +289,7 @@ - cd $(top_srcdir) \ - && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Makefile - $(mkinstalldirs) $(distdir)/connwrap-0.1 $(distdir)/firetalk-0.1 \ -+ $(distdir)/blip-0.1 \ - $(distdir)/kkconsui-0.1 $(distdir)/kkstrtext-0.1 \ - $(distdir)/kksystr-0.1 $(distdir)/libicq2000-0.1 \ - $(distdir)/libjabber-0.1 $(distdir)/libyahoo2-0.1 -@@ -388,7 +389,7 @@ - - dist-hook: - cd $(top_distdir); subs=`egrep "^[:space:]*SUBDIRS" Makefile.am | sed 's/SUBDIRS[ =]\+//g'`; \ -- echo "SUBDIRS = firetalk-0.1 kkconsui-0.1 kkstrtext-0.1 libicq2000-0.1 libjabber-0.1 libyahoo2-0.1 kksystr-0.1 connwrap-0.1 $$subs" >>.makefile.am; \ -+ echo "SUBDIRS = firetalk-0.1 kkconsui-0.1 kkstrtext-0.1 libicq2000-0.1 libjabber-0.1 libyahoo2-0.1 kksystr-0.1 connwrap-0.1 blip-0.1 $$subs" >>.makefile.am; \ - egrep -v "^[:space:]*SUBDIRS" Makefile.am >>.makefile.am; \ - mv .makefile.am Makefile.am; autoconf && automake - diff -ruN /usr/ports/net/centericq/files/msn-abstracthook.cc ./centericq/files/msn-abstracthook.cc --- /usr/ports/net/centericq/files/msn-abstracthook.cc Tue Nov 4 00:16:27 2003 +++ ./centericq/files/msn-abstracthook.cc Thu Jan 1 08:00:00 1970 @@ -1,20 +0,0 @@ ---- src/hooks/abstracthook.cc.orig Sun Oct 19 06:57:26 2003 -+++ src/hooks/abstracthook.cc Mon Nov 3 19:54:31 2003 -@@ -31,6 +31,7 @@ - #include "jabberhook.h" - #include "rsshook.h" - #include "ljhook.h" -+#include "msnhook.h" - - #include "md5.h" - -@@ -325,6 +326,9 @@ - #endif - #ifdef BUILD_LJ - case livejournal: return lhook; -+#endif -+#ifdef BUILD_MSN -+ case msn: return mhook; - #endif - } - diff -ruN /usr/ports/net/centericq/files/msn-config.h.in ./centericq/files/msn-config.h.in --- /usr/ports/net/centericq/files/msn-config.h.in Tue Nov 4 00:16:27 2003 +++ ./centericq/files/msn-config.h.in Thu Jan 1 08:00:00 1970 @@ -1,12 +0,0 @@ ---- config.h.in.orig Thu Oct 16 06:07:45 2003 -+++ config.h.in Mon Nov 3 21:31:23 2003 -@@ -220,6 +220,9 @@ - /* use gnutls */ - #undef HAVE_GNUTLS - -+/* build with msn support */ -+#undef BUILD_MSN -+ - /* build with yahoo support */ - #undef BUILD_YAHOO - diff -ruN /usr/ports/net/centericq/files/msn-configure ./centericq/files/msn-configure --- /usr/ports/net/centericq/files/msn-configure Tue Nov 4 00:16:27 2003 +++ ./centericq/files/msn-configure Thu Jan 1 08:00:00 1970 @@ -1,72 +0,0 @@ ---- configure.orig Sat Oct 25 15:53:45 2003 -+++ configure Mon Nov 3 20:21:06 2003 -@@ -27,6 +27,8 @@ - ac_help="$ac_help - --with-libgnutls-extra-prefix=PFX Prefix where libgnutls-extra is installed (optional)" - ac_help="$ac_help -+ --enable-msn Build with MSN!" -+ac_help="$ac_help - --disable-yahoo Build without Yahoo!" - ac_help="$ac_help - --disable-aim Build without AIM" -@@ -2365,6 +2367,14 @@ - ;; - esac - -+# Check whether --enable-msn or --disable-msn was given. -+if test "${enable_msn+set}" = set; then -+ enableval="$enable_msn" -+ build_msn="$enableval" -+else -+ build_msn="yes" -+fi -+ - # Check whether --enable-yahoo or --disable-yahoo was given. - if test "${enable_yahoo+set}" = set; then - enableval="$enable_yahoo" -@@ -2424,6 +2434,13 @@ - - - -+if test "x$build_msn" = xyes; then -+ BUILD_MSN_TRUE= -+ BUILD_MSN_FALSE='#' -+else -+ BUILD_MSN_TRUE='#' -+ BUILD_MSN_FALSE= -+fi - - if test "x$build_yahoo" = xyes; then - BUILD_YAHOO_TRUE= -@@ -2478,6 +2495,13 @@ - BUILD_LJ_FALSE= - fi - -+if test "$build_msn" = "yes"; then -+ cat >> confdefs.h <<\EOF -+#define BUILD_MSN 1 -+EOF -+ -+fi -+ - if test "$build_yahoo" = "yes"; then - cat >> confdefs.h <<\EOF - #define BUILD_YAHOO 1 -@@ -4994,7 +5018,7 @@ - - - --subdirs="firetalk-0.1 kkconsui-0.1 kkstrtext-0.1 libicq2000-0.1 libjabber-0.1 libyahoo2-0.1 kksystr-0.1 connwrap-0.1" -+subdirs="firetalk-0.1 kkconsui-0.1 kkstrtext-0.1 libicq2000-0.1 libjabber-0.1 libyahoo2-0.1 kksystr-0.1 connwrap-0.1 blip-0.1" - - trap '' 1 2 15 - cat > confcache <<\EOF -@@ -5538,7 +5562,7 @@ - esac - done - -- for ac_config_dir in firetalk-0.1 kkconsui-0.1 kkstrtext-0.1 libicq2000-0.1 libjabber-0.1 libyahoo2-0.1 kksystr-0.1 connwrap-0.1; do -+ for ac_config_dir in firetalk-0.1 kkconsui-0.1 kkstrtext-0.1 libicq2000-0.1 libjabber-0.1 libyahoo2-0.1 kksystr-0.1 connwrap-0.1 blip-0.1; do - - # Do not complain, so a configure script can configure whichever - # parts of a large source tree are present. diff -ruN /usr/ports/net/centericq/files/msn-imcontroller.cc ./centericq/files/msn-imcontroller.cc --- /usr/ports/net/centericq/files/msn-imcontroller.cc Tue Nov 4 00:16:27 2003 +++ ./centericq/files/msn-imcontroller.cc Thu Jan 1 08:00:00 1970 @@ -1,10 +0,0 @@ ---- src/imcontroller.cc.orig Thu Oct 16 07:40:18 2003 -+++ src/imcontroller.cc Mon Nov 3 20:03:55 2003 -@@ -31,6 +31,7 @@ - #include "jabberhook.h" - #include "icqcontacts.h" - #include "eventmanager.h" -+#include "msnhook.h" - - #define clr(c) conf.getcolor(c) - diff -ruN /usr/ports/net/centericq/files/msn-libmsn ./centericq/files/msn-libmsn --- /usr/ports/net/centericq/files/msn-libmsn Tue Nov 4 00:16:27 2003 +++ ./centericq/files/msn-libmsn Thu Jan 1 08:00:00 1970 @@ -1,5986 +0,0 @@ -diff -ruN blip-0.1.orig/Makefile.am blip-0.1/Makefile.am ---- blip-0.1.orig/Makefile.am Thu Jan 1 08:00:00 1970 -+++ blip-0.1/Makefile.am Mon Nov 3 20:09:02 2003 -@@ -0,0 +1,10 @@ -+noinst_LIBRARIES = libblip.a -+libblip_a_SOURCES = md5.c msn_bittybits.C msn_core.C -+EXTRA_DIST = md5.c msn_bittybits.C msn_core.C md5.h msn_bittybits.h msn_core.h msn_interface.h -+AUTOMAKE_OPTIONS = foreign -+ -+if BUILD_MSN -+ -+ -+endif -+ -diff -ruN blip-0.1.orig/Makefile.in blip-0.1/Makefile.in ---- blip-0.1.orig/Makefile.in Thu Jan 1 08:00:00 1970 -+++ blip-0.1/Makefile.in Mon Nov 3 20:09:02 2003 -@@ -0,0 +1,364 @@ -+# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am -+ -+# Copyright (C) 1994, 1995-8, 1999, 2001 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. -+ -+ -+SHELL = @SHELL@ -+ -+srcdir = @srcdir@ -+top_srcdir = @top_srcdir@ -+VPATH = @srcdir@ -+prefix = @prefix@ -+exec_prefix = @exec_prefix@ -+ -+bindir = @bindir@ -+sbindir = @sbindir@ -+libexecdir = @libexecdir@ -+datadir = @datadir@ -+sysconfdir = @sysconfdir@ -+sharedstatedir = @sharedstatedir@ -+localstatedir = @localstatedir@ -+libdir = @libdir@ -+infodir = @infodir@ -+mandir = @mandir@ -+includedir = @includedir@ -+oldincludedir = /usr/include -+ -+DESTDIR = -+ -+pkgdatadir = $(datadir)/@PACKAGE@ -+pkglibdir = $(libdir)/@PACKAGE@ -+pkgincludedir = $(includedir)/@PACKAGE@ -+ -+top_builddir = . -+ -+ACLOCAL = @ACLOCAL@ -+AUTOCONF = @AUTOCONF@ -+AUTOMAKE = @AUTOMAKE@ -+AUTOHEADER = @AUTOHEADER@ -+ -+INSTALL = @INSTALL@ -+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) -+INSTALL_DATA = @INSTALL_DATA@ -+INSTALL_SCRIPT = @INSTALL_SCRIPT@ -+transform = @program_transform_name@ -+ -+NORMAL_INSTALL = : -+PRE_INSTALL = : -+POST_INSTALL = : -+NORMAL_UNINSTALL = : -+PRE_UNINSTALL = : -+POST_UNINSTALL = : -+CC = @CC@ -+CXX = @CXX@ -+MAKEINFO = @MAKEINFO@ -+PACKAGE = @PACKAGE@ -+RANLIB = @RANLIB@ -+VERSION = @VERSION@ -+ -+noinst_LIBRARIES = libblip.a -+libblip_a_SOURCES = md5.c msn_bittybits.C msn_core.C -+EXTRA_DIST = md5.c msn_bittybits.C msn_core.C md5.h msn_bittybits.h msn_core.h msn_interface.h -+AUTOMAKE_OPTIONS = foreign -+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -+CONFIG_CLEAN_FILES = -+LIBRARIES = $(noinst_LIBRARIES) -+ -+ -+DEFS = @DEFS@ -I. -I$(srcdir) -+CPPFLAGS = @CPPFLAGS@ -+LDFLAGS = @LDFLAGS@ -+LIBS = @LIBS@ -+libblip_a_LIBADD = -+libblip_a_OBJECTS = md5.o msn_bittybits.o msn_core.o -+AR = ar -+CXXFLAGS = @CXXFLAGS@ -+CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -+CXXLD = $(CXX) -+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ -+CFLAGS = @CFLAGS@ -+COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -+CCLD = $(CC) -+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ -+DIST_COMMON = Makefile.am Makefile.in aclocal.m4 configure configure.in \ -+install-sh missing mkinstalldirs -+ -+ -+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) -+ -+TAR = gtar -+GZIP_ENV = --best -+DEP_FILES = .deps/md5.P .deps/msn_bittybits.P .deps/msn_core.P -+SOURCES = $(libblip_a_SOURCES) -+OBJECTS = $(libblip_a_OBJECTS) -+ -+all: all-redirect -+.SUFFIXES: -+.SUFFIXES: .C .S .c .o .s -+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) -+ cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile -+ -+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) -+ cd $(top_builddir) \ -+ && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status -+ -+$(ACLOCAL_M4): configure.in -+ cd $(srcdir) && $(ACLOCAL) -+ -+config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) -+ $(SHELL) ./config.status --recheck -+$(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) -+ cd $(srcdir) && $(AUTOCONF) -+ -+mostlyclean-noinstLIBRARIES: -+ -+clean-noinstLIBRARIES: -+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) -+ -+distclean-noinstLIBRARIES: -+ -+maintainer-clean-noinstLIBRARIES: -+ -+.s.o: -+ $(COMPILE) -c $< -+ -+.S.o: -+ $(COMPILE) -c $< -+ -+mostlyclean-compile: -+ -rm -f *.o core *.core -+ -+clean-compile: -+ -+distclean-compile: -+ -rm -f *.tab.c -+ -+maintainer-clean-compile: -+ -+libblip.a: $(libblip_a_OBJECTS) $(libblip_a_DEPENDENCIES) -+ -rm -f libblip.a -+ $(AR) cru libblip.a $(libblip_a_OBJECTS) $(libblip_a_LIBADD) -+ $(RANLIB) libblip.a -+.C.o: -+ $(CXXCOMPILE) -c $< -+ -+tags: TAGS -+ -+ID: $(HEADERS) $(SOURCES) $(LISP) -+ list='$(SOURCES) $(HEADERS)'; \ -+ unique=`for i in $$list; do echo $$i; done | \ -+ awk ' { files[$$0] = 1; } \ -+ END { for (i in files) print i; }'`; \ -+ here=`pwd` && cd $(srcdir) \ -+ && mkid -f$$here/ID $$unique $(LISP) -+ -+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) -+ tags=; \ -+ here=`pwd`; \ -+ list='$(SOURCES) $(HEADERS)'; \ -+ unique=`for i in $$list; do echo $$i; done | \ -+ awk ' { files[$$0] = 1; } \ -+ END { for (i in files) print i; }'`; \ -+ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ -+ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) -+ -+mostlyclean-tags: -+ -+clean-tags: -+ -+distclean-tags: -+ -rm -f TAGS ID -+ -+maintainer-clean-tags: -+ -+distdir = $(PACKAGE)-$(VERSION) -+top_distdir = $(distdir) -+ -+# This target untars the dist file and tries a VPATH configuration. Then -+# it guarantees that the distribution is self-contained by making another -+# tarfile. -+distcheck: dist -+ -rm -rf $(distdir) -+ GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz -+ mkdir $(distdir)/=build -+ mkdir $(distdir)/=inst -+ dc_install_base=`cd $(distdir)/=inst && pwd`; \ -+ cd $(distdir)/=build \ -+ && ../configure --srcdir=.. --prefix=$$dc_install_base \ -+ && $(MAKE) $(AM_MAKEFLAGS) \ -+ && $(MAKE) $(AM_MAKEFLAGS) dvi \ -+ && $(MAKE) $(AM_MAKEFLAGS) check \ -+ && $(MAKE) $(AM_MAKEFLAGS) install \ -+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ -+ && $(MAKE) $(AM_MAKEFLAGS) dist -+ -rm -rf $(distdir) -+ @banner="$(distdir).tar.gz is ready for distribution"; \ -+ dashes=`echo "$$banner" | sed s/./=/g`; \ -+ echo "$$dashes"; \ -+ echo "$$banner"; \ -+ echo "$$dashes" -+dist: distdir -+ -chmod -R a+r $(distdir) -+ GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) -+ -rm -rf $(distdir) -+dist-all: distdir -+ -chmod -R a+r $(distdir) -+ GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) -+ -rm -rf $(distdir) -+distdir: $(DISTFILES) -+ -rm -rf $(distdir) -+ mkdir $(distdir) -+ -chmod 777 $(distdir) -+ here=`cd $(top_builddir) && pwd`; \ -+ top_distdir=`cd $(distdir) && pwd`; \ -+ distdir=`cd $(distdir) && pwd`; \ -+ cd $(top_srcdir) \ -+ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Makefile -+ @for file in $(DISTFILES); do \ -+ d=$(srcdir); \ -+ if test -d $$d/$$file; then \ -+ cp -pr $$d/$$file $(distdir)/$$file; \ -+ else \ -+ test -f $(distdir)/$$file \ -+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ -+ || cp -p $$d/$$file $(distdir)/$$file || :; \ -+ fi; \ -+ done -+ -+DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -+ -+-include $(DEP_FILES) -+ -+mostlyclean-depend: -+ -+clean-depend: -+ -+distclean-depend: -+ -rm -rf .deps -+ -+maintainer-clean-depend: -+ -+%.o: %.c -+ @echo '$(COMPILE) -c $<'; \ -+ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< -+ @-cp .deps/$(*F).pp .deps/$(*F).P; \ -+ tr ' ' '\012' < .deps/$(*F).pp \ -+ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ -+ >> .deps/$(*F).P; \ -+ rm .deps/$(*F).pp -+ -+%.lo: %.c -+ @echo '$(LTCOMPILE) -c $<'; \ -+ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< -+ @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ -+ < .deps/$(*F).pp > .deps/$(*F).P; \ -+ tr ' ' '\012' < .deps/$(*F).pp \ -+ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ -+ >> .deps/$(*F).P; \ -+ rm -f .deps/$(*F).pp -+ -+%.o: %.C -+ @echo '$(CXXCOMPILE) -c $<'; \ -+ $(CXXCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< -+ @-cp .deps/$(*F).pp .deps/$(*F).P; \ -+ tr ' ' '\012' < .deps/$(*F).pp \ -+ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ -+ >> .deps/$(*F).P; \ -+ rm .deps/$(*F).pp -+ -+%.lo: %.C -+ @echo '$(LTCXXCOMPILE) -c $<'; \ -+ $(LTCXXCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< -+ @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ -+ < .deps/$(*F).pp > .deps/$(*F).P; \ -+ tr ' ' '\012' < .deps/$(*F).pp \ -+ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ -+ >> .deps/$(*F).P; \ -+ rm -f .deps/$(*F).pp -+info-am: -+info: info-am -+dvi-am: -+dvi: dvi-am -+check-am: all-am -+check: check-am -+installcheck-am: -+installcheck: installcheck-am -+install-exec-am: -+install-exec: install-exec-am -+ -+install-data-am: -+install-data: install-data-am -+ -+install-am: all-am -+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am -+install: install-am -+uninstall-am: -+uninstall: uninstall-am -+all-am: Makefile $(LIBRARIES) -+all-redirect: all-am -+install-strip: -+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install -+installdirs: -+ -+ -+mostlyclean-generic: -+ -+clean-generic: -+ -+distclean-generic: -+ -rm -f Makefile $(CONFIG_CLEAN_FILES) -+ -rm -f config.cache config.log stamp-h stamp-h[0-9]* -+ -+maintainer-clean-generic: -+mostlyclean-am: mostlyclean-noinstLIBRARIES mostlyclean-compile \ -+ mostlyclean-tags mostlyclean-depend mostlyclean-generic -+ -+mostlyclean: mostlyclean-am -+ -+clean-am: clean-noinstLIBRARIES clean-compile clean-tags clean-depend \ -+ clean-generic mostlyclean-am -+ -+clean: clean-am -+ -+distclean-am: distclean-noinstLIBRARIES distclean-compile \ -+ distclean-tags distclean-depend distclean-generic \ -+ clean-am -+ -+distclean: distclean-am -+ -rm -f config.status -+ -+maintainer-clean-am: maintainer-clean-noinstLIBRARIES \ -+ maintainer-clean-compile maintainer-clean-tags \ -+ maintainer-clean-depend maintainer-clean-generic \ -+ distclean-am -+ @echo "This command is intended for maintainers to use;" -+ @echo "it deletes files that may require special tools to rebuild." -+ -+maintainer-clean: maintainer-clean-am -+ -rm -f config.status -+ -+.PHONY: mostlyclean-noinstLIBRARIES distclean-noinstLIBRARIES \ -+clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \ -+mostlyclean-compile distclean-compile clean-compile \ -+maintainer-clean-compile tags mostlyclean-tags distclean-tags \ -+clean-tags maintainer-clean-tags distdir mostlyclean-depend \ -+distclean-depend clean-depend maintainer-clean-depend info-am info \ -+dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ -+install-exec install-data-am install-data install-am install \ -+uninstall-am uninstall all-redirect all-am all installdirs \ -+mostlyclean-generic distclean-generic clean-generic \ -+maintainer-clean-generic clean mostlyclean distclean maintainer-clean -+ -+ -+# 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: -diff -ruN blip-0.1.orig/aclocal.m4 blip-0.1/aclocal.m4 ---- blip-0.1.orig/aclocal.m4 Thu Jan 1 08:00:00 1970 -+++ blip-0.1/aclocal.m4 Mon Nov 3 20:09:02 2003 -@@ -0,0 +1,117 @@ -+dnl aclocal.m4 generated automatically by aclocal 1.4-p5 -+ -+dnl Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc. -+dnl This file is free software; the Free Software Foundation -+dnl gives unlimited permission to copy and/or distribute it, -+dnl with or without modifications, as long as this notice is preserved. -+ -+dnl This program is distributed in the hope that it will be useful, -+dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without -+dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A -+dnl PARTICULAR PURPOSE. -+ -+# Do all the work for Automake. This macro actually does too much -- -+# some checks are only needed if your package does certain things. -+# But this isn't really a big deal. -+ -+# serial 1 -+ -+dnl Usage: -+dnl AM_INIT_AUTOMAKE(package,version, [no-define]) -+ -+AC_DEFUN([AM_INIT_AUTOMAKE], -+[AC_REQUIRE([AC_PROG_INSTALL]) -+PACKAGE=[$1] -+AC_SUBST(PACKAGE) -+VERSION=[$2] -+AC_SUBST(VERSION) -+dnl test to see if srcdir already configured -+if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then -+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) -+fi -+ifelse([$3],, -+AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) -+AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])) -+AC_REQUIRE([AM_SANITY_CHECK]) -+AC_REQUIRE([AC_ARG_PROGRAM]) -+dnl FIXME This is truly gross. -+missing_dir=`cd $ac_aux_dir && pwd` -+AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir) -+AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir) -+AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir) -+AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir) -+AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir) -+AC_REQUIRE([AC_PROG_MAKE_SET])]) -+ -+# -+# Check to make sure that the build environment is sane. -+# -+ -+AC_DEFUN([AM_SANITY_CHECK], -+[AC_MSG_CHECKING([whether build environment is sane]) -+# Just in case -+sleep 1 -+echo timestamp > conftestfile -+# Do `set' in a subshell so we don't clobber the current shell's -+# arguments. Must try -L first in case configure is actually a -+# symlink; some systems play weird games with the mod time of symlinks -+# (eg FreeBSD returns the mod time of the symlink's containing -+# directory). -+if ( -+ set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` -+ if test "[$]*" = "X"; then -+ # -L didn't work. -+ set X `ls -t $srcdir/configure conftestfile` -+ fi -+ if test "[$]*" != "X $srcdir/configure conftestfile" \ -+ && test "[$]*" != "X conftestfile $srcdir/configure"; then -+ -+ # If neither matched, then we have a broken ls. This can happen -+ # if, for instance, CONFIG_SHELL is bash and it inherits a -+ # broken ls alias from the environment. This has actually -+ # happened. Such a system could not be considered "sane". -+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken -+alias in your environment]) -+ fi -+ -+ test "[$]2" = conftestfile -+ ) -+then -+ # Ok. -+ : -+else -+ AC_MSG_ERROR([newly created file is older than distributed files! -+Check your system clock]) -+fi -+rm -f conftest* -+AC_MSG_RESULT(yes)]) -+ -+dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY) -+dnl The program must properly implement --version. -+AC_DEFUN([AM_MISSING_PROG], -+[AC_MSG_CHECKING(for working $2) -+# Run test in a subshell; some versions of sh will print an error if -+# an executable is not found, even if stderr is redirected. -+# Redirect stdin to placate older versions of autoconf. Sigh. -+if ($2 --version) < /dev/null > /dev/null 2>&1; then -+ $1=$2 -+ AC_MSG_RESULT(found) -+else -+ $1="$3/missing $2" -+ AC_MSG_RESULT(missing) -+fi -+AC_SUBST($1)]) -+ -+# Define a conditional. -+ -+AC_DEFUN([AM_CONDITIONAL], -+[AC_SUBST($1_TRUE) -+AC_SUBST($1_FALSE) -+if $2; then -+ $1_TRUE= -+ $1_FALSE='#' -+else -+ $1_TRUE='#' -+ $1_FALSE= -+fi]) -+ -diff -ruN blip-0.1.orig/configure blip-0.1/configure ---- blip-0.1.orig/configure Thu Jan 1 08:00:00 1970 -+++ blip-0.1/configure Mon Nov 3 20:09:02 2003 -@@ -0,0 +1,1519 @@ -+#! /bin/sh -+ -+# Guess values for system-dependent variables and create Makefiles. -+# Generated automatically using autoconf version 2.13 -+# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. -+# -+# This configure script is free software; the Free Software Foundation -+# gives unlimited permission to copy, distribute and modify it. -+ -+# Defaults: -+ac_help= -+ac_default_prefix=/usr/local -+# Any additions from configure.in: -+ac_help="$ac_help -+ --disable-msn Build without MSN" -+ -+# Initialize some variables set by options. -+# The variables have the same names as the options, with -+# dashes changed to underlines. -+build=NONE -+cache_file=./config.cache -+exec_prefix=NONE -+host=NONE -+no_create= -+nonopt=NONE -+no_recursion= -+prefix=NONE -+program_prefix=NONE -+program_suffix=NONE -+program_transform_name=s,x,x, -+silent= -+site= -+srcdir= -+target=NONE -+verbose= -+x_includes=NONE -+x_libraries=NONE -+bindir='${exec_prefix}/bin' -+sbindir='${exec_prefix}/sbin' -+libexecdir='${exec_prefix}/libexec' -+datadir='${prefix}/share' -+sysconfdir='${prefix}/etc' -+sharedstatedir='${prefix}/com' -+localstatedir='${prefix}/var' -+libdir='${exec_prefix}/lib' -+includedir='${prefix}/include' -+oldincludedir='/usr/include' -+infodir='${prefix}/info' -+mandir='${prefix}/man' -+ -+# Initialize some other variables. -+subdirs= -+MFLAGS= MAKEFLAGS= -+SHELL=${CONFIG_SHELL-/bin/sh} -+# Maximum number of lines to put in a shell here document. -+ac_max_here_lines=12 -+ -+ac_prev= -+for ac_option -+do -+ -+ # If the previous option needs an argument, assign it. -+ if test -n "$ac_prev"; then -+ eval "$ac_prev=\$ac_option" -+ ac_prev= -+ continue -+ fi -+ -+ case "$ac_option" in -+ -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; -+ *) ac_optarg= ;; -+ esac -+ -+ # Accept the important Cygnus configure options, so we can diagnose typos. -+ -+ case "$ac_option" in -+ -+ -bindir | --bindir | --bindi | --bind | --bin | --bi) -+ ac_prev=bindir ;; -+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) -+ bindir="$ac_optarg" ;; -+ -+ -build | --build | --buil | --bui | --bu) -+ ac_prev=build ;; -+ -build=* | --build=* | --buil=* | --bui=* | --bu=*) -+ build="$ac_optarg" ;; -+ -+ -cache-file | --cache-file | --cache-fil | --cache-fi \ -+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) -+ ac_prev=cache_file ;; -+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ -+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) -+ cache_file="$ac_optarg" ;; -+ -+ -datadir | --datadir | --datadi | --datad | --data | --dat | --da) -+ ac_prev=datadir ;; -+ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ -+ | --da=*) -+ datadir="$ac_optarg" ;; -+ -+ -disable-* | --disable-*) -+ ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` -+ # Reject names that are not valid shell variable names. -+ if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then -+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } -+ fi -+ ac_feature=`echo $ac_feature| sed 's/-/_/g'` -+ eval "enable_${ac_feature}=no" ;; -+ -+ -enable-* | --enable-*) -+ ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` -+ # Reject names that are not valid shell variable names. -+ if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then -+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } -+ fi -+ ac_feature=`echo $ac_feature| sed 's/-/_/g'` -+ case "$ac_option" in -+ *=*) ;; -+ *) ac_optarg=yes ;; -+ esac -+ eval "enable_${ac_feature}='$ac_optarg'" ;; -+ -+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ -+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ -+ | --exec | --exe | --ex) -+ ac_prev=exec_prefix ;; -+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ -+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ -+ | --exec=* | --exe=* | --ex=*) -+ exec_prefix="$ac_optarg" ;; -+ -+ -gas | --gas | --ga | --g) -+ # Obsolete; use --with-gas. -+ with_gas=yes ;; -+ -+ -help | --help | --hel | --he) -+ # Omit some internal or obsolete options to make the list less imposing. -+ # This message is too long to be a string in the A/UX 3.1 sh. -+ cat << EOF -+Usage: configure [options] [host] -+Options: [defaults in brackets after descriptions] -+Configuration: -+ --cache-file=FILE cache test results in FILE -+ --help print this message -+ --no-create do not create output files -+ --quiet, --silent do not print \`checking...' messages -+ --version print the version of autoconf that created configure -+Directory and file names: -+ --prefix=PREFIX install architecture-independent files in PREFIX -+ [$ac_default_prefix] -+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX -+ [same as prefix] -+ --bindir=DIR user executables in DIR [EPREFIX/bin] -+ --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] -+ --libexecdir=DIR program executables in DIR [EPREFIX/libexec] -+ --datadir=DIR read-only architecture-independent data in DIR -+ [PREFIX/share] -+ --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] -+ --sharedstatedir=DIR modifiable architecture-independent data in DIR -+ [PREFIX/com] -+ --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] -+ --libdir=DIR object code libraries in DIR [EPREFIX/lib] -+ --includedir=DIR C header files in DIR [PREFIX/include] -+ --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] -+ --infodir=DIR info documentation in DIR [PREFIX/info] -+ --mandir=DIR man documentation in DIR [PREFIX/man] -+ --srcdir=DIR find the sources in DIR [configure dir or ..] -+ --program-prefix=PREFIX prepend PREFIX to installed program names -+ --program-suffix=SUFFIX append SUFFIX to installed program names -+ --program-transform-name=PROGRAM -+ run sed PROGRAM on installed program names -+EOF -+ cat << EOF -+Host type: -+ --build=BUILD configure for building on BUILD [BUILD=HOST] -+ --host=HOST configure for HOST [guessed] -+ --target=TARGET configure for TARGET [TARGET=HOST] -+Features and packages: -+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) -+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes] -+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] -+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) -+ --x-includes=DIR X include files are in DIR -+ --x-libraries=DIR X library files are in DIR -+EOF -+ if test -n "$ac_help"; then -+ echo "--enable and --with options recognized:$ac_help" -+ fi -+ exit 0 ;; -+ -+ -host | --host | --hos | --ho) -+ ac_prev=host ;; -+ -host=* | --host=* | --hos=* | --ho=*) -+ host="$ac_optarg" ;; -+ -+ -includedir | --includedir | --includedi | --included | --include \ -+ | --includ | --inclu | --incl | --inc) -+ ac_prev=includedir ;; -+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ -+ | --includ=* | --inclu=* | --incl=* | --inc=*) -+ includedir="$ac_optarg" ;; -+ -+ -infodir | --infodir | --infodi | --infod | --info | --inf) -+ ac_prev=infodir ;; -+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) -+ infodir="$ac_optarg" ;; -+ -+ -libdir | --libdir | --libdi | --libd) -+ ac_prev=libdir ;; -+ -libdir=* | --libdir=* | --libdi=* | --libd=*) -+ libdir="$ac_optarg" ;; -+ -+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ -+ | --libexe | --libex | --libe) -+ ac_prev=libexecdir ;; -+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ -+ | --libexe=* | --libex=* | --libe=*) -+ libexecdir="$ac_optarg" ;; -+ -+ -localstatedir | --localstatedir | --localstatedi | --localstated \ -+ | --localstate | --localstat | --localsta | --localst \ -+ | --locals | --local | --loca | --loc | --lo) -+ ac_prev=localstatedir ;; -+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ -+ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ -+ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) -+ localstatedir="$ac_optarg" ;; -+ -+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m) -+ ac_prev=mandir ;; -+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) -+ mandir="$ac_optarg" ;; -+ -+ -nfp | --nfp | --nf) -+ # Obsolete; use --without-fp. -+ with_fp=no ;; -+ -+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \ -+ | --no-cr | --no-c) -+ no_create=yes ;; -+ -+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \ -+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) -+ no_recursion=yes ;; -+ -+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ -+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ -+ | --oldin | --oldi | --old | --ol | --o) -+ ac_prev=oldincludedir ;; -+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ -+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ -+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) -+ oldincludedir="$ac_optarg" ;; -+ -+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) -+ ac_prev=prefix ;; -+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) -+ prefix="$ac_optarg" ;; -+ -+ -program-prefix | --program-prefix | --program-prefi | --program-pref \ -+ | --program-pre | --program-pr | --program-p) -+ ac_prev=program_prefix ;; -+ -program-prefix=* | --program-prefix=* | --program-prefi=* \ -+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) -+ program_prefix="$ac_optarg" ;; -+ -+ -program-suffix | --program-suffix | --program-suffi | --program-suff \ -+ | --program-suf | --program-su | --program-s) -+ ac_prev=program_suffix ;; -+ -program-suffix=* | --program-suffix=* | --program-suffi=* \ -+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) -+ program_suffix="$ac_optarg" ;; -+ -+ -program-transform-name | --program-transform-name \ -+ | --program-transform-nam | --program-transform-na \ -+ | --program-transform-n | --program-transform- \ -+ | --program-transform | --program-transfor \ -+ | --program-transfo | --program-transf \ -+ | --program-trans | --program-tran \ -+ | --progr-tra | --program-tr | --program-t) -+ ac_prev=program_transform_name ;; -+ -program-transform-name=* | --program-transform-name=* \ -+ | --program-transform-nam=* | --program-transform-na=* \ -+ | --program-transform-n=* | --program-transform-=* \ -+ | --program-transform=* | --program-transfor=* \ -+ | --program-transfo=* | --program-transf=* \ -+ | --program-trans=* | --program-tran=* \ -+ | --progr-tra=* | --program-tr=* | --program-t=*) -+ program_transform_name="$ac_optarg" ;; -+ -+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \ -+ | -silent | --silent | --silen | --sile | --sil) -+ silent=yes ;; -+ -+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) -+ ac_prev=sbindir ;; -+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ -+ | --sbi=* | --sb=*) -+ sbindir="$ac_optarg" ;; -+ -+ -sharedstatedir | --sharedstatedir | --sharedstatedi \ -+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ -+ | --sharedst | --shareds | --shared | --share | --shar \ -+ | --sha | --sh) -+ ac_prev=sharedstatedir ;; -+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ -+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ -+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ -+ | --sha=* | --sh=*) -+ sharedstatedir="$ac_optarg" ;; -+ -+ -site | --site | --sit) -+ ac_prev=site ;; -+ -site=* | --site=* | --sit=*) -+ site="$ac_optarg" ;; -+ -+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) -+ ac_prev=srcdir ;; -+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) -+ srcdir="$ac_optarg" ;; -+ -+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ -+ | --syscon | --sysco | --sysc | --sys | --sy) -+ ac_prev=sysconfdir ;; -+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ -+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) -+ sysconfdir="$ac_optarg" ;; -+ -+ -target | --target | --targe | --targ | --tar | --ta | --t) -+ ac_prev=target ;; -+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) -+ target="$ac_optarg" ;; -+ -+ -v | -verbose | --verbose | --verbos | --verbo | --verb) -+ verbose=yes ;; -+ -+ -version | --version | --versio | --versi | --vers) -+ echo "configure generated by autoconf version 2.13" -+ exit 0 ;; -+ -+ -with-* | --with-*) -+ ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` -+ # Reject names that are not valid shell variable names. -+ if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then -+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } -+ fi -+ ac_package=`echo $ac_package| sed 's/-/_/g'` -+ case "$ac_option" in -+ *=*) ;; -+ *) ac_optarg=yes ;; -+ esac -+ eval "with_${ac_package}='$ac_optarg'" ;; -+ -+ -without-* | --without-*) -+ ac_package=`echo $ac_option|sed -e 's/-*without-//'` -+ # Reject names that are not valid shell variable names. -+ if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then -+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } -+ fi -+ ac_package=`echo $ac_package| sed 's/-/_/g'` -+ eval "with_${ac_package}=no" ;; -+ -+ --x) -+ # Obsolete; use --with-x. -+ with_x=yes ;; -+ -+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ -+ | --x-incl | --x-inc | --x-in | --x-i) -+ ac_prev=x_includes ;; -+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ -+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) -+ x_includes="$ac_optarg" ;; -+ -+ -x-libraries | --x-libraries | --x-librarie | --x-librari \ -+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) -+ ac_prev=x_libraries ;; -+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ -+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) -+ x_libraries="$ac_optarg" ;; -+ -+ -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } -+ ;; -+ -+ *) -+ if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then -+ echo "configure: warning: $ac_option: invalid host type" 1>&2 -+ fi -+ if test "x$nonopt" != xNONE; then -+ { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } -+ fi -+ nonopt="$ac_option" -+ ;; -+ -+ esac -+done -+ -+if test -n "$ac_prev"; then -+ { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } -+fi -+ -+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 -+ -+# File descriptor usage: -+# 0 standard input -+# 1 file creation -+# 2 errors and warnings -+# 3 some systems may open it to /dev/tty -+# 4 used on the Kubota Titan -+# 6 checking for... messages and results -+# 5 compiler messages saved in config.log -+if test "$silent" = yes; then -+ exec 6>/dev/null -+else -+ exec 6>&1 -+fi -+exec 5>./config.log -+ -+echo "\ -+This file contains any messages produced by compilers while -+running configure, to aid debugging if configure makes a mistake. -+" 1>&5 -+ -+# Strip out --no-create and --no-recursion so they do not pile up. -+# Also quote any args containing shell metacharacters. -+ac_configure_args= -+for ac_arg -+do -+ case "$ac_arg" in -+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \ -+ | --no-cr | --no-c) ;; -+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \ -+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; -+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) -+ ac_configure_args="$ac_configure_args '$ac_arg'" ;; -+ *) ac_configure_args="$ac_configure_args $ac_arg" ;; -+ esac -+done -+ -+# NLS nuisances. -+# Only set these to C if already set. These must not be set unconditionally -+# because not all systems understand e.g. LANG=C (notably SCO). -+# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! -+# Non-C LC_CTYPE values break the ctype check. -+if test "${LANG+set}" = set; then LANG=C; export LANG; fi -+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi -+if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi -+if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi -+ -+# confdefs.h avoids OS command line length limits that DEFS can exceed. -+rm -rf conftest* confdefs.h -+# AIX cpp loses on an empty file, so make sure it contains at least a newline. -+echo > confdefs.h -+ -+# A filename unique to this package, relative to the directory that -+# configure is in, which we can look for to find out if srcdir is correct. -+ac_unique_file=aclocal.m4 -+ -+# Find the source files, if location was not specified. -+if test -z "$srcdir"; then -+ ac_srcdir_defaulted=yes -+ # Try the directory containing this script, then its parent. -+ ac_prog=$0 -+ ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` -+ test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. -+ srcdir=$ac_confdir -+ if test ! -r $srcdir/$ac_unique_file; then -+ srcdir=.. -+ fi -+else -+ ac_srcdir_defaulted=no -+fi -+if test ! -r $srcdir/$ac_unique_file; then -+ if test "$ac_srcdir_defaulted" = yes; then -+ { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } -+ else -+ { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } -+ fi -+fi -+srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` -+ -+# Prefer explicitly selected file to automatically selected ones. -+if test -z "$CONFIG_SITE"; then -+ if test "x$prefix" != xNONE; then -+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" -+ else -+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" -+ fi -+fi -+for ac_site_file in $CONFIG_SITE; do -+ if test -r "$ac_site_file"; then -+ echo "loading site script $ac_site_file" -+ . "$ac_site_file" -+ fi -+done -+ -+if test -r "$cache_file"; then -+ echo "loading cache $cache_file" -+ . $cache_file -+else -+ echo "creating cache $cache_file" -+ > $cache_file -+fi -+ -+ac_ext=c -+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -+ac_cpp='$CPP $CPPFLAGS' -+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -+cross_compiling=$ac_cv_prog_cc_cross -+ -+ac_exeext= -+ac_objext=o -+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then -+ # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. -+ if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then -+ ac_n= ac_c=' -+' ac_t=' ' -+ else -+ ac_n=-n ac_c= ac_t= -+ fi -+else -+ ac_n= ac_c='\c' ac_t= -+fi -+ -+ -+ac_aux_dir= -+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do -+ if test -f $ac_dir/install-sh; then -+ ac_aux_dir=$ac_dir -+ ac_install_sh="$ac_aux_dir/install-sh -c" -+ break -+ elif test -f $ac_dir/install.sh; then -+ ac_aux_dir=$ac_dir -+ ac_install_sh="$ac_aux_dir/install.sh -c" -+ break -+ fi -+done -+if test -z "$ac_aux_dir"; then -+ { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } -+fi -+ac_config_guess=$ac_aux_dir/config.guess -+ac_config_sub=$ac_aux_dir/config.sub -+ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. -+ -+# Find a good install program. We prefer a C program (faster), -+# so one script is as good as another. But avoid the broken or -+# incompatible versions: -+# SysV /etc/install, /usr/sbin/install -+# SunOS /usr/etc/install -+# IRIX /sbin/install -+# AIX /bin/install -+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -+# AFS /usr/afsws/bin/install, which mishandles nonexistent args -+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -+# ./install, which can be erroneously created by make from ./install.sh. -+echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -+echo "configure:558: checking for a BSD compatible install" >&5 -+if test -z "$INSTALL"; then -+if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then -+ echo $ac_n "(cached) $ac_c" 1>&6 -+else -+ IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" -+ for ac_dir in $PATH; do -+ # Account for people who put trailing slashes in PATH elements. -+ case "$ac_dir/" in -+ /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; -+ *) -+ # OSF1 and SCO ODT 3.0 have their own names for install. -+ # Don't use installbsd from OSF since it installs stuff as root -+ # by default. -+ for ac_prog in ginstall scoinst install; do -+ if test -f $ac_dir/$ac_prog; then -+ if test $ac_prog = install && -+ grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then -+ # AIX install. It has an incompatible calling convention. -+ : -+ else -+ ac_cv_path_install="$ac_dir/$ac_prog -c" -+ break 2 -+ fi -+ fi -+ done -+ ;; -+ esac -+ done -+ IFS="$ac_save_IFS" -+ -+fi -+ if test "${ac_cv_path_install+set}" = set; then -+ INSTALL="$ac_cv_path_install" -+ else -+ # As a last resort, use the slow shell script. We don't cache a -+ # path for INSTALL within a source directory, because that will -+ # break other packages using the cache if that directory is -+ # removed, or if the path is relative. -+ INSTALL="$ac_install_sh" -+ fi -+fi -+echo "$ac_t""$INSTALL" 1>&6 -+ -+# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -+# It thinks the first close brace ends the variable substitution. -+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' -+ -+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' -+ -+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -+ -+echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6 -+echo "configure:611: checking whether build environment is sane" >&5 -+# Just in case -+sleep 1 -+echo timestamp > conftestfile -+# Do `set' in a subshell so we don't clobber the current shell's -+# arguments. Must try -L first in case configure is actually a -+# symlink; some systems play weird games with the mod time of symlinks -+# (eg FreeBSD returns the mod time of the symlink's containing -+# directory). -+if ( -+ set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` -+ if test "$*" = "X"; then -+ # -L didn't work. -+ set X `ls -t $srcdir/configure conftestfile` -+ fi -+ if test "$*" != "X $srcdir/configure conftestfile" \ -+ && test "$*" != "X conftestfile $srcdir/configure"; then -+ -+ # If neither matched, then we have a broken ls. This can happen -+ # if, for instance, CONFIG_SHELL is bash and it inherits a -+ # broken ls alias from the environment. This has actually -+ # happened. Such a system could not be considered "sane". -+ { echo "configure: error: ls -t appears to fail. Make sure there is not a broken -+alias in your environment" 1>&2; exit 1; } -+ fi -+ -+ test "$2" = conftestfile -+ ) -+then -+ # Ok. -+ : -+else -+ { echo "configure: error: newly created file is older than distributed files! -+Check your system clock" 1>&2; exit 1; } -+fi -+rm -f conftest* -+echo "$ac_t""yes" 1>&6 -+if test "$program_transform_name" = s,x,x,; then -+ program_transform_name= -+else -+ # Double any \ or $. echo might interpret backslashes. -+ cat <<\EOF_SED > conftestsed -+s,\\,\\\\,g; s,\$,$$,g -+EOF_SED -+ program_transform_name="`echo $program_transform_name|sed -f conftestsed`" -+ rm -f conftestsed -+fi -+test "$program_prefix" != NONE && -+ program_transform_name="s,^,${program_prefix},; $program_transform_name" -+# Use a double $ so make ignores it. -+test "$program_suffix" != NONE && -+ program_transform_name="s,\$\$,${program_suffix},; $program_transform_name" -+ -+# sed with no file args requires a program. -+test "$program_transform_name" = "" && program_transform_name="s,x,x," -+ -+echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 -+echo "configure:668: checking whether ${MAKE-make} sets \${MAKE}" >&5 -+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` -+if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then -+ echo $ac_n "(cached) $ac_c" 1>&6 -+else -+ cat > conftestmake <<\EOF -+all: -+ @echo 'ac_maketemp="${MAKE}"' -+EOF -+# GNU make sometimes prints "make[1]: Entering...", which would confuse us. -+eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` -+if test -n "$ac_maketemp"; then -+ eval ac_cv_prog_make_${ac_make}_set=yes -+else -+ eval ac_cv_prog_make_${ac_make}_set=no -+fi -+rm -f conftestmake -+fi -+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then -+ echo "$ac_t""yes" 1>&6 -+ SET_MAKE= -+else -+ echo "$ac_t""no" 1>&6 -+ SET_MAKE="MAKE=${MAKE-make}" -+fi -+ -+ -+PACKAGE=blip -+ -+VERSION=0.1 -+ -+if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then -+ { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } -+fi -+cat >> confdefs.h <<EOF -+#define PACKAGE "$PACKAGE" -+EOF -+ -+cat >> confdefs.h <<EOF -+#define VERSION "$VERSION" -+EOF -+ -+ -+ -+missing_dir=`cd $ac_aux_dir && pwd` -+echo $ac_n "checking for working aclocal""... $ac_c" 1>&6 -+echo "configure:714: checking for working aclocal" >&5 -+# Run test in a subshell; some versions of sh will print an error if -+# an executable is not found, even if stderr is redirected. -+# Redirect stdin to placate older versions of autoconf. Sigh. -+if (aclocal --version) < /dev/null > /dev/null 2>&1; then -+ ACLOCAL=aclocal -+ echo "$ac_t""found" 1>&6 -+else -+ ACLOCAL="$missing_dir/missing aclocal" -+ echo "$ac_t""missing" 1>&6 -+fi -+ -+echo $ac_n "checking for working autoconf""... $ac_c" 1>&6 -+echo "configure:727: checking for working autoconf" >&5 -+# Run test in a subshell; some versions of sh will print an error if -+# an executable is not found, even if stderr is redirected. -+# Redirect stdin to placate older versions of autoconf. Sigh. -+if (autoconf --version) < /dev/null > /dev/null 2>&1; then -+ AUTOCONF=autoconf -+ echo "$ac_t""found" 1>&6 -+else -+ AUTOCONF="$missing_dir/missing autoconf" -+ echo "$ac_t""missing" 1>&6 -+fi -+ -+echo $ac_n "checking for working automake""... $ac_c" 1>&6 -+echo "configure:740: checking for working automake" >&5 -+# Run test in a subshell; some versions of sh will print an error if -+# an executable is not found, even if stderr is redirected. -+# Redirect stdin to placate older versions of autoconf. Sigh. -+if (automake --version) < /dev/null > /dev/null 2>&1; then -+ AUTOMAKE=automake -+ echo "$ac_t""found" 1>&6 -+else -+ AUTOMAKE="$missing_dir/missing automake" -+ echo "$ac_t""missing" 1>&6 -+fi -+ -+echo $ac_n "checking for working autoheader""... $ac_c" 1>&6 -+echo "configure:753: checking for working autoheader" >&5 -+# Run test in a subshell; some versions of sh will print an error if -+# an executable is not found, even if stderr is redirected. -+# Redirect stdin to placate older versions of autoconf. Sigh. -+if (autoheader --version) < /dev/null > /dev/null 2>&1; then -+ AUTOHEADER=autoheader -+ echo "$ac_t""found" 1>&6 -+else -+ AUTOHEADER="$missing_dir/missing autoheader" -+ echo "$ac_t""missing" 1>&6 -+fi -+ -+echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6 -+echo "configure:766: checking for working makeinfo" >&5 -+# Run test in a subshell; some versions of sh will print an error if -+# an executable is not found, even if stderr is redirected. -+# Redirect stdin to placate older versions of autoconf. Sigh. -+if (makeinfo --version) < /dev/null > /dev/null 2>&1; then -+ MAKEINFO=makeinfo -+ echo "$ac_t""found" 1>&6 -+else -+ MAKEINFO="$missing_dir/missing makeinfo" -+ echo "$ac_t""missing" 1>&6 -+fi -+ -+ -+ -+# Extract the first word of "ranlib", so it can be a program name with args. -+set dummy ranlib; ac_word=$2 -+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -+echo "configure:783: checking for $ac_word" >&5 -+if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then -+ echo $ac_n "(cached) $ac_c" 1>&6 -+else -+ if test -n "$RANLIB"; then -+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -+else -+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" -+ ac_dummy="$PATH" -+ for ac_dir in $ac_dummy; do -+ test -z "$ac_dir" && ac_dir=. -+ if test -f $ac_dir/$ac_word; then -+ ac_cv_prog_RANLIB="ranlib" -+ break -+ fi -+ done -+ IFS="$ac_save_ifs" -+ test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" -+fi -+fi -+RANLIB="$ac_cv_prog_RANLIB" -+if test -n "$RANLIB"; then -+ echo "$ac_t""$RANLIB" 1>&6 -+else -+ echo "$ac_t""no" 1>&6 -+fi -+ -+ -+# Check whether --enable-msn or --disable-msn was given. -+if test "${enable_msn+set}" = set; then -+ enableval="$enable_msn" -+ build_msn="$enableval" -+else -+ build_msn="yes" -+fi -+ -+ -+ -+if test "x$build_msn" = xyes; then -+ BUILD_MSN_TRUE= -+ BUILD_MSN_FALSE='#' -+else -+ BUILD_MSN_TRUE='#' -+ BUILD_MSN_FALSE= -+fi -+ -+if test "$build_msn" = "yes"; then -+ # Extract the first word of "gcc", so it can be a program name with args. -+set dummy gcc; ac_word=$2 -+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -+echo "configure:833: checking for $ac_word" >&5 -+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then -+ echo $ac_n "(cached) $ac_c" 1>&6 -+else -+ if test -n "$CC"; then -+ ac_cv_prog_CC="$CC" # Let the user override the test. -+else -+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" -+ ac_dummy="$PATH" -+ for ac_dir in $ac_dummy; do -+ test -z "$ac_dir" && ac_dir=. -+ if test -f $ac_dir/$ac_word; then -+ ac_cv_prog_CC="gcc" -+ break -+ fi -+ done -+ IFS="$ac_save_ifs" -+fi -+fi -+CC="$ac_cv_prog_CC" -+if test -n "$CC"; then -+ echo "$ac_t""$CC" 1>&6 -+else -+ echo "$ac_t""no" 1>&6 -+fi -+ -+if test -z "$CC"; then -+ # Extract the first word of "cc", so it can be a program name with args. -+set dummy cc; ac_word=$2 -+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -+echo "configure:863: checking for $ac_word" >&5 -+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then -+ echo $ac_n "(cached) $ac_c" 1>&6 -+else -+ if test -n "$CC"; then -+ ac_cv_prog_CC="$CC" # Let the user override the test. -+else -+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" -+ ac_prog_rejected=no -+ ac_dummy="$PATH" -+ for ac_dir in $ac_dummy; do -+ test -z "$ac_dir" && ac_dir=. -+ if test -f $ac_dir/$ac_word; then -+ if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then -+ ac_prog_rejected=yes -+ continue -+ fi -+ ac_cv_prog_CC="cc" -+ break -+ fi -+ done -+ IFS="$ac_save_ifs" -+if test $ac_prog_rejected = yes; then -+ # We found a bogon in the path, so make sure we never use it. -+ set dummy $ac_cv_prog_CC -+ shift -+ if test $# -gt 0; then -+ # We chose a different compiler from the bogus one. -+ # However, it has the same basename, so the bogon will be chosen -+ # first if we set CC to just the basename; use the full file name. -+ shift -+ set dummy "$ac_dir/$ac_word" "$@" -+ shift -+ ac_cv_prog_CC="$@" -+ fi -+fi -+fi -+fi -+CC="$ac_cv_prog_CC" -+if test -n "$CC"; then -+ echo "$ac_t""$CC" 1>&6 -+else -+ echo "$ac_t""no" 1>&6 -+fi -+ -+ if test -z "$CC"; then -+ case "`uname -s`" in -+ *win32* | *WIN32*) -+ # Extract the first word of "cl", so it can be a program name with args. -+set dummy cl; ac_word=$2 -+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -+echo "configure:914: checking for $ac_word" >&5 -+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then -+ echo $ac_n "(cached) $ac_c" 1>&6 -+else -+ if test -n "$CC"; then -+ ac_cv_prog_CC="$CC" # Let the user override the test. -+else -+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" -+ ac_dummy="$PATH" -+ for ac_dir in $ac_dummy; do -+ test -z "$ac_dir" && ac_dir=. -+ if test -f $ac_dir/$ac_word; then -+ ac_cv_prog_CC="cl" -+ break -+ fi -+ done -+ IFS="$ac_save_ifs" -+fi -+fi -+CC="$ac_cv_prog_CC" -+if test -n "$CC"; then -+ echo "$ac_t""$CC" 1>&6 -+else -+ echo "$ac_t""no" 1>&6 -+fi -+ ;; -+ esac -+ fi -+ test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } -+fi -+ -+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -+echo "configure:946: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 -+ -+ac_ext=c -+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -+ac_cpp='$CPP $CPPFLAGS' -+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -+cross_compiling=$ac_cv_prog_cc_cross -+ -+cat > conftest.$ac_ext << EOF -+ -+#line 957 "configure" -+#include "confdefs.h" -+ -+main(){return(0);} -+EOF -+if { (eval echo configure:962: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then -+ ac_cv_prog_cc_works=yes -+ # If we can't run a trivial program, we are probably using a cross compiler. -+ if (./conftest; exit) 2>/dev/null; then -+ ac_cv_prog_cc_cross=no -+ else -+ ac_cv_prog_cc_cross=yes -+ fi -+else -+ echo "configure: failed program was:" >&5 -+ cat conftest.$ac_ext >&5 -+ ac_cv_prog_cc_works=no -+fi -+rm -fr conftest* -+ac_ext=c -+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -+ac_cpp='$CPP $CPPFLAGS' -+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -+cross_compiling=$ac_cv_prog_cc_cross -+ -+echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 -+if test $ac_cv_prog_cc_works = no; then -+ { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } -+fi -+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -+echo "configure:988: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 -+echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 -+cross_compiling=$ac_cv_prog_cc_cross -+ -+echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -+echo "configure:993: checking whether we are using GNU C" >&5 -+if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then -+ echo $ac_n "(cached) $ac_c" 1>&6 -+else -+ cat > conftest.c <<EOF -+#ifdef __GNUC__ -+ yes; -+#endif -+EOF -+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1002: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then -+ ac_cv_prog_gcc=yes -+else -+ ac_cv_prog_gcc=no -+fi -+fi -+ -+echo "$ac_t""$ac_cv_prog_gcc" 1>&6 -+ -+if test $ac_cv_prog_gcc = yes; then -+ GCC=yes -+else -+ GCC= -+fi -+ -+ac_test_CFLAGS="${CFLAGS+set}" -+ac_save_CFLAGS="$CFLAGS" -+CFLAGS= -+echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -+echo "configure:1021: checking whether ${CC-cc} accepts -g" >&5 -+if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then -+ echo $ac_n "(cached) $ac_c" 1>&6 -+else -+ echo 'void f(){}' > conftest.c -+if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then -+ ac_cv_prog_cc_g=yes -+else -+ ac_cv_prog_cc_g=no -+fi -+rm -f conftest* -+ -+fi -+ -+echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 -+if test "$ac_test_CFLAGS" = set; then -+ CFLAGS="$ac_save_CFLAGS" -+elif test $ac_cv_prog_cc_g = yes; then -+ if test "$GCC" = yes; then -+ CFLAGS="-g -O2" -+ else -+ CFLAGS="-g" -+ fi -+else -+ if test "$GCC" = yes; then -+ CFLAGS="-O2" -+ else -+ CFLAGS= -+ fi -+fi -+ -+ for ac_prog in $CCC c++ g++ gcc CC cxx cc++ cl -+do -+# Extract the first word of "$ac_prog", so it can be a program name with args. -+set dummy $ac_prog; ac_word=$2 -+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -+echo "configure:1057: checking for $ac_word" >&5 -+if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then -+ echo $ac_n "(cached) $ac_c" 1>&6 -+else -+ if test -n "$CXX"; then -+ ac_cv_prog_CXX="$CXX" # Let the user override the test. -+else -+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" -+ ac_dummy="$PATH" -+ for ac_dir in $ac_dummy; do -+ test -z "$ac_dir" && ac_dir=. -+ if test -f $ac_dir/$ac_word; then -+ ac_cv_prog_CXX="$ac_prog" -+ break -+ fi -+ done -+ IFS="$ac_save_ifs" -+fi -+fi -+CXX="$ac_cv_prog_CXX" -+if test -n "$CXX"; then -+ echo "$ac_t""$CXX" 1>&6 -+else -+ echo "$ac_t""no" 1>&6 -+fi -+ -+test -n "$CXX" && break -+done -+test -n "$CXX" || CXX="gcc" -+ -+ -+echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -+echo "configure:1089: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5 -+ -+ac_ext=C -+# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -+ac_cpp='$CXXCPP $CPPFLAGS' -+ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -+ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -+cross_compiling=$ac_cv_prog_cxx_cross -+ -+cat > conftest.$ac_ext << EOF -+ -+#line 1100 "configure" -+#include "confdefs.h" -+ -+int main(){return(0);} -+EOF -+if { (eval echo configure:1105: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then -+ ac_cv_prog_cxx_works=yes -+ # If we can't run a trivial program, we are probably using a cross compiler. -+ if (./conftest; exit) 2>/dev/null; then -+ ac_cv_prog_cxx_cross=no -+ else -+ ac_cv_prog_cxx_cross=yes -+ fi -+else -+ echo "configure: failed program was:" >&5 -+ cat conftest.$ac_ext >&5 -+ ac_cv_prog_cxx_works=no -+fi -+rm -fr conftest* -+ac_ext=c -+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -+ac_cpp='$CPP $CPPFLAGS' -+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -+cross_compiling=$ac_cv_prog_cc_cross -+ -+echo "$ac_t""$ac_cv_prog_cxx_works" 1>&6 -+if test $ac_cv_prog_cxx_works = no; then -+ { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; } -+fi -+echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -+echo "configure:1131: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5 -+echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6 -+cross_compiling=$ac_cv_prog_cxx_cross -+ -+echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6 -+echo "configure:1136: checking whether we are using GNU C++" >&5 -+if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then -+ echo $ac_n "(cached) $ac_c" 1>&6 -+else -+ cat > conftest.C <<EOF -+#ifdef __GNUC__ -+ yes; -+#endif -+EOF -+if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1145: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then -+ ac_cv_prog_gxx=yes -+else -+ ac_cv_prog_gxx=no -+fi -+fi -+ -+echo "$ac_t""$ac_cv_prog_gxx" 1>&6 -+ -+if test $ac_cv_prog_gxx = yes; then -+ GXX=yes -+else -+ GXX= -+fi -+ -+ac_test_CXXFLAGS="${CXXFLAGS+set}" -+ac_save_CXXFLAGS="$CXXFLAGS" -+CXXFLAGS= -+echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6 -+echo "configure:1164: checking whether ${CXX-g++} accepts -g" >&5 -+if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then -+ echo $ac_n "(cached) $ac_c" 1>&6 -+else -+ echo 'void f(){}' > conftest.cc -+if test -z "`${CXX-g++} -g -c conftest.cc 2>&1`"; then -+ ac_cv_prog_cxx_g=yes -+else -+ ac_cv_prog_cxx_g=no -+fi -+rm -f conftest* -+ -+fi -+ -+echo "$ac_t""$ac_cv_prog_cxx_g" 1>&6 -+if test "$ac_test_CXXFLAGS" = set; then -+ CXXFLAGS="$ac_save_CXXFLAGS" -+elif test $ac_cv_prog_cxx_g = yes; then -+ if test "$GXX" = yes; then -+ CXXFLAGS="-g -O2" -+ else -+ CXXFLAGS="-g" -+ fi -+else -+ if test "$GXX" = yes; then -+ CXXFLAGS="-O2" -+ else -+ CXXFLAGS= -+ fi -+fi -+ -+for ac_declaration in \ -+ ''\ -+ '#include <stdlib.h>' \ -+ 'extern "C" void std::exit (int) throw (); using std::exit;' \ -+ 'extern "C" void std::exit (int); using std::exit;' \ -+ 'extern "C" void exit (int) throw ();' \ -+ 'extern "C" void exit (int);' \ -+ 'void exit (int);' -+do -+ cat > conftest.$ac_ext <<EOF -+#line 1205 "configure" -+#include "confdefs.h" -+#include <stdlib.h> -+$ac_declaration -+int main() { -+exit (42); -+; return 0; } -+EOF -+if { (eval echo configure:1213: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then -+ : -+else -+ echo "configure: failed program was:" >&5 -+ cat conftest.$ac_ext >&5 -+ rm -rf conftest* -+ continue -+fi -+rm -f conftest* -+ cat > conftest.$ac_ext <<EOF -+#line 1223 "configure" -+#include "confdefs.h" -+$ac_declaration -+int main() { -+exit (42); -+; return 0; } -+EOF -+if { (eval echo configure:1230: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then -+ rm -rf conftest* -+ break -+else -+ echo "configure: failed program was:" >&5 -+ cat conftest.$ac_ext >&5 -+fi -+rm -f conftest* -+done -+if test -n "$ac_declaration"; then -+ echo '#ifdef __cplusplus' >>confdefs.h -+ echo $ac_declaration >>confdefs.h -+ echo '#endif' >>confdefs.h -+fi -+ -+ -+fi -+ -+trap '' 1 2 15 -+cat > confcache <<\EOF -+# This file is a shell script that caches the results of configure -+# tests run on this system so they can be shared between configure -+# scripts and configure runs. It is not useful on other systems. -+# If it contains results you don't want to keep, you may remove or edit it. -+# -+# By default, configure uses ./config.cache as the cache file, -+# creating it if it does not exist already. You can give configure -+# the --cache-file=FILE option to use a different cache file; that is -+# what configure does when it calls configure scripts in -+# subdirectories, so they share the cache. -+# Giving --cache-file=/dev/null disables caching, for debugging configure. -+# config.status only pays attention to the cache file if you give it the -+# --recheck option to rerun configure. -+# -+EOF -+# The following way of writing the cache mishandles newlines in values, -+# but we know of no workaround that is simple, portable, and efficient. -+# So, don't put newlines in cache variables' values. -+# Ultrix sh set writes to stderr and can't be redirected directly, -+# and sets the high bit in the cache file unless we assign to the vars. -+(set) 2>&1 | -+ case `(ac_space=' '; set | grep ac_space) 2>&1` in -+ *ac_space=\ *) -+ # `set' does not quote correctly, so add quotes (double-quote substitution -+ # turns \\\\ into \\, and sed turns \\ into \). -+ sed -n \ -+ -e "s/'/'\\\\''/g" \ -+ -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" -+ ;; -+ *) -+ # `set' quotes correctly as required by POSIX, so do not add quotes. -+ sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' -+ ;; -+ esac >> confcache -+if cmp -s $cache_file confcache; then -+ : -+else -+ if test -w $cache_file; then -+ echo "updating cache $cache_file" -+ cat confcache > $cache_file -+ else -+ echo "not updating unwritable cache $cache_file" -+ fi -+fi -+rm -f confcache -+ -+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 -+ -+test "x$prefix" = xNONE && prefix=$ac_default_prefix -+# Let make expand exec_prefix. -+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' -+ -+# Any assignment to VPATH causes Sun make to only execute -+# the first set of double-colon rules, so remove it if not needed. -+# If there is a colon in the path, we need to keep it. -+if test "x$srcdir" = x.; then -+ ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' -+fi -+ -+trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 -+ -+# Transform confdefs.h into DEFS. -+# Protect against shell expansion while executing Makefile rules. -+# Protect against Makefile macro expansion. -+cat > conftest.defs <<\EOF -+s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g -+s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g -+s%\[%\\&%g -+s%\]%\\&%g -+s%\$%$$%g -+EOF -+DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '` -+rm -f conftest.defs -+ -+ -+# Without the "./", some shells look in PATH for config.status. -+: ${CONFIG_STATUS=./config.status} -+ -+echo creating $CONFIG_STATUS -+rm -f $CONFIG_STATUS -+cat > $CONFIG_STATUS <<EOF -+#! /bin/sh -+# Generated automatically by configure. -+# Run this file to recreate the current configuration. -+# This directory was configured as follows, -+# on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -+# -+# $0 $ac_configure_args -+# -+# Compiler output produced by configure, useful for debugging -+# configure, is in ./config.log if it exists. -+ -+ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" -+for ac_option -+do -+ case "\$ac_option" in -+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) -+ echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" -+ exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; -+ -version | --version | --versio | --versi | --vers | --ver | --ve | --v) -+ echo "$CONFIG_STATUS generated by autoconf version 2.13" -+ exit 0 ;; -+ -help | --help | --hel | --he | --h) -+ echo "\$ac_cs_usage"; exit 0 ;; -+ *) echo "\$ac_cs_usage"; exit 1 ;; -+ esac -+done -+ -+ac_given_srcdir=$srcdir -+ac_given_INSTALL="$INSTALL" -+ -+trap 'rm -fr `echo "Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 -+EOF -+cat >> $CONFIG_STATUS <<EOF -+ -+# Protect against being on the right side of a sed subst in config.status. -+sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g; -+ s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF -+$ac_vpsub -+$extrasub -+s%@SHELL@%$SHELL%g -+s%@CFLAGS@%$CFLAGS%g -+s%@CPPFLAGS@%$CPPFLAGS%g -+s%@CXXFLAGS@%$CXXFLAGS%g -+s%@FFLAGS@%$FFLAGS%g -+s%@DEFS@%$DEFS%g -+s%@LDFLAGS@%$LDFLAGS%g -+s%@LIBS@%$LIBS%g -+s%@exec_prefix@%$exec_prefix%g -+s%@prefix@%$prefix%g -+s%@program_transform_name@%$program_transform_name%g -+s%@bindir@%$bindir%g -+s%@sbindir@%$sbindir%g -+s%@libexecdir@%$libexecdir%g -+s%@datadir@%$datadir%g -+s%@sysconfdir@%$sysconfdir%g -+s%@sharedstatedir@%$sharedstatedir%g -+s%@localstatedir@%$localstatedir%g -+s%@libdir@%$libdir%g -+s%@includedir@%$includedir%g -+s%@oldincludedir@%$oldincludedir%g -+s%@infodir@%$infodir%g -+s%@mandir@%$mandir%g -+s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g -+s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g -+s%@INSTALL_DATA@%$INSTALL_DATA%g -+s%@PACKAGE@%$PACKAGE%g -+s%@VERSION@%$VERSION%g -+s%@ACLOCAL@%$ACLOCAL%g -+s%@AUTOCONF@%$AUTOCONF%g -+s%@AUTOMAKE@%$AUTOMAKE%g -+s%@AUTOHEADER@%$AUTOHEADER%g -+s%@MAKEINFO@%$MAKEINFO%g -+s%@SET_MAKE@%$SET_MAKE%g -+s%@RANLIB@%$RANLIB%g -+s%@BUILD_MSN_TRUE@%$BUILD_MSN_TRUE%g -+s%@BUILD_MSN_FALSE@%$BUILD_MSN_FALSE%g -+s%@CC@%$CC%g -+s%@CXX@%$CXX%g -+ -+CEOF -+EOF -+ -+cat >> $CONFIG_STATUS <<\EOF -+ -+# Split the substitutions into bite-sized pieces for seds with -+# small command number limits, like on Digital OSF/1 and HP-UX. -+ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. -+ac_file=1 # Number of current file. -+ac_beg=1 # First line for current file. -+ac_end=$ac_max_sed_cmds # Line after last line for current file. -+ac_more_lines=: -+ac_sed_cmds="" -+while $ac_more_lines; do -+ if test $ac_beg -gt 1; then -+ sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file -+ else -+ sed "${ac_end}q" conftest.subs > conftest.s$ac_file -+ fi -+ if test ! -s conftest.s$ac_file; then -+ ac_more_lines=false -+ rm -f conftest.s$ac_file -+ else -+ if test -z "$ac_sed_cmds"; then -+ ac_sed_cmds="sed -f conftest.s$ac_file" -+ else -+ ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" -+ fi -+ ac_file=`expr $ac_file + 1` -+ ac_beg=$ac_end -+ ac_end=`expr $ac_end + $ac_max_sed_cmds` -+ fi -+done -+if test -z "$ac_sed_cmds"; then -+ ac_sed_cmds=cat -+fi -+EOF -+ -+cat >> $CONFIG_STATUS <<EOF -+ -+CONFIG_FILES=\${CONFIG_FILES-"Makefile"} -+EOF -+cat >> $CONFIG_STATUS <<\EOF -+for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then -+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". -+ case "$ac_file" in -+ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` -+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; -+ *) ac_file_in="${ac_file}.in" ;; -+ esac -+ -+ # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. -+ -+ # Remove last slash and all that follows it. Not all systems have dirname. -+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` -+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then -+ # The file is in a subdirectory. -+ test ! -d "$ac_dir" && mkdir "$ac_dir" -+ ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" -+ # A "../" for each directory in $ac_dir_suffix. -+ ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` -+ else -+ ac_dir_suffix= ac_dots= -+ fi -+ -+ case "$ac_given_srcdir" in -+ .) srcdir=. -+ if test -z "$ac_dots"; then top_srcdir=. -+ else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; -+ /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; -+ *) # Relative path. -+ srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" -+ top_srcdir="$ac_dots$ac_given_srcdir" ;; -+ esac -+ -+ case "$ac_given_INSTALL" in -+ [/$]*) INSTALL="$ac_given_INSTALL" ;; -+ *) INSTALL="$ac_dots$ac_given_INSTALL" ;; -+ esac -+ -+ echo creating "$ac_file" -+ rm -f "$ac_file" -+ configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." -+ case "$ac_file" in -+ *Makefile*) ac_comsub="1i\\ -+# $configure_input" ;; -+ *) ac_comsub= ;; -+ esac -+ -+ ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` -+ sed -e "$ac_comsub -+s%@configure_input@%$configure_input%g -+s%@srcdir@%$srcdir%g -+s%@top_srcdir@%$top_srcdir%g -+s%@INSTALL@%$INSTALL%g -+" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file -+fi; done -+rm -f conftest.s* -+ -+EOF -+cat >> $CONFIG_STATUS <<EOF -+ -+EOF -+cat >> $CONFIG_STATUS <<\EOF -+ -+exit 0 -+EOF -+chmod +x $CONFIG_STATUS -+rm -fr confdefs* $ac_clean_files -+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 -+ -diff -ruN blip-0.1.orig/configure.in blip-0.1/configure.in ---- blip-0.1.orig/configure.in Thu Jan 1 08:00:00 1970 -+++ blip-0.1/configure.in Mon Nov 3 20:09:02 2003 -@@ -0,0 +1,14 @@ -+AC_INIT(aclocal.m4) -+AM_INIT_AUTOMAKE(blip, 0.1) -+ -+AC_PROG_RANLIB -+ -+AC_ARG_ENABLE(msn, [ --disable-msn Build without MSN], build_msn="$enableval", build_msn="yes") -+AM_CONDITIONAL(BUILD_MSN, test "x$build_msn" = xyes) -+ -+if test "$build_msn" = "yes"; then -+ AC_PROG_CC -+ AC_PROG_CXX -+fi -+ -+AC_OUTPUT(Makefile) -diff -ruN blip-0.1.orig/install-sh blip-0.1/install-sh ---- blip-0.1.orig/install-sh Thu Jan 1 08:00:00 1970 -+++ blip-0.1/install-sh Mon Nov 3 20:09:02 2003 -@@ -0,0 +1,251 @@ -+#!/bin/sh -+# -+# install - install a program, script, or datafile -+# This comes from X11R5 (mit/util/scripts/install.sh). -+# -+# Copyright 1991 by the Massachusetts Institute of Technology -+# -+# Permission to use, copy, modify, distribute, and sell this software and its -+# documentation for any purpose is hereby granted without fee, provided that -+# the above copyright notice appear in all copies and that both that -+# copyright notice and this permission notice appear in supporting -+# documentation, and that the name of M.I.T. not be used in advertising or -+# publicity pertaining to distribution of the software without specific, -+# written prior permission. M.I.T. makes no representations about the -+# suitability of this software for any purpose. It is provided "as is" -+# without express or implied warranty. -+# -+# Calling this script install-sh is preferred over install.sh, to prevent -+# `make' implicit rules from creating a file called install from it -+# when there is no Makefile. -+# -+# This script is compatible with the BSD install script, but was written -+# from scratch. It can only install one file at a time, a restriction -+# shared with many OS's install programs. -+ -+ -+# set DOITPROG to echo to test this script -+ -+# Don't use :- since 4.3BSD and earlier shells don't like it. -+doit="${DOITPROG-}" -+ -+ -+# put in absolute paths if you don't have them in your path; or use env. vars. -+ -+mvprog="${MVPROG-mv}" -+cpprog="${CPPROG-cp}" -+chmodprog="${CHMODPROG-chmod}" -+chownprog="${CHOWNPROG-chown}" -+chgrpprog="${CHGRPPROG-chgrp}" -+stripprog="${STRIPPROG-strip}" -+rmprog="${RMPROG-rm}" -+mkdirprog="${MKDIRPROG-mkdir}" -+ -+transformbasename="" -+transform_arg="" -+instcmd="$mvprog" -+chmodcmd="$chmodprog 0755" -+chowncmd="" -+chgrpcmd="" -+stripcmd="" -+rmcmd="$rmprog -f" -+mvcmd="$mvprog" -+src="" -+dst="" -+dir_arg="" -+ -+while [ x"$1" != x ]; do -+ case $1 in -+ -c) instcmd="$cpprog" -+ shift -+ continue;; -+ -+ -d) dir_arg=true -+ shift -+ continue;; -+ -+ -m) chmodcmd="$chmodprog $2" -+ shift -+ shift -+ continue;; -+ -+ -o) chowncmd="$chownprog $2" -+ shift -+ shift -+ continue;; -+ -+ -g) chgrpcmd="$chgrpprog $2" -+ shift -+ shift -+ continue;; -+ -+ -s) stripcmd="$stripprog" -+ shift -+ continue;; -+ -+ -t=*) transformarg=`echo $1 | sed 's/-t=//'` -+ shift -+ continue;; -+ -+ -b=*) transformbasename=`echo $1 | sed 's/-b=//'` -+ shift -+ continue;; -+ -+ *) if [ x"$src" = x ] -+ then -+ src=$1 -+ else -+ # this colon is to work around a 386BSD /bin/sh bug -+ : -+ dst=$1 -+ fi -+ shift -+ continue;; -+ esac -+done -+ -+if [ x"$src" = x ] -+then -+ echo "install: no input file specified" -+ exit 1 -+else -+ true -+fi -+ -+if [ x"$dir_arg" != x ]; then -+ dst=$src -+ src="" -+ -+ if [ -d $dst ]; then -+ instcmd=: -+ chmodcmd="" -+ else -+ instcmd=mkdir -+ fi -+else -+ -+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command -+# might cause directories to be created, which would be especially bad -+# if $src (and thus $dsttmp) contains '*'. -+ -+ if [ -f $src -o -d $src ] -+ then -+ true -+ else -+ echo "install: $src does not exist" -+ exit 1 -+ fi -+ -+ if [ x"$dst" = x ] -+ then -+ echo "install: no destination specified" -+ exit 1 -+ else -+ true -+ fi -+ -+# If destination is a directory, append the input filename; if your system -+# does not like double slashes in filenames, you may need to add some logic -+ -+ if [ -d $dst ] -+ then -+ dst="$dst"/`basename $src` -+ else -+ true -+ fi -+fi -+ -+## this sed command emulates the dirname command -+dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` -+ -+# Make sure that the destination directory exists. -+# this part is taken from Noah Friedman's mkinstalldirs script -+ -+# Skip lots of stat calls in the usual case. -+if [ ! -d "$dstdir" ]; then -+defaultIFS=' -+' -+IFS="${IFS-${defaultIFS}}" -+ -+oIFS="${IFS}" -+# Some sh's can't handle IFS=/ for some reason. -+IFS='%' -+set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` -+IFS="${oIFS}" -+ -+pathcomp='' -+ -+while [ $# -ne 0 ] ; do -+ pathcomp="${pathcomp}${1}" -+ shift -+ -+ if [ ! -d "${pathcomp}" ] ; -+ then -+ $mkdirprog "${pathcomp}" -+ else -+ true -+ fi -+ -+ pathcomp="${pathcomp}/" -+done -+fi -+ -+if [ x"$dir_arg" != x ] -+then -+ $doit $instcmd $dst && -+ -+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && -+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && -+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && -+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi -+else -+ -+# If we're going to rename the final executable, determine the name now. -+ -+ if [ x"$transformarg" = x ] -+ then -+ dstfile=`basename $dst` -+ else -+ dstfile=`basename $dst $transformbasename | -+ sed $transformarg`$transformbasename -+ fi -+ -+# don't allow the sed command to completely eliminate the filename -+ -+ if [ x"$dstfile" = x ] -+ then -+ dstfile=`basename $dst` -+ else -+ true -+ fi -+ -+# Make a temp file name in the proper directory. -+ -+ dsttmp=$dstdir/#inst.$$# -+ -+# Move or copy the file name to the temp name -+ -+ $doit $instcmd $src $dsttmp && -+ -+ trap "rm -f ${dsttmp}" 0 && -+ -+# and set any options; do chmod last to preserve setuid bits -+ -+# If any of these fail, we abort the whole thing. If we want to -+# ignore errors from any of these, just make sure not to ignore -+# errors from the above "$doit $instcmd $src $dsttmp" command. -+ -+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && -+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && -+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && -+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && -+ -+# Now rename the file to the real destination. -+ -+ $doit $rmcmd -f $dstdir/$dstfile && -+ $doit $mvcmd $dsttmp $dstdir/$dstfile -+ -+fi && -+ -+ -+exit 0 -diff -ruN blip-0.1.orig/md5.c blip-0.1/md5.c ---- blip-0.1.orig/md5.c Thu Jan 1 08:00:00 1970 -+++ blip-0.1/md5.c Mon Nov 3 20:09:02 2003 -@@ -0,0 +1,392 @@ -+/* -+ Copyright (C) 1999 Aladdin Enterprises. All rights reserved. -+ -+ This software is provided 'as-is', without any express or implied -+ warranty. In no event will the authors be held liable for any damages -+ arising from the use of this software. -+ -+ Permission is granted to anyone to use this software for any purpose, -+ including commercial applications, and to alter it and redistribute it -+ freely, subject to the following restrictions: -+ -+ 1. The origin of this software must not be misrepresented; you must not -+ claim that you wrote the original software. If you use this software -+ in a product, an acknowledgment in the product documentation would be -+ appreciated but is not required. -+ 2. Altered source versions must be plainly marked as such, and must not be -+ misrepresented as being the original software. -+ 3. This notice may not be removed or altered from any source distribution. -+ -+ L. Peter Deutsch -+ ghost@aladdin.com -+ -+ */ -+/*$Id: md5.c,v 1.1.1.1 2002/12/09 08:48:19 konst Exp $ */ -+/* -+ Independent implementation of MD5 (RFC 1321). -+ -+ This code implements the MD5 Algorithm defined in RFC 1321. -+ It is derived directly from the text of the RFC and not from the -+ reference implementation. -+ -+ The original and principal author of md5.c is L. Peter Deutsch -+ <ghost@aladdin.com>. Other authors are noted in the change history -+ that follows (in reverse chronological order): -+ -+ 1999-11-04 lpd Edited comments slightly for automatic TOC extraction. -+ 1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5). -+ 1999-05-03 lpd Original version. -+ */ -+ -+#include "md5.h" -+ -+#ifdef TEST -+/* -+ * Compile with -DTEST to create a self-contained executable test program. -+ * The test program should print out the same values as given in section -+ * A.5 of RFC 1321, reproduced below. -+ */ -+#include <string.h> -+main() -+{ -+ static const char *const test[7] = { -+ "", /*d41d8cd98f00b204e9800998ecf8427e*/ -+ "945399884.61923487334tuvga", /*0cc175b9c0f1b6a831c399e269772661*/ -+ "abc", /*900150983cd24fb0d6963f7d28e17f72*/ -+ "message digest", /*f96b697d7cb7938d525a2f31aaf161d0*/ -+ "abcdefghijklmnopqrstuvwxyz", /*c3fcd3d76192e4007dfb496cca67e13b*/ -+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", -+ /*d174ab98d277d9f5a5611c2c9f419d9f*/ -+ "12345678901234567890123456789012345678901234567890123456789012345678901234567890" /*57edf4a22be3c955ac49da2e2107b67a*/ -+ }; -+ int i; -+ -+ for (i = 0; i < 7; ++i) { -+ md5_state_t state; -+ md5_byte_t digest[16]; -+ int di; -+ -+ md5_init(&state); -+ md5_append(&state, (const md5_byte_t *)test[i], strlen(test[i])); -+ md5_finish(&state, digest); -+ printf("MD5 (\"%s\") = ", test[i]); -+ for (di = 0; di < 16; ++di) -+ printf("%02x", digest[di]); -+ printf("\n"); -+ } -+ return 0; -+} -+#endif /* TEST */ -+ -+ -+/* -+ * For reference, here is the program that computed the T values. -+ */ -+#if 0 -+#include <math.h> -+main() -+{ -+ int i; -+ for (i = 1; i <= 64; ++i) { -+ unsigned long v = (unsigned long)(4294967296.0 * fabs(sin((double)i))); -+ printf("#define T%d 0x%08lx\n", i, v); -+ } -+ return 0; -+} -+#endif -+/* -+ * End of T computation program. -+ */ -+#define T1 0xd76aa478 -+#define T2 0xe8c7b756 -+#define T3 0x242070db -+#define T4 0xc1bdceee -+#define T5 0xf57c0faf -+#define T6 0x4787c62a -+#define T7 0xa8304613 -+#define T8 0xfd469501 -+#define T9 0x698098d8 -+#define T10 0x8b44f7af -+#define T11 0xffff5bb1 -+#define T12 0x895cd7be -+#define T13 0x6b901122 -+#define T14 0xfd987193 -+#define T15 0xa679438e -+#define T16 0x49b40821 -+#define T17 0xf61e2562 -+#define T18 0xc040b340 -+#define T19 0x265e5a51 -+#define T20 0xe9b6c7aa -+#define T21 0xd62f105d -+#define T22 0x02441453 -+#define T23 0xd8a1e681 -+#define T24 0xe7d3fbc8 -+#define T25 0x21e1cde6 -+#define T26 0xc33707d6 -+#define T27 0xf4d50d87 -+#define T28 0x455a14ed -+#define T29 0xa9e3e905 -+#define T30 0xfcefa3f8 -+#define T31 0x676f02d9 -+#define T32 0x8d2a4c8a -+#define T33 0xfffa3942 -+#define T34 0x8771f681 -+#define T35 0x6d9d6122 -+#define T36 0xfde5380c -+#define T37 0xa4beea44 -+#define T38 0x4bdecfa9 -+#define T39 0xf6bb4b60 -+#define T40 0xbebfbc70 -+#define T41 0x289b7ec6 -+#define T42 0xeaa127fa -+#define T43 0xd4ef3085 -+#define T44 0x04881d05 -+#define T45 0xd9d4d039 -+#define T46 0xe6db99e5 -+#define T47 0x1fa27cf8 -+#define T48 0xc4ac5665 -+#define T49 0xf4292244 -+#define T50 0x432aff97 -+#define T51 0xab9423a7 -+#define T52 0xfc93a039 -+#define T53 0x655b59c3 -+#define T54 0x8f0ccc92 -+#define T55 0xffeff47d -+#define T56 0x85845dd1 -+#define T57 0x6fa87e4f -+#define T58 0xfe2ce6e0 -+#define T59 0xa3014314 -+#define T60 0x4e0811a1 -+#define T61 0xf7537e82 -+#define T62 0xbd3af235 -+#define T63 0x2ad7d2bb -+#define T64 0xeb86d391 -+ -+static void -+md5_process(md5_state_t *pms, const md5_byte_t *data /*[64]*/) -+{ -+ md5_word_t -+ a = pms->abcd[0], b = pms->abcd[1], -+ c = pms->abcd[2], d = pms->abcd[3]; -+ md5_word_t t; -+ -+#ifndef ARCH_IS_BIG_ENDIAN -+# define ARCH_IS_BIG_ENDIAN 1 /* slower, default implementation */ -+#endif -+#if ARCH_IS_BIG_ENDIAN -+ -+ /* -+ * On big-endian machines, we must arrange the bytes in the right -+ * order. (This also works on machines of unknown byte order.) -+ */ -+ md5_word_t X[16]; -+ const md5_byte_t *xp = data; -+ int i; -+ -+ for (i = 0; i < 16; ++i, xp += 4) -+ X[i] = xp[0] + (xp[1] << 8) + (xp[2] << 16) + (xp[3] << 24); -+ -+#else /* !ARCH_IS_BIG_ENDIAN */ -+ -+ /* -+ * On little-endian machines, we can process properly aligned data -+ * without copying it. -+ */ -+ md5_word_t xbuf[16]; -+ const md5_word_t *X; -+ -+ if (!((data - (const md5_byte_t *)0) & 3)) { -+ /* data are properly aligned */ -+ X = (const md5_word_t *)data; -+ } else { -+ /* not aligned */ -+ memcpy(xbuf, data, 64); -+ X = xbuf; -+ } -+#endif -+ -+#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n)))) -+ -+ /* Round 1. */ -+ /* Let [abcd k s i] denote the operation -+ a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */ -+#define F(x, y, z) (((x) & (y)) | (~(x) & (z))) -+#define SET(a, b, c, d, k, s, Ti)\ -+ t = a + F(b,c,d) + X[k] + Ti;\ -+ a = ROTATE_LEFT(t, s) + b -+ /* Do the following 16 operations. */ -+ SET(a, b, c, d, 0, 7, T1); -+ SET(d, a, b, c, 1, 12, T2); -+ SET(c, d, a, b, 2, 17, T3); -+ SET(b, c, d, a, 3, 22, T4); -+ SET(a, b, c, d, 4, 7, T5); -+ SET(d, a, b, c, 5, 12, T6); -+ SET(c, d, a, b, 6, 17, T7); -+ SET(b, c, d, a, 7, 22, T8); -+ SET(a, b, c, d, 8, 7, T9); -+ SET(d, a, b, c, 9, 12, T10); -+ SET(c, d, a, b, 10, 17, T11); -+ SET(b, c, d, a, 11, 22, T12); -+ SET(a, b, c, d, 12, 7, T13); -+ SET(d, a, b, c, 13, 12, T14); -+ SET(c, d, a, b, 14, 17, T15); -+ SET(b, c, d, a, 15, 22, T16); -+#undef SET -+ -+ /* Round 2. */ -+ /* Let [abcd k s i] denote the operation -+ a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */ -+#define G(x, y, z) (((x) & (z)) | ((y) & ~(z))) -+#define SET(a, b, c, d, k, s, Ti)\ -+ t = a + G(b,c,d) + X[k] + Ti;\ -+ a = ROTATE_LEFT(t, s) + b -+ /* Do the following 16 operations. */ -+ SET(a, b, c, d, 1, 5, T17); -+ SET(d, a, b, c, 6, 9, T18); -+ SET(c, d, a, b, 11, 14, T19); -+ SET(b, c, d, a, 0, 20, T20); -+ SET(a, b, c, d, 5, 5, T21); -+ SET(d, a, b, c, 10, 9, T22); -+ SET(c, d, a, b, 15, 14, T23); -+ SET(b, c, d, a, 4, 20, T24); -+ SET(a, b, c, d, 9, 5, T25); -+ SET(d, a, b, c, 14, 9, T26); -+ SET(c, d, a, b, 3, 14, T27); -+ SET(b, c, d, a, 8, 20, T28); -+ SET(a, b, c, d, 13, 5, T29); -+ SET(d, a, b, c, 2, 9, T30); -+ SET(c, d, a, b, 7, 14, T31); -+ SET(b, c, d, a, 12, 20, T32); -+#undef SET -+ -+ /* Round 3. */ -+ /* Let [abcd k s t] denote the operation -+ a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */ -+#define H(x, y, z) ((x) ^ (y) ^ (z)) -+#define SET(a, b, c, d, k, s, Ti)\ -+ t = a + H(b,c,d) + X[k] + Ti;\ -+ a = ROTATE_LEFT(t, s) + b -+ /* Do the following 16 operations. */ -+ SET(a, b, c, d, 5, 4, T33); -+ SET(d, a, b, c, 8, 11, T34); -+ SET(c, d, a, b, 11, 16, T35); -+ SET(b, c, d, a, 14, 23, T36); -+ SET(a, b, c, d, 1, 4, T37); -+ SET(d, a, b, c, 4, 11, T38); -+ SET(c, d, a, b, 7, 16, T39); -+ SET(b, c, d, a, 10, 23, T40); -+ SET(a, b, c, d, 13, 4, T41); -+ SET(d, a, b, c, 0, 11, T42); -+ SET(c, d, a, b, 3, 16, T43); -+ SET(b, c, d, a, 6, 23, T44); -+ SET(a, b, c, d, 9, 4, T45); -+ SET(d, a, b, c, 12, 11, T46); -+ SET(c, d, a, b, 15, 16, T47); -+ SET(b, c, d, a, 2, 23, T48); -+#undef SET -+ -+ /* Round 4. */ -+ /* Let [abcd k s t] denote the operation -+ a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */ -+#define I(x, y, z) ((y) ^ ((x) | ~(z))) -+#define SET(a, b, c, d, k, s, Ti)\ -+ t = a + I(b,c,d) + X[k] + Ti;\ -+ a = ROTATE_LEFT(t, s) + b -+ /* Do the following 16 operations. */ -+ SET(a, b, c, d, 0, 6, T49); -+ SET(d, a, b, c, 7, 10, T50); -+ SET(c, d, a, b, 14, 15, T51); -+ SET(b, c, d, a, 5, 21, T52); -+ SET(a, b, c, d, 12, 6, T53); -+ SET(d, a, b, c, 3, 10, T54); -+ SET(c, d, a, b, 10, 15, T55); -+ SET(b, c, d, a, 1, 21, T56); -+ SET(a, b, c, d, 8, 6, T57); -+ SET(d, a, b, c, 15, 10, T58); -+ SET(c, d, a, b, 6, 15, T59); -+ SET(b, c, d, a, 13, 21, T60); -+ SET(a, b, c, d, 4, 6, T61); -+ SET(d, a, b, c, 11, 10, T62); -+ SET(c, d, a, b, 2, 15, T63); -+ SET(b, c, d, a, 9, 21, T64); -+#undef SET -+ -+ /* Then perform the following additions. (That is increment each -+ of the four registers by the value it had before this block -+ was started.) */ -+ pms->abcd[0] += a; -+ pms->abcd[1] += b; -+ pms->abcd[2] += c; -+ pms->abcd[3] += d; -+} -+ -+void -+md5_init(md5_state_t *pms) -+{ -+ pms->count[0] = pms->count[1] = 0; -+ pms->abcd[0] = 0x67452301; -+ pms->abcd[1] = 0xefcdab89; -+ pms->abcd[2] = 0x98badcfe; -+ pms->abcd[3] = 0x10325476; -+} -+ -+void -+md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes) -+{ -+ const md5_byte_t *p = data; -+ int left = nbytes; -+ int offset = (pms->count[0] >> 3) & 63; -+ md5_word_t nbits = (md5_word_t)(nbytes << 3); -+ -+ if (nbytes <= 0) -+ return; -+ -+ /* Update the message length. */ -+ pms->count[1] += nbytes >> 29; -+ pms->count[0] += nbits; -+ if (pms->count[0] < nbits) -+ pms->count[1]++; -+ -+ /* Process an initial partial block. */ -+ if (offset) { -+ int copy = (offset + nbytes > 64 ? 64 - offset : nbytes); -+ -+ memcpy(pms->buf + offset, p, copy); -+ if (offset + copy < 64) -+ return; -+ p += copy; -+ left -= copy; -+ md5_process(pms, pms->buf); -+ } -+ -+ /* Process full blocks. */ -+ for (; left >= 64; p += 64, left -= 64) -+ md5_process(pms, p); -+ -+ /* Process a final partial block. */ -+ if (left) -+ memcpy(pms->buf, p, left); -+} -+ -+void -+md5_finish(md5_state_t *pms, md5_byte_t digest[16]) -+{ -+ static const md5_byte_t pad[64] = { -+ 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -+ }; -+ md5_byte_t data[8]; -+ int i; -+ -+ /* Save the length before padding. */ -+ for (i = 0; i < 8; ++i) -+ data[i] = (md5_byte_t)(pms->count[i >> 2] >> ((i & 3) << 3)); -+ /* Pad to 56 bytes mod 64. */ -+ md5_append(pms, pad, ((55 - (pms->count[0] >> 3)) & 63) + 1); -+ /* Append the length. */ -+ md5_append(pms, data, 8); -+ for (i = 0; i < 16; ++i) -+ digest[i] = (md5_byte_t)(pms->abcd[i >> 2] >> ((i & 3) << 3)); -+} -diff -ruN blip-0.1.orig/md5.h blip-0.1/md5.h ---- blip-0.1.orig/md5.h Thu Jan 1 08:00:00 1970 -+++ blip-0.1/md5.h Mon Nov 3 20:09:02 2003 -@@ -0,0 +1,94 @@ -+/* -+ Copyright (C) 1999 Aladdin Enterprises. All rights reserved. -+ -+ This software is provided 'as-is', without any express or implied -+ warranty. In no event will the authors be held liable for any damages -+ arising from the use of this software. -+ -+ Permission is granted to anyone to use this software for any purpose, -+ including commercial applications, and to alter it and redistribute it -+ freely, subject to the following restrictions: -+ -+ 1. The origin of this software must not be misrepresented; you must not -+ claim that you wrote the original software. If you use this software -+ in a product, an acknowledgment in the product documentation would be -+ appreciated but is not required. -+ 2. Altered source versions must be plainly marked as such, and must not be -+ misrepresented as being the original software. -+ 3. This notice may not be removed or altered from any source distribution. -+ -+ L. Peter Deutsch -+ ghost@aladdin.com -+ -+ */ -+/*$Id: md5.h,v 1.1.1.1 2002/12/09 08:48:22 konst Exp $ */ -+/* -+ Independent implementation of MD5 (RFC 1321). -+ -+ This code implements the MD5 Algorithm defined in RFC 1321. -+ It is derived directly from the text of the RFC and not from the -+ reference implementation. -+ -+ The original and principal author of md5.h is L. Peter Deutsch -+ <ghost@aladdin.com>. Other authors are noted in the change history -+ that follows (in reverse chronological order): -+ -+ 1999-11-04 lpd Edited comments slightly for automatic TOC extraction. -+ 1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5); -+ added conditionalization for C++ compilation from Martin -+ Purschke <purschke@bnl.gov>. -+ 1999-05-03 lpd Original version. -+ */ -+ -+#ifndef md5_INCLUDED -+# define md5_INCLUDED -+ -+/* -+ * This code has some adaptations for the Ghostscript environment, but it -+ * will compile and run correctly in any environment with 8-bit chars and -+ * 32-bit ints. Specifically, it assumes that if the following are -+ * defined, they have the same meaning as in Ghostscript: P1, P2, P3, -+ * ARCH_IS_BIG_ENDIAN. -+ */ -+ -+typedef unsigned char md5_byte_t; /* 8-bit byte */ -+typedef unsigned int md5_word_t; /* 32-bit word */ -+ -+/* Define the state of the MD5 Algorithm. */ -+typedef struct md5_state_s { -+ md5_word_t count[2]; /* message length in bits, lsw first */ -+ md5_word_t abcd[4]; /* digest buffer */ -+ md5_byte_t buf[64]; /* accumulate block */ -+} md5_state_t; -+ -+#ifdef __cplusplus -+extern "C" -+{ -+#endif -+ -+/* Initialize the algorithm. */ -+#ifdef P1 -+void md5_init(P1(md5_state_t *pms)); -+#else -+void md5_init(md5_state_t *pms); -+#endif -+ -+/* Append a string to the message. */ -+#ifdef P3 -+void md5_append(P3(md5_state_t *pms, const md5_byte_t *data, int nbytes)); -+#else -+void md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes); -+#endif -+ -+/* Finish the message and return the digest. */ -+#ifdef P2 -+void md5_finish(P2(md5_state_t *pms, md5_byte_t digest[16])); -+#else -+void md5_finish(md5_state_t *pms, md5_byte_t digest[16]); -+#endif -+ -+#ifdef __cplusplus -+} /* end extern "C" */ -+#endif -+ -+#endif /* md5_INCLUDED */ -diff -ruN blip-0.1.orig/missing blip-0.1/missing ---- blip-0.1.orig/missing Thu Jan 1 08:00:00 1970 -+++ blip-0.1/missing Mon Nov 3 20:09:02 2003 -@@ -0,0 +1,198 @@ -+#! /bin/sh -+# Common stub for a few missing GNU programs while installing. -+# Copyright (C) 1996, 1997, 2001 Free Software Foundation, Inc. -+# Franc,ois Pinard <pinard@iro.umontreal.ca>, 1996. -+ -+# 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, 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. -+ -+if test $# -eq 0; then -+ echo 1>&2 "Try \`$0 --help' for more information" -+ exit 1 -+fi -+ -+# In the cases where this matters, `missing' is being run in the -+# srcdir already. -+if test -f configure.in; then -+ configure_ac=configure.ac -+else -+ configure_ac=configure.in -+fi -+ -+case "$1" in -+ -+ -h|--h|--he|--hel|--help) -+ echo "\ -+$0 [OPTION]... PROGRAM [ARGUMENT]... -+ -+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an -+error status if there is no known handling for PROGRAM. -+ -+Options: -+ -h, --help display this help and exit -+ -v, --version output version information and exit -+ -+Supported PROGRAM values: -+ aclocal touch file \`aclocal.m4' -+ autoconf touch file \`configure' -+ autoheader touch file \`config.h.in' -+ automake touch all \`Makefile.in' files -+ bison create \`y.tab.[ch]', if possible, from existing .[ch] -+ flex create \`lex.yy.c', if possible, from existing .c -+ lex create \`lex.yy.c', if possible, from existing .c -+ makeinfo touch the output file -+ yacc create \`y.tab.[ch]', if possible, from existing .[ch]" -+ ;; -+ -+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version) -+ echo "missing - GNU libit 0.0" -+ ;; -+ -+ -*) -+ echo 1>&2 "$0: Unknown \`$1' option" -+ echo 1>&2 "Try \`$0 --help' for more information" -+ exit 1 -+ ;; -+ -+ aclocal) -+ echo 1>&2 "\ -+WARNING: \`$1' is missing on your system. You should only need it if -+ you modified \`acinclude.m4' or \`$configure_ac'. You might want -+ to install the \`Automake' and \`Perl' packages. Grab them from -+ any GNU archive site." -+ touch aclocal.m4 -+ ;; -+ -+ autoconf) -+ echo 1>&2 "\ -+WARNING: \`$1' is missing on your system. You should only need it if -+ you modified \`$configure_ac'. You might want to install the -+ \`Autoconf' and \`GNU m4' packages. Grab them from any GNU -+ archive site." -+ touch configure -+ ;; -+ -+ autoheader) -+ echo 1>&2 "\ -+WARNING: \`$1' is missing on your system. You should only need it if -+ you modified \`acconfig.h' or \`$configure_ac'. You might want -+ to install the \`Autoconf' and \`GNU m4' packages. Grab them -+ from any GNU archive site." -+ files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' $configure_ac` -+ test -z "$files" && files="config.h" -+ touch_files= -+ for f in $files; do -+ case "$f" in -+ *:*) touch_files="$touch_files "`echo "$f" | -+ sed -e 's/^[^:]*://' -e 's/:.*//'`;; -+ *) touch_files="$touch_files $f.in";; -+ esac -+ done -+ touch $touch_files -+ ;; -+ -+ automake) -+ echo 1>&2 "\ -+WARNING: \`$1' is missing on your system. You should only need it if -+ you modified \`Makefile.am', \`acinclude.m4' or \`$configure_ac'. -+ You might want to install the \`Automake' and \`Perl' packages. -+ Grab them from any GNU archive site." -+ find . -type f -name Makefile.am -print | -+ sed 's/\.am$/.in/' | -+ while read f; do touch "$f"; done -+ ;; -+ -+ bison|yacc) -+ echo 1>&2 "\ -+WARNING: \`$1' is missing on your system. You should only need it if -+ you modified a \`.y' file. You may need the \`Bison' package -+ in order for those modifications to take effect. You can get -+ \`Bison' from any GNU archive site." -+ rm -f y.tab.c y.tab.h -+ if [ $# -ne 1 ]; then -+ eval LASTARG="\${$#}" -+ case "$LASTARG" in -+ *.y) -+ SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` -+ if [ -f "$SRCFILE" ]; then -+ cp "$SRCFILE" y.tab.c -+ fi -+ SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` -+ if [ -f "$SRCFILE" ]; then -+ cp "$SRCFILE" y.tab.h -+ fi -+ ;; -+ esac -+ fi -+ if [ ! -f y.tab.h ]; then -+ echo >y.tab.h -+ fi -+ if [ ! -f y.tab.c ]; then -+ echo 'main() { return 0; }' >y.tab.c -+ fi -+ ;; -+ -+ lex|flex) -+ echo 1>&2 "\ -+WARNING: \`$1' is missing on your system. You should only need it if -+ you modified a \`.l' file. You may need the \`Flex' package -+ in order for those modifications to take effect. You can get -+ \`Flex' from any GNU archive site." -+ rm -f lex.yy.c -+ if [ $# -ne 1 ]; then -+ eval LASTARG="\${$#}" -+ case "$LASTARG" in -+ *.l) -+ SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` -+ if [ -f "$SRCFILE" ]; then -+ cp "$SRCFILE" lex.yy.c -+ fi -+ ;; -+ esac -+ fi -+ if [ ! -f lex.yy.c ]; then -+ echo 'main() { return 0; }' >lex.yy.c -+ fi -+ ;; -+ -+ makeinfo) -+ echo 1>&2 "\ -+WARNING: \`$1' is missing on your system. You should only need it if -+ you modified a \`.texi' or \`.texinfo' file, or any other file -+ indirectly affecting the aspect of the manual. The spurious -+ call might also be the consequence of using a buggy \`make' (AIX, -+ DU, IRIX). You might want to install the \`Texinfo' package or -+ the \`GNU make' package. Grab either from any GNU archive site." -+ file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` -+ if test -z "$file"; then -+ file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` -+ file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` -+ fi -+ touch $file -+ ;; -+ -+ *) -+ echo 1>&2 "\ -+WARNING: \`$1' is needed, and you do not seem to have it handy on your -+ system. You might have modified some files without having the -+ proper tools for further handling them. Check the \`README' file, -+ it often tells you about the needed prerequirements for installing -+ this package. You may also peek at any GNU archive site, in case -+ some other package would contain this missing \`$1' program." -+ exit 1 -+ ;; -+esac -+ -+exit 0 -diff -ruN blip-0.1.orig/mkinstalldirs blip-0.1/mkinstalldirs ---- blip-0.1.orig/mkinstalldirs Thu Jan 1 08:00:00 1970 -+++ blip-0.1/mkinstalldirs Mon Nov 3 20:09:02 2003 -@@ -0,0 +1,40 @@ -+#! /bin/sh -+# mkinstalldirs --- make directory hierarchy -+# Author: Noah Friedman <friedman@prep.ai.mit.edu> -+# Created: 1993-05-16 -+# Public domain -+ -+# $Id: mkinstalldirs,v 1.13 1999/01/05 03:18:55 bje Exp $ -+ -+errstatus=0 -+ -+for file -+do -+ set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` -+ shift -+ -+ pathcomp= -+ for d -+ do -+ pathcomp="$pathcomp$d" -+ case "$pathcomp" in -+ -* ) pathcomp=./$pathcomp ;; -+ esac -+ -+ if test ! -d "$pathcomp"; then -+ echo "mkdir $pathcomp" -+ -+ mkdir "$pathcomp" || lasterr=$? -+ -+ if test ! -d "$pathcomp"; then -+ errstatus=$lasterr -+ fi -+ fi -+ -+ pathcomp="$pathcomp/" -+ done -+done -+ -+exit $errstatus -+ -+# mkinstalldirs ends here -diff -ruN blip-0.1.orig/msn_bittybits.C blip-0.1/msn_bittybits.C ---- blip-0.1.orig/msn_bittybits.C Thu Jan 1 08:00:00 1970 -+++ blip-0.1/msn_bittybits.C Mon Nov 3 20:09:02 2003 -@@ -0,0 +1,283 @@ -+/* msn_bittybits.c - all the little string- and list-bashing functions */ -+ -+#include <stdio.h> -+#include <stdlib.h> -+#include <string.h> -+#include <unistd.h> -+#include <ctype.h> -+#include <sys/errno.h> -+ -+#include "msn_core.h" -+#include "msn_interface.h" -+#include "msn_bittybits.h" -+ -+char ** msn_read_line(int sock, int * numargs) -+{ -+ // Right, this is quite a task. Step One is to read the thing in. -+ char ** retval; -+ char c; -+ int pos=0, numspaces=0; -+ -+ *numargs = 0; -+ -+ while(1) -+ { -+ if(read(sock, &c, 1)<1) -+ { -+ #ifdef MSNDEBUG -+ perror("Stream closed\n"); //DEBUG -+ #endif -+ return NULL; -+ } -+ if(c=='\314') { return NULL; } // just drop it -+ if(c=='\r') { continue; } -+ if(c=='\n') { numspaces++; buf[pos]='\0'; break; } -+ if(c==' ') { numspaces++; } -+ buf[pos]=c; -+ pos++; -+ if(pos>=BUF_SIZE) -+ { -+ #ifdef MSNDEBUG -+ printf("Severe warning - overflow, dropping/splitting a line!"); -+ #endif -+ return NULL; -+ } -+ } -+ -+ if(numspaces==0) { -+ #ifdef MSNDEBUG -+ printf("What the..?\n"); -+ #endif -+ return NULL; } -+ -+ ext_protocol_log(buf, 1, 0); -+ -+ retval=new char * [numspaces]; -+ retval[0]=new char[strlen(buf)+1]; -+ strcpy(retval[0], buf); -+ *numargs=numspaces; -+ -+ // OK, take it as read (boom, boom!) -+ // Now we cruise through the string, changing all spaces to null 0's and setting -+ // a pointer at the beginning of each substring -+ -+ pos=0; -+ numspaces=1; // pointer #0 is already set at the beginning -+ while(1) -+ { -+ if(retval[0][pos]==' ') -+ { -+ retval[0][pos]='\0'; -+ retval[numspaces]=retval[0]+pos+1; -+ numspaces++; -+ pos++; -+ continue; -+ } -+ if(retval[0][pos]=='\0') { break; } -+ -+ pos++; -+ } -+ -+ return retval; -+} -+ -+void msn_clean_up(msnconn * conn) -+{ -+ llist * connlist; -+ connlist=connections; -+ -+ if(conn->type!=CONN_FTP) -+ { ext_closing_connection(conn); } -+ -+ while(1) -+ { -+ if(connlist==NULL) { return; } -+ if(connlist->data==conn) { break; } -+ connlist=connlist->next; -+ } -+ -+ close(conn->sock); -+ ext_unregister_sock(conn->sock); -+// delete conn; -+ -+ if(connlist->next!=NULL) -+ { connlist->next->prev=connlist->prev; } -+ if(connlist->prev!=NULL) -+ { connlist->prev->next=connlist->next; } else { connections=connlist->next; } -+ connlist->prev=NULL; // no recursive destructors, please... -+ connlist->next=NULL; -+ connlist->data=NULL; // already deleted the conn object -+ delete connlist; -+} -+ -+void msn_add_callback(msnconn * conn, void (*func)(msnconn * conn, int trid, char ** args, int numargs, callback_data * data), int trid, callback_data * data) -+{ -+ callback * call; -+ -+ call=new callback; -+ call->trid=trid; -+ call->data=data; -+ call->func=func; -+ -+ msn_add_to_llist(conn->callbacks, call); -+} -+ -+void msn_del_callback(msnconn * conn, int trid) -+{ -+ llist * list; -+ callback * call; -+ -+ list=conn->callbacks; -+ -+ if(list==NULL) { return; } -+ -+ do -+ { -+ call=(callback *)list->data; -+ if(call->trid==trid) -+ { -+ if(list->next!=NULL) -+ { list->next->prev=list->prev; } -+ if(list->prev!=NULL) -+ { list->prev->next=list->next; } else { conn->callbacks=NULL; } -+ list->prev=NULL; // no recursive destructors -+ list->next=NULL; -+ delete list; -+ break; -+ } -+ list=list->next; -+ } while(list!=NULL); -+} -+ -+void msn_add_to_llist(llist *& listp, llist_data * data) -+{ -+ llist * tlist; -+ llist * newlist; -+ -+ if(listp==NULL) { listp=new llist; listp->data=data; return; } -+ -+ tlist=listp; -+ -+ while(tlist->next!=NULL) { tlist=tlist->next; } -+ -+ newlist=new llist; -+ newlist->prev=tlist; -+ newlist->next=NULL; -+ newlist->data=data; -+ tlist->next=newlist; -+} -+ -+void msn_del_from_llist(llist *& listp, llist_data * data) -+{ -+ // Note: this function does NOT delete the data, only the list object -+ llist * tlist; -+ -+ tlist=listp; -+ -+ while(tlist!=NULL) -+ { -+ if(tlist->data==data) -+ { -+ if(tlist->next!=NULL) -+ { tlist->next->prev=tlist->prev; } -+ if(tlist->prev!=NULL) -+ { tlist->prev->next=tlist->next; } else { listp=tlist->next; } -+ tlist->next=NULL; // otherwise the whole list is clobbered by the destructor -+ tlist->prev=NULL; -+ tlist->data=NULL; -+ delete tlist; -+ return; -+ } -+ tlist=tlist->next; -+ } -+} -+ -+int msn_count_llist(llist * list) -+{ -+ llist * l=list; -+ int retval=0; -+ -+ while(l!=NULL) { l=l->next; retval++; } -+ -+ return retval; -+} -+ -+char * msn_permstring(const char * s) -+{ -+ char * retval; -+ -+ if(s==NULL) { return NULL; } -+ -+ retval=new char [strlen(s)+1]; -+ -+ strcpy(retval, s); -+ -+ return retval; -+} -+ -+char * msn_decode_URL(char * s) -+{ -+ char * rpos; // read -+ char * wpos; // write -+ -+ wpos=rpos=s; -+ -+ while(1) -+ { -+ if(*rpos=='\0') { *wpos='\0'; break; } -+ -+ if(*rpos=='%') -+ { -+ char buf[3]; -+ int c; -+ rpos++; -+ buf[0]=*rpos; -+ rpos++; -+ buf[1]=*rpos; -+ rpos++; -+ buf[2]='\0'; -+ sscanf(buf, "%x", &c); -+ *wpos=c; -+ wpos++; -+ continue; -+ } -+ -+ *wpos=*rpos; -+ rpos++; -+ wpos++; -+ } -+ return s; -+} -+ -+char * msn_encode_URL(const char * s) -+{ -+ const char * rptr = s; -+ char * wptr; -+ char * retval; -+ -+ wptr=retval=new char[strlen(s)*3]; -+ -+ while(1) -+ { -+ if(*rptr=='\0') -+ { *wptr='\0'; break; } -+ -+ if(!(isalpha(*rptr) || isdigit(*rptr))) -+ { -+ if ( *rptr != '\xc2' && *rptr != '\xb0' ) { -+ sprintf(wptr, "%%%2x", (int)(*rptr)); -+ -+ rptr++; -+ wptr+=3; -+ continue; -+ } -+ } -+ -+ *wptr=*rptr; -+ wptr++; -+ rptr++; -+ } -+ -+ return retval; -+} -+ -diff -ruN blip-0.1.orig/msn_bittybits.h blip-0.1/msn_bittybits.h ---- blip-0.1.orig/msn_bittybits.h Thu Jan 1 08:00:00 1970 -+++ blip-0.1/msn_bittybits.h Mon Nov 3 20:09:02 2003 -@@ -0,0 +1,35 @@ -+#ifndef __MSN_BITTYBITS_H__ -+#define __MSN_BITTYBITS_H__ -+ -+/* msn_bittybits.h - all the little string-bashing functions */ -+ -+/* -+ char ** msn_read_line(int sock, int * numargs); -+ -+ Purpose: Read a line from the MSN server, then break it up into -+ space-separated strings -+ Arguments: -+ sock The socket to use -+ numargs Gets set to the number of arguments -+ Returns: A NULL-terminated array of strings, or NULL on error -+*/ -+char ** msn_read_line(int sock, int * numargs); -+ -+void msn_clean_up(msnconn * conn); -+ -+void msn_add_callback(msnconn * conn, void (*func)(msnconn * conn, int trid, char ** args, int numargs, callback_data * data), int trid, callback_data * data); -+ -+void msn_del_callback(msnconn * conn, int trid); -+ -+void msn_add_to_llist(llist *& listp, llist_data * data); -+ -+void msn_del_from_llist(llist *& listp, llist_data * data); -+ -+int msn_count_llist(llist * list); -+ -+char * msn_permstring(const char * s); -+ -+char * msn_decode_URL(char * s); -+char * msn_encode_URL(const char * s); -+ -+#endif -diff -ruN blip-0.1.orig/msn_core.C blip-0.1/msn_core.C ---- blip-0.1.orig/msn_core.C Thu Jan 1 08:00:00 1970 -+++ blip-0.1/msn_core.C Mon Nov 3 20:09:02 2003 -@@ -0,0 +1,2162 @@ -+/* msn_core.c - this contains all the functions used to do anything with MSN */ -+ -+#include <stdio.h> -+#include <unistd.h> -+#include <ctype.h> -+#include <stdlib.h> -+#include <string.h> -+ -+#include <errno.h> -+#include <sys/time.h> -+#include <sys/types.h> -+#include <sys/stat.h> -+#include <fcntl.h> -+#include <time.h> -+ -+#include <sys/types.h> -+#include <sys/socket.h> // for the accept() in filetrans code -+#include <sys/stat.h> -+ -+#include "md5.h" -+#include "msn_core.h" -+#include "msn_bittybits.h" -+#include "msn_interface.h" -+#include "../connwrap-0.1/connwrap.h" -+ -+#define DEBUG 1 -+#define MSN_VERSION_ID 0 // ID that is sent after commands like CHG, NLN, etc. -+ -+// Define all those extern'ed variables in msn_core.h: -+llist * connections=NULL; -+int next_trid=10; -+char buf[BUF_SIZE]; // used for anything temporary -+char * errors[1000]; -+char default_error_msg[]="Unknown error code"; -+ -+void msn_init(msnconn * conn, const char * username, const char * password) -+{ -+ srand(time(NULL)); -+ -+ conn->auth=new authdata_NS; -+ conn->type=CONN_NS; -+ conn->ready=0; -+ ((authdata_NS *)conn->auth)->username=msn_permstring(username); -+ ((authdata_NS *)conn->auth)->password=msn_permstring(password); -+ -+ for(int a=0; a<1000; a++) -+ { -+ errors[a]=default_error_msg; -+ } -+ -+ errors[200]=msn_permstring("Syntax error"); -+ errors[201]=msn_permstring("Invalid parameter"); -+ errors[205]=msn_permstring("Invalid user"); -+ errors[206]=msn_permstring("Domain name missing from username"); -+ errors[207]=msn_permstring("Already logged in"); -+ errors[208]=msn_permstring("Invalid username"); -+ errors[209]=msn_permstring("Invalid friendly name"); -+ errors[210]=msn_permstring("List full"); -+ errors[215]=msn_permstring("This user is already on this list or in this session"); -+ errors[216]=msn_permstring("Not on list"); -+ errors[218]=msn_permstring("Already in this mode"); -+ errors[219]=msn_permstring("This user is already in the opposite list"); -+ errors[280]=msn_permstring("Switchboard server failed"); -+ errors[281]=msn_permstring("Transfer notification failed"); -+ errors[300]=msn_permstring("Required fields missing"); -+ errors[302]=msn_permstring("Not logged in"); -+ errors[500]=msn_permstring("Internal server error"); -+ errors[501]=msn_permstring("Database server error"); -+ errors[510]=msn_permstring("File operation failed at server"); -+ errors[520]=msn_permstring("Memory allocation failed on server"); -+ errors[600]=msn_permstring("The server is too busy"); -+ errors[601]=msn_permstring("The server is unavailable"); -+ errors[602]=msn_permstring("A Peer Notification Server is down"); -+ errors[603]=msn_permstring("Database connection failed"); -+ errors[604]=msn_permstring("Server going down for maintenance"); -+ errors[707]=msn_permstring("Server failed to create connection"); -+ errors[711]=msn_permstring("Blocking write failed on server"); -+ errors[712]=msn_permstring("Session overload on server"); -+ errors[713]=msn_permstring("You have been too active recently. Slow down!"); -+ errors[714]=msn_permstring("Too many sessions open"); -+ errors[715]=msn_permstring("Not expected"); -+ errors[717]=msn_permstring("Bad friend file on server"); -+ errors[911]=msn_permstring("Authentication failed. Check that you typed your username and password correctly."); -+ errors[913]=msn_permstring("This action is not allowed while you are offline"); -+ errors[920]=msn_permstring("This server is not accepting new users"); -+ -+ msn_add_to_llist(connections, conn); -+} -+ -+void msn_show_verbose_error(msnconn * conn, int errcode) -+{ -+ snprintf(buf, 1024, "An error has occurred while communicating with the MSN Messenger server: %s (code %d)", errors[errcode], errcode); -+ ext_show_error(conn, buf); -+} -+ -+void msn_invite_user(msnconn * conn, char * rcpt) -+{ -+ sprintf(buf, "CAL %d %s\r\n", next_trid++, rcpt); -+ write(conn->sock, buf, strlen(buf)); -+} -+ -+void msn_send_IM(msnconn * conn, const char * rcpt, const char * s) -+{ -+ static char header[]="MIME-Version: 1.0\r\nContent-Type: text/plain; charset=UTF-8\r\n\r\n"; -+ message * msg=new message; -+ msg->body=s; -+ msg->header=msn_permstring(header); -+ msg->font=NULL; -+ msg->colour=NULL; -+ msn_send_IM(conn, rcpt, msg); -+ -+ msg->body=NULL; // don't delete s -+ delete msg; -+} -+ -+void msn_send_IM(msnconn * conn, const char * rcpt, message * msg) -+{ -+ char header[1024]; -+ -+ if(conn->type==CONN_NS) -+ { -+ llist * list; -+ -+ list=connections; -+ while(1) -+ { -+ msnconn * c; -+ llist * users; -+ -+ if(list==NULL) { break ; } -+ c=(msnconn *)list->data; -+ if(c->type==CONN_NS) { list=list->next; continue; } -+ users=c->users; -+ // the below sends a message into this session if the only other participant is -+ // the user we want to talk to -+ if(users!=NULL && users->next==NULL && !strcmp(((char_data *)users->data)->c, rcpt)) -+ { -+ msn_send_IM(c, rcpt, msg); -+ return; -+ } -+ -+ list=list->next; -+ } -+ // otherwise, just connect -+ msn_request_SB(conn, rcpt, msg, NULL); -+ return; -+ } -+ -+ if(msg->header==NULL) -+ { -+ if(msg->font==NULL) -+ { -+ sprintf(header, "MIME-Version: 1.0\r\nContent-Type: %s\r\n\r\n", (msg->content==NULL)?("text/plain; charset=UTF-8"):(msg->content)); -+ } else { -+ char * fontname=msn_encode_URL(msg->font); -+ char ef[2] = {'\0', '\0'}; -+ if(msg->bold) { ef[0]='B'; } -+ if(msg->underline) { ef[0]='U'; } -+ -+ sprintf(header, "MIME-Version: 1.0\r\nContent-Type: %s\r\nX-MMS-IM-Format: FN=%s; EF=%s; CO=%s; CS=0; PF=%d\r\n\r\n", -+ (msg->content==NULL)?("text/plain"):(msg->content), fontname, ef, msg->colour, msg->fontsize); -+ -+ delete fontname; -+ } -+ } else { -+ strcpy(header, msg->header); -+ } -+ -+ -+ sprintf(buf, "MSG %d N %d\r\n%s", next_trid, strlen(header)+strlen(msg->body), header); -+ write(conn->sock, buf, strlen(buf)); -+ write(conn->sock, msg->body, strlen(msg->body)); -+ next_trid++; -+} -+ -+void msn_send_typing(msnconn * conn) -+{ -+ char header[]="MIME-Version: 1.0\r\nContent-Type: text/x-msmsgscontrol\r\nTypingUser: "; -+ char * username=((authdata_SB *)conn->auth)->username; -+ -+ sprintf(buf, "MSG %d U %d\r\n%s%s\r\n\r\n\r\n", -+ next_trid++, strlen(header)+strlen(username)+6, header, username); -+ -+ write(conn->sock, buf, strlen(buf)); -+} -+ -+void msn_add_to_list(msnconn * conn, const char * lst, const char * username) -+{ -+ sprintf(buf, "ADD %d %s %s %s\r\n", next_trid++, lst, username, username); -+ write(conn->sock, buf, strlen(buf)); -+} -+ -+void msn_del_from_list(msnconn * conn, const char * lst, const char * username) -+{ -+ sprintf(buf, "REM %d %s %s\r\n", next_trid++, lst, username); -+ write(conn->sock, buf, strlen(buf)); -+} -+ -+void msn_set_GTC(msnconn * conn, char c) -+{ -+ sprintf(buf, "GTC %d %c\r\n", next_trid++, c); -+ write(conn->sock, buf, strlen(buf)); -+} -+ -+void msn_set_BLP(msnconn * conn, char c) -+{ -+ sprintf(buf, "BLP %d %cL\r\n", next_trid++, c); -+ write(conn->sock, buf, strlen(buf)); -+} -+ -+void msn_set_friendlyname(msnconn * conn, const char * friendlyname) -+{ -+ char * username; -+ -+ username=((authdata_NS *)conn->auth)->username; -+ sprintf(buf, "REA %d %s %s\r\n", next_trid++, username, msn_encode_URL(friendlyname)); -+ write(conn->sock, buf, strlen(buf)); -+} -+ -+void msn_get_list_info( msnconn *conn, int nargs, char **args ) -+{ -+ char buf[ 1000 ]; -+ syncinfo *info; -+ -+ info = conn->sync_info; -+ -+ if ( NULL == info ) -+ { -+ ext_debug("error! : conn->sync_info == NULL in msn_get_list_info"); -+ return ; -+ } -+ -+ if ( !nargs ) -+ return ; -+ -+ if ( !strcmp( args[ 0 ], "SYN" ) ) -+ { -+ if ( info->serial == atoi( args[ 2 ] ) ) -+ { -+ delete info; -+ info = NULL; -+ ext_got_info(conn, NULL); -+ return; -+ } -+ -+ info->serial = atoi( args[ 2 ] ); -+ ext_latest_serial( conn, info->serial ); -+ info->nContacts = atoi( args[ 3 ] ); -+ info->nGroups = atoi( args[ 4 ] ); -+ return ; -+ } -+ -+ if ( !strcmp( args[ 0 ], "GTC" ) ) -+ { -+ info->gtc = args[ 1 ][ 0 ]; -+ info->complete |= COMPLETE_GTC; -+ ext_got_GTC( conn, args[ 1 ][ 0 ] ); -+ } -+ -+ if ( !strcmp( args[ 0 ], "BLP" ) ) -+ { -+ info->blp = args[ 1 ][0]; -+ info->complete |= COMPLETE_BLP; -+ ext_got_BLP( conn, args[ 1 ][ 0 ] ); -+ } -+ -+ if ( !strcmp( args[ 0 ], "PRP" ) ) -+ { -+ // We just eat PRP-codes. -+ return ; -+ } -+ -+ if ( !strcmp( args[ 0 ], "LSG" ) ) -+ { -+ if ( !info->nContacts ) -+ { -+ msn_check_rl(conn, info); -+ ext_got_info(conn, info); -+ delete info; -+ conn->sync = 0; -+ } -+ -+ // Just eat 'm. -+ return ; -+ } -+ -+ if ( !strcmp( args[ 0 ], "BPR" ) ) -+ { -+ if ( !info->nFound ) { -+ ext_debug("MSNp8: error: got BPR without contact"); -+ } else { -+ llist *ll = info->fl; -+ -+ while( ll ) { -+ userdata * ud = (userdata *) ll->data; -+ -+ if( !strcmp( ud->username, info->last_user_handled ) ) -+ { -+ phonedata * newphone=new phonedata(); -+ newphone->title=msn_permstring(args[1]); -+ newphone->number=msn_decode_URL(msn_permstring(args[2])); -+ msn_add_to_llist( ud->phone, newphone ); -+ break; -+ } -+ -+ ll = ll->next; -+ } -+ } -+ -+ return ; -+ } -+ -+ // 0 1 2 -+ // LST email@address.com Friendly%20Nickname w x,y,z -+ if ( !strcmp( args[ 0 ], "LST" ) ) -+ { -+ // XXX - Todo: see if the user is really on our FL -+ // list and handle the BL list. -+ -+ userdata *newuser_fl = new userdata(); -+ newuser_fl->username = msn_permstring( args[ 1 ] ); -+ newuser_fl->friendlyname = msn_decode_URL( msn_permstring( args[ 1 ] ) ); -+ -+ info->last_user_handled = newuser_fl->username; -+ -+ msn_add_to_llist( info->fl, newuser_fl ); -+ -+ userdata *newuser_rl = new userdata(); -+ newuser_rl->username = msn_permstring( args[ 1 ] ); -+ newuser_rl->friendlyname = msn_decode_URL( msn_permstring( args[ 1 ] ) ); -+ -+ msn_add_to_llist( info->rl, newuser_rl ); -+ -+ userdata *newuser_al = new userdata(); -+ newuser_al->username = msn_permstring( args[ 1 ] ); -+ newuser_al->friendlyname = msn_decode_URL( msn_permstring( args[ 1 ] ) ); -+ -+ msn_add_to_llist( info->al, newuser_al ); -+ -+ info->nFound++; -+ -+ if ( info->nFound == info->nContacts ) -+ { -+ msn_check_rl(conn, info); -+ ext_got_info(conn, info); -+ delete info; -+ conn->sync = 0; -+ } -+ } -+} -+ -+void msn_sync_lists(msnconn * conn, int version) -+{ -+ syncinfo * info=new syncinfo; -+ -+ info->serial=version; -+ -+ sprintf(buf, "SYN %d %d\r\n", next_trid, version); -+ write(conn->sock, buf, strlen(buf)); -+ -+ conn->sync = 1; -+ conn->sync_info = info; -+ -+ next_trid++; -+} -+ -+void msn_check_rl(msnconn * conn, syncinfo * info) -+{ -+ llist * flist; // FL -+ llist * olist; // other list -+ userdata * fcontact; -+ userdata * ocontact; -+ -+ int is_on_list; -+ int a=0; -+ -+ flist=info->rl; -+ -+ while(flist!=NULL) -+ { -+ is_on_list=0; -+ -+ fcontact=(userdata *)flist->data; -+ -+ a=0; -+ for(olist=info->al; a<2; olist=info->bl, a++) -+ { -+ while(olist!=NULL) -+ { -+ ocontact=(userdata *)olist->data; -+ if(!strcmp(ocontact->username, fcontact->username)) -+ { -+ is_on_list=1; -+ break; -+ } -+ olist=olist->next; -+ } -+ if(is_on_list) { break; } // avoid a second loop if unnecessary -+ } -+ -+ if(!is_on_list) -+ { -+ ext_new_RL_entry(conn, fcontact->username, fcontact->friendlyname); -+ } -+ -+ flist=flist->next; -+ } -+} -+ -+void msn_new_SB(msnconn * nsconn, void * tag) -+{ -+ msn_request_SB(nsconn, NULL, NULL, tag); -+} -+ -+void msn_request_SB(msnconn * nsconn, const char * rcpt, message * msg, void * tag) -+{ -+ conninfo_SB * info=new conninfo_SB; -+ -+ info->auth=new authdata_SB; -+ info->auth->username=msn_permstring(((authdata_NS *)nsconn->auth)->username); -+ info->auth->rcpt=msn_permstring(rcpt); -+ if(msg==NULL) -+ { -+ info->auth->msg=NULL; -+ } else { -+ info->auth->msg=new message; -+ info->auth->msg->header=msn_permstring(msg->header); -+ info->auth->msg->body=msn_permstring(msg->body); -+ info->auth->msg->font=msn_permstring(msg->font); -+ info->auth->msg->colour=msn_permstring(msg->colour); -+ info->auth->msg->content=msn_permstring(msg->content); -+ info->auth->msg->bold=msg->bold; -+ info->auth->msg->italic=msg->italic; -+ info->auth->msg->underline=msg->underline; -+ } -+ -+ info->auth->tag=tag; -+ -+ sprintf(buf, "XFR %d SB\r\n", next_trid); -+ write(nsconn->sock, buf, strlen(buf)); -+ -+ msn_add_callback(nsconn, msn_SBconn_2, next_trid, info); -+ next_trid++; -+} -+ -+void msn_SBconn_2(msnconn * conn, int trid, char ** args, int numargs, callback_data * data) -+{ -+ conninfo_SB * info=(conninfo_SB *)data; -+ -+ msn_del_callback(conn, trid); -+ -+ if(strcmp(args[0], "XFR")) -+ { -+ msn_show_verbose_error(conn, atoi(args[0])); -+ delete info; -+ return; -+ } -+ -+ info->auth->cookie=msn_permstring(args[5]); -+ info->auth->sessionID=NULL; -+ -+ msnconn * newconn=new msnconn; -+ -+ newconn->auth=info->auth; -+ newconn->type=CONN_SB; -+ newconn->ready=0; -+ -+ msn_add_to_llist(connections, newconn); -+ -+ int port=1863; -+ char * c; -+ -+ if((c=strstr(args[3], ":"))!=NULL) -+ { -+ *c='\0'; -+ c++; -+ port=atoi(c); -+ } -+ -+ delete info; -+ -+ msn_connect(newconn, args[3], port); -+} -+ -+void msn_SBconn_3(msnconn * conn, int trid, char ** args, int numargs, callback_data * data) -+{ -+ authdata_SB * auth=(authdata_SB *)conn->auth; -+ -+ msn_del_callback(conn, trid); -+ -+ if(strcmp(args[2], "OK")) -+ { -+ msn_show_verbose_error(conn, atoi(args[0])); -+ msn_clean_up(conn); -+ return; -+ } -+ -+ if(auth->rcpt==NULL) // they're requesting the SB session the proper way -+ { -+ ext_got_SB(conn, auth->tag); -+ } else { -+ sprintf(buf, "CAL %d %s\r\n", next_trid, auth->rcpt); -+ write(conn->sock, buf, strlen(buf)); -+ -+ delete auth->rcpt; -+ auth->rcpt=NULL; -+ -+ next_trid++; -+ } -+ conn->ready=1; -+ ext_new_connection(conn); -+} -+ -+void msn_handle_incoming(int sock, int readable, int writable) -+{ -+ // First, we find which msnconn this socket belongs to -+ -+ llist * list; -+ msnconn * conn; -+ callback * call; -+ -+ char ** args; -+ int numargs; -+ int trid; -+ -+ list=connections; -+ -+ if(list==NULL) { return; } -+ -+ while(1) -+ { -+ conn=(msnconn *)list->data; -+ if(conn->sock==sock) -+ { break; } -+ list=list->next; -+ if(list==NULL) -+ { -+ #ifdef MSNDEBUG -+ printf("Network traffic not for us\n"); -+ #endif -+ return; -+ } // not for us -+ } -+ -+ // first, siphon off any file transfer traffic to the special handler -+ if(conn->type==CONN_FTP) -+ { msn_handle_filetrans_incoming(conn, readable, writable); return; } -+ -+ // OK, it's for us. If it's readable, parse it, then deliver it to the appropriate handler -+ -+ if(!readable) { return; } -+ -+ args=msn_read_line(sock, &numargs); -+ if ( !numargs ) -+ { -+ ext_debug("msn: error: no arguments for this data"); -+ return ; -+ } -+ -+ if(args==NULL) -+ { -+ if(errno!=0) -+ { msn_clean_up(conn); } -+ return; -+ } -+ -+ if(!strcmp(args[0], "XFR") && !strcmp(args[2], "NS")) -+ { -+ delete conn->callbacks; // delete the callback data -+ conn->callbacks=NULL; -+ -+ ext_unregister_sock(conn->sock); -+ close(conn->sock); -+ -+ char * c; -+ int port=1863; -+ -+ if((c=strstr(args[3], ":"))!=NULL) -+ { -+ *c='\0'; -+ c++; -+ port=atoi(c); -+ } -+ -+ msn_connect(conn, args[3], port); -+ return; -+ } -+ -+ if(!strcmp(args[0], "RNG")) -+ { -+ msn_handle_RNG(conn, args, numargs); -+ return; -+ } -+ -+ trid=atoi(args[1]); -+ -+ if ( conn->sync ) -+ { -+ // connection is synching. is this a SYNC-relation instruction? -+ if ( !strcmp( args[ 0 ], "SYN" ) || !strcmp( args[ 0 ], "GTC") || !strcmp( args[ 0 ], "BLP" ) || -+ !strcmp( args[ 0 ], "PRP" ) || !strcmp( args[ 0 ], "LSG") || !strcmp( args[ 0 ], "BPR" ) || -+ !strcmp( args[ 0 ], "LST" ) ) -+ { -+ msn_get_list_info( conn, numargs, args ); -+ delete args[0]; -+ delete args; -+ return ; -+ } -+ -+ // else: it's a normal message -+ } -+ -+ list=conn->callbacks; -+ -+ if(list!=NULL && trid>0) -+ { -+ while(1) -+ { -+ call=(callback *)list->data; -+ if(call->trid==trid) -+ { -+ (call->func)(conn, trid, args, numargs, call->data); -+ delete args[0]; -+ delete args; -+ return; -+ } -+ list=list->next; -+ if(list==NULL) { break; } // defaults -+ } -+ } -+ -+ msn_handle_default(conn, args, numargs); -+ -+ delete args[0]; -+ delete args; -+} -+ -+void msn_handle_close(int sock) -+{ -+ // First, we find which msnconn this socket belongs to -+ -+ llist * list; -+ msnconn * conn; -+ -+ list=connections; -+ -+ if(list==NULL) { return; } -+ -+ while(1) -+ { -+ conn=(msnconn *)list->data; -+ if(conn->sock==sock) -+ { break; } -+ list=list->next; -+ if(list==NULL) -+ { -+ #ifdef MSNDEBUG -+ printf("Socket close not for us\n"); -+ #endif -+ return; } // not for us -+ } -+ -+ msn_clean_up(conn); -+} -+ -+void msn_handle_default(msnconn * conn, char ** args, int numargs) -+{ -+ -+ // Switchboard messages -+ -+ if(!strcmp(args[0], "MSG")) -+ { -+ msn_handle_MSG(conn, args, numargs); -+ return; -+ } -+ -+ if(!strcmp(args[0], "NAK")) -+ { -+ msn_handle_NAK(conn, args, numargs); -+ return; -+ } -+ -+ if(!strcmp(args[0], "JOI")) -+ { -+ msn_handle_JOI(conn, args, numargs); -+ return; -+ } -+ -+ if(!strcmp(args[0], "BYE")) -+ { -+ msn_handle_BYE(conn, args, numargs); -+ return; -+ } -+ -+ // Notification server messages -+ -+ if(!strcmp(args[0], "NLN") || !strcmp(args[0], "ILN") || !strcmp(args[0], "FLN")) -+ { -+ msn_handle_statechange(conn, args, numargs); -+ return; -+ } -+ -+ if(!strcmp(args[0], "CHG")) -+ { -+ ext_changed_state(conn, args[2]); -+ return; -+ } -+ -+ if(!strcmp(args[0], "ADD")) -+ { -+ msn_handle_ADD(conn, args, numargs); -+ return; -+ } -+ -+ if(!strcmp(args[0], "REM")) -+ { -+ msn_handle_REM(conn, args, numargs); -+ return; -+ } -+ -+ if(!strcmp(args[0], "BLP")) -+ { -+ msn_handle_BLP(conn, args, numargs); -+ return; -+ } -+ -+ if(!strcmp(args[0], "GTC")) -+ { -+ msn_handle_GTC(conn, args, numargs); -+ return; -+ } -+ -+ if(!strcmp(args[0], "REA")) -+ { -+ msn_handle_REA(conn, args, numargs); -+ return; -+ } -+ -+ if(!strcmp(args[0], "CHL")) -+ { -+ msn_handle_CHL(conn, args, numargs); -+ return; -+ } -+ -+ if(!strcmp(args[0], "OUT")) -+ { -+ msn_handle_OUT(conn, args, numargs); -+ return; -+ } -+ -+ if(isdigit(args[0][0])) -+ { -+ msn_show_verbose_error(conn, atoi(args[0])); -+ return; -+ } -+ -+ #ifdef MSNDEBUG -+ printf("Don't know what to do with this one, ignoring it:\n"); // DEBUG -+ for(int a=0; a<numargs; a++) -+ { -+ printf("%s ", args[a]); -+ } -+ printf("\n"); -+ #endif -+} -+ -+void msn_handle_MSG(msnconn * conn, char ** args, int numargs) -+{ -+ int msglen; -+ char * msg; -+ char * mime; -+ char * body; -+ char * tmp; -+ -+ msglen=atoi(args[3]); -+ -+ msg=new char[msglen+1]; -+ read(conn->sock, msg, msglen); -+ msg[msglen]='\0'; -+ -+ mime=msg; -+ body=strstr(msg, "\r\n\r\n"); -+ if(body!=NULL) { body[2]='\0'; /* finish the MIME string */ body+=4; } -+ -+ // the below is a kludge until I remember the header name for TypingUser -+ if((strstr(mime, "TypingUser")!=NULL) || (strstr(mime, "TypeingUser")!=NULL)) -+ { // the second of the above two is a workaround for a spelling bug in the Jabber MSN transport -+ ext_typing_user(conn, args[1], msn_decode_URL(args[2])); -+ delete msg; -+ return; -+ } -+ -+ /* Warning - the code below was written at what my body clock insisted was past midnight, -+ jetlagged, on a foreign road, because I had nothing better to do. I would like to please -+ call to your attention the no-warranty clause in the GPL.... :^) */ -+ -+ char * content; // content-type -+ -+ content=msn_find_in_mime(mime, "Content-Type"); -+ if(content==NULL) { ext_show_error(conn, "MSG with no Content-type set"); delete msg; return; } -+ #ifdef MSNDEBUG -+ printf("Content type: \"%s\"\n", content); -+ #endif -+ if((tmp=strstr(content, "; charset"))!=NULL) { *tmp='\0'; } -+ -+ if(!strcmp(content, "text/x-msmsgsprofile")) -+ { -+ ext_debug("MSNp8: got x-msmsgsprofile"); -+ } else -+ if(!strcmp(content, "text/plain")) -+ { -+ message * msg=new message; -+ msg->header=mime; -+ msg->body=body; -+ msg->font=NULL; -+ msg->content=msn_find_in_mime(mime, "Content-Type"); // include any "charset=" I've chopped off -+ -+ ext_got_IM(conn, args[1], msn_decode_URL(args[2]), msg); -+ } else if(!strcmp(content, "text/x-msmsgsinitialemailnotification")) { -+ char * unread_ibc; -+ char * unread_folc; -+ int unread_ib=0, unread_fol=0; -+ -+ unread_ibc=msn_find_in_mime(body, "Inbox-Unread"); -+ unread_folc=msn_find_in_mime(body, "Folders-Unread"); -+ if(unread_ibc!=NULL) { unread_ib=atoi(unread_ibc); delete unread_ibc; } -+ if(unread_folc!=NULL) { unread_fol=atoi(unread_folc); delete unread_folc; } -+ -+ ext_initial_email(conn, unread_ib, unread_fol); -+ } else if(!strcmp(content, "text/x-msmsgsemailnotification")) { -+ char * from=msn_find_in_mime(body, "From-Addr"); -+ char * subject=msn_find_in_mime(body, "Subject"); -+ -+ ext_new_mail_arrived(conn, from, subject); -+ -+ delete from; -+ delete subject; -+ } else if(!strcmp(content, "text/x-msmsgsinvite")) { -+ msn_handle_invite(conn, args[1], msn_decode_URL(args[2]), mime, body); -+ } else { -+ #ifdef MSNDEBUG -+ printf("Unknown content-type: \"%s\"\n", content); -+ #endif -+ } -+ delete content; -+ delete msg; -+} -+ -+char * msn_find_in_mime(char * mime, char * header) -+{ -+ char * retval; -+ int pos; -+ -+ if(!strncmp(mime, header, strlen(header))) -+ { -+ retval=mime; -+ } else { -+ char * tmp=new char[strlen(header)+3]; -+ strcpy(tmp, "\r\n"); -+ strcat(tmp, header); -+ retval=strstr(mime, header); -+ if(retval==NULL) { return NULL; } -+ retval+=2; -+ delete tmp; -+ } -+ -+ while(*retval!=':') { retval++; } -+ retval++; // pass the colon -+ while(isspace(*retval)) { retval++; } // position at start of value -+ -+ pos=0; -+ while(retval[pos]!='\0') -+ { -+ if(retval[pos]=='\r') -+ { -+ char * tmp; -+ retval[pos]='\0'; -+ tmp=msn_permstring(retval); -+ retval[pos]='\r'; -+ return tmp; -+ } -+ pos++; -+ } -+ #ifdef MSNDEBUG -+ printf("Invalid MIME header - WTF?!\n"); -+ #endif -+ return NULL; -+} -+ -+void msn_handle_invite(msnconn * conn, char * from, char * friendly, char * mime, char * body) -+{ -+ char * command=msn_find_in_mime(body, "Invitation-Command"); -+ char * cookie=msn_find_in_mime(body, "Invitation-Cookie"); -+ int inv_is_out=0; -+ invitation * inv=NULL; -+ llist * l; -+ -+ l=conn->invitations_in; -+ while(1) -+ { -+ if(l==NULL) -+ { if(!inv_is_out) { l=conn->invitations_out; inv_is_out=1; continue; } else { break; } } -+ inv=(invitation *)l->data; -+ #ifdef MSNDEBUG -+ printf("invitation: checking %s against %s\n", inv->cookie, cookie); -+ #endif -+ if(!strcmp(inv->cookie, cookie)) -+ { break ; } -+ inv=NULL; -+ l=l->next; -+ } -+ -+ -+ if(!strcmp(command, "INVITE")) -+ { -+ msn_handle_new_invite(conn, from, friendly, mime, body); -+ } else if(!strcmp(command, "ACCEPT")) { -+ if(inv==NULL) -+ { -+ #ifdef MSNDEBUG -+ printf("Very odd - just got an ACCEPT out of mid-air...\n"); -+ #endif -+ delete command; return; } -+ -+ if(!inv_is_out && inv->app==APP_FTP) -+ { -+ #ifdef MSNDEBUG -+ printf("Downloading file from remote host..\n"); -+ #endif -+ msn_recv_file((invitation_ftp *)inv, body); -+ } else if(inv_is_out && inv->app==APP_FTP) { -+ msn_send_file((invitation_ftp *)inv, body); -+ } -+ } else if(!strcmp(command, "CANCEL") || !strcmp(command, "REJECT")) { -+ if(inv==NULL) -+ { -+ #ifdef MSNDEBUG -+ printf("Very odd - just got a CANCEL/REJECT out of mid-air...\n"); -+ #endif -+ delete command; -+ return; -+ } -+ if(inv->app==APP_FTP) -+ { -+ ext_filetrans_failed((invitation_ftp *)inv, 0, "Cancelled by remote user"); -+ if(inv_is_out) -+ { -+ msn_del_from_llist(conn->invitations_out, inv); -+ } else { -+ msn_del_from_llist(conn->invitations_in, inv); -+ } -+ delete inv; -+ } -+ } else { -+ #ifdef MSNDEBUG -+ printf("Argh, don't support %s yet!\n", command); -+ #endif -+ } -+ -+ delete command; -+} -+ -+void msn_handle_new_invite(msnconn * conn, char * from, char * friendlyname, char * mime, char * body) -+{ -+ -+ char * appname; -+ -+ char * tmp1=NULL; -+ char * tmp2=NULL; -+ -+ appname=msn_find_in_mime(body, "Application-Name"); -+ invitation * invg=NULL; -+ -+ if((tmp1=msn_find_in_mime (body, "Application-File")) != NULL -+ && (tmp2=msn_find_in_mime (body, "Application-FileSize")) != NULL) -+ { -+ invitation_ftp * inv=new invitation_ftp; -+ invg=inv; -+ invg->app=APP_FTP; -+ invg->other_user=msn_permstring(from); -+ invg->cookie=msn_find_in_mime(body, "Invitation-Cookie"); -+ invg->conn=conn; -+ inv->filename=tmp1; -+ tmp1=NULL; -+ inv->filesize=atol(tmp2); -+ -+ ext_filetrans_invite(conn, from, friendlyname, inv); -+ } -+ if(tmp1!=NULL) { delete tmp1; } -+ if(tmp2!=NULL) { delete tmp2; } -+ -+ delete appname; -+ -+ if(invg==NULL) -+ { -+ ext_show_error(conn, "Unknown invitation type!"); -+ return; -+ } -+ -+ msn_add_to_llist(conn->invitations_in, invg); -+} -+ -+void msn_recv_file(invitation_ftp * inv, char * msg_body) -+{ -+ char * cookie=msn_find_in_mime(msg_body, "AuthCookie"); -+ char * remote=msn_find_in_mime(msg_body, "IP-Address"); -+ char * port_c=msn_find_in_mime(msg_body, "Port"); -+ int port; -+ -+ if(cookie==NULL || remote==NULL || port_c==NULL) -+ { -+ ext_filetrans_failed(inv, 0, "Missing parameters"); -+ msn_del_from_llist(inv->conn->invitations_in, inv); -+ if(cookie!=NULL) { delete cookie; } -+ if(remote!=NULL) { delete remote; } -+ if(port_c!=NULL) { delete port_c; } -+ delete inv; -+ } -+ -+ port=atoi(port_c); -+ delete port_c; -+ -+ msnconn * conn=new msnconn; -+ conn->type=CONN_FTP; -+ -+ sprintf(buf, "Connecting to %s:%d\n", remote, port); -+ ext_filetrans_progress(inv, buf, 0, 0); -+ -+ conn->sock=ext_connect_socket(remote, port); -+ delete remote; -+ -+ if(conn->sock<0) -+ { -+ ext_filetrans_failed(inv, errno, strerror(errno)); -+ msn_del_from_llist(inv->conn->invitations_in, inv); -+ delete cookie; -+ delete inv; -+ return; -+ } -+ -+ ext_register_sock(conn->sock, 1, 0); -+ -+ ext_filetrans_progress(inv, "Connected", 0, 0); -+ -+ authdata_FTP * auth=new authdata_FTP; -+ auth->cookie=msn_permstring(cookie); -+ delete cookie; -+ auth->inv=inv; -+ auth->username=msn_permstring(((authdata_SB *)inv->conn->auth)->username); -+ auth->direction=MSNFTP_RECV; -+ -+ conn->auth=auth; -+ -+ msn_add_to_llist(connections, conn); -+ -+ write(conn->sock, "VER MSNFTP\r\n", strlen("VER MSNFTP\r\n")); -+} -+ -+void msn_handle_filetrans_incoming(msnconn * conn, int readable, int writable) -+{ -+ authdata_FTP * auth=(authdata_FTP *)conn->auth; -+ -+ #ifdef MSNDEBUG -+ printf("Incoming from file sender\n"); -+ #endif -+ -+ if(auth->direction==MSNFTP_RECV) -+ { -+ if(!readable) { return; } // not interested... -+ -+ if(auth->fd==-1) -+ { -+ char ** args; -+ int numargs; -+ -+ args=msn_read_line(conn->sock, &numargs); -+ -+ if(args==NULL) { msn_clean_up(conn); return; } -+ -+ if(!strcmp(args[0], "VER")) -+ { -+ sprintf(buf, "USR %s %s\r\n", auth->username, auth->cookie); -+ write(conn->sock, buf, strlen(buf)); -+ ext_filetrans_progress(auth->inv, "Negotiating", 0, 0); -+ } else if (!strcmp(args[0], "FIL")) { -+ auth->fd=open(auth->inv->filename, O_WRONLY|O_CREAT|O_TRUNC, S_IRWXU); -+ if(auth->fd<0) -+ { -+ ext_filetrans_failed(auth->inv, errno, strerror(errno)); -+ msn_del_from_llist(conn->invitations_in, auth->inv); -+ msn_clean_up(conn); -+ delete args[0]; -+ delete args; -+ return; -+ } -+ -+ write(conn->sock, "TFR\r\n", strlen("TFR\r\n")); -+ } -+ delete args[0]; -+ delete args; -+ auth->num_ignore=3; -+ } -+ -+ fd_set readfd; -+ struct timeval timeout={0, 0}; -+ FD_ZERO(&readfd); -+ FD_SET(conn->sock, &readfd); -+ char c; -+ -+ while(select(conn->sock+1, &readfd, NULL, NULL, &timeout)==1) -+ { -+ if(read(conn->sock, &c, 1)<1) -+ { -+ msn_clean_up(conn); -+ return; -+ } -+ if(auth->num_ignore>0) -+ { -+ auth->num_ignore--; -+ continue; -+ } -+ auth->bytes_done++; -+ write(auth->fd, &c, 1); -+ if(auth->bytes_done==auth->inv->filesize) -+ { -+ write(conn->sock, "BYE 16777989\r\n", strlen("BYE 16777989")); -+ ext_filetrans_success(auth->inv); -+ -+ msn_del_from_llist(auth->inv->conn->invitations_in, auth->inv); -+ msn_clean_up(conn); -+ return; -+ } -+ if(auth->bytes_done%2045==0) { auth->num_ignore=3; } -+ } -+ -+ ext_filetrans_progress(auth->inv, "Receiving file", auth->bytes_done, auth->inv->filesize); -+ } else { -+ // We are sending -+ -+ if(!auth->connected) // we have not accept()ed yet, but the read/writability means there's one waiting -+ { -+ int s; -+ -+ if((s=accept(conn->sock, NULL, NULL))<0) -+ { -+ #ifdef MSNDEBUG -+ perror("Could not accept()\n"); -+ #endif -+ ext_filetrans_failed(auth->inv, errno, strerror(errno)); -+ msn_del_from_llist(auth->inv->conn->invitations_out, auth->inv); -+ msn_clean_up(conn); // that will nuke both auth and inv -+ return; -+ } -+ -+ ext_unregister_sock(conn->sock); -+ close(conn->sock); -+ -+ conn->sock=s; -+ ext_register_sock(conn->sock, 1, 1); -+ -+ ext_filetrans_progress(auth->inv, "Connected", 0, 0); -+ -+ auth->connected=1; -+ } else { -+ // we know it's connected already -+ -+ if(auth->fd==-1) -+ { -+ char ** args; -+ int numargs; -+ -+ if(!readable) { return; } // not interested... -+ -+ if((args=msn_read_line(conn->sock, &numargs))==NULL) -+ { -+ #ifdef MSNDEBUG -+ perror("read() failed"); -+ #endif -+ ext_filetrans_failed(auth->inv, errno, strerror(errno)); -+ msn_del_from_llist(auth->inv->conn->invitations_out, auth->inv); -+ msn_clean_up(conn); -+ return; -+ } -+ -+ if(!strcmp(args[0], "VER")) -+ { -+ sprintf(buf, "VER MSNFTP\r\n"); -+ write(conn->sock, buf, strlen(buf)); -+ ext_filetrans_progress(auth->inv, "Negotiating", 0, 0); -+ } -+ -+ if(!strcmp(args[0], "USR")) -+ { -+ if(strcmp(args[2], auth->cookie)) // if they DIFFER -+ { -+ ext_filetrans_failed(auth->inv, errno, strerror(errno)); -+ msn_del_from_llist(auth->inv->conn->invitations_out, auth->inv); -+ msn_clean_up(conn); -+ return; -+ } -+ -+ sprintf(buf, "FIL %lu\r\n", auth->inv->filesize); -+ write(conn->sock, buf, strlen(buf)); -+ } -+ -+ if(!strcmp(args[0], "TFR")) -+ { -+ // you asked for it, go to data-dump mode -+ auth->fd=open(auth->inv->filename, O_RDONLY); -+ if(auth->fd<0) -+ { -+ ext_filetrans_failed(auth->inv, errno, "Could not open file for reading"); -+ msn_del_from_llist(auth->inv->conn->invitations_out, auth->inv); -+ msn_clean_up(conn); -+ return; -+ } -+ -+ // OK, now we lose control, but the next round of the polling loop will -+ // say that the socket is writable, and then the fun starts... -+ ext_filetrans_progress(auth->inv, "Sending data", 0, 0); -+ } -+ } else { -+ // just pumping data now -+ -+ fd_set writefd; -+ FD_ZERO(&writefd); -+ FD_SET(conn->sock, &writefd); -+ struct timeval tout={0, 0}; -+ char c; -+ -+ while(select(conn->sock+1, NULL, &writefd, NULL, &tout)==1) -+ { -+ if(auth->bytes_done%2045==0) -+ { -+ unsigned char check[3]; -+ int to_go=(auth->inv->filesize-auth->bytes_done>2045)?(2045):(auth->inv->filesize-auth->bytes_done); -+ -+ -+ check[0]='\0'; -+ check[1]=to_go%256; -+ check[2]=to_go/256; -+ write(conn->sock, check, 3); -+ } -+ -+ if(read(auth->fd, &c, 1)<1) -+ { -+ ext_filetrans_failed(auth->inv, errno, strerror(errno)); -+ msn_del_from_llist(auth->inv->conn->invitations_out, auth->inv); -+ msn_clean_up(conn); -+ return; -+ } -+ -+ auth->bytes_done++; -+ write(conn->sock, &c, 1); -+ -+ if(auth->bytes_done==auth->inv->filesize) -+ { -+ ext_filetrans_success(auth->inv); -+ -+ msn_del_from_llist(auth->inv->conn->invitations_in, auth->inv); -+ msn_clean_up(conn); -+ return; -+ } -+ } -+ -+ ext_filetrans_progress(auth->inv, "Sending file", auth->bytes_done, auth->inv->filesize); -+ } -+ } -+ } -+} -+ -+void msn_send_file(invitation_ftp * inv, char * msg_body) -+{ -+ int port=6891; -+ msnconn * conn=new msnconn; -+ -+ ext_filetrans_progress(inv, "Sending IP address", 0, 0); -+ -+ conn->type=CONN_FTP; -+ -+ while((conn->sock=ext_server_socket(port))<0) -+ { -+ port++; -+ if(port>6911) -+ { -+ ext_filetrans_failed(inv, errno, strerror(errno)); -+ msn_del_from_llist(inv->conn->invitations_out, inv); -+ delete inv; -+ delete conn; -+ return; -+ } -+ } -+ -+ ext_register_sock(conn->sock, 1, 0); -+ -+ msn_add_to_llist(connections, conn); -+ -+ authdata_FTP * auth=new authdata_FTP; -+ -+ conn->auth=auth; -+ -+ auth->cookie=new char[64]; -+ sprintf(auth->cookie, "%d", rand()); -+ -+ auth->inv=inv; -+ auth->direction=MSNFTP_SEND; -+ -+ auth->connected=0; -+ -+ message * msg=new message; -+ msg->content=msn_permstring("text/x-msmsgsinvite; charset=UTF-8"); -+ -+ -+ sprintf(buf, "Invitation-Command: ACCEPT\r\nInvitation-Cookie: %s\r\nIP-Address: %s\r\nPort: %d\r\nAuthCookie: %s\r\nLaunch-Application: FALSE\r\nRequest-Data: IP-Address:\r\n\r\n", -+ inv->cookie, ext_get_IP(), port, auth->cookie); -+ -+ msg->body=msn_permstring(buf); -+ -+ msn_send_IM(inv->conn, NULL, msg); -+ -+ delete msg; -+} -+ -+void msn_handle_NAK(msnconn * conn, char ** args, int numargs) -+{ -+ ext_IM_failed(conn); -+} -+ -+void msn_handle_JOI(msnconn * conn, char ** args, int numargs) -+{ -+ authdata_SB * auth; -+ -+ auth=(authdata_SB *)conn->auth; -+ -+ if(!strcmp(args[1], auth->username)) { return; } -+ -+ msn_add_to_llist(conn->users, new char_data(msn_permstring(args[1]))); -+ ext_user_joined(conn, args[1], msn_decode_URL(args[2]), 0); -+ -+ if(auth->msg!=NULL) -+ { -+ msn_send_IM(conn, NULL, auth->msg); -+ delete auth->msg; -+ auth->msg=NULL; -+ } -+} -+ -+void msn_handle_RNG(msnconn * conn, char ** args, int numargs) -+{ -+ msnconn * newSBconn=new msnconn; -+ authdata_SB * auth=new authdata_SB; -+ -+ newSBconn->type=CONN_SB; -+ newSBconn->auth=auth; -+ -+ auth->username=msn_permstring(((authdata_NS *)(conn->auth))->username); -+ auth->sessionID=msn_permstring(args[1]); -+ auth->cookie=msn_permstring(args[4]); -+ auth->msg=NULL; -+ -+ msn_add_to_llist(connections, newSBconn); -+ -+ char * c; -+ int port=1863; -+ if((c=strstr(args[2], ":"))!=NULL) -+ { -+ *c='\0'; -+ c++; -+ port=atoi(c); -+ } -+ -+ msn_connect(newSBconn, args[2], port); -+} -+ -+void msn_handle_BYE(msnconn * conn, char ** args, int numargs) -+{ -+ llist * list; -+ char_data * c; -+ -+ list=conn->users; -+ -+ ext_user_left(conn, args[1]); -+ -+ while(list!=NULL) -+ { -+ c=(char_data *)list->data; -+ if(!strcmp(c->c, args[1])) // if the departing user matches this item on the list -+ { -+ if(list->next!=NULL) -+ { list->next->prev=list->prev; } -+ if(list->prev!=NULL) -+ { list->prev->next=list->next; } -+ if(list->prev==NULL) { conn->users=list->next; } -+ list->next=NULL; // otherwise the delete will go through the entire llist! -+ list->prev=NULL; -+ delete list; // will delete the char_data for us too -+ break; -+ } -+ list=list->next; -+ } -+ -+ if(conn->users==NULL) -+ { -+ msn_clean_up(conn); -+ } -+} -+ -+void msn_handle_statechange(msnconn * conn, char ** args, int numargs) -+{ -+ char * buddy; -+ char * state; -+ char * friendlyname; -+ -+ if(!strcmp(args[0], "ILN")) -+ { -+ friendlyname=args[4]; -+ buddy=args[3]; -+ state=args[2]; -+ } else if(!strcmp(args[0], "FLN")) { -+ buddy=args[1]; -+ ext_buddy_offline(conn, buddy); -+ return; -+ } else { -+ friendlyname=args[3]; -+ buddy=args[2]; -+ state=args[1]; -+ } -+ -+ ext_buddy_set(conn, buddy, msn_decode_URL(friendlyname), state); -+} -+ -+void msn_handle_ADD(msnconn * conn, char ** args, int numargs) -+{ -+ if(!strcmp(args[2], "RL")) -+ { -+ #ifdef MSNDEBUG -+ printf("Via ADD:\n"); -+ #endif -+ ext_new_RL_entry(conn, args[4], msn_decode_URL(args[5])); -+ } -+ -+ ext_new_list_entry(conn, args[2], args[4]); -+ ext_latest_serial(conn, atoi(args[3])); -+} -+ -+void msn_handle_REM(msnconn * conn, char ** args, int numargs) -+{ -+ ext_del_list_entry(conn, args[2], args[4]); -+ ext_latest_serial(conn, atoi(args[3])); -+} -+ -+ -+void msn_handle_BLP(msnconn * conn, char ** args, int numargs) -+{ -+ ext_got_BLP(conn, args[3][0]); -+ ext_latest_serial(conn, atoi(args[3])); -+} -+ -+void msn_handle_GTC(msnconn * conn, char ** args, int numargs) -+{ -+ ext_got_GTC(conn, args[3][0]); -+ ext_latest_serial(conn, atoi(args[3])); -+} -+ -+void msn_handle_REA(msnconn * conn, char ** args, int numargs) -+{ -+ ext_latest_serial(conn, atoi(args[2])); -+ ext_got_friendlyname(conn, msn_decode_URL(args[4])); -+} -+ -+void msn_handle_CHL(msnconn * conn, char ** args, int numargs) -+{ -+ md5_state_t state; -+ md5_byte_t digest[16]; -+ int a; -+ -+ md5_init(&state); -+ md5_append(&state, (md5_byte_t *)(args[2]), strlen(args[2])); -+ md5_append(&state, (md5_byte_t *)"VT6PX?UQTM4WM%YR", 16); -+ -+ md5_finish(&state, digest); -+ -+ sprintf(buf, "QRY %d PROD0038W!61ZTF9 32\r\n", next_trid++ ); -+ -+ write(conn->sock, buf, strlen(buf)); -+ -+ for(a=0; a<16; a++) -+ { -+ sprintf(buf, "%02x", digest[a]); -+ write(conn->sock, buf, strlen(buf)); -+ } -+} -+ -+void msn_handle_OUT(msnconn * conn, char ** args, int numargs) -+{ -+ if(numargs>1) -+ { -+ if(!strcmp(args[1], "OTH")) -+ { -+ ext_show_error(conn, "You have logged onto MSN twice at once. Your MSN session will now terminate."); -+ } else if(!strcmp(args[1], "SSD")) { -+ ext_show_error(conn, "This MSN server is going down for maintenance. Your MSN session will now terminate."); -+ } else { -+ sprintf(buf, "The MSN server has terminated the connection with an unknown reason code. Please report this code: %s", args[1]); -+ ext_show_error(conn, buf); -+ } -+ } -+ msn_clean_up(conn); -+} -+ -+void msn_filetrans_reject(invitation_ftp * inv) -+{ -+ message * msg=new message; -+ -+ sprintf(buf, "Invitation-Command: CANCEL\r\nInvitation-Cookie: %s\r\nCancel-Code: REJECT\r\n", -+ inv->cookie); -+ msg->body=msn_permstring(buf); -+ msg->content=msn_permstring("text/x-msmsgsinvite; charset=UTF-8"); -+ msn_send_IM(inv->conn, NULL, msg); -+ delete msg; -+ -+ #ifdef MSNDEBUG -+ printf("Rejecting file transfer\n"); -+ #endif -+ -+ msn_del_from_llist(inv->conn->invitations_in, inv); -+} -+ -+void msn_filetrans_accept(invitation_ftp * inv, const char * dest) -+{ -+ message * msg=new message; -+ -+ delete inv->filename; -+ inv->filename=msn_permstring(dest); -+ sprintf(buf, "Invitation-Command: ACCEPT\r\nInvitation-Cookie: %s\r\nLaunch-Application: FALSE\r\nRequest-Data: IP-Address\r\n\r\n", -+ inv->cookie); -+ msg->body=msn_permstring(buf); -+ msg->content=msn_permstring("text/x-msmsgsinvite; charset=UTF-8"); -+ msn_send_IM(inv->conn, NULL, msg); -+ delete msg; -+ -+ #ifdef MSNDEBUG -+ printf("Accepting file transfer\n"); -+ #endif -+} -+ -+void msn_filetrans_cancel(invitation_ftp * inv) -+{ -+ llist * l; -+ msnconn * conn; -+ -+ // one of the two below will fail, but it will do so safely and quietly -+ msn_del_from_llist(inv->conn->invitations_in, inv); -+ msn_del_from_llist(inv->conn->invitations_out, inv); -+ -+ l=connections; -+ -+ while(1) -+ { -+ if(l==NULL) { delete inv; return; } // Hmm, couldn't find it... -+ -+ conn=(msnconn *)l->data; -+ -+ if(conn->type==CONN_FTP && ((authdata_FTP *)(conn->auth))->inv==inv) -+ { break; } -+ -+ l=l->next; -+ } -+ -+ authdata_FTP * auth=(authdata_FTP *)conn->auth; -+ delete auth->inv; -+ auth->inv=NULL; -+ delete auth; -+ conn->auth=NULL; -+ -+ msn_clean_up(conn); -+} -+ -+invitation_ftp * msn_filetrans_send(msnconn * conn, const char * path) -+{ -+ struct stat st_info; -+ -+ if(stat(path, &st_info)<0) -+ { ext_show_error(conn, "Could not open file"); return NULL; } -+ -+ invitation_ftp * inv=new invitation_ftp; -+ -+ inv->app=APP_FTP; -+ inv->cookie=new char[64]; -+ sprintf(inv->cookie, "%d", rand()); -+ inv->other_user=NULL; -+ inv->conn=conn; -+ -+ inv->filename=msn_permstring(path); -+ inv->filesize=st_info.st_size; -+ -+ message * msg=new message; -+ char * basename; -+ -+ basename=inv->filename+strlen(inv->filename); -+ -+ while(basename>=inv->filename && *basename!='/' && *basename!='\\') -+ { -+ basename--; -+ } -+ -+ basename++; // it will always be 1 char before the start of the string -+ -+ msg->content=msn_permstring("text/x-msmsgsinvite; charset=UTF-8"); -+ -+ sprintf(buf, "Application-Name: File transfer\r\nApplication-GUID: {5D3E02AB-6190-11d3-BBBB-00C04F795683}\r\nInvitation-Command: INVITE\r\nInvitation-Cookie: %s\r\nApplication-File: %s\r\nApplication-FileSize: %lu\r\n\r\n", -+ inv->cookie, basename, inv->filesize); -+ -+ msg->body=msn_permstring(buf); -+ -+ msn_send_IM(conn, NULL, msg); -+ -+ msn_add_to_llist(conn->invitations_out, inv); -+ -+ delete msg; -+ -+ ext_filetrans_progress(inv, "Negotiating connection", 0, 0); -+ -+ return inv; -+} -+ -+#define szUser info->username -+#define szPassword info->password -+ -+int msn_login_read( int nSock, char *buf, int nMax ) -+{ -+ return cw_read( nSock, buf, nMax, 0 ); -+} -+ -+int msn_login_wait( int nSocket, char *szCommand ) -+{ -+ int nRet = 0; -+ -+ while ( !nRet ) -+ nRet = read( nSocket, szCommand, 1000 ); -+ -+ #ifdef MSNDEBUG -+ printf("<< %s", szCommand ); -+ #endif -+ -+ return 1; -+} -+ -+void msn_login_write1( int nSocket, char *szString, char *szArg ) -+{ -+ char szWrite[ 1000 ]; -+ -+ // ext_debug( szString ); -+ // ext_debug( szArg ); -+ -+ memset( szWrite, 0, 999 ); -+ sprintf( szWrite, "%s %s\r\n", szString, szArg ); -+ -+ // ext_debug( szWrite ); -+ -+ cw_write( nSocket, szWrite, strlen( szWrite ), 0 ); -+} -+ -+void msn_login_write( int nSocket, char *szString ) -+{ -+ char szWrite[ 1000 ]; -+ -+ memset( szWrite, 0, 1000 ); -+ sprintf( szWrite, "%s\r\n", szString ); -+ -+ cw_write( nSocket, szWrite, strlen( szWrite ), 0 ); -+} -+ -+int msn_login_connect( int nPort, char *szAddress ) -+{ -+ return ext_connect_socket( szAddress, nPort ); -+} -+ -+int msn_login_ssl_write( int nSock, char *str ) -+{ -+ return cw_write( nSock, str, strlen( str ), 1 ); -+} -+ -+int msn_login_ssl_read( int nSock, char *buf, int nMax ) -+{ -+ return cw_read( nSock, buf, nMax, 1 ); -+} -+ -+int msn_login_close( int nSock ) -+{ -+ return cw_close( nSock ); -+} -+ -+int msn_login_ssl_connect( int nPort, char *szAddr ) -+{ -+ return ext_connect_socket_ssl( szAddr, nPort ); -+} -+ -+int msn_login_get_server( char *str, char *filter, char *Server, char *Site ) -+{ -+ char *c, *c1, *c2; -+ -+ c = strstr( str, filter ); -+ if ( NULL == c ) -+ return 0; -+ // Skip the "Filter="-part. -+ c++; -+ c += strlen( filter ); -+ c1 = strchr( c, '/' ); -+ if ( NULL == c1 ) -+ return 0; -+ c2 = strchr( c1, ',' ); -+ if ( NULL == c2 ) -+ return 0; -+ -+ strncpy( Server, c, (unsigned long)c1 - (unsigned long)c ); -+ strncpy( Site, c1, (unsigned long)c2 - (unsigned long)c1 ); -+ -+ return 1; -+} -+ -+int msnAuth( char *lc, char *ticket, char *user, char *password ) -+{ -+ int nexus; // Passport Login Nexus -+ int logins; // Login Server -+ char result[ 5000 ]; -+ char result2[ 1000 ]; -+ char Server[ 100 ]; // e.g. www.server.com -+ char Site[ 100 ]; // e.g. /site.html -+ char String[ 800 ]; -+ int i; -+ char mail[ 255 ]; -+ char name[ 255 ]; -+ -+ memset( mail, 0, 255 ); -+ memset( name, 0, 255 ); -+ -+ for ( i = 0; i < strlen( user ); i++ ) -+ { -+ if ( user[i] == '@' ) -+ { -+ strncpy( name, user, i ); -+ strcpy( mail, (char*)( (unsigned long)user + i + 1 ) ); -+ break; -+ } -+ } -+ -+ memset( Server, 0, 100 ); -+ memset( Site, 0, 100 ); -+ -+ nexus = msn_login_ssl_connect( 443, "nexus.passport.com" ); -+ msn_login_ssl_write( nexus, "GET /rdr/pprdr.asp HTTP/1.0\r\n\r\n" ); -+ msn_login_ssl_read( nexus, result, 800 ); -+ msn_login_close( nexus ); -+ msn_login_get_server( result, "DALogin", Server, Site ); -+ -+ #ifdef MSNDEBUG -+ printf("Connecting to server '%s' .. site '%s'\n", Server, Site ); -+ #endif -+ -+ for ( ; ; ) -+ { -+ // Connect to Login Server -+ logins = msn_login_ssl_connect( 443, Server ); -+ memset( String, 0, 800 ); -+ sprintf( String, "GET %s HTTP/1.1\r\n" -+ "Authorization: Passport1.4 OrgVerb=GET,OrgURL=http%%3A%%2F%%2Fmessenger%%2Emsn%%2Ecom,sign-in=%s%%40%s,pwd=%s,%s\r\n" -+ "Host: %s\r\n\r\n", -+ Site, name, mail, password, lc, Server ); -+ -+ #ifdef MSNDEBUG -+ printf("Writing: \n%s\n", String ); -+ #endif -+ -+ msn_login_ssl_write( logins, String ); -+ -+ memset( result, 0, 5000 ); -+ memset( result2, 0, 1000 ); -+ -+ msn_login_ssl_read( logins, result, 5000 ); -+ msn_login_ssl_read( logins, result2, 1000 ); -+ -+ strcat( result, result2 ); -+ -+ if ( strstr( result, "200 OK" ) ) -+ { -+ char *tick; -+ char *c3, *c4; -+ // Okay. -+ -+ tick = strstr( result, "t=" ); -+ if ( NULL == tick ) -+ { -+ #ifdef MSNDEBUG -+ printf("No t= found in response.\n"); -+ #endif -+ return 0; -+ } -+ -+ tick += 2; -+ -+ c4 = strstr( tick, "," ); -+ -+ strncpy( ticket, tick, (unsigned long)c4 - (unsigned long)tick - 1 ); -+ -+ //msn_login_close( logins ); -+ return 1; -+ } -+ -+ if ( strstr( result, "302 Found") && strstr( result, "redir" ) && strstr( result, "Location: " ) ) -+ { -+ // Redirection. -+ char *c3, *c4; -+ -+ c3 = strstr( result, "Location: " ); -+ c3 += 10; -+ -+ c3 = strstr( c3, "https://" ); -+ c3 += 8; -+ -+ c4 = strstr( c3, "/" ); -+ strncpy( Server, c3, (unsigned long)c4 - (unsigned long)c3 ); -+ strncpy( Site, c4, (unsigned long)strchr( c4, '\r' ) - (unsigned long)c4 ); -+ -+ // printf("Redirection to server [%s] - Site [%s]\n", Server, Site ); -+ msn_login_close( logins ); -+ continue; -+ } -+ -+ break; -+ } -+ -+ // printf("Error\n"); -+ return 0; -+} -+ -+int msn_connect_v8_error( connectinfo *info, msnconn *conn, char *szErr ) -+{ -+ ext_show_error( NULL, szErr ); -+ delete info; -+ -+ if ( conn->sock != -1 ) -+ { -+ ext_unregister_sock( conn->sock ); -+ close( conn->sock ); -+ conn->sock = -1; -+ } -+ -+ return -1; -+} -+ -+int msn_connect_v8( connectinfo *info, msnconn *conn, int *nNextTrid ) -+{ -+ int ds; // Dispatch Server -+ char result[ 1000 ]; -+ char *c; -+ char szIp[ 20 ]; -+ char szPort[ 20 ]; -+ int nPort; -+ char lc[ 400 ]; -+ char ticket[ 2000 ]; -+ -+ memset( result, 0, 500 ); -+ -+ ext_debug("MSNp8: finding login server"); -+ -+ // ds = msn_login_connect( 1863, "messenger.hotmail.com" ); -+ ds = conn->sock; -+ -+ // >> VER 1 MSNP8 CVR0\r\n -+ msn_login_write( ds, "VER 1 MSNP8 CVR0" ); -+ msn_login_wait( ds, result ); -+ -+ if ( !strstr( result, "VER 1" ) ) -+ return msn_connect_v8_error( info, conn, "Protocol error (didn't receive VER 1)" ); -+ -+ // >> CVR 2 0x0409 win 4.10 i386 MSNMSGR 5.0.0544 MSMSGS something@something.com\r\n -+ // ext_debug( szUser ); -+ -+ msn_login_write1( ds, "CVR 2 0x0409 winnt 5.1 i386 MSNMSGR 5.0.0540 MSMSGS", szUser ); -+ -+ msn_login_wait( ds, result ); -+ -+ if ( !strstr( result, "CVR 2" ) ) -+ return msn_connect_v8_error( info, conn, "Protocol error (didn't receive CVR 2)" ); -+ -+ // >> USR 3 TWN I something@something.com\r\n -+ msn_login_write1( ds, "USR 3 TWN I", szUser ); -+ msn_login_wait( ds, result ); -+ if ( !strstr( result, "XFR 3 NS " ) ) -+ return msn_connect_v8_error( info, conn, "Protocol error (didn't receive XFR 3)" ); -+ -+ // Read MSN Server IP from message. -+ c = strstr( result, "NS "); -+ c += 3; -+ memset( szIp, 0, 20 ); -+ memset( szPort, 0, 20 ); -+ strncpy( szIp, c, (unsigned long)strchr( c, ':' ) - (unsigned long)c ); -+ c = strchr( c, ':' ); c++; -+ strncpy( szPort, c, (unsigned long)strchr( c, ' ' ) - (unsigned long)c ); -+ nPort = atoi( szPort ); -+ -+ // Close current socket. -+ msn_login_close( ds ); -+ ext_unregister_sock( ds ); -+ conn->sock = -1; -+ -+ #ifdef MSNDEBUG -+ printf("* Connecting to IP `%s' port %d *\n", szIp, nPort ); -+ #endif -+ -+ ext_debug("MSNp8: found.. connecting"); -+ -+ // Try to connect to other server. -+ ds = msn_login_connect( nPort, szIp ); -+ if ( ds <= 0 ) -+ return msn_connect_v8_error( info, conn, "Error connecting to specified MSN Server" ); -+ -+ // OK. Register the socket. -+ conn->sock = ds; -+ ext_register_sock( ds, 1, 0 ); -+ -+ // >> VER 4 MSNP8 CVR0\r\n -+ msn_login_write( ds, "VER 4 MSNP8 CVR0" ); -+ msn_login_wait( ds, result ); -+ -+ if ( !strstr( result, "VER 4" ) ) -+ return msn_connect_v8_error( info, conn, "Protocol error (didn't receive VER 4)" ); -+ -+ // >> CVR 5 0x0409 win 4.10 i386 MSNMSGR 5.0.0544 MSMSGS something@something.com\r\n -+ msn_login_write1( ds, "CVR 5 0x0409 winnt 5.1 i386 MSNMSGR 5.0.0540 MSMSGS", szUser ); -+ msn_login_wait( ds, result ); -+ -+ if ( !strstr( result, "CVR 5" ) ) -+ return msn_connect_v8_error( info, conn, "Protocol error (didn't receive CVR 5)" ); -+ -+ // >> USR 6 TWN I something@something.com\r\n -+ msn_login_write1( ds, "USR 6 TWN I", szUser ); -+ msn_login_wait( ds, result ); -+ -+ // << USR 6 TWN S something@something.com lc=....,....=...\r\n -+ if ( !strstr( result, "TWN S" ) ) -+ return msn_connect_v8_error( info, conn, "Protocol error (didn't receive TWS S)" ); -+ -+ memset( lc, 0, 400 ); -+ c = strstr( result, "TWN S " ); -+ c+=6; -+ -+ strncpy( lc, c, (unsigned long)strchr(c, '\r') - (unsigned long)c ); -+ -+ #ifdef MSNDEBUG -+ printf("LC-etc string = `%s'\n", lc ); -+ #endif -+ -+ memset( ticket, 0, 2000 ); -+ -+ ext_debug("MSNp8: doing SSL auth"); -+ -+ if ( ! msnAuth( lc, ticket, szUser, szPassword ) ) -+ { -+ // printf("Error #6\n"); -+ return 0; -+ } -+ -+ ext_debug("MSNp8: OK.. logging in"); -+ -+ #ifdef MSNDEBUG -+ printf("Ticket = `%s'\n", ticket ); -+ #endif -+ -+ memset( result, 0, 500 ); -+ sprintf( result, "USR 7 TWN S t=%s", ticket ); -+ -+ // >> USR 7 TWN S t=<ticket> -+ msn_login_write( ds, result ); -+ memset( result, 0, 500 ); -+ msn_login_wait( ds, result ); -+ -+ if ( !strstr( result, "USR 7 OK") ) -+ { -+ if ( result[ 0 ] >= '0' && result[ 0 ] <= '9' ) -+ { -+ char *err; -+ int nCode = 0; -+ // We received an error code. -+ -+ err = strchr( result, ' ' ); -+ if ( NULL == err ) -+ nCode = atoi( result ); -+ else { -+ *err = '\0'; -+ nCode = atoi( result ); -+ } -+ if ( nCode <= 0 ) -+ return msn_connect_v8_error( info, conn, "Protocol error (Invalid response after USR 7)" ); -+ return nCode; -+ } -+ -+ // Invalid response. -+ return msn_connect_v8_error( info, conn, "Protocol error (Invalid response after USR 7)" ); -+ } -+ -+ // We are now connected to the MSN Server -+ -+ // msn_login_write( ds, "OUT" ); -+ // msn_login_close( ds ); -+ -+ // << USR 7 OK something@something.com Something%20Friendly%Nick 1 0 -+ { -+ char *szFriendly; -+ char *cEnd; -+ int i; -+ -+ szFriendly = result; -+ -+ for ( i = 0; i < 4; i++ ) -+ { -+ szFriendly = strchr( szFriendly, ' ' ); -+ -+ if ( NULL == szFriendly ) -+ { -+ ext_got_friendlyname( conn, "Unknown nickname" ); -+ return 0; -+ } -+ -+ szFriendly++; -+ } -+ -+ cEnd = strchr( szFriendly, ' '); -+ if ( NULL != cEnd ) -+ *cEnd = '\0'; -+ -+ // ext_debug( msn_decode_URL( szFriendly ) ); -+ ext_got_friendlyname( conn, msn_decode_URL( szFriendly ) ); -+ } -+ -+ *nNextTrid = 8; -+ -+ // No error. -+ return 0; -+} -+ -+void msn_connect(msnconn * conn, const char * server, int port) -+{ -+ int result; -+ -+ conn->ready=0; -+ -+ if(conn->type==CONN_SB) -+ { -+ authdata_SB * auth=(authdata_SB *)conn->auth; -+ -+ if((conn->sock=ext_connect_socket(server, port))==-1) -+ { -+ ext_show_error(conn, "Could not connect to switchboard server"); -+ return; -+ } -+ -+ ext_register_sock(conn->sock, 1, 0); -+ -+ if(auth->sessionID==NULL) -+ { -+ sprintf(buf, "USR %d %s %s\r\n", next_trid, auth->username, auth->cookie); -+ write(conn->sock, buf, strlen(buf)); -+ -+ msn_add_callback(conn, msn_SBconn_3, next_trid, NULL); -+ } else { -+ sprintf(buf, "ANS %d %s %s %s\r\n", next_trid, auth->username, auth->cookie, auth->sessionID); -+ write(conn->sock, buf, strlen(buf)); -+ -+ ext_new_connection(conn); -+ conn->ready=1; -+ msn_add_callback(conn, msn_SB_ans, next_trid, NULL); -+ } -+ -+ next_trid++; -+ -+ return; -+ } // Otherwise, it's a Notification Server (NS) -+ -+ connectinfo * info; -+ -+ info=new connectinfo; -+ -+ // The following is necessary as username and password may be temp variables -+ // that will no longer exist when the next function is called -+ info->username=msn_permstring( ((authdata_NS *)conn->auth)->username); -+ info->password=msn_permstring( ((authdata_NS *)conn->auth)->password); -+ -+ conn->ready=0; -+ if((conn->sock=ext_connect_socket(server, port))==-1) -+ { -+ ext_show_error(conn, "Could not connect to MSN server"); -+ return; -+ } -+ -+ ext_register_sock(conn->sock, 1, 0); -+ -+ // Okay, now try to connect. -+ -+ ext_debug("MSNp8: connecting to MSN.. this could take a few seconds"); -+ -+ result = msn_connect_v8( info, conn, &next_trid ); -+ -+ if ( 0 != result ) -+ { -+ // Error code. -+ -+ if ( result > 0 ) -+ { -+ msn_show_verbose_error( conn, result ); -+ delete info; -+ msn_clean_up( conn ); -+ conn->sock = -1; -+ -+ } // else: connection failed completely. msn_connect_v8 already took care of destroying the connection -+ -+ } -+ else -+ { -+ -+ // We received no error code. Everything went ok! -+ delete info; -+ -+ ext_debug("MSNp8: OK"); -+ -+ conn->ready = 1; -+ ext_new_connection( conn ); -+ } -+} -+ -+void msn_SB_ans(msnconn * conn, int trid, char ** args, int numargs, callback_data * data) -+{ -+ if(!strcmp(args[0], "ANS") && !strcmp(args[2], "OK")) -+ { return; } -+ -+ if(isdigit(args[0][0])) -+ { -+ msn_del_callback(conn, trid); -+ msn_show_verbose_error(conn, atoi(args[0])); -+ msn_clean_up(conn); -+ return; -+ } -+ -+ if(!strcmp(args[0], "IRO")) -+ { -+ if(!strcmp(args[4], ((authdata_SB *)conn->auth)->username)) { return; } -+ msn_add_to_llist(conn->users, new char_data(msn_permstring(args[4]))); -+ ext_user_joined(conn, args[4], msn_decode_URL(args[5]), 1); -+ if(!strcmp(args[2], args[3])) -+ { -+ msn_del_callback(conn, trid); -+ } -+ } -+} -+ -+void msn_set_state(msnconn * conn, const char * state) -+{ -+ sprintf(buf, "CHG %d %s %d\r\n", next_trid, state, MSN_VERSION_ID ); -+ write(conn->sock, buf, strlen(buf)); -+ next_trid++; -+} -diff -ruN blip-0.1.orig/msn_core.h blip-0.1/msn_core.h ---- blip-0.1.orig/msn_core.h Thu Jan 1 08:00:00 1970 -+++ blip-0.1/msn_core.h Mon Nov 3 20:09:02 2003 -@@ -0,0 +1,355 @@ -+/* msn_core.h - prototypes for msn_core.C */ -+#ifndef MSN_CORE_H -+#define MSN_CORE_H -+ -+class llist_data // inherit it -+{}; -+ -+class llist -+{ -+ public: -+ llist_data * data; -+ llist * next; -+ llist * prev; -+ -+ llist() { data=NULL; next=NULL; prev=NULL; } -+ ~llist() { if(data!=NULL) { delete data; } if(next!=NULL) { delete next; } } -+}; -+ -+class char_data : public llist_data -+{ -+ public: -+ char * c; -+ char_data(char * tc) { c=tc; } -+ ~char_data() { if(c!=NULL) { delete c; } } -+}; -+ -+class callback_data -+{}; -+ -+class callback : public llist_data -+{ -+ public: -+ int trid; -+ void (*func)(struct msnconn * conn, int trid, char ** args, int numargs, callback_data * data); -+ callback_data * data; // just gets passed -+}; -+ -+// Intermediate steps in synchronisation -+class syncinfo : public callback_data -+{ -+ public: -+ -+ llist * fl; -+ llist * rl; -+ llist * al; -+ llist * bl; -+ -+ unsigned int complete; -+ -+ int serial; -+ int nContacts; -+ int nGroups; -+ int nFound; -+ -+ char *last_user_handled; -+ -+ char blp; -+ char gtc; -+ -+ syncinfo() { nFound = 0; nContacts = 0; blp='A'; gtc='A'; fl=rl=al=bl=NULL; complete=0; serial=0; } -+ ~syncinfo() -+ { -+ if(fl!=NULL) { delete fl; } -+ if(rl!=NULL) { delete rl; } -+ if(al!=NULL) { delete al; } -+ if(bl!=NULL) { delete bl; } -+ } -+}; -+ -+class message : public llist_data // This class encapsulates all that you need to know (tm) about a MSG -+{ -+ public: -+ -+ // Raw stuff -+ char * header; // MIME -+ const char * body; -+ -+ // Parsed stuff -+ char * font; -+ char * colour; -+ int bold; -+ int italic; -+ int underline; -+ int fontsize; -+ -+ char * content; // Content-type -+ -+ message() { header=NULL; font=NULL; content=NULL; colour=NULL; } -+}; -+ -+class phonedata : public llist_data -+{ -+ public: -+ char * title; -+ char * number; -+ -+ phonedata() { title=number=NULL; } -+ ~phonedata() { if(title!=NULL) { delete title; } if(number!=NULL) { delete number; } } -+}; -+ -+class userdata : public llist_data -+{ -+ public: -+ char * username; -+ char * friendlyname; -+ -+ llist * phone; -+ -+ userdata() { username=friendlyname=NULL; phone=NULL; } -+ ~userdata() -+ { -+ if(username!=NULL) { delete username; } -+ if(friendlyname!=NULL) { delete friendlyname; } -+ if(phone!=NULL) { delete phone; } -+ } -+}; -+ -+class authdata -+{}; -+ -+ -+class msnconn : public llist_data -+{ -+ public: -+ int sock; // Socket (durr...) -+ int type; // one of the #defines below -+ int sync; // syncing -+ int ready; -+ -+ syncinfo *sync_info; -+ llist * users; // Users in this session - only for SB connections -+ llist * invitations_out; // invitations extended but not responded to -+ llist * invitations_in; // invitations received but not responded to -+ llist * callbacks; -+ authdata * auth; -+ -+ msnconn() { sync = 0; users=NULL; callbacks=NULL; invitations_out=NULL; invitations_in=NULL; } -+ ~msnconn() -+ { -+ if(users!=NULL) { delete users; } -+ if(invitations_in!=NULL) { delete invitations_in; } -+ if(invitations_out!=NULL) { delete invitations_out; } -+ if(callbacks!=NULL) { delete callbacks; } -+ } -+}; -+ -+#define CONN_NS 1 // Notification Server (also Dispatch, as it does exactly the same thing) -+#define CONN_SB 2 // Switchboard Server -+#define CONN_FTP 3 // MSN file transfer -+ -+class authdata_NS : public authdata -+{ -+ public: -+ char * username; -+ char * password; -+ -+ authdata_NS() { username=password=NULL; } -+ ~authdata_NS() { if(username!=NULL) { delete username; delete password; } } -+}; -+ -+class authdata_SB : public authdata -+{ -+ public: -+ char * username; -+ char * sessionID; -+ char * cookie; -+ char * rcpt; // recipient of the below -+ message * msg; // to be sent as soon as connection is complete and someone joins -+ void * tag; // for SB connections without an initial message -+ -+ authdata_SB() { username=sessionID=cookie=NULL; } -+ ~authdata_SB() -+ { if(username!=NULL) { delete username; delete sessionID; delete cookie; } } -+}; -+ -+class invitation : public llist_data -+{ -+ public: -+ int app; -+ char * cookie; -+ char * other_user; -+ msnconn * conn; -+ -+ invitation() { cookie=other_user=NULL; } -+ ~invitation() { if(cookie!=NULL) { delete cookie; } if(other_user!=NULL) { delete other_user; } } -+}; -+ -+#define APP_FTP 1 // NOTE: this is MSN file transfer, which is NOTHING to do with ordinary FTP! -+ -+class invitation_ftp : public invitation -+{ -+ public: -+ char * filename; -+ long unsigned filesize; -+ -+ invitation_ftp() { filename=NULL; } -+ ~invitation_ftp() -+ { if(filename!=NULL) { delete filename; } } -+}; -+ -+ -+class authdata_FTP : public authdata -+{ -+ public: -+ char * cookie; -+ char * username; -+ invitation_ftp * inv; -+ int fd; -+ unsigned long bytes_done; -+ int num_ignore; -+ int direction; -+ int connected; -+ -+ authdata_FTP() { cookie=username=NULL; inv=NULL; fd=-1; bytes_done=num_ignore=connected=0; } -+ ~authdata_FTP() -+ { -+ if(cookie!=NULL) { delete cookie; } -+ if(username!=NULL) { delete username; } -+ if(inv!=NULL) { delete inv; } -+ } -+}; -+ -+#define MSNFTP_SEND 1 -+#define MSNFTP_RECV 2 -+ -+ -+extern llist * connections; -+extern int next_trid; -+ -+#define BUF_SIZE 1024 -+extern char buf[]; // Used for anything temporary -+ -+void msn_init(msnconn * conn, const char * username, const char * password); -+ -+void msn_show_verbose_error(msnconn * conn, int errcode); -+ -+void msn_connect(msnconn * conn, const char * server, int port); -+ -+void msn_invite_user(msnconn * conn, char * rcpt); -+ -+void msn_send_IM(msnconn * conn, const char * rcpt, const char * msg); -+ -+void msn_send_IM(msnconn * conn, const char * rcpt, message * msg); -+ -+void msn_send_typing(msnconn * conn); -+ -+void msn_filetrans_accept(invitation_ftp * inv, const char * dest); -+ -+void msn_filetrans_reject(invitation_ftp * inv); -+ -+invitation_ftp * msn_filetrans_send(msnconn * conn, const char * path); -+ -+void msn_sync_lists(msnconn * conn, int version); -+ -+#define LST_FL 1 -+#define LST_RL 2 -+#define LST_AL 4 -+#define LST_BL 8 -+ -+#define COMPLETE_BLP 16 -+#define COMPLETE_GTC 32 -+ -+void msn_set_friendlyname(msnconn * conn, const char * friendlyname); -+ -+void msn_sync_lists(msnconn * conn, int version); -+void msn_add_to_list(msnconn * conn, const char * lst, const char * user); -+void msn_del_from_list(msnconn * conn, const char * lst, const char * user); -+void msn_set_GTC(msnconn * conn, char c); -+void msn_set_BLP(msnconn * conn, char c); -+void msn_syncdata(msnconn * conn, int trid, char ** args, int numargs, callback_data * data); -+void msn_phonedata(msnconn * conn, int trid, char ** args, int numargs, callback_data * data); -+void msn_check_rl(msnconn * conn, syncinfo * info); -+ -+void msn_connect_and_send(msnconn * nsconn, char * dest, char * msg); -+ -+void msn_set_state(msnconn * conn, const char * state); -+ -+// Intermediate steps in switchboard connection: -+class conninfo_SB : public callback_data -+{ -+ public: -+ authdata_SB * auth; -+}; -+ -+void msn_new_SB(msnconn * nsconn, void * tag); -+void msn_request_SB(msnconn * nsconn, const char * rcpt, message * msg, void * tag); -+ -+void msn_SBconn_2(msnconn * conn, int trid, char ** args, int numargs, callback_data * data); -+void msn_SBconn_3(msnconn * conn, int trid, char ** args, int numargs, callback_data * data); -+ -+void msn_handle_incoming(int sock, int readable, int writable); -+ -+void msn_handle_filetrans_incoming(msnconn * conn, int readable, int writable); -+ -+void msn_handle_close(int sock); -+ -+void msn_handle_default(msnconn * conn, char ** args, int numargs); -+ -+void msn_handle_MSG(msnconn * conn, char ** args, int numargs); -+ -+void msn_handle_invite(msnconn * conn, char * from, char * friendly, char * mime, char * body); -+ -+void msn_handle_new_invite(msnconn * conn, char * from, char * friendly, char * mime, char * body); -+ -+void msn_recv_file(invitation_ftp * inv, char * dest); -+ -+char * msn_find_in_mime(char * mime, char * header); -+ -+void msn_send_file(invitation_ftp * inv, char * msg_body); -+ -+void msn_handle_NAK(msnconn * conn, char ** args, int numargs); -+ -+void msn_handle_JOI(msnconn * conn, char ** args, int numargs); -+ -+void msn_handle_BYE(msnconn * conn, char ** args, int numargs); -+ -+void msn_handle_RNG(msnconn * conn, char ** args, int numargs); -+ -+void msn_handle_statechange(msnconn * conn, char ** args, int numargs); -+ -+void msn_handle_ADD(msnconn * conn, char ** args, int numargs); -+ -+void msn_handle_REM(msnconn * conn, char ** args, int numargs); -+ -+void msn_handle_BLP(msnconn * conn, char ** args, int numargs); -+ -+void msn_handle_GTC(msnconn * conn, char ** args, int numargs); -+ -+void msn_handle_REA(msnconn * conn, char ** args, int numargs); -+ -+void msn_handle_CHL(msnconn * conn, char ** args, int numargs); -+ -+void msn_handle_OUT(msnconn * conn, char ** args, int numargs); -+ -+ -+ -+// Intermediate steps in connection: -+class connectinfo : public callback_data -+{ -+ public: -+ char * username; -+ char * password; -+ connectinfo() { username=password=NULL; } -+ ~connectinfo() -+ { if(username!=NULL) { delete username; } if(password!=NULL) { delete password; } } -+}; -+ -+void msn_connect_2(msnconn * conn, int trid, char ** args, int numargs, callback_data * data); -+void msn_connect_3(msnconn * conn, int trid, char ** args, int numargs, callback_data * data); -+void msn_connect_4(msnconn * conn, int trid, char ** args, int numargs, callback_data * data); -+ -+// Connecting to switchboards: -+void msn_SB_ans(msnconn * conn, int trid, char ** args, int numargs, callback_data * data); -+ -+#endif // MSN_CORE_H -diff -ruN blip-0.1.orig/msn_interface.h blip-0.1/msn_interface.h ---- blip-0.1.orig/msn_interface.h Thu Jan 1 08:00:00 1970 -+++ blip-0.1/msn_interface.h Mon Nov 3 20:09:02 2003 -@@ -0,0 +1,92 @@ -+#ifndef __MSN_INTERFACE_H__ -+#define __MSN_INTERFACE_H__ -+ -+/* msn_interface.h - functions that talk to the outside world */ -+ -+/* -+ void ext_show_error(char * msg); -+ -+ Purpose: Displays an error -+ Arguments: -+ msg The error message -+ Return: Nothing -+*/ -+ -+void ext_register_sock(int s, int read, int write); -+void ext_unregister_sock(int s); -+ -+void ext_show_error(msnconn * conn, const char * msg); -+ -+void ext_buddy_set(msnconn * conn, const char * buddy, const char * friendlyname, const char * state); -+ -+void ext_buddy_offline(msnconn * conn, const char * buddy); -+ -+void ext_got_friendlyname(msnconn * conn, const char * friendlyname); -+ -+void ext_got_info(msnconn * conn, syncinfo * data); -+ -+void ext_debug( char *msg ); -+ -+void ext_latest_serial(msnconn * conn, int serial); -+ -+void ext_got_GTC(msnconn * conn, char c); -+ -+void ext_got_BLP(msnconn * conn, char c); -+ -+void ext_new_RL_entry(msnconn * conn, const char * username, const char * friendlyname); -+ -+void ext_new_list_entry(msnconn * conn, const char * lst, const char * username); -+ -+void ext_del_list_entry(msnconn * conn, const char * lst, const char * username); -+ -+void ext_got_SB(msnconn * conn, void * tag); -+ -+void ext_user_joined(msnconn * conn, const char * username, const char * friendlyname, int is_initial); -+ -+void ext_user_left(msnconn * conn, const char * username); -+ -+void ext_got_IM(msnconn * conn, const char * username, const char * friendlyname, message * msg); -+ -+void ext_IM_failed(msnconn * conn); -+ -+void ext_typing_user(msnconn * conn, const char * username, const char * friendlyname); -+ -+void ext_initial_email(msnconn * conn, int unread_inbox, int unread_folders); -+ -+void ext_new_mail_arrived(msnconn * conn, const char * from, const char * subject); -+ -+void ext_filetrans_invite(msnconn * conn, const char * username, const char * friendlyname, invitation_ftp * inv); -+ -+void ext_filetrans_progress(invitation_ftp * inv, const char * status, unsigned long recv, unsigned long total); -+ -+void ext_filetrans_failed(invitation_ftp * inv, int error, const char * message); -+ -+void ext_filetrans_success(invitation_ftp * inv); -+ -+void ext_new_connection(msnconn * conn); -+ -+void ext_closing_connection(msnconn * conn); -+ -+void ext_changed_state(msnconn * conn, const char * state); -+ -+/* -+ int connect_socket(char * server, int port); -+ -+ Purpose: Makes a TCP socket, connects it to the specified server and port, -+ and then registers it for -+ Arguments: -+ server The server name -+ port The TCP port to connect to -+ Return: Nothing -+*/ -+int ext_connect_socket(const char * server, int port); -+ -+int ext_connect_socket_ssl(const char * server, int port); -+ -+int ext_server_socket(int port); -+ -+char * ext_get_IP(void); -+ -+void ext_protocol_log(const char *buf, int readev, int writeev); -+ -+#endif diff -ruN /usr/ports/net/centericq/files/msn-msnhook.cc ./centericq/files/msn-msnhook.cc --- /usr/ports/net/centericq/files/msn-msnhook.cc Sun Jan 18 08:35:45 2004 +++ ./centericq/files/msn-msnhook.cc Thu Jan 1 08:00:00 1970 @@ -1,804 +0,0 @@ ---- src/hooks/msnhook.cc.orig Sat Jan 17 17:01:03 2004 -+++ src/hooks/msnhook.cc Sat Jan 17 17:05:45 2004 -@@ -0,0 +1,801 @@ -+/* -+* -+* centericq MSN protocol handling class -+* $Id: msnhook.cc,v 1.67 2003/09/30 11:38:43 konst Exp $ -+* -+* Copyright (C) 2001 by Konstantin Klyagin <konst@konst.org.ua> -+* -+* 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 "icqcommon.h" -+ -+#ifdef BUILD_MSN -+ -+#include "msnhook.h" -+#include "icqconf.h" -+#include "icqface.h" -+#include "icqcontacts.h" -+#include "accountmanager.h" -+#include "eventmanager.h" -+#include "imlogger.h" -+#include "connwrap.h" -+ -+#include "msn_bittybits.h" -+ -+#include <unistd.h> -+#include <sys/types.h> -+#include <sys/socket.h> -+#include <netinet/in.h> -+#include <netdb.h> -+#include <arpa/inet.h> -+ -+msnhook mhook; -+ -+static string nicknormalize(const string &nick) { -+ if(nick.find("@") == -1) return nick + "@hotmail.com"; -+ return nick; -+} -+ -+static string nicktodisp(const string &nick) { -+ int pos; -+ string r = nick; -+ -+ if((pos = r.find("@")) != -1) -+ if(r.substr(pos+1) == "hotmail.com") -+ r.erase(pos); -+ -+ return r; -+} -+ -+struct st2imr { -+ char *name; -+ imstatus st; -+}; -+ -+const st2imr st2im[] = { -+ { "FLN", offline }, -+ { "NLN", available }, -+ { "HDN", invisible }, -+ { "BSY", dontdisturb }, -+ { "PHN", occupied }, -+ { "AWY", away }, -+ { "BRB", away }, -+ { "LUN", notavail }, -+ { "IDL", away }, -+ { 0, offline } -+}; -+ -+static imstatus msn2imstatus(const string &sname) { -+ for(const st2imr *sa = st2im; sa->name; sa++) -+ if(sname == sa->name) -+ return sa->st; -+ -+ return offline; -+} -+ -+static const char *stat2name(imstatus st) { -+ for(const st2imr *sa = st2im; sa->name; sa++) -+ if(st == sa->st) -+ return sa->name; -+ -+ return "NLN"; -+} -+ -+// ---------------------------------------------------------------------------- -+ -+msnhook::msnhook(): abstracthook(msn) { -+ ourstatus = offline; -+ fonline = false; -+ -+// fcapabs.insert(hookcapab::synclist); // removed from 4.9.10 -+ fcapabs.insert(hookcapab::changedetails); -+ fcapabs.insert(hookcapab::directadd); -+// fcapabs.insert(hookcapab::files); -+} -+ -+msnhook::~msnhook() { -+} -+ -+void msnhook::init() { -+ manualstatus = conf.getstatus(msn); -+} -+ -+void msnhook::connect() { -+ icqconf::imaccount account = conf.getourid(msn); -+ -+ face.log(_("+ [msn] connecting to the server")); -+ -+ flogged = false; -+ fonline = true; -+ -+ msn_init(&conn, nicknormalize(account.nickname).c_str(), account.password.c_str()); -+ msn_connect(&conn, account.server.c_str(), account.port); -+ -+ fonline = true; -+ flogged = true; -+} -+ -+void msnhook::disconnect() { -+ msn_clean_up(&conn); -+} -+ -+void msnhook::exectimers() { -+} -+ -+void msnhook::main() { -+ vector<int>::const_iterator i; -+ fd_set rs, ws; -+ struct timeval tv; -+ int hsock; -+ -+ FD_ZERO(&rs); -+ FD_ZERO(&ws); -+ -+ tv.tv_sec = tv.tv_usec = 0; -+ hsock = 0; -+ -+ for(i = rfds.begin(); i != rfds.end(); ++i) { -+ FD_SET(*i, &rs); -+ hsock = max(hsock, *i); -+ } -+ -+ for(i = wfds.begin(); i != wfds.end(); ++i) { -+ FD_SET(*i, &ws); -+ hsock = max(hsock, *i); -+ } -+ -+ if(select(hsock+1, &rs, &ws, 0, &tv) > 0) { -+ for(i = rfds.begin(); i != rfds.end(); ++i) -+ if(FD_ISSET(*i, &rs)) { -+ msn_handle_incoming(*i, 1, 0); -+ return; -+ } -+ -+ for(i = wfds.begin(); i != wfds.end(); ++i) -+ if(FD_ISSET(*i, &ws)) { -+ msn_handle_incoming(*i, 0, 1); -+ return; -+ } -+ } -+} -+ -+void msnhook::getsockets(fd_set &rf, fd_set &wf, fd_set &efds, int &hsocket) const { -+ vector<int>::const_iterator i; -+ -+ for(i = rfds.begin(); i != rfds.end(); ++i) { -+ hsocket = max(hsocket, *i); -+ FD_SET(*i, &rf); -+ } -+ -+ for(i = wfds.begin(); i != wfds.end(); ++i) { -+ hsocket = max(hsocket, *i); -+ FD_SET(*i, &wf); -+ } -+} -+ -+bool msnhook::isoursocket(fd_set &rf, fd_set &wf, fd_set &efds) const { -+ vector<int>::const_iterator i; -+ -+ for(i = rfds.begin(); i != rfds.end(); ++i) -+ if(FD_ISSET(*i, &rf)) -+ return true; -+ -+ for(i = wfds.begin(); i != wfds.end(); ++i) -+ if(FD_ISSET(*i, &wf)) -+ return true; -+ -+ return false; -+} -+ -+bool msnhook::online() const { -+ return fonline; -+} -+ -+bool msnhook::logged() const { -+ return fonline && flogged; -+} -+ -+bool msnhook::isconnecting() const { -+ return fonline && !flogged; -+} -+ -+bool msnhook::enabled() const { -+ return true; -+} -+ -+bool msnhook::send(const imevent &ev) { -+ string text; -+ -+ if(ev.gettype() == imevent::message) { -+ const immessage *m = static_cast<const immessage *>(&ev); -+ if(m) text = m->gettext(); -+ -+ } else if(ev.gettype() == imevent::url) { -+ const imurl *m = static_cast<const imurl *>(&ev); -+ if(m) text = m->geturl() + "\n\n" + m->getdescription(); -+ -+ } else if(ev.gettype() == imevent::file) { -+ const imfile *m = static_cast<const imfile *>(&ev); -+ vector<imfile::record> files = m->getfiles(); -+ vector<imfile::record>::const_iterator ir; -+ -+ for(ir = files.begin(); ir != files.end(); ++ir) { -+ imfile::record r; -+ invitation_ftp *p; -+ -+ r.fname = ir->fname; -+ r.size = ir->size; -+ -+ imfile fr(ev.getcontact(), imevent::outgoing, "", vector<imfile::record>(1, r)); -+ -+ if(p = msn_filetrans_send(&conn, ir->fname.c_str())) -+ transferinfo[fr].first = p; -+ } -+ -+ return true; -+ } -+ -+ icqcontact *c = clist.get(ev.getcontact()); -+ text = siconv(text, conf.getrussian(msn) ? "koi8-u" : conf.getdefcharset(), "utf-8"); -+ -+ if(c) -+ if(c->getstatus() != offline || !c->inlist()) { -+ msn_send_IM(&conn, nicknormalize(ev.getcontact().nickname).c_str(), text.c_str()); -+ return true; -+ } -+ -+ return false; -+} -+ -+void msnhook::sendnewuser(const imcontact &ic) { -+ if(logged()) { -+ icqcontact *c; -+ imcontact icc(nicktodisp(ic.nickname), msn); -+ -+ if(icc.nickname != ic.nickname) -+ if(c = clist.get(ic)) { -+ c->setdesc(icc); -+ c->setnick(icc.nickname); -+ c->setdispnick(icc.nickname); -+ } -+ -+ msn_add_to_list(&conn, "FL", nicknormalize(ic.nickname).c_str()); -+ } -+ -+ requestinfo(ic); -+} -+ -+void msnhook::setautostatus(imstatus st) { -+ if(st != offline) { -+ if(getstatus() == offline) { -+ connect(); -+ } else { -+ logger.putourstatus(msn, ourstatus, st); -+ msn_set_state(&conn, stat2name(ourstatus = st)); -+ } -+ } else { -+ if(getstatus() != offline) { -+ disconnect(); -+ } -+ } -+} -+ -+imstatus msnhook::getstatus() const { -+ return online() ? ourstatus : offline; -+} -+ -+void msnhook::removeuser(const imcontact &ic) { -+ removeuser(ic, true); -+} -+ -+void msnhook::removeuser(const imcontact &ic, bool report) { -+ if(online()) { -+ if(report) -+ face.log(_("+ [msn] removing %s from the contacts"), ic.nickname.c_str()); -+ -+ msn_del_from_list(&conn, "FL", nicknormalize(ic.nickname).c_str()); -+ } -+} -+ -+void msnhook::requestinfo(const imcontact &ic) { -+ icqcontact *c = clist.get(ic); -+ -+ if(!c) { -+ c = clist.get(contactroot); -+ c->clear(); -+ } -+ -+ icqcontact::moreinfo m = c->getmoreinfo(); -+ icqcontact::basicinfo b = c->getbasicinfo(); -+ -+ b.email = nicknormalize(ic.nickname); -+ m.homepage = "http://members.msn.com/" + b.email; -+ -+ if(ic.nickname == conf.getourid(msn).nickname) -+ c->setnick(friendlynicks[ic.nickname]); -+ -+ c->setmoreinfo(m); -+ c->setbasicinfo(b); -+} -+ -+void msnhook::lookup(const imsearchparams ¶ms, verticalmenu &dest) { -+ if(params.reverse) { -+ vector<pair<string, string> >::const_iterator i = slst["RL"].begin(); -+ -+ while(i != slst["RL"].end()) { -+ icqcontact *c = new icqcontact(imcontact(nicktodisp(i->first), msn)); -+ c->setnick(i->second); -+ -+ dest.additem(conf.getcolor(cp_clist_msn), c, (string) " " + i->first); -+ ++i; -+ } -+ face.findready(); -+ -+ face.log(_("+ [msn] reverse users listing finished, %d found"), -+ slst["RL"].size()); -+ -+ dest.redraw(); -+ } -+} -+ -+vector<icqcontact *> msnhook::getneedsync() { -+ int i; -+ vector<icqcontact *> r; -+ bool found; -+ -+ for(i = 0; i < clist.count; i++) { -+ icqcontact *c = (icqcontact *) clist.at(i); -+ -+ if(c->getdesc().pname == msn) { -+ vector<pair<string, string> >::const_iterator fi = slst["FL"].begin(); -+ -+ for(found = false; fi != slst["FL"].end() && !found; ++fi) -+ found = c->getdesc().nickname == fi->first; -+ -+ if(!found) -+ r.push_back(c); -+ } -+ } -+ -+ return r; -+} -+ -+void msnhook::sendupdateuserinfo(const icqcontact &c) { -+ msn_set_friendlyname(&conn, c.getnick().c_str()); -+} -+ -+void msnhook::checkfriendly(icqcontact *c, const string friendlynick, bool forcefetch) { -+ string oldnick = c->getnick(); -+ string newnick = siconv(unmime(friendlynick), "utf-8", conf.getrussian(msn) ? "koi8-u" : conf.getdefcharset()); -+ -+ c->setnick(newnick); -+ -+ if(forcefetch || (oldnick != newnick && c->getdispnick() != oldnick) || oldnick.empty()) { -+ c->setdispnick(newnick); -+ face.relaxedupdate(); -+ } -+} -+ -+void msnhook::checkinlist(imcontact ic) { -+ icqcontact *c = clist.get(ic); -+ vector<icqcontact *> notremote = getneedsync(); -+ -+ if(c) -+ if(c->inlist()) -+ if(find(notremote.begin(), notremote.end(), c) != notremote.end()) -+ mhook.sendnewuser(ic); -+} -+ -+bool msnhook::knowntransfer(const imfile &fr) const { -+ return transferinfo.find(fr) != transferinfo.end(); -+} -+ -+void msnhook::replytransfer(const imfile &fr, bool accept, const string &localpath) { -+ if(accept) { -+ transferinfo[fr].second = localpath; -+ -+ if(transferinfo[fr].second.substr(transferinfo[fr].second.size()-1) != "/") -+ transferinfo[fr].second += "/"; -+ -+ transferinfo[fr].second += justfname(fr.getfiles().begin()->fname); -+ msn_filetrans_accept(transferinfo[fr].first, transferinfo[fr].second.c_str()); -+ -+ } else { -+ msn_filetrans_reject(transferinfo[fr].first); -+ transferinfo.erase(fr); -+ -+ } -+} -+ -+void msnhook::aborttransfer(const imfile &fr) { -+ msn_filetrans_reject(transferinfo[fr].first); -+ -+ face.transferupdate(fr.getfiles().begin()->fname, fr, -+ icqface::tsCancel, 0, 0); -+ -+ transferinfo.erase(fr); -+} -+ -+bool msnhook::getfevent(invitation_ftp *fhandle, imfile &fr) { -+ map<imfile, pair<invitation_ftp *, string> >::const_iterator i = transferinfo.begin(); -+ -+ while(i != transferinfo.end()) { -+ if(i->second.first == fhandle) { -+ fr = i->first; -+ return true; -+ } -+ ++i; -+ } -+ -+ return false; -+} -+ -+// ---------------------------------------------------------------------------- -+ -+static void log(const string &s) { -+#ifdef DEBUG -+ face.log(s); -+#endif -+} -+ -+int ext_debug( char *str ) -+{ -+ log( str ); -+ return 0; -+} -+ -+void ext_register_sock(int s, int reading, int writing) { -+ log("ext_register_sock"); -+ if(reading) mhook.rfds.push_back(s); -+ if(writing) mhook.wfds.push_back(s); -+} -+ -+void ext_unregister_sock(int s) { -+ log("ext_unregister_sock"); -+ vector<int>::iterator i; -+ -+ i = find(mhook.rfds.begin(), mhook.rfds.end(), s); -+ if(i != mhook.rfds.end()) mhook.rfds.erase(i); -+ -+ i = find(mhook.wfds.begin(), mhook.wfds.end(), s); -+ if(i != mhook.wfds.end()) mhook.wfds.erase(i); -+} -+ -+void ext_got_friendlyname(msnconn * conn, const char * friendlyname) { -+ log("ext_got_friendlyname"); -+ -+ if(friendlyname) -+ if(strlen(friendlyname)) -+ mhook.friendlynicks[conf.getourid(msn).nickname] = friendlyname; -+} -+ -+void ext_got_info(msnconn *conn, syncinfo *info) { -+ log("ext_got_info"); -+ -+ userdata *ud; -+ llist *lst, *pl; -+ imcontact ic; -+ -+ for(lst = info->fl; lst; lst = lst->next) { -+ ud = (userdata *) lst->data; -+ -+ mhook.slst["FL"].push_back(make_pair(ud->username, ud->friendlyname)); -+ -+ ic = imcontact(nicktodisp(ud->username), msn); -+ icqcontact *c = clist.get(ic); -+ if(!c) c = clist.addnew(ic, false); -+ -+ icqcontact::basicinfo bi = c->getbasicinfo(); -+ icqcontact::workinfo wi = c->getworkinfo(); -+ -+ for(pl = ud->phone; pl; pl = pl->next) { -+ phonedata *pd = (phonedata *) pl->data; -+ string title = pd->title ? pd->title : ""; -+ -+ if(pd->number) -+ if(strlen(pd->number)) { -+ if(title == "PHH") bi.phone = pd->number; else -+ if(title == "PHW") wi.phone = pd->number; else -+ if(title == "PHM") bi.cellular = pd->number; -+ } -+ } -+ -+ c->setbasicinfo(bi); -+ c->setworkinfo(wi); -+ } -+ -+ for(lst = info->rl; lst; lst = lst->next) { -+ ud = (userdata *) lst->data; -+ mhook.slst["RL"].push_back(make_pair(ud->username, ud->friendlyname)); -+ } -+ -+ mhook.setautostatus(mhook.ourstatus); -+} -+ -+void ext_latest_serial(msnconn * conn, int serial) { -+ log("ext_latest_serial"); -+} -+ -+void ext_got_GTC(msnconn * conn, char c) { -+ log("ext_got_GTC"); -+} -+ -+void ext_got_BLP(msnconn * conn, char c) { -+ log("ext_got_BLP"); -+} -+ -+void ext_new_RL_entry(msnconn *conn, const char *username, const char *friendlyname) { -+ log("ext_new_RL_entry"); -+ msn_add_to_list(&mhook.conn, "AL", username); -+ -+ imcontact ic(nicktodisp(username), msn); -+ mhook.checkinlist(ic); -+ em.store(imnotification(ic, _("The user has added you to his/her contact list"))); -+} -+ -+void ext_new_list_entry(msnconn *conn, const char *lst, const char *username) { -+ log("ext_new_list_entry"); -+ mhook.slst[lst].push_back(make_pair(username, string())); -+} -+ -+void ext_del_list_entry(msnconn *conn, const char *lst, const char *username) { -+ log("ext_del_list_entry"); -+ -+ vector<pair<string, string> >::iterator i = mhook.slst[lst].begin(); -+ while(i != mhook.slst[lst].end()) { -+ if(i->first == username) { -+ mhook.slst[lst].erase(i); -+ i = mhook.slst[lst].begin(); -+ } else { -+ ++i; -+ } -+ } -+} -+ -+void ext_show_error(msnconn * conn, const char * msg) { -+ log("ext_show_error"); -+ log(msg); -+} -+ -+void ext_buddy_set(msnconn * conn, const char * buddy, const char * friendlyname, const char * status) { -+ log("ext_buddy_set"); -+ imcontact ic(nicktodisp(buddy), msn); -+ icqcontact *c = clist.get(ic); -+ bool forcefetch; -+ -+ if(forcefetch = !c) -+ c = clist.addnew(ic, false); -+ -+ if(friendlyname) -+ mhook.checkfriendly(c, friendlyname, forcefetch); -+ -+ logger.putonline(ic, c->getstatus(), msn2imstatus(status)); -+ c->setstatus(msn2imstatus(status)); -+} -+ -+void ext_buddy_offline(msnconn * conn, const char * buddy) { -+ log("ext_buddy_offline"); -+ ext_buddy_set(conn, buddy, 0, "FLN"); -+} -+ -+void ext_got_SB(msnconn * conn, void * tag) { -+ log("ext_got_SB"); -+} -+ -+void ext_user_joined(msnconn *conn, const char *username, const char *friendlyname, int is_initial) { -+ log("ext_user_joined"); -+} -+ -+void ext_user_left(msnconn *conn, const char *username) { -+ log("ext_user_left"); -+} -+ -+void ext_got_IM(msnconn *conn, const char *username, const char *friendlyname, message *msg) { -+ log("ext_got_IM"); -+ imcontact ic(nicktodisp(username), msn); -+ -+ mhook.checkinlist(ic); -+ -+ string text = siconv(msg->body, "utf-8", conf.getrussian(msn) ? "koi8-u" : conf.getdefcharset()); -+ em.store(immessage(ic, imevent::incoming, text)); -+} -+ -+void ext_IM_failed(msnconn *conn) { -+ log("ext_IM_failed"); -+} -+ -+void ext_typing_user(msnconn *conn, const char *username, const char *friendlyname) { -+ log("ext_typing_user"); -+ icqcontact *c = clist.get(imcontact(nicktodisp(username), msn)); -+ if(c) c->setlasttyping(timer_current); -+} -+ -+void ext_initial_email(msnconn *conn, int unread_inbox, int unread_folders) { -+ log("ext_initial_email"); -+ -+ face.log(_("+ [msn] unread e-mail: %d in inbox, %d in folders"), -+ unread_inbox, unread_folders); -+} -+ -+void ext_new_mail_arrived(msnconn *conn, const char *from, const char *subject) { -+ log("ext_new_mail_arrived"); -+ -+ face.log(_("+ [msn] e-mail from %s, %s"), from, subject); -+ clist.get(contactroot)->playsound(imevent::email); -+} -+ -+void ext_filetrans_invite(msnconn *conn, const char *username, const char *friendlyname, invitation_ftp *inv) { -+ log("ext_filetrans_invite"); -+ -+ if(!mhook.fcapabs.count(hookcapab::files)) -+ return; -+ -+ imfile::record r; -+ r.fname = inv->filename; -+ r.size = inv->filesize; -+ -+ imcontact ic(nicktodisp(username), msn); -+ mhook.checkinlist(ic); -+ -+ imfile fr(ic, imevent::incoming, "", vector<imfile::record>(1, r)); -+ -+ mhook.transferinfo[fr].first = inv; -+ em.store(fr); -+ -+ face.transferupdate(inv->filename, fr, icqface::tsInit, inv->filesize, 0); -+} -+ -+void ext_filetrans_progress(invitation_ftp *inv, const char *status, unsigned long sent, unsigned long total) { -+ log("ext_filetrans_progress"); -+ imfile fr; -+ -+ if(mhook.getfevent(inv, fr)) { -+ face.transferupdate(fr.getfiles().begin()->fname, fr, -+ icqface::tsProgress, total, sent); -+ } -+} -+ -+void ext_filetrans_failed(invitation_ftp *inv, int error, const char *message) { -+ log("ext_filetrans_failed"); -+ imfile fr; -+ -+ if(mhook.getfevent(inv, fr)) { -+ face.transferupdate(fr.getfiles().begin()->fname, fr, icqface::tsError, 0, 0); -+ mhook.transferinfo.erase(fr); -+ } -+} -+ -+void ext_filetrans_success(invitation_ftp *inv) { -+ log("ext_filetrans_success"); -+ imfile fr; -+ -+ if(mhook.getfevent(inv, fr)) { -+ face.transferupdate(fr.getfiles().begin()->fname, fr, icqface::tsFinish, 0, 0); -+ mhook.transferinfo.erase(fr); -+ } -+} -+ -+void ext_new_connection(msnconn *conn) { -+ log("ext_new_connection"); -+ if(conn->type == CONN_NS) { -+ msn_sync_lists(conn, 0); -+ logger.putourstatus(msn, offline, mhook.ourstatus = mhook.manualstatus); -+ mhook.flogged = true; -+ face.log(_("+ [msn] logged in")); -+ face.update(); -+ } -+} -+ -+void ext_closing_connection(msnconn *conn) { -+ log("ext_closing_connection"); -+ if(conn->type == CONN_NS) { -+ mhook.rfds.clear(); -+ mhook.wfds.clear(); -+ logger.putourstatus(msn, mhook.getstatus(), mhook.ourstatus = offline); -+ clist.setoffline(msn); -+ mhook.fonline = false; -+ mhook.slst.clear(); -+ face.log(_("+ [msn] disconnected")); -+ face.update(); -+ } -+} -+ -+void ext_changed_state(msnconn *conn, const char *state) { -+ log("ext_changed_state"); -+} -+ -+int ext_do_connect_socket(const char *hostname, int port, int ssl) { -+ struct sockaddr_in sa; -+ struct hostent *hp; -+ int a, s; -+ string msgerr = _("+ [msn] cannot connect: "); -+ -+ hp = gethostbyname(hostname); -+ if(!hp) { -+ face.log(msgerr + _("could not resolve hostname")); -+ errno = ECONNREFUSED; -+ return -1; -+ } -+ -+ memset(&sa, 0, sizeof(sa)); -+ memcpy((char *) &sa.sin_addr, hp->h_addr, hp->h_length); -+ sa.sin_family = hp->h_addrtype; -+ sa.sin_port = htons((u_short) port); -+ -+ if((s = socket(hp->h_addrtype, SOCK_STREAM, 0)) < 0) -+ return -1; -+ -+ if(cw_connect(s, (struct sockaddr *) &sa, sizeof(sa), ssl) < 0) { -+ face.log(msgerr + _("verify the hostname and port")); -+ close(s); -+ return -1; -+ } -+ -+ return s; -+} -+ -+int ext_connect_socket_ssl(const char *hostname, int port) { -+ log("ext_connect_socket_ssl"); -+ return ext_do_connect_socket(hostname, port, 1); -+} -+ -+int ext_connect_socket(const char *hostname, int port) { -+ log("ext_connect_socket"); -+ return ext_do_connect_socket(hostname, port, 0); -+} -+ -+int ext_server_socket(int port) { -+ log("ext_server_socket"); -+ int s; -+ struct sockaddr_in addr; -+ -+ if((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) -+ return -1; -+ -+ memset(&addr, 0, sizeof(addr)); -+ addr.sin_family = AF_INET; -+ addr.sin_port = htons(port); -+ -+ if(bind(s, (sockaddr *) &addr, sizeof(addr)) < 0 || listen(s, 1) < 0) { -+ close(s); -+ return -1; -+ } -+ -+ return s; -+} -+ -+char *ext_get_IP() { -+ log("ext_get_IP"); -+ struct hostent *hn; -+ char buf2[1024]; -+ -+ gethostname(buf2, 1024); -+ hn = gethostbyname(buf2); -+ -+ return inet_ntoa(*((struct in_addr*) hn->h_addr)); -+} -+ -+void ext_protocol_log(const char *buf, int readev, int writeev) { -+ if(readev) { -+ log(string("[IN] ") + buf); -+ } else if(writeev) { -+ log(string("[OUT] ") + buf); -+ } -+} -+ -+#endif diff -ruN /usr/ports/net/centericq/files/msn-msnhook.h ./centericq/files/msn-msnhook.h --- /usr/ports/net/centericq/files/msn-msnhook.h Tue Nov 4 00:16:27 2003 +++ ./centericq/files/msn-msnhook.h Thu Jan 1 08:00:00 1970 @@ -1,92 +0,0 @@ ---- src/hooks/msnhook.h.orig Mon Nov 3 20:25:39 2003 -+++ src/hooks/msnhook.h Mon Nov 3 20:24:23 2003 -@@ -0,0 +1,89 @@ -+#ifndef __MSNHOOK_H__ -+#define __MSNHOOK_H__ -+ -+#include "abstracthook.h" -+ -+#ifdef BUILD_MSN -+ -+#include "msn_core.h" -+ -+class msnhook : public abstracthook { -+ -+ friend void ext_register_sock(int s, int reading, int writing); -+ friend void ext_unregister_sock(int s); -+ friend void ext_new_connection(msnconn *conn); -+ friend void ext_closing_connection(msnconn * conn); -+ friend void ext_buddy_set(msnconn *conn, const char *buddy, const char *friendlyname, const char *status); -+ friend void ext_got_info(msnconn *conn, syncinfo *info); -+ friend void ext_got_friendlyname(msnconn *conn, const char *friendlyname); -+ friend void ext_new_RL_entry(msnconn *conn, const char *username, const char *friendlyname); -+ friend void ext_new_list_entry(msnconn *conn, const char *lst, const char *username); -+ friend void ext_del_list_entry(msnconn *conn, const char *lst, const char *username); -+ friend void ext_got_IM(msnconn *conn, const char *username, const char *friendlyname, message *msg); -+ friend void ext_filetrans_invite(msnconn *conn, const char *username, const char *friendlyname, invitation_ftp *inv); -+ friend void ext_typing_user(msnconn *conn, const char *username, const char *friendlyname); -+ friend void ext_filetrans_progress(invitation_ftp *inv, const char *status, unsigned long sent, unsigned long total); -+ friend void ext_filetrans_failed(invitation_ftp *inv, int error, const char *message); -+ friend void ext_filetrans_success(invitation_ftp *inv); -+ -+ protected: -+ imstatus ourstatus; -+ bool fonline, flogged; -+ msnconn conn; -+ -+ vector<int> rfds, wfds; -+ map<string, string> friendlynicks; -+ map<string, vector<pair<string, string> > > slst; -+ map<imfile, pair<invitation_ftp *, string> > transferinfo; -+ -+ void checkfriendly(icqcontact *c, const string friendlynick, -+ bool forcefetch = false); -+ -+ void checkinlist(imcontact ic); -+ -+ void removeuser(const imcontact &ic, bool report); -+ bool getfevent(invitation_ftp *fhandle, imfile &fr); -+ -+ public: -+ msnhook(); -+ ~msnhook(); -+ -+ void init(); -+ -+ void connect(); -+ void disconnect(); -+ void exectimers(); -+ void main(); -+ -+ void getsockets(fd_set &rf, fd_set &wf, fd_set &ef, int &hsocket) const; -+ bool isoursocket(fd_set &rf, fd_set &wf, fd_set &ef) const; -+ -+ bool online() const; -+ bool logged() const; -+ bool isconnecting() const; -+ bool enabled() const; -+ -+ bool send(const imevent &ev); -+ -+ void sendnewuser(const imcontact &c); -+ void removeuser(const imcontact &ic); -+ void requestinfo(const imcontact &ic); -+ -+ void sendupdateuserinfo(const icqcontact &c); -+ -+ void setautostatus(imstatus st); -+ imstatus getstatus() const; -+ -+ void lookup(const imsearchparams ¶ms, verticalmenu &dest); -+ vector<icqcontact *> getneedsync(); -+ -+ bool knowntransfer(const imfile &fr) const; -+ void replytransfer(const imfile &fr, bool accept, const string &localpath = string()); -+ void aborttransfer(const imfile &fr); -+}; -+ -+extern msnhook mhook; -+ -+#endif -+ -+#endif diff -ruN /usr/ports/net/centericq/files/msn-src::Makefile.in ./centericq/files/msn-src::Makefile.in --- /usr/ports/net/centericq/files/msn-src::Makefile.in Tue Nov 4 00:16:27 2003 +++ ./centericq/files/msn-src::Makefile.in Thu Jan 1 08:00:00 1970 @@ -1,17 +0,0 @@ ---- src/Makefile.in.orig Sat Oct 25 15:53:46 2003 -+++ src/Makefile.in Mon Nov 3 20:16:35 2003 -@@ -92,11 +92,11 @@ - USE_NLS = @USE_NLS@ - VERSION = @VERSION@ - --INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/src/hooks -I$(top_srcdir)/firetalk-0.1 -I$(top_srcdir)/kkconsui-0.1/include -I$(top_srcdir)/kkstrtext-0.1 -I$(top_srcdir)/libicq2000-0.1 -I$(top_srcdir)/libjabber-0.1 -I$(top_srcdir)/libyahoo2-0.1 -I$(top_srcdir)/kksystr-0.1/include -I$(top_srcdir)/connwrap-0.1 -I$(top_srcdir)/intl -+INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/src/hooks -I$(top_srcdir)/firetalk-0.1 -I$(top_srcdir)/kkconsui-0.1/include -I$(top_srcdir)/kkstrtext-0.1 -I$(top_srcdir)/libicq2000-0.1 -I$(top_srcdir)/libjabber-0.1 -I$(top_srcdir)/libyahoo2-0.1 -I$(top_srcdir)/kksystr-0.1/include -I$(top_srcdir)/connwrap-0.1 -I$(top_srcdir)/intl -I$(top_srcdir)/blip-0.1 - bin_PROGRAMS = centericq - centericq_SOURCES = centericq.cc icqcontact.cc icqgroups.cc eventmanager.cc icqdialogs.cc icqhist.cc imexternal.cc imcontact.cc imlogger.cc accountmanager.cc icqcontacts.cc icqmlist.cc imcontroller.cc icqconf.cc imevents.cc icqface.cc centermain.cc icqgroup.cc --centericq_LDFLAGS = -L$(top_srcdir)/firetalk-0.1 -L$(top_srcdir)/kkconsui-0.1 -L$(top_srcdir)/kkstrtext-0.1 -L$(top_srcdir)/libicq2000-0.1 -L$(top_srcdir)/libjabber-0.1 -L$(top_srcdir)/libyahoo2-0.1 -L$(top_srcdir)/kksystr-0.1 -L$(top_srcdir)/connwrap-0.1 --centericq_LDADD = $(top_srcdir)/src/hooks/libhooks.a -lfiretalk -lkkconsui -lkkstrtext -llibicq2000 -llibjabber -llibyahoo2 -lkksystr -lconnwrap @INTLLIBS@ -+centericq_LDFLAGS = -L$(top_srcdir)/firetalk-0.1 -L$(top_srcdir)/kkconsui-0.1 -L$(top_srcdir)/kkstrtext-0.1 -L$(top_srcdir)/libicq2000-0.1 -L$(top_srcdir)/libjabber-0.1 -L$(top_srcdir)/libyahoo2-0.1 -L$(top_srcdir)/kksystr-0.1 -L$(top_srcdir)/connwrap-0.1 -L$(top_srcdir)/blip-0.1 -+centericq_LDADD = $(top_srcdir)/src/hooks/libhooks.a -lfiretalk -lkkconsui -lkkstrtext -llibicq2000 -llibjabber -llibyahoo2 -lkksystr -lconnwrap @INTLLIBS@ -intl -lblip - SUBDIRS = hooks - EXTRA_DIST = centericq.cc icqcontact.cc icqgroups.cc eventmanager.cc icqdialogs.cc icqhist.cc imexternal.cc imcontact.cc imlogger.cc accountmanager.cc icqcontacts.cc icqmlist.cc imcontroller.cc icqconf.cc imevents.cc icqface.cc centermain.cc icqgroup.cc icqmlist.h imcontroller.h icqcommon.h icqcontacts.h centericq.h icqgroup.h imcontact.h accountmanager.h eventmanager.h imevents.h icqcontact.h imlogger.h icqconf.h icqface.h icqgroups.h icqhist.h imexternal.h - AUTOMAKE_OPTIONS = foreign diff -ruN /usr/ports/net/centericq/files/msn-src::hooks::Makefile.in ./centericq/files/msn-src::hooks::Makefile.in --- /usr/ports/net/centericq/files/msn-src::hooks::Makefile.in Tue Nov 4 00:16:27 2003 +++ ./centericq/files/msn-src::hooks::Makefile.in Thu Jan 1 08:00:00 1970 @@ -1,34 +0,0 @@ ---- src/hooks/Makefile.in.orig Sat Oct 25 15:53:46 2003 -+++ src/hooks/Makefile.in Mon Nov 3 21:35:39 2003 -@@ -92,10 +92,10 @@ - USE_NLS = @USE_NLS@ - VERSION = @VERSION@ - --INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/src/hooks -I$(top_srcdir)/firetalk-0.1 -I$(top_srcdir)/kkconsui-0.1/include -I$(top_srcdir)/kkstrtext-0.1 -I$(top_srcdir)/libicq2000-0.1 -I$(top_srcdir)/libjabber-0.1 -I$(top_srcdir)/libyahoo2-0.1 -I$(top_srcdir)/kksystr-0.1/include -I$(top_srcdir)/connwrap-0.1 -I$(top_srcdir)/intl -+INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/src/hooks -I$(top_srcdir)/firetalk-0.1 -I$(top_srcdir)/kkconsui-0.1/include -I$(top_srcdir)/kkstrtext-0.1 -I$(top_srcdir)/libicq2000-0.1 -I$(top_srcdir)/libjabber-0.1 -I$(top_srcdir)/libyahoo2-0.1 -I$(top_srcdir)/kksystr-0.1/include -I$(top_srcdir)/connwrap-0.1 -I$(top_srcdir)/intl -I$(top_srcdir)/blip-0.1 - noinst_LIBRARIES = libhooks.a --libhooks_a_SOURCES = yahoohook.cc jabberhook.cc aimhook.cc icqhook.cc irchook.cc abstracthook.cc rsshook.cc HTTPClient.cc ljhook.cc --EXTRA_DIST = yahoohook.cc jabberhook.cc aimhook.cc icqhook.cc irchook.cc abstracthook.cc rsshook.cc HTTPClient.cc ljhook.cc yahoohook.h aimhook.h jabberhook.h icqhook.h irchook.h abstracthook.h rsshook.h HTTPClient.h ljhook.h -+libhooks_a_SOURCES = yahoohook.cc jabberhook.cc aimhook.cc icqhook.cc irchook.cc abstracthook.cc rsshook.cc HTTPClient.cc ljhook.cc msnhook.cc -+EXTRA_DIST = yahoohook.cc jabberhook.cc aimhook.cc icqhook.cc irchook.cc abstracthook.cc rsshook.cc HTTPClient.cc ljhook.cc msnhook.cc yahoohook.h aimhook.h jabberhook.h icqhook.h irchook.h abstracthook.h rsshook.h HTTPClient.h ljhook.h msnhook.h - mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs - CONFIG_HEADER = ../../config.h - CONFIG_CLEAN_FILES = -@@ -108,7 +108,7 @@ - LIBS = @LIBS@ - libhooks_a_LIBADD = - libhooks_a_OBJECTS = yahoohook.o jabberhook.o aimhook.o icqhook.o \ --irchook.o abstracthook.o rsshook.o HTTPClient.o ljhook.o -+irchook.o abstracthook.o rsshook.o HTTPClient.o ljhook.o msnhook.o - AR = ar - CXXFLAGS = @CXXFLAGS@ - CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -@@ -123,7 +123,7 @@ - GZIP_ENV = --best - DEP_FILES = .deps/HTTPClient.P .deps/abstracthook.P .deps/aimhook.P \ - .deps/icqhook.P .deps/irchook.P .deps/jabberhook.P .deps/ljhook.P \ --.deps/rsshook.P .deps/yahoohook.P -+.deps/rsshook.P .deps/yahoohook.P .deps/msnhook.P - SOURCES = $(libhooks_a_SOURCES) - OBJECTS = $(libhooks_a_OBJECTS) - diff -ruN /usr/ports/net/centericq/files/patch-Xml.h ./centericq/files/patch-Xml.h --- /usr/ports/net/centericq/files/patch-Xml.h Mon Mar 29 08:31:42 2004 +++ ./centericq/files/patch-Xml.h Thu Jan 1 08:00:00 1970 @@ -1,11 +0,0 @@ ---- libicq2000-0.1/src/Xml.h.orig Sun Jul 27 14:08:10 2003 -+++ libicq2000-0.1/src/Xml.h Sun Jul 27 14:08:26 2003 -@@ -24,6 +24,8 @@ - #ifndef XML_H - #define XML_H - -+using namespace std; -+ - #include <string> - #include <list> - #include <ctype.h> diff -ruN /usr/ports/net/centericq/files/patch-configure ./centericq/files/patch-configure --- /usr/ports/net/centericq/files/patch-configure Sun Mar 28 19:04:30 2004 +++ ./centericq/files/patch-configure Thu Jan 1 08:00:00 1970 @@ -1,20 +0,0 @@ ---- configure.orig Mon Mar 22 21:27:18 2004 -+++ configure Sun Mar 28 12:33:02 2004 -@@ -4907,7 +4907,7 @@ - #include "confdefs.h" - #include <libintl.h> - extern int _nl_msg_cat_cntr; --extern int *_nl_domain_bindings; -+extern int *libintl_nl_domain_bindings; - extern - #ifdef __cplusplus - "C" -@@ -4915,7 +4915,7 @@ - const char *_nl_expand_alias (); - int main() { - bindtextdomain ("", ""); --return (int) gettext ("") + _nl_msg_cat_cntr + *_nl_domain_bindings + *_nl_expand_alias (0) -+return (int) gettext ("") + _nl_msg_cat_cntr + *libintl_nl_domain_bindings + *_nl_expand_alias (0) - ; return 0; } - EOF - if { (eval echo configure:4922: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then diff -ruN /usr/ports/net/centericq/files/patch-msn-connection.cpp ./centericq/files/patch-msn-connection.cpp --- /usr/ports/net/centericq/files/patch-msn-connection.cpp Thu Jan 1 08:00:00 1970 +++ ./centericq/files/patch-msn-connection.cpp Thu Jul 1 17:25:49 2004 @@ -0,0 +1,12 @@ +--- libmsn-0.1/msn/connection.cpp.orig Tue Jun 29 07:17:07 2004 ++++ libmsn-0.1/msn/connection.cpp Thu Jul 1 17:04:36 2004 +@@ -27,8 +27,8 @@ + #include <msn/externals.h> + + #ifndef WIN32 +-#include <sys/socket.h> + #include <unistd.h> ++#include <sys/socket.h> + #else + #include <winsock.h> + #include <io.h> diff -ruN /usr/ports/net/centericq/files/patch-msn-filetransfer.cpp ./centericq/files/patch-msn-filetransfer.cpp --- /usr/ports/net/centericq/files/patch-msn-filetransfer.cpp Thu Jan 1 08:00:00 1970 +++ ./centericq/files/patch-msn-filetransfer.cpp Thu Jul 1 17:25:22 2004 @@ -0,0 +1,10 @@ +--- libmsn-0.1/msn/filetransfer.cpp.orig Tue Jun 29 18:59:04 2004 ++++ libmsn-0.1/msn/filetransfer.cpp Thu Jul 1 17:03:28 2004 +@@ -27,6 +27,7 @@ + + #ifndef WIN32 + #include <unistd.h> ++#include <sys/time.h> + #include <sys/socket.h> + #else + #include <winsock.h> >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040702020855.20B4115378>