# HG changeset patch
# User renatofilho
# Date 1201904253 0
# Node ID 847da72672346482335d5f43b170b9c29ab64d20
# Parent  46205cce5b8e1e717b439bf7d1b5bdeff9763793
[svn r915] updated to use libupnp

diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/INSTALL
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gmyth-upnp/INSTALL	Fri Feb 01 22:17:33 2008 +0000
@@ -0,0 +1,236 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free
+Software Foundation, Inc.
+
+This file is free documentation; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.
+
+Basic Installation
+==================
+
+These are generic installation instructions.
+
+   The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions.  Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+   It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring.  (Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.)
+
+   If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release.  If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+   The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'.  You only need
+`configure.ac' if you want to change it or regenerate `configure' using
+a newer version of `autoconf'.
+
+The simplest way to compile this package is:
+
+  1. `cd' to the directory containing the package's source code and type
+     `./configure' to configure the package for your system.  If you're
+     using `csh' on an old version of System V, you might need to type
+     `sh ./configure' instead to prevent `csh' from trying to execute
+     `configure' itself.
+
+     Running `configure' takes awhile.  While running, it prints some
+     messages telling which features it is checking for.
+
+  2. Type `make' to compile the package.
+
+  3. Optionally, type `make check' to run any self-tests that come with
+     the package.
+
+  4. Type `make install' to install the programs and any data files and
+     documentation.
+
+  5. You can remove the program binaries and object files from the
+     source code directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile the package for
+     a different kind of computer), type `make distclean'.  There is
+     also a `make maintainer-clean' target, but that is intended mainly
+     for the package's developers.  If you use it, you may have to get
+     all sorts of other programs in order to regenerate files that came
+     with the distribution.
+
+Compilers and Options
+=====================
+
+Some systems require unusual options for compilation or linking that the
+`configure' script does not know about.  Run `./configure --help' for
+details on some of the pertinent environment variables.
+
+   You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment.  Here
+is an example:
+
+     ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
+
+   *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory.  To do this, you must use a version of `make' that
+supports the `VPATH' variable, such as GNU `make'.  `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script.  `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+   If you have to use a `make' that does not support the `VPATH'
+variable, you have to compile the package for one architecture at a
+time in the source code directory.  After you have installed the
+package for one architecture, use `make distclean' before reconfiguring
+for another architecture.
+
+Installation Names
+==================
+
+By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc.  You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX'.
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+   In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files.  Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.
+
+   If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System).  The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+   For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Specifying the System Type
+==========================
+
+There may be some features `configure' cannot figure out automatically,
+but needs to determine by the type of machine the package will run on.
+Usually, assuming the package is built to be run on the _same_
+architectures, `configure' can figure that out, but if it prints a
+message saying it cannot guess the machine type, give it the
+`--build=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+     CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+     OS KERNEL-OS
+
+   See the file `config.sub' for the possible values of each field.  If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+   If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+   If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+If you want to set default values for `configure' scripts to share, you
+can create a site shell script called `config.site' that gives default
+values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists.  Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+Variables not defined in a site shell script can be set in the
+environment passed to `configure'.  However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost.  In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'.  For example:
+
+     ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).  Here is a another example:
+
+     /bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
+configuration-related scripts to be executed by `/bin/bash'.
+
+`configure' Invocation
+======================
+
+`configure' recognizes the following options to control how it operates.
+
+`--help'
+`-h'
+     Print a summary of the options to `configure', and exit.
+
+`--version'
+`-V'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`--cache-file=FILE'
+     Enable the cache: use and save the results of the tests in FILE,
+     traditionally `config.cache'.  FILE defaults to `/dev/null' to
+     disable caching.
+
+`--config-cache'
+`-C'
+     Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+     Do not print messages saying which checks are being made.  To
+     suppress all normal output, redirect it to `/dev/null' (any error
+     messages will still be shown).
+
+`--srcdir=DIR'
+     Look for the package's source code in directory DIR.  Usually
+     `configure' can determine that directory automatically.
+
+`configure' also accepts some other, not widely useful, options.  Run
+`configure --help' for more details.
+
diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/Makefile.am
--- a/gmyth-upnp/Makefile.am	Fri Feb 01 19:22:17 2008 +0000
+++ b/gmyth-upnp/Makefile.am	Fri Feb 01 22:17:33 2008 +0000
@@ -1,4 +1,4 @@
-SUBDIRS= src
+SUBDIRS= src test
 
 ### all of the standard pc files we need to generate
 pcfiles = gmyth-upnp.pc
@@ -12,8 +12,6 @@
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = $(pcfiles)
 
-include aminclude.am
-
 EXTRA_DIST =                            \
         autogen.sh                      \
         gmyth-upnp.pc.in		\
diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/autogen.sh
--- a/gmyth-upnp/autogen.sh	Fri Feb 01 19:22:17 2008 +0000
+++ b/gmyth-upnp/autogen.sh	Fri Feb 01 22:17:33 2008 +0000
@@ -1,102 +1,21 @@
 #!/bin/sh
 # Run this to generate all the initial makefiles, etc.
 
-DIE=0
-package=gmyth-upnp
-srcfile=configure.ac
+srcdir=`dirname $0`
+test -z "$srcdir" && srcdir=.
 
-# a quick cvs co if necessary to alleviate the pain - may remove this
-# when developers get a clue ;)
-if test ! -d common; 
-then 
-  echo "+ getting common/ from svn"
- svn co common 
-fi
+PKG_NAME="mtv"
 
-# source helper functions
-if test ! -f common/autogen-helper.sh;
-then
-  echo There is something wrong with your source tree.
-  echo You are missing common/autogen-helper.sh
-  exit 1
-fi
-. common/autogen-helper.sh
-
-CONFIGURE_DEF_OPT='--enable-maintainer-mode'
-# uncomment below to disable the UPnP features
-#CONFIGURE_DEF_OPT+=' --disable-upnp'
-CONFIGURE_EXT_OPT="$@"
-
-autogen_options 
-
-echo -n "+ check for build tools"
-if test ! -z "$NOCHECK"; then echo " skipped"; else  echo; fi
-version_check "autoconf" "$AUTOCONF autoconf autoconf-2.54 autoconf-2.53" \
-              "ftp://ftp.gnu.org/pub/gnu/autoconf/" 2 53 || DIE=1
-version_check "automake" "$AUTOMAKE automake automake-1.9 automake-1.8 automake-1.7 automake-1.6" \
-              "ftp://ftp.gnu.org/pub/gnu/automake/" 1 6 || DIE=1
-version_check "libtoolize" "$LIBTOOLIZE libtoolize" \
-              "ftp://ftp.gnu.org/pub/gnu/libtool/" 1 5 0 || DIE=1
-version_check "pkg-config" "" \
-              "http://www.freedesktop.org/software/pkgconfig" 0 8 0 || DIE=1
-
-die_check $DIE
-
-aclocal_check || DIE=1
-autoheader_check || DIE=1
-
-die_check $DIE
-
-# if no arguments specified then this will be printed
-if test -z "$*"; then
-  echo "+ checking for autogen.sh options"
-  echo "  This autogen script will automatically run ./configure as:"
-  echo "  ./configure $CONFIGURE_DEF_OPT $CONFIGURE_EXT_OPT"
-  echo "  To pass any additional options, please specify them on the $0"
-  echo "  command line."
-fi
-
-toplevel_check $srcfile
-
-tool_run "$aclocal" "-I m4 $ACLOCAL_FLAGS"
-tool_run "$libtoolize" "--copy --force"
-tool_run "$autoheader"
-
-# touch the stamp-h.in build stamp so we don't re-run autoheader in maintainer mode -- wingo
-echo timestamp > stamp-h.in 2> /dev/null
-
-tool_run "$autoconf"
-tool_run "$automake" "-a -c"
-
-# if enable exists, add an -enable option for each of the lines in that file
-if test -f enable; then
-  for a in `cat enable`; do
-    CONFIGURE_FILE_OPT="--enable-$a"
-  done
-fi
-
-# if disable exists, add an -disable option for each of the lines in that file
-if test -f disable; then
-  for a in `cat disable`; do
-    CONFIGURE_FILE_OPT="$CONFIGURE_FILE_OPT --disable-$a"
-  done
-fi
-
-test -n "$NOCONFIGURE" && {
-  echo "+ skipping configure stage for package $package, as requested."
-  echo "+ autogen.sh done."
-  exit 0
+(test -f $srcdir/configure.ac) || {
+    echo -n "**Error**: Directory "\`$srcdir\'" does not look like the"
+    echo " top-level $PKG_NAME directory"
+    exit 1
 }
 
-echo "+ running configure ... "
-test ! -z "$CONFIGURE_DEF_OPT" && echo "  ./configure default flags: $CONFIGURE_DEF_OPT"
-test ! -z "$CONFIGURE_EXT_OPT" && echo "  ./configure external flags: $CONFIGURE_EXT_OPT"
-test ! -z "$CONFIGURE_FILE_OPT" && echo "  ./configure enable/disable flags: $CONFIGURE_FILE_OPT"
-echo
-
-./configure $CONFIGURE_DEF_OPT $CONFIGURE_EXT_OPT $CONFIGURE_FILE_OPT || {
-        echo "  configure failed"
-        exit 1
+which gnome-autogen.sh || {
+	echo "You need to install gnome-common from the GNOME CVS"
+	exit 1
 }
 
-echo "Now type 'make' to compile $package."
+ACLOCAL_FLAGS="$ACLOCAL_FLAGS"
+REQUIRED_AUTOMAKE_VERSION=1.7 USE_GNOME2_MACROS=1 USE_COMMON_DOC_BUILD=yes . gnome-autogen.sh
diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/common/Makefile.am
--- a/gmyth-upnp/common/Makefile.am	Fri Feb 01 19:22:17 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-EXTRA_DIST = autogen-helper.sh
diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/common/autogen-helper.sh
--- a/gmyth-upnp/common/autogen-helper.sh	Fri Feb 01 19:22:17 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,302 +0,0 @@
-# a silly hack that generates autoregen.sh but it's handy
-echo "#!/bin/sh" > autoregen.sh
-echo "./autogen.sh $@ \$@" >> autoregen.sh
-chmod +x autoregen.sh
-
-# helper functions for autogen.sh
-
-debug ()
-# print out a debug message if DEBUG is a defined variable
-{
-  if test ! -z "$DEBUG"
-  then
-    echo "DEBUG: $1"
-  fi
-}
-
-version_check ()
-# check the version of a package
-# first argument : package name (executable)
-# second argument : optional path where to look for it instead
-# third argument : source download url
-# rest of arguments : major, minor, micro version
-# all consecutive ones : suggestions for binaries to use
-# (if not specified in second argument)
-{
-  PACKAGE=$1
-  PKG_PATH=$2
-  URL=$3
-  MAJOR=$4
-  MINOR=$5
-  MICRO=$6
-
-  # for backwards compatibility, we let PKG_PATH=PACKAGE when PKG_PATH null
-  if test -z "$PKG_PATH"; then PKG_PATH=$PACKAGE; fi
-  debug "major $MAJOR minor $MINOR micro $MICRO"
-  VERSION=$MAJOR
-  if test ! -z "$MINOR"; then VERSION=$VERSION.$MINOR; else MINOR=0; fi
-  if test ! -z "$MICRO"; then VERSION=$VERSION.$MICRO; else MICRO=0; fi
-
-  debug "major $MAJOR minor $MINOR micro $MICRO"
-  
-  for SUGGESTION in $PKG_PATH; do 
-    COMMAND="$SUGGESTION"
-
-    # don't check if asked not to
-    test -z "$NOCHECK" && {
-      echo -n "  checking for $COMMAND >= $VERSION ... "
-    } || {
-      # we set a var with the same name as the package, but stripped of
-      # unwanted chars
-      VAR=`echo $PACKAGE | sed 's/-//g'`
-      debug "setting $VAR"
-      eval $VAR="$COMMAND"
-      return 0
-    }
-
-    debug "checking version with $COMMAND"
-    ($COMMAND --version) < /dev/null > /dev/null 2>&1 || 
-    {
-      echo "not found."
-      continue
-    }
-    # strip everything that's not a digit, then use cut to get the first field
-    pkg_version=`$COMMAND --version|head -n 1|sed 's/^[^0-9]*//'|cut -d' ' -f1`
-    debug "pkg_version $pkg_version"
-    # remove any non-digit characters from the version numbers to permit numeric
-    # comparison
-    pkg_major=`echo $pkg_version | cut -d. -f1 | sed s/[a-zA-Z\-].*//g`
-    pkg_minor=`echo $pkg_version | cut -d. -f2 | sed s/[a-zA-Z\-].*//g`
-    pkg_micro=`echo $pkg_version | cut -d. -f3 | sed s/[a-zA-Z\-].*//g`
-    test -z "$pkg_major" && pkg_major=0
-    test -z "$pkg_minor" && pkg_minor=0
-    test -z "$pkg_micro" && pkg_micro=0
-    debug "found major $pkg_major minor $pkg_minor micro $pkg_micro"
-
-    #start checking the version
-    debug "version check"
-
-    # reset check
-    WRONG=
-
-    if [ ! "$pkg_major" -gt "$MAJOR" ]; then
-      debug "major: $pkg_major <= $MAJOR"
-      if [ "$pkg_major" -lt "$MAJOR" ]; then
-        debug "major: $pkg_major < $MAJOR"
-        WRONG=1
-      elif [ ! "$pkg_minor" -gt "$MINOR" ]; then
-        debug "minor: $pkg_minor <= $MINOR"
-        if [ "$pkg_minor" -lt "$MINOR" ]; then
-          debug "minor: $pkg_minor < $MINOR"
-          WRONG=1
-        elif [ "$pkg_micro" -lt "$MICRO" ]; then
-          debug "micro: $pkg_micro < $MICRO"
-	  WRONG=1
-        fi
-      fi
-    fi
-
-    if test ! -z "$WRONG"; then
-      echo "found $pkg_version, not ok !"
-      continue
-    else
-      echo "found $pkg_version, ok."
-      # we set a var with the same name as the package, but stripped of
-      # unwanted chars
-      VAR=`echo $PACKAGE | sed 's/-//g'`
-      debug "setting $VAR"
-      eval $VAR="$COMMAND"
-      return 0
-    fi
-  done
-
-  echo "not found !"
-  echo "You must have $PACKAGE installed to compile $package."
-  echo "Download the appropriate package for your distribution,"
-  echo "or get the source tarball at $URL"
-  return 1;
-}
-
-aclocal_check ()
-{
-  # normally aclocal is part of automake
-  # so we expect it to be in the same place as automake
-  # so if a different automake is supplied, we need to adapt as well
-  # so how's about replacing automake with aclocal in the set var,
-  # and saving that in $aclocal ?
-  # note, this will fail if the actual automake isn't called automake*
-  # or if part of the path before it contains it
-  if [ -z "$automake" ]; then
-    echo "Error: no automake variable set !"
-    return 1
-  else
-    aclocal=`echo $automake | sed s/automake/aclocal/`
-    debug "aclocal: $aclocal"
-    if [ "$aclocal" != "aclocal" ];
-    then
-      CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-aclocal=$aclocal"
-    fi
-    if [ ! -x `which $aclocal` ]; then
-      echo "Error: cannot execute $aclocal !"
-      return 1
-    fi
-  fi
-}
-
-autoheader_check ()
-{
-  # same here - autoheader is part of autoconf
-  # use the same voodoo
-  if [ -z "$autoconf" ]; then
-    echo "Error: no autoconf variable set !"
-    return 1
-  else
-    autoheader=`echo $autoconf | sed s/autoconf/autoheader/`
-    debug "autoheader: $autoheader"
-    if [ "$autoheader" != "autoheader" ];
-    then
-      CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-autoheader=$autoheader"
-    fi
-    if [ ! -x `which $autoheader` ]; then
-      echo "Error: cannot execute $autoheader !"
-      return 1
-    fi
-  fi
-
-}
-
-autoconf_2_52d_check ()
-{
-  # autoconf 2.52d has a weird issue involving a yes:no error
-  # so don't allow it's use
-  test -z "$NOCHECK" && {
-    ac_version=`$autoconf --version|head -n 1|sed 's/^[a-zA-Z\.\ ()]*//;s/ .*$//'`
-    if test "$ac_version" = "2.52d"; then
-      echo "autoconf 2.52d has an issue with our current build."
-      echo "We don't know who's to blame however.  So until we do, get a"
-      echo "regular version.  RPM's of a working version are on the gstreamer site."
-      exit 1
-    fi
-  }
-  return 0
-}
-
-die_check ()
-{
-  # call with $DIE
-  # if set to 1, we need to print something helpful then die
-  DIE=$1
-  if test "x$DIE" = "x1";
-  then
-    echo
-    echo "- Please get the right tools before proceeding."
-    echo "- Alternatively, if you're sure we're wrong, run with --nocheck."
-    exit 1
-  fi
-}
-
-autogen_options ()
-{
-  if test "x$1" = "x"; then
-    return 0
-  fi
-
-  while test "x$1" != "x" ; do
-    optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
-    case "$1" in
-      --noconfigure)
-          NOCONFIGURE=defined
-	  AUTOGEN_EXT_OPT="$AUTOGEN_EXT_OPT --noconfigure"
-          echo "+ configure run disabled"
-          shift
-          ;;
-      --nocheck)
-	  AUTOGEN_EXT_OPT="$AUTOGEN_EXT_OPT --nocheck"
-          NOCHECK=defined
-          echo "+ autotools version check disabled"
-          shift
-          ;;
-      --debug)
-          DEBUG=defined
-	  AUTOGEN_EXT_OPT="$AUTOGEN_EXT_OPT --debug"
-          echo "+ debug output enabled"
-          shift
-          ;;
-      --prefix=*)
-	  CONFIGURE_EXT_OPT="$CONFIGURE_EXT_OPT --prefix=$optarg"
-	  echo "+ passing --prefix=$optarg to configure"
-          shift
-          ;;
-      --prefix)
-	  shift
-	  echo "DEBUG: $1"
-	  CONFIGURE_EXT_OPT="$CONFIGURE_EXT_OPT --prefix=$1"
-	  echo "+ passing --prefix=$1 to configure"
-          shift
-          ;;
-      -h|--help)
-          echo "autogen.sh (autogen options) -- (configure options)"
-          echo "autogen.sh help options: "
-          echo " --noconfigure            don't run the configure script"
-          echo " --nocheck                don't do version checks"
-          echo " --debug                  debug the autogen process"
-	  echo " --prefix		  will be passed on to configure"
-          echo
-          echo " --with-autoconf PATH     use autoconf in PATH"
-          echo " --with-automake PATH     use automake in PATH"
-          echo
-          echo "to pass options to configure, put them as arguments after -- "
-	  exit 1
-          ;;
-      --with-automake=*)
-          AUTOMAKE=$optarg
-          echo "+ using alternate automake in $optarg"
-	  CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-automake=$AUTOMAKE"
-          shift
-          ;;
-      --with-autoconf=*)
-          AUTOCONF=$optarg
-          echo "+ using alternate autoconf in $optarg"
-	  CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-autoconf=$AUTOCONF"
-          shift
-          ;;
-      --disable*|--enable*|--with*)
-          echo "+ passing option $1 to configure"
-	  CONFIGURE_EXT_OPT="$CONFIGURE_EXT_OPT $1"
-          shift
-          ;;
-       --) shift ; break ;;
-      *) echo "- ignoring unknown autogen.sh argument $1"; shift ;;
-    esac
-  done
-
-  for arg do CONFIGURE_EXT_OPT="$CONFIGURE_EXT_OPT $arg"; done
-  if test ! -z "$CONFIGURE_EXT_OPT"
-  then
-    echo "+ options passed to configure: $CONFIGURE_EXT_OPT"
-  fi
-}
-
-toplevel_check ()
-{
-  srcfile=$1
-  test -f $srcfile || {
-        echo "You must run this script in the top-level $package directory"
-        exit 1
-  }
-}
-
-
-tool_run ()
-{
-  tool=$1
-  options=$2
-  run_if_fail=$3
-  echo "+ running $tool $options..."
-  $tool $options || {
-    echo
-    echo $tool failed
-    eval $run_if_fail
-    exit 1
-  }
-}
diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/configure.ac
--- a/gmyth-upnp/configure.ac	Fri Feb 01 19:22:17 2008 +0000
+++ b/gmyth-upnp/configure.ac	Fri Feb 01 22:17:33 2008 +0000
@@ -3,17 +3,11 @@
 
 AC_PREREQ(2.50)
 
-AC_INIT([gmyth-upnp],[0.1])
+AC_INIT([gmyth-upnp],[0.7])
 
 AC_CONFIG_SRCDIR([src/gmyth_upnp.c])
 AC_CONFIG_HEADER(config.h)
 
-dnl when going to/from release please set the nano (fourth number) right !
-dnl releases only do Wall, SVN and prerelease does Werror too
-AS_VERSION(gmyth-upnp, GMYTH_UPNP, 0, 1, 0, 3, GMYTH_UPNP_SVN="no", GMYTH_UPNP_SVN="yes")
-GMYTH_UPNP_MAJORMINOR=$GMYTH_UPNP_MAJOR_VERSION.$GMYTH_UPNP_MINOR_VERSION
-AC_SUBST(GMYTH_UPNP_MAJORMINOR)
-
 dnl AM_MAINTAINER_MODE provides the option to enable maintainer mode
 AM_MAINTAINER_MODE
 dnl make aclocal work in maintainer mode
@@ -26,17 +20,6 @@
 AC_PROG_CC
 AC_PROG_LIBTOOL
 
-dnl Generate doxygen documentation
-DX_HTML_FEATURE(ON)
-DX_CHM_FEATURE(OFF)
-DX_CHI_FEATURE(OFF)
-DX_MAN_FEATURE(OFF)
-DX_RTF_FEATURE(OFF)
-DX_XML_FEATURE(OFF)
-DX_PDF_FEATURE(OFF)
-DX_PS_FEATURE(OFF)
-DX_INIT_DOXYGEN(gmyth-upnp, doxygen.cfg, docs)
-
 # Checks for libraries.
 
 # Check for pkgconfig
@@ -120,12 +103,12 @@
 AC_SUBST(GOBJECT_CFLAGS)
 AC_SUBST(GOBJECT_LIBS)
 
-## Check for gmyth-0.1
-PKG_CHECK_MODULES(LIBGMYTH, gmyth-0.1, HAVE_LIBGMYTH=yes,HAVE_LIBGMYTH=no)
+## Check for gmyth-0.7
+PKG_CHECK_MODULES(LIBGMYTH, gmyth >= 0.7, HAVE_LIBGMYTH=yes,HAVE_LIBGMYTH=no)
 
-# Give error and exit if we don't have gmyth-0.1
+# Give error and exit if we don't have gmyth-0.7
 if test "x$HAVE_LIBGMYTH" = "xno"; then
-  AC_MSG_ERROR([you need gmyth-0.1 installed])
+  AC_MSG_ERROR([you need gmyth  installed])
 fi
 
 # make LIBXML_CFLAGS and LIBXML_LIBS available
@@ -133,28 +116,24 @@
 AC_SUBST(LIBGMYTH_LIBS)
 
 dnl ========== Check for Cyberlink UPnP Libraries
-PKG_CHECK_MODULES(CYBERLINK, clinkc,
-          HAVE_CYBERLINK=yes, HAVE_CYBERLINK=no)
+PKG_CHECK_MODULES(LIBUPNP, libupnp, HAVE_LIBUPNP=yes, HAVE_LIBUPNP=no)
 
-if test "x$HAVE_CYBERLINK" = "xno"; then
-  AC_MSG_ERROR([you need clinkc installed])
+if test "x$HAVE_LIBUPNP" = "xno"; then
+  AC_MSG_ERROR([you need libupnp installed])
 fi
 
-dnl make CYBERLINK_CFLAGS and CYBERLINK_LIBS available
-AC_SUBST(CYBERLINK_CFLAGS)
-AC_SUBST(CYBERLINK_LIBS)
-
-#dnl Enable gtk-doc
-#GTK_DOC_CHECK(1.4)
+AC_SUBST(LIBUPNP_CFLAGS)
+AC_SUBST(LIBIPNP_LIBS)
 
 AC_OUTPUT([
 Makefile
 src/Makefile
+test/Makefile
 gmyth-upnp.pc])
 
 if test "x$enable_debug" != "xno"; then
     AC_MSG_NOTICE([Debug: Enabled])
 else
     AC_MSG_NOTICE([Debug: Disabled])
-fi          
+fi
 
diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/m4/AUTHORS
--- a/gmyth-upnp/m4/AUTHORS	Fri Feb 01 19:22:17 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-Alexsandro Jose Virginio dos Santos <alexsandro.santos@indt.org.br>
-Hallyson Luiz de Morais Melo <hallyson.melo@indt.org.br>
-Leonardo Sobral Cunha <leonardo.cunha@indt.org.br>
-Rosfran Lins Borges <rosfran.borges@indt.org.br>
diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/m4/COPYING
--- a/gmyth-upnp/m4/COPYING	Fri Feb 01 19:22:17 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,504 +0,0 @@
-		  GNU LESSER GENERAL PUBLIC LICENSE
-		       Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-     51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-		  GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-			    NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library 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
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-
diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/m4/ChangeLog
--- a/gmyth-upnp/m4/ChangeLog	Fri Feb 01 19:22:17 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-2006-08-17 Rosfran Borges <rosfran.borges@indt.org.br>
-	* Added the correct gstreamer-base package (GSTBASE) at the configure.ac; 
-	GSTBASE_CFLAGS and GSTBASE_LIBS variables had the same values from
-	the GST_CFLAGS/GST_LIBS.
-
-2006-08-16 Rosfran Borges <rosfran.borges@indt.org.br>
-	* Fixed some installation issues, regarding lib-installing to the
-	correct directory, and copying the header files to the destination
-	dir (make install).
-	* Put 'pkg-config' resource to the Maemo Myth library. The name of the
-	PKG-CONFIG resource is 'maemo-myth', plus the minor and major version.
-	Actually, the version is '0.1', so the library config file is:  
-	'maemo-myth-0.1.pc'. You can type: 'pkg-config --cflags --libs 
-	maemo-myth-0.1'.
-	* Many adjustments in the automake/autoconf configuration files
-	(configure.ac, Makefile.am) - some autotools misusage fixed.
-	* Added the MythURI structure, and the URI parsing utility functions
-	(missing in the GLib).
-	* Some functions were exported (myth_socket, mmyth_context), that's 
-	why many ther modules need to use them.
-	* Fixed some library dependencies.
-	* Prepared to be used inside the GStreamer (linking with the MythTV
-	plug-in).
-
diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/m4/INSTALL
--- a/gmyth-upnp/m4/INSTALL	Fri Feb 01 19:22:17 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,236 +0,0 @@
-Installation Instructions
-*************************
-
-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free
-Software Foundation, Inc.
-
-This file is free documentation; the Free Software Foundation gives
-unlimited permission to copy, distribute and modify it.
-
-Basic Installation
-==================
-
-These are generic installation instructions.
-
-   The `configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation.  It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions.  Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, and a
-file `config.log' containing compiler output (useful mainly for
-debugging `configure').
-
-   It can also use an optional file (typically called `config.cache'
-and enabled with `--cache-file=config.cache' or simply `-C') that saves
-the results of its tests to speed up reconfiguring.  (Caching is
-disabled by default to prevent problems with accidental use of stale
-cache files.)
-
-   If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release.  If you are using the cache, and at
-some point `config.cache' contains results you don't want to keep, you
-may remove or edit it.
-
-   The file `configure.ac' (or `configure.in') is used to create
-`configure' by a program called `autoconf'.  You only need
-`configure.ac' if you want to change it or regenerate `configure' using
-a newer version of `autoconf'.
-
-The simplest way to compile this package is:
-
-  1. `cd' to the directory containing the package's source code and type
-     `./configure' to configure the package for your system.  If you're
-     using `csh' on an old version of System V, you might need to type
-     `sh ./configure' instead to prevent `csh' from trying to execute
-     `configure' itself.
-
-     Running `configure' takes awhile.  While running, it prints some
-     messages telling which features it is checking for.
-
-  2. Type `make' to compile the package.
-
-  3. Optionally, type `make check' to run any self-tests that come with
-     the package.
-
-  4. Type `make install' to install the programs and any data files and
-     documentation.
-
-  5. You can remove the program binaries and object files from the
-     source code directory by typing `make clean'.  To also remove the
-     files that `configure' created (so you can compile the package for
-     a different kind of computer), type `make distclean'.  There is
-     also a `make maintainer-clean' target, but that is intended mainly
-     for the package's developers.  If you use it, you may have to get
-     all sorts of other programs in order to regenerate files that came
-     with the distribution.
-
-Compilers and Options
-=====================
-
-Some systems require unusual options for compilation or linking that the
-`configure' script does not know about.  Run `./configure --help' for
-details on some of the pertinent environment variables.
-
-   You can give `configure' initial values for configuration parameters
-by setting variables in the command line or in the environment.  Here
-is an example:
-
-     ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
-
-   *Note Defining Variables::, for more details.
-
-Compiling For Multiple Architectures
-====================================
-
-You can compile the package for more than one kind of computer at the
-same time, by placing the object files for each architecture in their
-own directory.  To do this, you must use a version of `make' that
-supports the `VPATH' variable, such as GNU `make'.  `cd' to the
-directory where you want the object files and executables to go and run
-the `configure' script.  `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.
-
-   If you have to use a `make' that does not support the `VPATH'
-variable, you have to compile the package for one architecture at a
-time in the source code directory.  After you have installed the
-package for one architecture, use `make distclean' before reconfiguring
-for another architecture.
-
-Installation Names
-==================
-
-By default, `make install' installs the package's commands under
-`/usr/local/bin', include files under `/usr/local/include', etc.  You
-can specify an installation prefix other than `/usr/local' by giving
-`configure' the option `--prefix=PREFIX'.
-
-   You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files.  If you
-pass the option `--exec-prefix=PREFIX' to `configure', the package uses
-PREFIX as the prefix for installing programs and libraries.
-Documentation and other data files still use the regular prefix.
-
-   In addition, if you use an unusual directory layout you can give
-options like `--bindir=DIR' to specify different values for particular
-kinds of files.  Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.
-
-   If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving `configure' the
-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-
-Optional Features
-=================
-
-Some packages pay attention to `--enable-FEATURE' options to
-`configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to `--with-PACKAGE' options, where PACKAGE
-is something like `gnu-as' or `x' (for the X Window System).  The
-`README' should mention any `--enable-' and `--with-' options that the
-package recognizes.
-
-   For packages that use the X Window System, `configure' can usually
-find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
-
-Specifying the System Type
-==========================
-
-There may be some features `configure' cannot figure out automatically,
-but needs to determine by the type of machine the package will run on.
-Usually, assuming the package is built to be run on the _same_
-architectures, `configure' can figure that out, but if it prints a
-message saying it cannot guess the machine type, give it the
-`--build=TYPE' option.  TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name which has the form:
-
-     CPU-COMPANY-SYSTEM
-
-where SYSTEM can have one of these forms:
-
-     OS KERNEL-OS
-
-   See the file `config.sub' for the possible values of each field.  If
-`config.sub' isn't included in this package, then this package doesn't
-need to know the machine type.
-
-   If you are _building_ compiler tools for cross-compiling, you should
-use the option `--target=TYPE' to select the type of system they will
-produce code for.
-
-   If you want to _use_ a cross compiler, that generates code for a
-platform different from the build platform, you should specify the
-"host" platform (i.e., that on which the generated programs will
-eventually be run) with `--host=TYPE'.
-
-Sharing Defaults
-================
-
-If you want to set default values for `configure' scripts to share, you
-can create a site shell script called `config.site' that gives default
-values for variables like `CC', `cache_file', and `prefix'.
-`configure' looks for `PREFIX/share/config.site' if it exists, then
-`PREFIX/etc/config.site' if it exists.  Or, you can set the
-`CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
-
-Defining Variables
-==================
-
-Variables not defined in a site shell script can be set in the
-environment passed to `configure'.  However, some packages may run
-configure again during the build, and the customized values of these
-variables may be lost.  In order to avoid this problem, you should set
-them in the `configure' command line, using `VAR=value'.  For example:
-
-     ./configure CC=/usr/local2/bin/gcc
-
-causes the specified `gcc' to be used as the C compiler (unless it is
-overridden in the site shell script).  Here is a another example:
-
-     /bin/bash ./configure CONFIG_SHELL=/bin/bash
-
-Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
-configuration-related scripts to be executed by `/bin/bash'.
-
-`configure' Invocation
-======================
-
-`configure' recognizes the following options to control how it operates.
-
-`--help'
-`-h'
-     Print a summary of the options to `configure', and exit.
-
-`--version'
-`-V'
-     Print the version of Autoconf used to generate the `configure'
-     script, and exit.
-
-`--cache-file=FILE'
-     Enable the cache: use and save the results of the tests in FILE,
-     traditionally `config.cache'.  FILE defaults to `/dev/null' to
-     disable caching.
-
-`--config-cache'
-`-C'
-     Alias for `--cache-file=config.cache'.
-
-`--quiet'
-`--silent'
-`-q'
-     Do not print messages saying which checks are being made.  To
-     suppress all normal output, redirect it to `/dev/null' (any error
-     messages will still be shown).
-
-`--srcdir=DIR'
-     Look for the package's source code in directory DIR.  Usually
-     `configure' can determine that directory automatically.
-
-`configure' also accepts some other, not widely useful, options.  Run
-`configure --help' for more details.
-
diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/m4/Makefile.am
--- a/gmyth-upnp/m4/Makefile.am	Fri Feb 01 19:22:17 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-SUBDIRS= src pixmaps
-
-include aminclude.am
-
-EXTRA_DIST =                            \
-        autogen.sh                      \
-        AUTHORS                         \
-        COPYING                         \
-        README
-
diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/m4/ac_doxygen.m4
--- a/gmyth-upnp/m4/ac_doxygen.m4	Fri Feb 01 19:22:17 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,312 +0,0 @@
-# This file is part of Autoconf.                       -*- Autoconf -*-
-
-# Copyright (C) 2004 Oren Ben-Kiki
-# This file is distributed under the same terms as the Autoconf macro files.
-
-# Generate automatic documentation using Doxygen. Works in concert with the
-# aminclude.m4 file and a compatible doxygen configuration file. Defines the
-# following public macros:
-#
-# DX_???_FEATURE(ON|OFF) - control the default setting fo a Doxygen feature.
-# Supported features are 'DOXYGEN' itself, 'DOT' for generating graphics,
-# 'HTML' for plain HTML, 'CHM' for compressed HTML help (for MS users), 'CHI'
-# for generating a seperate .chi file by the .chm file, and 'MAN', 'RTF',
-# 'XML', 'PDF' and 'PS' for the appropriate output formats. The environment
-# variable DOXYGEN_PAPER_SIZE may be specified to override the default 'a4wide'
-# paper size.
-#
-# By default, HTML, PDF and PS documentation is generated as this seems to be
-# the most popular and portable combination. MAN pages created by Doxygen are
-# usually problematic, though by picking an appropriate subset and doing some
-# massaging they might be better than nothing. CHM and RTF are specific for MS
-# (note that you can't generate both HTML and CHM at the same time). The XML is
-# rather useless unless you apply specialized post-processing to it.
-#
-# The macro mainly controls the default state of the feature. The use can
-# override the default by specifying --enable or --disable. The macros ensure
-# that contradictory flags are not given (e.g., --enable-doxygen-html and
-# --enable-doxygen-chm, --enable-doxygen-anything with --disable-doxygen, etc.)
-# Finally, each feature will be automatically disabled (with a warning) if the
-# required programs are missing.
-#
-# Once all the feature defaults have been specified, call DX_INIT_DOXYGEN with
-# the following parameters: a one-word name for the project for use as a
-# filename base etc., an optional configuration file name (the default is
-# 'Doxyfile', the same as Doxygen's default), and an optional output directory
-# name (the default is 'doxygen-doc').
-
-## ----------##
-## Defaults. ##
-## ----------##
-
-DX_ENV=""
-AC_DEFUN([DX_FEATURE_doc],  ON)
-AC_DEFUN([DX_FEATURE_dot],  ON)
-AC_DEFUN([DX_FEATURE_man],  OFF)
-AC_DEFUN([DX_FEATURE_html], ON)
-AC_DEFUN([DX_FEATURE_chm],  OFF)
-AC_DEFUN([DX_FEATURE_chi],  OFF)
-AC_DEFUN([DX_FEATURE_rtf],  OFF)
-AC_DEFUN([DX_FEATURE_xml],  OFF)
-AC_DEFUN([DX_FEATURE_pdf],  ON)
-AC_DEFUN([DX_FEATURE_ps],   ON)
-
-## --------------- ##
-## Private macros. ##
-## --------------- ##
-
-# DX_ENV_APPEND(VARIABLE, VALUE)
-# ------------------------------
-# Append VARIABLE="VALUE" to DX_ENV for invoking doxygen.
-AC_DEFUN([DX_ENV_APPEND], [AC_SUBST([DX_ENV], ["$DX_ENV $1='$2'"])])
-
-# DX_DIRNAME_EXPR
-# ---------------
-# Expand into a shell expression prints the directory part of a path.
-AC_DEFUN([DX_DIRNAME_EXPR],
-         [[expr ".$1" : '\(\.\)[^/]*$' \| "x$1" : 'x\(.*\)/[^/]*$']])
-
-# DX_IF_FEATURE(FEATURE, IF-ON, IF-OFF)
-# -------------------------------------
-# Expands according to the M4 (static) status of the feature.
-AC_DEFUN([DX_IF_FEATURE], [ifelse(DX_FEATURE_$1, ON, [$2], [$3])])
-
-# DX_REQUIRE_PROG(VARIABLE, PROGRAM)
-# ----------------------------------
-# Require the specified program to be found for the DX_CURRENT_FEATURE to work.
-AC_DEFUN([DX_REQUIRE_PROG], [
-AC_PATH_TOOL([$1], [$2])
-if test "$DX_FLAG_[]DX_CURRENT_FEATURE$$1" = 1; then
-    AC_MSG_WARN([$2 not found - will not DX_CURRENT_DESCRIPTION])
-    AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0)
-fi
-])
-
-# DX_TEST_FEATURE(FEATURE)
-# ------------------------
-# Expand to a shell expression testing whether the feature is active.
-AC_DEFUN([DX_TEST_FEATURE], [test "$DX_FLAG_$1" = 1])
-
-# DX_CHECK_DEPEND(REQUIRED_FEATURE, REQUIRED_STATE)
-# -------------------------------------------------
-# Verify that a required features has the right state before trying to turn on
-# the DX_CURRENT_FEATURE.
-AC_DEFUN([DX_CHECK_DEPEND], [
-test "$DX_FLAG_$1" = "$2" \
-|| AC_MSG_ERROR([doxygen-DX_CURRENT_FEATURE ifelse([$2], 1,
-                            requires, contradicts) doxygen-DX_CURRENT_FEATURE])
-])
-
-# DX_CLEAR_DEPEND(FEATURE, REQUIRED_FEATURE, REQUIRED_STATE)
-# ----------------------------------------------------------
-# Turn off the DX_CURRENT_FEATURE if the required feature is off.
-AC_DEFUN([DX_CLEAR_DEPEND], [
-test "$DX_FLAG_$1" = "$2" || AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0)
-])
-
-# DX_FEATURE_ARG(FEATURE, DESCRIPTION,
-#                CHECK_DEPEND, CLEAR_DEPEND,
-#                REQUIRE, DO-IF-ON, DO-IF-OFF)
-# --------------------------------------------
-# Parse the command-line option controlling a feature. CHECK_DEPEND is called
-# if the user explicitly turns the feature on (and invokes DX_CHECK_DEPEND),
-# otherwise CLEAR_DEPEND is called to turn off the default state if a required
-# feature is disabled (using DX_CLEAR_DEPEND). REQUIRE performs additional
-# requirement tests (DX_REQUIRE_PROG). Finally, an automake flag is set and
-# DO-IF-ON or DO-IF-OFF are called according to the final state of the feature.
-AC_DEFUN([DX_ARG_ABLE], [
-    AC_DEFUN([DX_CURRENT_FEATURE], [$1])
-    AC_DEFUN([DX_CURRENT_DESCRIPTION], [$2])
-    AC_ARG_ENABLE(doxygen-$1,
-                  [AS_HELP_STRING(DX_IF_FEATURE([$1], [--disable-doxygen-$1],
-                                                      [--enable-doxygen-$1]),
-                                  DX_IF_FEATURE([$1], [don't $2], [$2]))],
-                  [
-case "$enableval" in
-#(
-y|Y|yes|Yes|YES)
-    AC_SUBST([DX_FLAG_$1], 1)
-    $3
-;; #(
-n|N|no|No|NO)
-    AC_SUBST([DX_FLAG_$1], 0)
-;; #(
-*)
-    AC_MSG_ERROR([invalid value '$enableval' given to doxygen-$1])
-;;
-esac
-], [
-AC_SUBST([DX_FLAG_$1], [DX_IF_FEATURE([$1], 1, 0)])
-$4
-])
-if DX_TEST_FEATURE([$1]); then
-    $5
-    :
-fi
-if DX_TEST_FEATURE([$1]); then
-    AM_CONDITIONAL(DX_COND_$1, :)
-    $6
-    :
-else
-    AM_CONDITIONAL(DX_COND_$1, false)
-    $7
-    :
-fi
-])
-
-## -------------- ##
-## Public macros. ##
-## -------------- ##
-
-# DX_XXX_FEATURE(DEFAULT_STATE)
-# -----------------------------
-AC_DEFUN([DX_DOXYGEN_FEATURE], [AC_DEFUN([DX_FEATURE_doc],  [$1])])
-AC_DEFUN([DX_MAN_FEATURE],     [AC_DEFUN([DX_FEATURE_man],  [$1])])
-AC_DEFUN([DX_HTML_FEATURE],    [AC_DEFUN([DX_FEATURE_html], [$1])])
-AC_DEFUN([DX_CHM_FEATURE],     [AC_DEFUN([DX_FEATURE_chm],  [$1])])
-AC_DEFUN([DX_CHI_FEATURE],     [AC_DEFUN([DX_FEATURE_chi],  [$1])])
-AC_DEFUN([DX_RTF_FEATURE],     [AC_DEFUN([DX_FEATURE_rtf],  [$1])])
-AC_DEFUN([DX_XML_FEATURE],     [AC_DEFUN([DX_FEATURE_xml],  [$1])])
-AC_DEFUN([DX_XML_FEATURE],     [AC_DEFUN([DX_FEATURE_xml],  [$1])])
-AC_DEFUN([DX_PDF_FEATURE],     [AC_DEFUN([DX_FEATURE_pdf],  [$1])])
-AC_DEFUN([DX_PS_FEATURE],      [AC_DEFUN([DX_FEATURE_ps],   [$1])])
-
-# DX_INIT_DOXYGEN(PROJECT, [CONFIG-FILE], [OUTPUT-DOC-DIR])
-# ---------------------------------------------------------
-# PROJECT also serves as the base name for the documentation files.
-# The default CONFIG-FILE is "Doxyfile" and OUTPUT-DOC-DIR is "doxygen-doc".
-AC_DEFUN([DX_INIT_DOXYGEN], [
-
-# Files:
-AC_SUBST([DX_PROJECT], [$1])
-AC_SUBST([DX_CONFIG], [ifelse([$2], [], Doxyfile, [$2])])
-AC_SUBST([DX_DOCDIR], [ifelse([$3], [], doxygen-doc, [$3])])
-
-# Environment variables used inside doxygen.cfg:
-DX_ENV_APPEND(SRCDIR, $srcdir)
-DX_ENV_APPEND(PROJECT, $DX_PROJECT)
-DX_ENV_APPEND(DOCDIR, $DX_DOCDIR)
-DX_ENV_APPEND(VERSION, $PACKAGE_VERSION)
-
-# Doxygen itself:
-DX_ARG_ABLE(doc, [generate any doxygen documentation],
-            [],
-            [],
-            [DX_REQUIRE_PROG([DX_DOXYGEN], doxygen)
-             DX_REQUIRE_PROG([DX_PERL], perl)],
-            [DX_ENV_APPEND(PERL_PATH, $DX_PERL)])
-
-# Dot for graphics:
-DX_ARG_ABLE(dot, [generate graphics for doxygen documentation],
-            [DX_CHECK_DEPEND(doc, 1)],
-            [DX_CLEAR_DEPEND(doc, 1)],
-            [DX_REQUIRE_PROG([DX_DOT], dot)],
-            [DX_ENV_APPEND(HAVE_DOT, YES)
-             DX_ENV_APPEND(DOT_PATH, [`DX_DIRNAME_EXPR($DX_DOT)`])],
-            [DX_ENV_APPEND(HAVE_DOT, NO)])
-
-# Man pages generation:
-DX_ARG_ABLE(man, [generate doxygen manual pages],
-            [DX_CHECK_DEPEND(doc, 1)],
-            [DX_CLEAR_DEPEND(doc, 1)],
-            [],
-            [DX_ENV_APPEND(GENERATE_MAN, YES)],
-            [DX_ENV_APPEND(GENERATE_MAN, NO)])
-
-# RTF file generation:
-DX_ARG_ABLE(rtf, [generate doxygen RTF documentation],
-            [DX_CHECK_DEPEND(doc, 1)],
-            [DX_CLEAR_DEPEND(doc, 1)],
-            [],
-            [DX_ENV_APPEND(GENERATE_RTF, YES)],
-            [DX_ENV_APPEND(GENERATE_RTF, NO)])
-
-# XML file generation:
-DX_ARG_ABLE(xml, [generate doxygen XML documentation],
-            [DX_CHECK_DEPEND(doc, 1)],
-            [DX_CLEAR_DEPEND(doc, 1)],
-            [],
-            [DX_ENV_APPEND(GENERATE_XML, YES)],
-            [DX_ENV_APPEND(GENERATE_XML, NO)])
-
-# (Compressed) HTML help generation:
-DX_ARG_ABLE(chm, [generate doxygen compressed HTML help documentation],
-            [DX_CHECK_DEPEND(doc, 1)],
-            [DX_CLEAR_DEPEND(doc, 1)],
-            [DX_REQUIRE_PROG([DX_HHC], hhc)],
-            [DX_ENV_APPEND(HHC_PATH, $DX_HHC)
-             DX_ENV_APPEND(GENERATE_HTML, YES)
-             DX_ENV_APPEND(GENERATE_HTMLHELP, YES)],
-            [DX_ENV_APPEND(GENERATE_HTMLHELP, NO)])
-
-# Seperate CHI file generation.
-DX_ARG_ABLE(chi, [generate doxygen seperate compressed HTML help index file],
-            [DX_CHECK_DEPEND(chm, 1)],
-            [DX_CLEAR_DEPEND(chm, 1)],
-            [],
-            [DX_ENV_APPEND(GENERATE_CHI, YES)],
-            [DX_ENV_APPEND(GENERATE_CHI, NO)])
-
-# Plain HTML pages generation:
-DX_ARG_ABLE(html, [generate doxygen plain HTML documentation],
-            [DX_CHECK_DEPEND(doc, 1) DX_CHECK_DEPEND(chm, 0)],
-            [DX_CLEAR_DEPEND(doc, 1) DX_CLEAR_DEPEND(chm, 0)],
-            [],
-            [DX_ENV_APPEND(GENERATE_HTML, YES)],
-            [DX_TEST_FEATURE(chm) || DX_ENV_APPEND(GENERATE_HTML, NO)])
-
-# PostScript file generation:
-DX_ARG_ABLE(ps, [generate doxygen PostScript documentation],
-            [DX_CHECK_DEPEND(doc, 1)],
-            [DX_CLEAR_DEPEND(doc, 1)],
-            [DX_REQUIRE_PROG([DX_LATEX], latex)
-             DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex)
-             DX_REQUIRE_PROG([DX_DVIPS], dvips)
-             DX_REQUIRE_PROG([DX_EGREP], egrep)])
-
-# PDF file generation:
-DX_ARG_ABLE(pdf, [generate doxygen PDF documentation],
-            [DX_CHECK_DEPEND(doc, 1)],
-            [DX_CLEAR_DEPEND(doc, 1)],
-            [DX_REQUIRE_PROG([DX_PDFLATEX], pdflatex)
-             DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex)
-             DX_REQUIRE_PROG([DX_EGREP], egrep)])
-
-# LaTeX generation for PS and/or PDF:
-if DX_TEST_FEATURE(ps) || DX_TEST_FEATURE(pdf); then
-    AM_CONDITIONAL(DX_COND_latex, :)
-    DX_ENV_APPEND(GENERATE_LATEX, YES)
-else
-    AM_CONDITIONAL(DX_COND_latex, false)
-    DX_ENV_APPEND(GENERATE_LATEX, NO)
-fi
-
-# Paper size for PS and/or PDF:
-AC_ARG_VAR(DOXYGEN_PAPER_SIZE,
-           [a4wide (default), a4, letter, legal or executive])
-case "$DOXYGEN_PAPER_SIZE" in
-#(
-"")
-    AC_SUBST(DOXYGEN_PAPER_SIZE, "")
-;; #(
-a4wide|a4|letter|legal|executive)
-    DX_ENV_APPEND(PAPER_SIZE, $DOXYGEN_PAPER_SIZE)
-;; #(
-*)
-    AC_MSG_ERROR([unknown DOXYGEN_PAPER_SIZE='$DOXYGEN_PAPER_SIZE'])
-;;
-esac
-
-#For debugging:
-#echo DX_FLAG_doc=$DX_FLAG_doc
-#echo DX_FLAG_dot=$DX_FLAG_dot
-#echo DX_FLAG_man=$DX_FLAG_man
-#echo DX_FLAG_html=$DX_FLAG_html
-#echo DX_FLAG_chm=$DX_FLAG_chm
-#echo DX_FLAG_chi=$DX_FLAG_chi
-#echo DX_FLAG_rtf=$DX_FLAG_rtf
-#echo DX_FLAG_xml=$DX_FLAG_xml
-#echo DX_FLAG_pdf=$DX_FLAG_pdf
-#echo DX_FLAG_ps=$DX_FLAG_ps
-#echo DX_ENV=$DX_ENV
-])
diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/m4/as-compiler-flag.m4
--- a/gmyth-upnp/m4/as-compiler-flag.m4	Fri Feb 01 19:22:17 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-dnl as-compiler-flag.m4 0.1.0
-
-dnl autostars m4 macro for detection of compiler flags
-
-dnl David Schleef <ds@schleef.org>
-
-dnl $Id: as-compiler-flag.m4,v 1.1.1.1 2005/08/26 00:42:44 andrunko Exp $
-
-dnl AS_COMPILER_FLAG(CFLAGS, ACTION-IF-ACCEPTED, [ACTION-IF-NOT-ACCEPTED])
-dnl Tries to compile with the given CFLAGS.
-dnl Runs ACTION-IF-ACCEPTED if the compiler can compile with the flags,
-dnl and ACTION-IF-NOT-ACCEPTED otherwise.
-
-AC_DEFUN([AS_COMPILER_FLAG],
-[
-  AC_MSG_CHECKING([to see if compiler understands $1])
-
-  save_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS $1"
-
-  AC_TRY_COMPILE([ ], [], [flag_ok=yes], [flag_ok=no])
-  CFLAGS="$save_CFLAGS"
-
-  if test "X$flag_ok" = Xyes ; then
-    $2
-    true
-  else
-    $3
-    true
-  fi
-  AC_MSG_RESULT([$flag_ok])
-])
-
diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/m4/as-expand.m4
--- a/gmyth-upnp/m4/as-expand.m4	Fri Feb 01 19:22:17 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-dnl AS_AC_EXPAND(VAR, CONFIGURE_VAR)
-dnl
-dnl example
-dnl AS_AC_EXPAND(SYSCONFDIR, $sysconfdir)
-dnl will set SYSCONFDIR to /usr/local/etc if prefix=/usr/local
-
-AC_DEFUN([AS_AC_EXPAND],
-[
-  EXP_VAR=[$1]
-  FROM_VAR=[$2]
-
-  dnl first expand prefix and exec_prefix if necessary
-  prefix_save=$prefix
-  exec_prefix_save=$exec_prefix
-
-  dnl if no prefix given, then use /usr/local, the default prefix
-  if test "x$prefix" = "xNONE"; then
-    prefix=$ac_default_prefix
-  fi
-  dnl if no exec_prefix given, then use prefix
-  if test "x$exec_prefix" = "xNONE"; then
-    exec_prefix=$prefix
-  fi
-
-  full_var="$FROM_VAR"
-  dnl loop until it doesn't change anymore
-  while true; do
-    new_full_var="`eval echo $full_var`"
-    if test "x$new_full_var"="x$full_var"; then break; fi
-    full_var=$new_full_var
-  done
-
-  dnl clean up
-  full_var=$new_full_var
-  AC_SUBST([$1], "$full_var")
-
-  dnl restore prefix and exec_prefix
-  prefix=$prefix_save
-  exec_prefix=$exec_prefix_save
-])
diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/m4/as-version.m4
--- a/gmyth-upnp/m4/as-version.m4	Fri Feb 01 19:22:17 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-dnl version.m4 0.0.5
-dnl autostars m4 macro for versioning
-dnl thomas@apestaart.org
-dnl
-dnl AS_VERSION(PACKAGE, PREFIX, MAJOR, MINOR, MICRO, NANO, ACTION_IF_NO_NANO, ACTION_IF_NANO)
-dnl example
-dnl AS_VERSION(gstreamer, GST_VERSION, 0, 3, 2,)
-dnl for a 0.3.2 release version
-dnl
-dnl this macro
-dnl - defines [$PREFIX]_MAJOR, MINOR and MICRO
-dnl - if NANO is empty, then we're in release mode, else in cvs/dev mode
-dnl - defines [$PREFIX], VERSION, and [$PREFIX]_RELEASE
-dnl - executes the relevant action
-dnl - AC_SUBST's PACKAGE, VERSION, [$PREFIX] and [$PREFIX]_RELEASE
-dnl   as well as the little ones
-dnl - doesn't call AM_INIT_AUTOMAKE anymore because it prevents
-dnl   maintainer mode from running ok
-dnl
-dnl don't forget to put #undef [$2] and [$2]_RELEASE in acconfig.h
-
-AC_DEFUN([AS_VERSION],
-[
-  PACKAGE=[$1]
-  [$2]_MAJOR_VERSION=[$3]
-  [$2]_MINOR_VERSION=[$4]
-  [$2]_MICRO_VERSION=[$5]
-  NANO=[$6]
-  [$2]_NANO_VERSION=$NANO
-  if test "x$NANO" = "x" || test "x$NANO" = "x0";
-  then
-      AC_MSG_NOTICE(configuring [$1] for release)
-      VERSION=[$3].[$4].[$5]
-      [$2]_RELEASE=1
-      dnl execute action
-      ifelse([$7], , :, [$7])
-  else
-      AC_MSG_NOTICE(configuring [$1] for development with nano $NANO)
-      VERSION=[$3].[$4].[$5].$NANO
-      [$2]_RELEASE=`date +%Y%m%d_%H%M%S`
-      dnl execute action
-      ifelse([$8], , :, [$8])
-  fi
-
-  [$2]_VERSION=$VERSION
-  AC_DEFINE_UNQUOTED([$2]_VERSION, "$[$2]_VERSION", [Define the version])
-  AC_SUBST([$2]_VERSION)
-  
-  AC_SUBST([$2]_RELEASE)
-
-  AC_SUBST([$2]_MAJOR_VERSION)
-  AC_SUBST([$2]_MINOR_VERSION)
-  AC_SUBST([$2]_MICRO_VERSION)
-  AC_SUBST([$2]_NANO_VERSION)
-  AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Define the package name])
-  AC_SUBST(PACKAGE)
-  AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Define the version])
-  AC_SUBST(VERSION)
-])
diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/m4/configure.ac
--- a/gmyth-upnp/m4/configure.ac	Fri Feb 01 19:22:17 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,234 +0,0 @@
-#                                               -*- Autoconf -*-
-# Process this file with autoconf to produce a configure script.
-
-AC_PREREQ(2.50)
-
-AC_INIT([gmyth],[0.1])
-
-dnl AC_CONFIG_SRCDIR([src/mmyth_main.c])
-AC_CONFIG_HEADER(config.h)
-
-dnl when going to/from release please set the nano (fourth number) right !
-dnl releases only do Wall, SVN and prerelease does Werror too
-AS_VERSION(gmyth, GMYTH, 0, 1, 0, 3, GMYTH_SVN="no", GMYTH_SVN="yes")
-
-GMYTH_MAJORMINOR=$GMYTH_MAJOR_VERSION.$GMYTH_MINOR_VERSION
-
-AC_SUBST(GMYTH_MAJORMINOR)
-
-dnl AM_MAINTAINER_MODE provides the option to enable maintainer mode
-AM_MAINTAINER_MODE
-dnl make aclocal work in maintainer mode
-AC_SUBST(ACLOCAL_AMFLAGS, "-I m4")
-
-# Checks for programs.
-# check for tools
-# Make sure CFLAGS is defined to stop AC_PROC_CC adding -g
-CFLAGS="$CFLAGS -Wall"
-AC_PROG_CC
-AC_PROG_LIBTOOL
-
-dnl Generate doxygen documentation
-DX_HTML_FEATURE(ON)
-DX_CHM_FEATURE(OFF)
-DX_CHI_FEATURE(OFF)
-DX_MAN_FEATURE(OFF)
-DX_RTF_FEATURE(OFF)
-DX_XML_FEATURE(OFF)
-DX_PDF_FEATURE(OFF)
-DX_PS_FEATURE(OFF)
-DX_INIT_DOXYGEN(gmyth, doxygen.cfg, docs)
-
-
-# Checks for libraries.
-
-# Checks for header files.
-AC_HEADER_STDC
-AC_CHECK_HEADERS([fcntl.h stdint.h stdlib.h string.h sys/ioctl.h sys/socket.h unistd.h])
-
-# Checks for typedefs, structures, and compiler characteristics.
-AC_C_CONST
-AC_TYPE_PID_T
-AC_STRUCT_TM
-
-# Checks for library functions.
-AC_FUNC_FORK
-AC_PROG_GCC_TRADITIONAL
-AC_FUNC_MALLOC
-AC_FUNC_MKTIME
-AC_FUNC_VPRINTF
-AC_CHECK_FUNCS([memset socket stime strstr strtoul])
-
-AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
-
-# Checks required packages
-
-dnl Test if --disable-debug given
-AC_ARG_ENABLE(debug,
-	[AC_HELP_STRING([--disable-debug], [disable debugging mode])],
-	enable_debug="$enableval",
-	enable_debug=yes)
-
-if test "x$enable_debug" = "xyes" ; then
-      CFLAGS="$CFLAGS -g"
-else
-      AC_DEFINE( NDEBUG, 1, [disable debug messages] )
-      CFLAGS="$CFLAGS -O2 -DG_DISABLE_CHECKS -DNDEBUG"
-fi          
-
-AM_CONDITIONAL( NDEBUG, test "x$enable_debug" = "xyes" )
-
-# Check for pkgconfig
-AC_CHECK_PROG(HAVE_PKGCONFIG, pkg-config, yes, no)
-# Give error and exit if we don't have pkgconfig
-if test "x$HAVE_PKGCONFIG" = "xno"; then
-  AC_MSG_ERROR(you need to have pkgconfig installed !)
-fi
-
-# Check for Glib2.0
-PKG_CHECK_MODULES(GLIB, glib-2.0, HAVE_GLIB=yes,HAVE_GLIB=no)
-
-# Give error and exit if we don't have glib
-if test "x$HAVE_GLIB" = "xno"; then
-  AC_MSG_ERROR(you need glib-2.0 installed)
-fi
-
-# make GLIB_CFLAGS and GLIB_LIBS available
-AC_SUBST(GLIB_CFLAGS)
-AC_SUBST(GLIB_LIBS)
-
-# Check for GObject2.0
-PKG_CHECK_MODULES(GOBJECT,
-  gobject-2.0,
-  HAVE_GOBJECT=yes, HAVE_GOBJECT=no)
-
-# Give error and exit if we don't have gobject
-if test "x$HAVE_GOBJECT" = "xno"; then
-  AC_MSG_ERROR(you need gobject-2.0 installed)
-fi
-
-# make GOBJECT_CFLAGS and GOBJECT_LIBS available
-AC_SUBST(GOBJECT_CFLAGS)
-AC_SUBST(GOBJECT_LIBS)
-
-# Check for GTK+-2.0
-PKG_CHECK_MODULES(GTK, gtk+-2.0, HAVE_GTK=yes,HAVE_GTK=no)
-
-# Give error and exit if we don't have gtk
-if test "x$HAVE_GTK" = "xyes"; then
-  AC_DEFINE(WITH_GTK, 1, [build with GTK+ related stuff])
-  dnl AC_MSG_ERROR(you need gtk+-2.0 installed)
-else
-  AC_MSG_RESULT(no)
-fi
-
-AM_CONDITIONAL(WITH_GTK, test "x$HAVE_GTK" = "xyes" )
-
-# make GTK_CFLAGS and GTK_LIBS available
-AC_SUBST(GTK_CFLAGS)
-AC_SUBST(GTK_LIBS)
-
-dnl ========== Check for Hildon Libraries
-PKG_CHECK_MODULES(HILDON,
-  hildon-lgpl libosso hildon-status-bar-lib libhildonmenu hildon-base-lib hildon-control-panel hildon-libs,
-  HAVE_HILDON=yes, HAVE_HILDON=no)
-
-if test "x$HAVE_HILDON" = "xyes"; then
-  AC_DEFINE(MAEMO_PLATFORM, 1, [build with hildon libs])
-  HILDON_CFLAGS="$HILDON_CFLAGS -DMAEMO_PLATFORM=1"
-else
-  AC_MSG_RESULT(no)
-fi
-
-AM_CONDITIONAL(MAEMO_PLATFORM, test "x$HAVE_HILDON" = "xyes")
-
-dnl make HILDON_CFLAGS and HILDON_LIBS available
-AC_SUBST(HILDON_CFLAGS)
-AC_SUBST(HILDON_LIBS)
-
-# Check for libxml-2.0
-PKG_CHECK_MODULES(LIBXML, libxml-2.0, HAVE_LIBXML=yes,HAVE_LIBXML=no)
-
-# Give error and exit if we don't have libxml
-if test "x$HAVE_LIBXML" = "xno"; then
-  AC_MSG_ERROR(you need libxml-2.0 installed)
-fi
-
-# make LIBXML_CFLAGS and LIBXML_LIBS available
-AC_SUBST(LIBXML_CFLAGS)
-AC_SUBST(LIBXML_LIBS)
-
-
-# check for gstreamer development files
-GST_REQUIRED=0.10
-GST_MAJORMINOR=0.10
-PKG_CHECK_MODULES(GST, \
-  gstreamer-$GST_MAJORMINOR >= $GST_REQUIRED,
-  HAVE_GST=yes, HAVE_GST=no)
-
-# Give error and exit if we don't have gstreamer
-if test "x$HAVE_GST" = "xno"; then
-  AC_MSG_ERROR(you need gstreamer development packages installed !)
-fi
-
-# make GST_CFLAGS and GST_LIBS available
-AC_SUBST(GST_CFLAGS)
-AC_SUBST(GST_LIBS)
-
-# check for gstreamer-base plugins (xoverlay interface)
-GSTBASE_REQUIRED=0.10
-GSTBASE_MAJORMINOR=0.10
-PKG_CHECK_MODULES(GSTBASE, \
-  gstreamer-base-$GSTBASE_MAJORMINOR >= $GSTBASE_REQUIRED,
-  HAVE_GSTBASE=yes, HAVE_GSTBASE=no)
-
-# Give error and exit if we don't have gstreamer base libraries
-if test "x$HAVE_GSTBASE" = "xno"; then
-  AC_MSG_ERROR(you need gstreamer base development packages installed !)
-fi
-
-# make GSTBASE_CFLAGS and GSTBASE_LIBS available
-AC_SUBST(GSTBASE_CFLAGS)
-AC_SUBST(GSTBASE_LIBS)
-
-
-# make GST_MAJORMINOR available in Makefile.am
-AC_SUBST(GST_MAJORMINOR)
-
-#
-# mysql libraries
-#
-AC_CHECK_PROG(MYSQL_CFLAGS,mysql_config,`mysql_config --cflags`)
-if test -z "$MYSQL_CFLAGS"; then 
-        AC_MSG_ERROR([Could not find mysql_config script. Make sure the mysql client libraries are installed])
-fi
-AC_SUBST(MYSQL_CFLAGS)
-
-
-AC_CHECK_PROG(MYSQL_LIBS,mysql_config,`mysql_config --libs`)
-if test -z "$MYSQL_LIBS"; then 
-        AC_MSG_ERROR([Could not find mysql_config script. Make sure the mysql client libraries are installed])
-fi
-AC_SUBST(MYSQL_LIBS)
-
-## Check for gmyth-0.1
-
-PKG_CHECK_MODULES(LIBGMYTH, gmyth-0.1, HAVE_LIBGMYTH=yes,HAVE_LIBGMYTH=no)
-
-# Give error and exit if we don't have gmyth-0.1
-if test "x$HAVE_LIBGMYTH" = "xno"; then
-  AC_MSG_ERROR(you need gmyth-0.1 installed)
-fi
-
-# make LIBXML_CFLAGS and LIBXML_LIBS available
-AC_SUBST(LIBGMYTH_CFLAGS)
-AC_SUBST(LIBGMYTH_LIBS)
-
-#dnl Enable gtk-doc
-#GTK_DOC_CHECK(1.4)
-
-
-AC_CONFIG_FILES([Makefile
-                src/Makefile
-                pixmaps/Makefile])
-AC_OUTPUT
diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/src/Makefile.am
--- a/gmyth-upnp/src/Makefile.am	Fri Feb 01 19:22:17 2008 +0000
+++ b/gmyth-upnp/src/Makefile.am	Fri Feb 01 22:17:33 2008 +0000
@@ -27,12 +27,12 @@
 libgmythupnp_la_CFLAGS = 			\
 	-DDATADIR=\"$(pkgdatadir)\" 	\
 	$(LIBGMYTH_CFLAGS)			\
-	$(CYBERLINK_CFLAGS)
+	$(LIBUPNP_CFLAGS)
 
 libgmythupnp_la_LDFLAGS = 			\
 	-export-dynamic 		\
 	$(LIBGMYTH_LIBS) 			\
-	$(CYBERLINK_LIBS)
+	$(LIBUPNP_LIBS)
 
 libgmythupnp_includedir = 			\
 	$(pkgincludedir)
diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/src/gmyth_upnp.c
--- a/gmyth-upnp/src/gmyth_upnp.c	Fri Feb 01 19:22:17 2008 +0000
+++ b/gmyth-upnp/src/gmyth_upnp.c	Fri Feb 01 22:17:33 2008 +0000
@@ -30,64 +30,69 @@
 #endif
 
 #include "gmyth_upnp.h"
-#include "gmyth_upnp_marshal.h"
 
-#include <arpa/inet.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netdb.h>
-#include <errno.h>
-#include <stdlib.h>
+#include <gmyth/gmyth.h>
+#include <upnp/upnp.h>
+#include <string.h>
 
-#include <gmyth/gmyth_backendinfo.h>
-#include <gmyth/gmyth_socket.h>
-#include <gmyth/gmyth_uri.h>
-#include <gmyth/gmyth_debug.h>
 
-/*
- * Maximum number of searches in the synchronized search 
- */
-#define GMYTH_UPNP_MAX_SEARCHS		10
+#define UPNP_SEARCH_TIMEOUT 5
+#define UPNP_SERVICE_FILTER  "urn:schemas-mythtv-org:service:MythTv:1"
+#define SERVER_ID           "MythTV AV Media Server"
+
+typedef struct _GMythUPnPPrivate GMythUPnPPrivate;
+typedef struct _GMythUPnPIdleData GMythUPnPIdleData;
 
 #define GMYTH_UPNP_GET_PRIVATE(obj) \
     (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GMYTH_UPNP_TYPE, GMythUPnPPrivate))
 
+enum
+{
+    DEVICE_FOUND,
+    DEVICE_LOST,
+    LAST_SIGNAL
+};
+
+struct _GMythUPnPIdleData
+{
+    GMythUPnP *parent;
+    GMythBackendInfo *server;
+};
+
 struct _GMythUPnPPrivate {
-    GHashTable     *mythtv_servers;
+    GHashTable     *servers;
     GMythUPnPDeviceStatus last_status;
     gboolean        upnp_dev_found;
     gchar          *udn;
     GMutex         *mutex;
+    gint            idle_count;
+
+    /* upnp */
+    UpnpClient_Handle client_id;
 };
 
-static void     gmyth_upnp_class_init(GMythUPnPClass * klass);
-static void     gmyth_upnp_init(GMythUPnP * object);
+static void     gmyth_upnp_class_init   (GMythUPnPClass* klass);
+static void     gmyth_upnp_init         (GMythUPnP* object);
+static void     gmyth_upnp_dispose      (GObject* object);
+static void     gmyth_upnp_finalize     (GObject* object);
+static GObject* gmyth_upnp_constructor  (GType type,
+                                         guint n_construct_params,
+                                         GObjectConstructParam *construct_params);
 
-static void     gmyth_upnp_dispose(GObject * object);
-static void     gmyth_upnp_finalize(GObject * object);
 
-static void     _mythtv_device_found(GMythUPnP * gmyth_upnp,
-                                     GMythUPnPDeviceStatus status,
-                                     gchar * dev);
-static void     _clinkc_mythtv_device_found(gchar * udn,
-                                            GMythUPnPDeviceStatus status);
+static int      _upnp_event_handler     (Upnp_EventType e_type,
+                                         void* e,
+                                         void* data);
 
-static gboolean gmyth_upnp_initialize(GMythUPnP * gmyth_upnp,
-                                      GMythBackendInfo *
-                                      gmyth_backend_info,
-                                      GMythUPnPDeviceListener listener);
 
-static gboolean gmyth_upnp_got_mythtv_service(CgUpnpControlPoint *
-                                              controlPt, gchar ** udn,
-                                              GHashTable **
-                                              mythtv_servers_lst);
+static int signals[LAST_SIGNAL] = {0};
 
-G_DEFINE_TYPE(GMythUPnP, gmyth_upnp, G_TYPE_OBJECT)
+static GMythUPnP *singleton = NULL;
 
-    static GMythUPnP *gmyth_upnp_static = NULL;
+G_DEFINE_TYPE(GMythUPnP, gmyth_upnp, G_TYPE_OBJECT);
 
-    static void
-                    gmyth_upnp_class_init(GMythUPnPClass * klass)
+static void
+gmyth_upnp_class_init(GMythUPnPClass * klass)
 {
     GObjectClass   *gobject_class;
     GMythUPnPClass *gupnp_class;
@@ -97,347 +102,354 @@
 
     gobject_class->dispose = gmyth_upnp_dispose;
     gobject_class->finalize = gmyth_upnp_finalize;
+    gobject_class->constructor = gmyth_upnp_constructor;
 
-    g_type_class_add_private(gobject_class, sizeof(GMythUPnPPrivate));
+    g_type_class_add_private (gobject_class, sizeof(GMythUPnPPrivate));
 
-    gupnp_class->device_found_handler = _mythtv_device_found;
 
-    gupnp_class->device_found_handler_signal_id =
-        g_signal_new("device-found",
-                     G_TYPE_FROM_CLASS(gupnp_class),
-                     G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE |
-                     G_SIGNAL_NO_HOOKS, 0, NULL, NULL,
-                     gmyth_upnp_marshal_VOID__INT_STRING, G_TYPE_NONE, 2,
-                     G_TYPE_INT, G_TYPE_STRING);
+
+    signals[DEVICE_FOUND] = g_signal_new("device-found",
+                                         G_TYPE_FROM_CLASS(gupnp_class),
+                                         G_SIGNAL_RUN_LAST,
+                                         0, NULL, NULL,
+                                         g_cclosure_marshal_VOID__OBJECT,
+                                         G_TYPE_NONE, 1,
+                                         GMYTH_BACKEND_INFO_TYPE);
+
+    signals[DEVICE_LOST] = g_signal_new("device-lost",
+                                         G_TYPE_FROM_CLASS(gupnp_class),
+                                         G_SIGNAL_RUN_LAST,
+                                         0, NULL, NULL,
+                                         g_cclosure_marshal_VOID__OBJECT,
+                                         G_TYPE_NONE, 1,
+                                         GMYTH_BACKEND_INFO_TYPE);
 
 }
 
 static void
-gmyth_upnp_init(GMythUPnP * gmyth_upnp)
+gmyth_upnp_init(GMythUPnP* self)
 {
+    gint ret;
+    GMythUPnPPrivate *priv;
 
-    gmyth_upnp->backend_info = NULL;
+    priv = GMYTH_UPNP_GET_PRIVATE (self);
 
-    gmyth_upnp->control_point = NULL;
+    priv->mutex = g_mutex_new ();
+    priv->servers = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
 
-    gmyth_upnp->priv = GMYTH_UPNP_GET_PRIVATE(gmyth_upnp);
-    gmyth_upnp->priv->mutex = g_mutex_new();
-    gmyth_upnp->priv->upnp_dev_found = FALSE;
+    /* initalize upnp client */
+    ret = UpnpInit (NULL, 0);
+    if (ret != UPNP_E_SUCCESS)
+        g_warning ("Fail to inilialize upnp SDK: %d", ret);
+    else
+    {
+        ret = UpnpRegisterClient (_upnp_event_handler,
+                                  &priv->client_id, &priv->client_id);
 
-    g_signal_connect(G_OBJECT(gmyth_upnp), "device-found",
-                     (GCallback) (GMYTH_UPNP_GET_CLASS(gmyth_upnp)->
-                                  device_found_handler), NULL);
-
-    gmyth_upnp_static = gmyth_upnp;
-
+        if (ret != UPNP_E_SUCCESS)
+            g_warning ("Fail to start upnp client: %d", ret);
+    }
 }
 
-/** Creates a new instance of GMythUPnP.
- * 
- * @return a new instance of GMythUPnP. 
- */
-GMythUPnP      *
-gmyth_upnp_new(GMythBackendInfo * gmyth_backend_info,
-               GMythUPnPDeviceListener handler)
+static GObject*
+gmyth_upnp_constructor (GType type,
+                        guint n_construct_params,
+                        GObjectConstructParam *construct_params)
 {
-    GMythUPnP      *gmyth_upnp =
-        GMYTH_UPNP(g_object_new(GMYTH_UPNP_TYPE, NULL));
+    GObject *object;
 
-    g_object_ref(gmyth_backend_info);
+    if (!singleton)
+    {
+        object = G_OBJECT_CLASS (gmyth_upnp_parent_class)->constructor (type,
+                                                             n_construct_params,
+                                                             construct_params);
 
-    gmyth_upnp->backend_info = gmyth_backend_info;
+        singleton = GMYTH_UPNP (object);
+    }
+    else
+        object = g_object_ref (G_OBJECT (singleton));
 
-    if (!gmyth_upnp_initialize(gmyth_upnp, gmyth_backend_info, handler)) {
-        gmyth_debug("Error initializing the GMythUPnP!!!");
-    }
-
-    return gmyth_upnp;
+    return object;
 }
 
 static void
 gmyth_upnp_dispose(GObject * object)
 {
-    GMythUPnP      *gmyth_upnp = GMYTH_UPNP(object);
-
-    if (gmyth_upnp->control_point != NULL) {
-        cg_upnp_controlpoint_stop(gmyth_upnp->control_point);
-        cg_upnp_controlpoint_delete(gmyth_upnp->control_point);
-        gmyth_upnp->control_point = NULL;
-    }
-
-    if (gmyth_upnp->priv->mythtv_servers != NULL) {
-        g_hash_table_destroy(gmyth_upnp->priv->mythtv_servers);
-        gmyth_upnp->priv->mythtv_servers = NULL;
-    }
-
-    if (gmyth_upnp->backend_info != NULL) {
-        g_object_unref(gmyth_upnp->backend_info);
-        gmyth_upnp->backend_info = NULL;
-    }
-
+    /* finalize upnp client */
+    UpnpFinish ();
     G_OBJECT_CLASS(gmyth_upnp_parent_class)->dispose(object);
 }
 
 static void
 gmyth_upnp_finalize(GObject * object)
 {
-    g_signal_handlers_destroy(object);
-
     G_OBJECT_CLASS(gmyth_upnp_parent_class)->finalize(object);
+    singleton = NULL;
 }
 
-gchar          *
-gmyth_upnp_device_status_to_string(GMythUPnPDeviceStatus status)
+
+GMythUPnP*
+gmyth_upnp_get_instance (void)
 {
-    if (status == CgUpnpDeviceStatusAdded)
-        return "Added";
-    else if (status == CgUpnpDeviceStatusUpdated)
-        return "Updated";
-    else if (status == CgUpnpDeviceStatusInvalid)
-        return "Invalid";
-    else if (status == CgUpnpDeviceStatusRemoved)
-        return "Removed";
-
-    return "";
+    return GMYTH_UPNP(g_object_new(GMYTH_UPNP_TYPE, NULL));
 }
 
-/**
- * GObject's signal handler
- */
-static void
-_mythtv_device_found(GMythUPnP * gmyth_upnp, GMythUPnPDeviceStatus status,
-                     gchar * udn)
+
+void
+gmyth_upnp_search (GMythUPnP *self)
 {
-    g_debug("Device: [status = %s, UDN = %s]\n",
-            gmyth_upnp_device_status_to_string(status), udn);
+    int ret;
+    GMythUPnPPrivate *priv;
+
+    priv = GMYTH_UPNP_GET_PRIVATE (self);
+
+    ret = UpnpSearchAsync (priv->client_id,
+                           UPNP_SEARCH_TIMEOUT,
+                           UPNP_SERVICE_FILTER,
+                           NULL);
+
+    if (ret != UPNP_E_SUCCESS)
+        g_warning ("Fail to start upnp listener: %d", ret);
 }
 
-/**
- * GObject's signal handler
- */
-static void
-_clinkc_mythtv_device_found(gchar * udn, GMythUPnPDeviceStatus status)
+static gboolean
+_idle_emit_device_found_signal (gpointer data)
 {
-    if (gmyth_upnp_static != NULL && udn != NULL)
-        g_signal_emit(gmyth_upnp_static, GMYTH_UPNP_GET_CLASS(gmyth_upnp_static)->device_found_handler_signal_id, 0,    /* details 
-                                                                                                                         */
-                      status, udn);
+    GMythUPnPPrivate *priv;
+    GMythUPnPIdleData *idle_data;
+
+    idle_data = (GMythUPnPIdleData *) data;
+    priv = GMYTH_UPNP_GET_PRIVATE (idle_data->parent);
+
+    g_signal_emit (idle_data->parent, signals[DEVICE_FOUND], 0, idle_data->server);
+
+    g_object_unref (idle_data->server);
+    g_free (idle_data);
+    priv->idle_count--;
+
+    return FALSE;
 }
 
-/**
- * Create a control point and start it.
- */
-static          gboolean
-gmyth_upnp_initialize(GMythUPnP * gmyth_upnp,
-                      GMythBackendInfo * gmyth_backend_info,
-                      GMythUPnPDeviceListener device_found_handler)
+static gboolean
+_idle_emit_device_lost_signal (gpointer data)
 {
-    gboolean        ret = TRUE;
+    GMythUPnPPrivate *priv;
+    GMythUPnPIdleData *idle_data;
 
-    g_return_val_if_fail(gmyth_backend_info != NULL, FALSE);
+    idle_data = (GMythUPnPIdleData *) data;
+    priv = GMYTH_UPNP_GET_PRIVATE (idle_data->parent);
 
-    /*
-     * Create the cybergarage control point 
-     */
-    gmyth_upnp->control_point = cg_upnp_controlpoint_new();
+    g_signal_emit (idle_data->parent, signals[DEVICE_LOST], 0, idle_data->server);
 
-    if (device_found_handler != NULL) {
-        GMYTH_UPNP_GET_CLASS(gmyth_upnp)->device_found_handler =
-            device_found_handler;
+    g_object_unref (idle_data->server);
+    g_free (idle_data);
+    priv->idle_count--;
 
-        cg_upnp_controlpoint_setdevicelistener(gmyth_upnp->control_point,
-                                               _clinkc_mythtv_device_found);
+    return FALSE;
+}
+
+static char*
+_xml_get_first_document_item (IXML_Document * doc,
+                              const gchar *item )
+{
+    IXML_NodeList *node_list = NULL;
+    IXML_Node *text_node = NULL;
+    IXML_Node *tmp_node = NULL;
+
+    gchar *ret = NULL;
+
+    node_list = ixmlDocument_getElementsByTagName (doc,
+                                                  (char *) item);
+
+    if (node_list)
+    {
+        if ((tmp_node = ixmlNodeList_item (node_list, 0))) 
+        {
+            text_node = ixmlNode_getFirstChild (tmp_node);
+
+            ret = strdup (ixmlNode_getNodeValue (text_node));
+        }
     }
 
-    /*
-     * Start the control point 
-     */
-    if (cg_upnp_controlpoint_start(gmyth_upnp->control_point) == FALSE) {
-        gmyth_debug("Unable to start UPnP control point!!!");
-        ret = FALSE;
-        goto done;
-    } else {
-        gmyth_debug("Control point started.");
-    }
-
-  done:
+    if (node_list)
+        ixmlNodeList_free (node_list);
 
     return ret;
 }
 
+
 static void
-_gmyth_foreach_key_value(gchar * udn, gchar * dev,
-                         GList * upnp_servers_list)
+_append_mythtv_server_from_loation (GMythUPnP *self,
+                                    const gchar *uuid,
+                                    const gchar *location)
 {
-    GMythUPnPDevice *gmyth_upnp = g_malloc0(sizeof(GMythUPnPDevice));
+    GMythUPnPPrivate *priv;
+    gchar *base_url;
+    gchar *end;
 
-    GMythURI       *uri = NULL;
-    gmyth_upnp->uri = (gchar *) (dev);
-    uri = gmyth_uri_new_with_value(gmyth_upnp->uri);
+    priv = GMYTH_UPNP_GET_PRIVATE (self);
 
-    gmyth_upnp->host = gmyth_uri_get_host(uri);
-    gmyth_upnp->port = gmyth_uri_get_port(uri);
-    gmyth_upnp->protocol = gmyth_uri_get_protocol(uri);
+    base_url = g_strdup (location);
+    end = g_strrstr (base_url, "/");
+    if (end)
+    {
+        gint ret;
+        IXML_Document *desc_doc;
+        gchar *info_url;
 
-    gmyth_debug("MythTV UPnP service [ %s, %d ].", gmyth_upnp->host,
-                gmyth_upnp->port);
+        end[0] = '\0';
+        info_url = g_strconcat (base_url,
+                                "Myth/GetConnectionInfo",
+                                NULL);
+        g_free (base_url);
+        desc_doc = NULL;
+        ret = UpnpDownloadXmlDoc (info_url, &desc_doc);
+        if (ret != UPNP_E_SUCCESS)
+        {
+            g_warning ("Error obtaining device desc: %d", ret);
+        }
+        else
+        {
+            GMythBackendInfo *info;
+            GMythUPnPIdleData *idle_data;
 
-    upnp_servers_list = g_list_append(upnp_servers_list, gmyth_upnp);
+            info = gmyth_backend_info_new_full (
+                _xml_get_first_document_item (desc_doc, "Host"),
+                _xml_get_first_document_item (desc_doc, "UserName"),
+                _xml_get_first_document_item (desc_doc, "Password"),
+                _xml_get_first_document_item (desc_doc, "Name"),
+                // Current mythtv version not export port number
+                6543);
 
-    if (uri != NULL) {
-        g_object_unref(uri);
-        uri = NULL;
+            if (desc_doc)
+                ixmlDocument_free (desc_doc);
+
+            g_mutex_lock (priv->mutex);
+            g_hash_table_insert (priv->servers, 
+                                 g_strdup (uuid),
+                                 g_object_ref (info));
+            g_mutex_unlock (priv->mutex);
+            g_debug ("info url: %s", info_url);
+            g_free (info_url);
+
+            idle_data = g_new0 (GMythUPnPIdleData, 1);
+            idle_data->parent = self;
+            idle_data->server = g_object_ref (info);
+
+            priv->idle_count++;
+            g_idle_add (_idle_emit_device_found_signal, idle_data);
+        }
     }
+}
+
+static void
+_remove_mythtv_server (GMythUPnP *self,
+                       const gchar *uuid)
+{
+    GMythUPnPPrivate *priv;
+    GMythBackendInfo *info;
+
+    priv = GMYTH_UPNP_GET_PRIVATE (self);
+
+    g_mutex_lock (priv->mutex);
+    info = g_hash_table_lookup (priv->servers, uuid);
+    if (info)
+    {
+        GMythUPnPIdleData *idle_data;
+
+        idle_data = g_new0 (GMythUPnPIdleData, 1);
+        idle_data->parent = self;
+        idle_data->server = g_object_ref (info);
+
+        g_hash_table_remove (priv->servers, uuid);
+
+        priv->idle_count++;
+        g_idle_add (_idle_emit_device_lost_signal, idle_data);
+    }
+    g_mutex_unlock (priv->mutex);
 
 }
 
-GList          *
-gmyth_upnp_do_search_sync(GMythUPnP * gmyth_upnp)
+static GMythBackendInfo*
+_find_service_by_uuid (GMythUPnP *self,
+                      const gchar *uuid)
 {
-    GList          *upnp_servers_list = NULL;
-    guint           iter_count = GMYTH_UPNP_MAX_SEARCHS;
-    /*
-     * gmyth_upnp->priv = GMYTH_UPNP_GET_PRIVATE( gmyth_upnp ); 
-     */
+    GMythUPnPPrivate *priv;
+    GMythBackendInfo *info;
 
-    while (gmyth_upnp->priv->upnp_dev_found == FALSE && (--iter_count > 0)) {
+    priv = GMYTH_UPNP_GET_PRIVATE (self);
+    info = NULL;
 
-        gmyth_debug
-            ("UPnP MythTV Client control point is searching MythTV AV Device server...\n");
+    g_mutex_lock (priv->mutex);
+    info = g_hash_table_lookup (priv->servers, uuid);
+    g_mutex_unlock (priv->mutex);
 
-        if (gmyth_upnp->control_point != NULL)
-            cg_upnp_controlpoint_search(gmyth_upnp->control_point,
-                                        "urn:schemas-upnp-org:service:ContentDirectory:1");
-
-        /*
-         * just to avoid clinkc pthread concurrency faults 
-         */
-        cg_wait(1000);
-
-        /*
-         * discover if it was found 
-         */
-        gmyth_upnp->priv->upnp_dev_found =
-            gmyth_upnp_got_mythtv_service(gmyth_upnp->control_point,
-                                          &gmyth_upnp->priv->udn,
-                                          &gmyth_upnp->priv->
-                                          mythtv_servers);
-
-    }                           /* while */
-
-    if (gmyth_upnp->priv->upnp_dev_found) {
-
-        gmyth_debug("Found UPnP MythTV AV Device...\n");
-
-        g_hash_table_foreach(gmyth_upnp->priv->mythtv_servers,
-                             (GHFunc) _gmyth_foreach_key_value,
-                             upnp_servers_list);
-
-    }
-    /*
-     * if - found UPnP device 
-     */
-    return upnp_servers_list;
+    return info;
 }
 
-/** 
- * Checks if got the MythTV service in the Control Point's device list.
- */
-static          gboolean
-gmyth_upnp_got_mythtv_service(CgUpnpControlPoint * controlPt, gchar ** udn,
-                              GHashTable ** mythtv_servers_lst)
+static int
+_upnp_event_handler (Upnp_EventType e_type,
+                     void* e,
+                     void* data)
 {
+    g_return_val_if_fail (singleton != NULL, 0);
 
-    g_return_val_if_fail(mythtv_servers_lst != NULL, FALSE);
-    g_return_val_if_fail(controlPt != NULL, FALSE);
+    switch (e_type)
+    {
+        case UPNP_DISCOVERY_ADVERTISEMENT_ALIVE:
+        case UPNP_DISCOVERY_SEARCH_RESULT:
+        {
+            struct Upnp_Discovery *d_event;
 
-    *mythtv_servers_lst = g_hash_table_new(g_str_hash, g_str_equal);
+            d_event = (struct Upnp_Discovery *) e;
 
-    const gchar    *mythtvFriendlyName = "Myth";
-    /*
-     * begin assertion about the size of discovered devices 
-     */
-    gint            numDevices =
-        cg_upnp_controlpoint_getndevices(controlPt);
-    gint            cntDevs = 0;
-    CgUpnpDevice   *childDev;
-    gchar          *devName = NULL,
-        *dev_url = NULL;
-    gboolean        upnp_dev_found = FALSE;
+            g_debug ("TYPE: %s", d_event->ServiceType);
 
-    gmyth_debug("UPnP MythTV AV Device list size = %d\n", numDevices);
+            if (strcmp (d_event->ServiceType, UPNP_SERVICE_FILTER) != 0)
+            {
+                g_debug ("invalid device : %s", d_event->DeviceId);
+                break;
+            }
 
-    for (childDev = cg_upnp_controlpoint_getdevices(controlPt);
-         childDev != NULL; childDev = cg_upnp_device_next(childDev)) {
-        devName = cg_upnp_device_getfriendlyname(childDev);
-        dev_url = cg_upnp_device_getlocationfromssdppacket(childDev);
-        gmyth_debug
-            ("Device's friendly name = %s, and  device's URL = %s\n",
-             devName, dev_url);
-        if ((g_strstr_len(devName, strlen(devName), mythtvFriendlyName) !=
-             NULL) == TRUE) {
-            upnp_dev_found = TRUE;
-            /*
-             * stores the last UDN number ID 
-             */
-            *udn = cg_upnp_device_getudn(childDev);
-            /*
-             *mythtv_servers_lst = g_list_append( *mythtv_servers_lst, dev_url );  */
-            g_hash_table_insert(*mythtv_servers_lst, (gpointer) * udn,
-                                (gpointer) dev_url);
+
+            if (d_event->ErrCode != UPNP_E_SUCCESS)
+            {
+                g_warning ("Error in Discovery: %d", d_event->ErrCode);
+                break;
+            }
+
+            if (_find_service_by_uuid (GMYTH_UPNP (singleton), d_event->DeviceId) == NULL)
+                _append_mythtv_server_from_loation (singleton,
+                                                    d_event->DeviceId,
+                                                    d_event->Location);
+
+
+            break;
         }
-        ++cntDevs;
+        case UPNP_DISCOVERY_ADVERTISEMENT_BYEBYE:
+        {
+            GMythUPnPPrivate *priv;
+            struct Upnp_Discovery *d_event;
+
+            d_event = (struct Upnp_Discovery *) e;
+            if (d_event->ErrCode != UPNP_E_SUCCESS)
+            {
+                g_warning ("Error in Discovery: %d", d_event->ErrCode);
+                break;
+            }
+
+            priv = GMYTH_UPNP_GET_PRIVATE (singleton);
+            _remove_mythtv_server (singleton,
+                                   d_event->DeviceId);
+
+            break;
+
+        }
+        default:
+            g_debug ("No handle event: %d", e_type);
+            break;
     }
 
-    if (upnp_dev_found == TRUE) {
-        gmyth_debug
-            ("MythTV AV Device found, from a total of %d devices.\n",
-             cntDevs);
-    } else if (numDevices == cntDevs) {
-        gmyth_debug
-            ("MythTV AV Device not found, from a total of %d devices.\n",
-             cntDevs);
-    } else {
-        gmyth_debug
-            ("Control Point's MythTV AV Device count is wrong: iterated over %d devices, but there are %d registered devices.\n",
-             cntDevs, numDevices);
-    }
-
-    return upnp_dev_found;
-
+    return 0;
 }
 
-/** Gets the UPnP AV devices server's list associated to this upnp.
- * 
- * @return The GHashTable* containing all the URI values for each recognized UPnP device,
- * 			or NULL if it couldn't recognize any MythTV AV device.
- */
-GHashTable     *
-gmyth_upnp_get_servers(GMythUPnP * gmyth_upnp)
-{
-
-    if (NULL == gmyth_upnp || NULL == gmyth_upnp->priv->mythtv_servers) {
-        gmyth_debug("[%s] GMythUPnP has no MythTV servers recognized.\n",
-                    __FUNCTION__);
-        return NULL;
-    }
-
-    return gmyth_upnp->priv->mythtv_servers;
-}
-
-/** Gets the GMythBackendInfo object associated to this upnp.
- * 
- * @return The GMythBackendInfo object currently valid or NULL if the settings
- * were not opened.
- */
-GMythBackendInfo *
-gmyth_upnp_get_backend_info(GMythUPnP * gmyth_upnp)
-{
-
-    if (NULL == gmyth_upnp || NULL == gmyth_upnp->backend_info) {
-        gmyth_debug("[%s] GMythUPnP not initialized\n", __FUNCTION__);
-        return NULL;
-    }
-
-    return gmyth_upnp->backend_info;
-}
diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/src/gmyth_upnp.h
--- a/gmyth-upnp/src/gmyth_upnp.h	Fri Feb 01 19:22:17 2008 +0000
+++ b/gmyth-upnp/src/gmyth_upnp.h	Fri Feb 01 22:17:33 2008 +0000
@@ -35,7 +35,6 @@
 #include <stdio.h>
 #include <string.h>
 
-#include <cybergarage/upnp/cupnp.h>
 #include <gmyth/gmyth_backendinfo.h>
 
 G_BEGIN_DECLS
@@ -47,7 +46,7 @@
 #define GMYTH_UPNP_GET_CLASS(obj)     (G_TYPE_INSTANCE_GET_CLASS ((obj), GMYTH_UPNP_TYPE, GMythUPnPClass))
 typedef struct _GMythUPnP GMythUPnP;
 typedef struct _GMythUPnPClass GMythUPnPClass;
-typedef struct _GMythUPnPPrivate GMythUPnPPrivate;
+typedef struct _GMythUPnPDevice GMythUPnPDevice;
 
 /****************************************
 * Data Type
@@ -59,59 +58,25 @@
     GMYTH_UPNP_DEVICE_REMOVED
 } GMythUPnPDeviceStatus;
 
-typedef void    (*GMythUPnPDeviceListener) (GMythUPnP * gmyth_upnp,
-                                            GMythUPnPDeviceStatus status,
-                                            gchar * dev);
+struct _GMythUPnPDevice {
+    gchar  *uri;
+    gchar  *host;
+    gint   port;
+    gchar  *protocol;
+};
+
 
 struct _GMythUPnPClass {
     GObjectClass    parent_class;
-
-    /*
-     * callbacks 
-     */
-    guint           device_found_handler_signal_id;
-
-    GMythUPnPDeviceListener device_found_handler;
-
-    /*
-     * no one for now 
-     */
 };
 
-struct _GMythUPnPDevice {
-    gchar          *uri;
-    gchar          *host;
-    gint            port;
-    gchar          *protocol;
+struct _GMythUPnP {
+    GObject         parent;
 };
 
-typedef struct _GMythUPnPDevice GMythUPnPDevice;
-
-struct _GMythUPnP {
-
-    GObject         parent;
-    GMythUPnPPrivate *priv;
-
-
-    CgUpnpControlPoint *control_point;
-
-    gchar          *udn;
-
-    GMythBackendInfo *backend_info;
-
-    gboolean        upnp_dev_found;
-};
-
-GType           gmyth_upnp_get_type(void);
-GMythUPnP      *gmyth_upnp_new(GMythBackendInfo * gmyth_backend_info,
-                               GMythUPnPDeviceListener handler);
-
-GList          *gmyth_upnp_do_search_sync(GMythUPnP * gmyth_upnp);
-
-GMythBackendInfo *gmyth_upnp_get_backend_info(GMythUPnP * gmyth_upnp);
-
-gchar          *gmyth_upnp_device_status_to_string(GMythUPnPDeviceStatus
-                                                   status);
+GType               gmyth_upnp_get_type         (void);
+GMythUPnP*          gmyth_upnp_get_instance     (void);
+void                gmyth_upnp_search           (GMythUPnP * gmyth_upnp);
 
 G_END_DECLS
 #endif                          /* _GMYTH_UPNP_H_ */
diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/test/Makefile.am
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gmyth-upnp/test/Makefile.am	Fri Feb 01 22:17:33 2008 +0000
@@ -0,0 +1,18 @@
+LDADD = \
+	$(GLIB_LIBS) \
+	$(LIBUPNP_LIBS) \
+	$(top_srcdir)/src/.libs/libgmythupnp.la
+
+INCLUDES = \
+	-I$(top_srcdir)/src \
+	$(GLIB_CFLAGS) \
+	$(GOBJECT_CFLAGS) \
+	$(LIBUPNP_CFLAGS)
+
+bin_PROGRAMS = \
+	test
+
+test_SOURCES = \
+	main.c
+
+CLEANFILES = $(BUILT_SOURCES)
diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/test/main.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gmyth-upnp/test/main.c	Fri Feb 01 22:17:33 2008 +0000
@@ -0,0 +1,49 @@
+#include <glib.h>
+
+#include "gmyth_upnp.h"
+
+static void
+_device_found_cb (GMythUPnP *upnp,
+                  GMythBackendInfo *info,
+                  gpointer data)
+{
+    g_debug ("BACKEND FOUND: %s", info->hostname);
+}
+
+static void
+_device_lost_cb (GMythUPnP *upnp,
+                  GMythBackendInfo *info,
+                  gpointer data)
+{
+    g_debug ("BACKEND LOST: %s", info->hostname);
+}
+
+
+
+int main (int argc, char** argv)
+{
+    GMythUPnP *o;
+    GMainLoop *loop;
+
+    g_type_init ();
+    g_thread_init (NULL);
+
+    o = gmyth_upnp_get_instance ();
+    g_signal_connect (o,
+                      "device-found",
+                       G_CALLBACK (_device_found_cb),
+                       NULL);
+    g_signal_connect (o,
+                      "device-lost",
+                       G_CALLBACK (_device_lost_cb),
+                       NULL);
+
+
+    gmyth_upnp_search (o);
+
+    loop = g_main_loop_new (NULL, FALSE);
+    g_main_loop_run (loop);
+    g_object_unref (o);
+
+    return 0;
+}