initial checki master
authorTobias Mueller <tobiasmue@gnome.org>
Tue, 22 Dec 2009 18:19:05 +0000 (19:19 +0100)
committerTobias Mueller <tobiasmue@gnome.org>
Tue, 22 Dec 2009 18:19:05 +0000 (19:19 +0100)
31 files changed:
Makefile [new file with mode: 0644]
data/Callback.desktop [new file with mode: 0644]
data/Callback.png [new file with mode: 0644]
data/callback.client [new file with mode: 0644]
data/callback.service [new file with mode: 0644]
debian/README.Debian [new file with mode: 0644]
debian/changelog [new file with mode: 0644]
debian/compat [new file with mode: 0644]
debian/control [new file with mode: 0644]
debian/copyright [new file with mode: 0644]
debian/cron.d.ex [new file with mode: 0644]
debian/dirs [new file with mode: 0644]
debian/docs [new file with mode: 0644]
debian/emacsen-install.ex [new file with mode: 0644]
debian/emacsen-remove.ex [new file with mode: 0644]
debian/emacsen-startup.ex [new file with mode: 0644]
debian/init.d.ex [new file with mode: 0644]
debian/manpage.1.ex [new file with mode: 0644]
debian/manpage.sgml.ex [new file with mode: 0644]
debian/manpage.xml.ex [new file with mode: 0644]
debian/menu.ex [new file with mode: 0644]
debian/postinst.ex [new file with mode: 0644]
debian/postrm.ex [new file with mode: 0644]
debian/preinst.ex [new file with mode: 0644]
debian/prerm.ex [new file with mode: 0644]
debian/rules [new file with mode: 0755]
debian/telepathy-callback-default.ex [new file with mode: 0644]
debian/telepathy-callback.doc-base.EX [new file with mode: 0644]
debian/watch.ex [new file with mode: 0644]
setup.py [new file with mode: 0644]
src/SMSListener.py [new file with mode: 0755]

diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..24dad88
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,7 @@
+all:
+       python2.5 setup.py build
+clean:
+       python2.5 setup.py clean --all
+install:
+       python2.5 setup.py install --root $(DESTDIR)
+
diff --git a/data/Callback.desktop b/data/Callback.desktop
new file mode 100644 (file)
index 0000000..2206d2c
--- /dev/null
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Categories=Network;InstantMessaging;
+Name=Callback
+GenericName=Callback
+Comment=A Telepathy Callback Client
+Version=0.1
+Exec=SMSListener.py
+Icon=Callback
+Terminal=false
+Type=Application
diff --git a/data/Callback.png b/data/Callback.png
new file mode 100644 (file)
index 0000000..a8e2d31
--- /dev/null
@@ -0,0 +1,33 @@
+iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgI
+fAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3
+Lmlua3NjYXBlLm9yZ5vuPBoAAAUcSURBVFiFtZZdaBRXFMd/d/YziWY3JDG6
+xiomalxqTGsftKKVgoJNwSJIQEugD4VAoSBC2lIw9algH0TwoS9+YFvbWiut
+KMZYWijS1tTvJNMkNaSNiY1JTHazm92dnY/bh521sUl2N1EPHGZn5uz5/+65
+9565QkpJrhYKBouBt4AgUGW7AdwG7gA3gW/8qqrlmlPkAhAKBvOAd1CUdz31
+9apryxYcFRU+UVQUQIhiGYkMWH194WRLi1M7ccKHYezzq+p3TwUgFAyuAL52
+bd3am3/w4BLh8VhAEii03QJCQBhwykhkYaypyas3N3cCdX5VDc0ZIBQMFgBn
+5506FXHW1KwA7gFFWQY1iJQLkxcueGONjQPADr+qziiiZEn2kbehYdBZU+MD
+jgOjQE8Wn0CIb921tRF3bW0l8GEmgRkrEAoGX1TKyxsLL11ajBANwGtAfhbg
+tMWA76WmnYzU1lZY9+9v8qtq53SBzgxJqvL27jUQ4iugg1Tpl+UI8BfQLTye
+L9w7d9YljhzZAswaYKlSWZkgtbUAfiM1Bb4s4mGg2/7d5QgGR4D1wKfTBWda
+AwFl0SITGLTvDauteh9tGwtIVaQLuGt7F9BB28YCq616H6neANDrqKqaADbM
+JJKpAjGcTh+pLZYyKZKSyGXuVGf4m5g80iHhducBeTNFZ6pAjxwe/gdY+ShY
+Wi0Z4qeLWWV0dIwDt+YC0Ge0tnYBzz96Ynh+BEyB2Cyq74jHHLEZMO2YtNXo
+Fy/q/LeOZgVwTzt2bBhYCswHYN21MJKrSCswJVpaASRXWXctbD8JIOUivbl5
+BXBlLgCdZm+vtHp7W4HXH+kIcRlFTAVQREAIObn82+OHDoVlIjHuV9XLswbw
+q6oJ3IrU1d0n1YCqABTFarHkVABLigAKaaHVMh5XtKNHtwMHMgwyayvul9Fo
+InnmzBXgZaCAP1ZfBWuajmjlp97hBtZHd+8uQcrrflW9PmcAv6oC3I3t3x+T
+sdgtYDO7TpuKnNrVFEknu06bwEvJc+c0s6vrBeDjLAPMWgHsw8XY+LZt3YAO
+VIJsnxop24ESGY0G4k1NrwCf+FU18sQANkRUjo46kufPq8BylAXq1KjCDmDN
+RENDQGraTb+q/p5L7pwAbIvGGhudZk/PBGt+LAHKSHW4fGAxa39ZrJ08WWLc
+uFEOnMg1aU5HsrS1HnHXey3fYfe88h/yyjdeKnhufQjDkBPdPy8w2m+8wb2h
+TdFA5IO1ByKHnwnAr5+L7vKqPRXK0ANiPf0Jc3BEYdxAxC0UqbtjMkHsVdmz
+4U25Mnu2lGX6GE2lhQE9ObakuGrMW1AZzbeMMFZMxxoF8yHE+kgIQf9scs5m
+DWCZRA1tXIICwoUQTqQO5iiYYTAiCGkRfWYAwoHb4XJJxVGEEHkgJYoHlPkg
+AKUPyPDpfWIAoNThKfNKK4G0okislLALhA+UtbiA4mcGIE3eH+g8LfSJDqQV
+ASxMDYyHYI1BfABhmbz31AFEypytqrczoYn4g/6HREbH0DUDywv6UhhfDhNB
+R/yna3QLITxCCKcQQmTNnWkbCiEUwEFqtzgBx9u7CmtWLXdeWLYwkVfi0wTA
+SNgj/x70xtr/NHYcPzt+m9SZ0LSvBmDIGYSyAaSFJ7urtLS0rLSsdI/b7aqX
+IPWE9tnQ0MiXIyMjw7agPlkc0KWU5lwAxP/EHZOuCo9PoWV7euSmDaID5kw6
+OXVCeyrTgpPF0wDSFpe2sAlYM5V9sv0L+K5J22uYpJcAAAAASUVORK5CYII=
+
diff --git a/data/callback.client b/data/callback.client
new file mode 100644 (file)
index 0000000..6f787da
--- /dev/null
@@ -0,0 +1,11 @@
+[org.freedesktop.Telepathy.Client]
+Interfaces=org.freedesktop.Telepathy.Client.Observer
+
+[org.freedesktop.Telepathy.Client.Observer.ObserverChannelFilter 0]
+org.freedesktop.Telepathy.Channel.Type s=org.freedesktop.Telepathy.Channel.Type.Text
+org.freedesktop.Telepathy.Channel.TargetHandleType u=1
+
+[org.freedesktop.Telepathy.Client.Observer.ObserverChannelFilter 0]
+org.freedesktop.Telepathy.Channel.Type s=org.freedesktop.Telepathy.Channel.Type.Text
+org.freedesktop.Telepathy.Channel.TargetHandleType u=2
+
diff --git a/data/callback.service b/data/callback.service
new file mode 100644 (file)
index 0000000..3697a7a
--- /dev/null
@@ -0,0 +1,3 @@
+[D-BUS Service]
+Name=org.freedesktop.Telepathy.Client.Callback
+Exec=/usr/bin/SMSListener.py
diff --git a/debian/README.Debian b/debian/README.Debian
new file mode 100644 (file)
index 0000000..5f20dce
--- /dev/null
@@ -0,0 +1,6 @@
+telepathy-callback for Debian
+-----------------------------
+
+<possible notes regarding this package - if none, delete this file>
+
+ -- unknown <muelli@cryptobitch.de>  Sat,  5 Dec 2009 18:57:45 +0530
diff --git a/debian/changelog b/debian/changelog
new file mode 100644 (file)
index 0000000..1ca4d6c
--- /dev/null
@@ -0,0 +1,6 @@
+telepathy-callback (0.0.1-1) unstable; urgency=low
+
+  * Initial release (Closes: #nnnn)  <nnnn is the bug number of your ITP>
+
+ -- unknown <muelli@cryptobitch.de>  Sat,  5 Dec 2009 18:57:45 +0530
+
diff --git a/debian/compat b/debian/compat
new file mode 100644 (file)
index 0000000..7ed6ff8
--- /dev/null
@@ -0,0 +1 @@
+5
diff --git a/debian/control b/debian/control
new file mode 100644 (file)
index 0000000..44ebd0f
--- /dev/null
@@ -0,0 +1,26 @@
+Source: telepathy-callback
+Section: unknown
+Priority: extra
+Maintainer: Tobias Mueller <muelli@cryptobitch.de>
+Build-Depends: debhelper (>= 5)
+Standards-Version: 3.7.2
+
+Package: telepathy-callback
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}, telepathy
+Description: A simple telepathy client that listens
+ on incoming test messages (SMS) to receive a Target
+ number. The sender and the target number will be
+ called and those two calls finally merged.
+XB-Maemo-Icon-26:
+ iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAABmJLR0QA/wD/AP+g
+ vaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1gURDQoYya0JlwAAAU9J
+ REFUSMftlL1KA0EUhb/NZl/ggnHQxsJUxt5CUucVJCCkDfgyKdIGG5/A0s5HEBtJ
+ EdDAQGBgmw0YJmMzgXXYza5CtNkDW9zZw5z7c+ZCgwb/Ai3i9sVl/Bq8RIs4LRK1
+ gJDsKvJyNXmJMuYTsMoY1zpgozaABdYArQNPZQ1kfyGU7SpqVwxzAMwABWhgpIwp
+ 4vWBB+AUWAI3ypjnfEXtPU4bLKx9vErTeCeiRSYF+fTn1j5dp2myE9EiU+DSi3wX
+ ymeqRQAmZ3EcA5E/fgO6BULT8zhOcrwXoJdrXRa2Lgps2y2odAUcBUIXQdz78YyC
+ SldAp8b7+bXrIv91qjZBietqCc2DjbAt4b2WxJkyZljVujlwp0U0cPxuLcAIuC+4
+ dKxFlsDJarvdAGP/b6hFnDImYs+uG3hbO2AB3Jbsur63tQM+fFx3bzZocEB8AdV2
+ gJBZgKTwAAAAAElFTkSuQmCC
+
diff --git a/debian/copyright b/debian/copyright
new file mode 100644 (file)
index 0000000..792b13d
--- /dev/null
@@ -0,0 +1,19 @@
+This package was debianized by Tobias Mueller <muelli@cryptobitch.de> on
+Sat,  5 Dec 2009 18:57:45 +0530.
+
+Upstream Author: Tobias Mueller <muelli@cryptobitch.de>
+
+Copyright: 2009 Tobias Mueller <muelli@cryptobitch.de>
+
+License:
+
+GPL
+
+
+The Debian packaging is (C) 2009, Tobias Mueller <muelli@cryptobitch.de> and
+is licensed under the GPL, see `/usr/share/common-licenses/GPL'.
+
+
+# Please also look if there are files or directories which have a
+# different copyright/license attached and list them here.
+
diff --git a/debian/cron.d.ex b/debian/cron.d.ex
new file mode 100644 (file)
index 0000000..9f3ecc7
--- /dev/null
@@ -0,0 +1,4 @@
+#
+# Regular cron jobs for the telepathy-callback package
+#
+0 4    * * *   root    telepathy-callback_maintenance
diff --git a/debian/dirs b/debian/dirs
new file mode 100644 (file)
index 0000000..ca882bb
--- /dev/null
@@ -0,0 +1,2 @@
+usr/bin
+usr/sbin
diff --git a/debian/docs b/debian/docs
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/debian/emacsen-install.ex b/debian/emacsen-install.ex
new file mode 100644 (file)
index 0000000..67a064f
--- /dev/null
@@ -0,0 +1,45 @@
+#! /bin/sh -e
+# /usr/lib/emacsen-common/packages/install/telepathy-callback
+
+# Written by Jim Van Zandt <jrv@debian.org>, borrowing heavily
+# from the install scripts for gettext by Santiago Vila
+# <sanvila@ctv.es> and octave by Dirk Eddelbuettel <edd@debian.org>.
+
+FLAVOR=$1
+PACKAGE=telepathy-callback
+
+if [ ${FLAVOR} = emacs ]; then exit 0; fi
+
+echo install/${PACKAGE}: Handling install for emacsen flavor ${FLAVOR}
+
+#FLAVORTEST=`echo $FLAVOR | cut -c-6`
+#if [ ${FLAVORTEST} = xemacs ] ; then
+#    SITEFLAG="-no-site-file"
+#else
+#    SITEFLAG="--no-site-file"
+#fi
+FLAGS="${SITEFLAG} -q -batch -l path.el -f batch-byte-compile"
+
+ELDIR=/usr/share/emacs/site-lisp/${PACKAGE}
+ELCDIR=/usr/share/${FLAVOR}/site-lisp/${PACKAGE}
+
+# Install-info-altdir does not actually exist. 
+# Maybe somebody will write it.
+if test -x /usr/sbin/install-info-altdir; then
+    echo install/${PACKAGE}: install Info links for ${FLAVOR}
+    install-info-altdir --quiet --section "" "" --dirname=${FLAVOR} /usr/info/${PACKAGE}.info.gz
+fi
+
+install -m 755 -d ${ELCDIR}
+cd ${ELDIR}
+FILES=`echo *.el`
+cp ${FILES} ${ELCDIR}
+cd ${ELCDIR}
+
+cat << EOF > path.el
+(setq load-path (cons "." load-path) byte-compile-warnings nil)
+EOF
+${FLAVOR} ${FLAGS} ${FILES}
+rm -f *.el path.el
+
+exit 0
diff --git a/debian/emacsen-remove.ex b/debian/emacsen-remove.ex
new file mode 100644 (file)
index 0000000..4f158f8
--- /dev/null
@@ -0,0 +1,15 @@
+#!/bin/sh -e
+# /usr/lib/emacsen-common/packages/remove/telepathy-callback
+
+FLAVOR=$1
+PACKAGE=telepathy-callback
+
+if [ ${FLAVOR} != emacs ]; then
+    if test -x /usr/sbin/install-info-altdir; then
+        echo remove/${PACKAGE}: removing Info links for ${FLAVOR}
+        install-info-altdir --quiet --remove --dirname=${FLAVOR} /usr/info/telepathy-callback.info.gz
+    fi
+
+    echo remove/${PACKAGE}: purging byte-compiled files for ${FLAVOR}
+    rm -rf /usr/share/${FLAVOR}/site-lisp/${PACKAGE}
+fi
diff --git a/debian/emacsen-startup.ex b/debian/emacsen-startup.ex
new file mode 100644 (file)
index 0000000..a1b99a5
--- /dev/null
@@ -0,0 +1,25 @@
+;; -*-emacs-lisp-*-
+;;
+;; Emacs startup file, e.g.  /etc/emacs/site-start.d/50telepathy-callback.el
+;; for the Debian telepathy-callback package
+;;
+;; Originally contributed by Nils Naumann <naumann@unileoben.ac.at>
+;; Modified by Dirk Eddelbuettel <edd@debian.org>
+;; Adapted for dh-make by Jim Van Zandt <jrv@debian.org>
+
+;; The telepathy-callback package follows the Debian/GNU Linux 'emacsen' policy and
+;; byte-compiles its elisp files for each 'emacs flavor' (emacs19,
+;; xemacs19, emacs20, xemacs20...).  The compiled code is then
+;; installed in a subdirectory of the respective site-lisp directory.
+;; We have to add this to the load-path:
+(let ((package-dir (concat "/usr/share/"
+                           (symbol-name flavor)
+                           "/site-lisp/telepathy-callback")))
+;; If package-dir does not exist, the telepathy-callback package must have
+;; removed but not purged, and we should skip the setup.
+  (when (file-directory-p package-dir)
+        (setq load-path (cons package-dir load-path))
+       (autoload 'telepathy-callback-mode "telepathy-callback-mode"
+         "Major mode for editing telepathy-callback files." t)
+       (add-to-list 'auto-mode-alist '("\\.telepathy-callback$" . telepathy-callback-mode))))
+
diff --git a/debian/init.d.ex b/debian/init.d.ex
new file mode 100644 (file)
index 0000000..b266cc4
--- /dev/null
@@ -0,0 +1,81 @@
+#! /bin/sh
+#
+# skeleton     example file to build /etc/init.d/ scripts.
+#              This file should be used to construct scripts for /etc/init.d.
+#
+#              Written by Miquel van Smoorenburg <miquels@cistron.nl>.
+#              Modified for Debian 
+#              by Ian Murdock <imurdock@gnu.ai.mit.edu>.
+#
+# Version:     @(#)skeleton  1.9  26-Feb-2001  miquels@cistron.nl
+#
+
+PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+DAEMON=/usr/sbin/telepathy-callback
+NAME=telepathy-callback
+DESC=telepathy-callback
+
+test -x $DAEMON || exit 0
+
+# Include telepathy-callback defaults if available
+if [ -f /etc/default/telepathy-callback ] ; then
+       . /etc/default/telepathy-callback
+fi
+
+set -e
+
+case "$1" in
+  start)
+       echo -n "Starting $DESC: "
+       start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \
+               --exec $DAEMON -- $DAEMON_OPTS
+       echo "$NAME."
+       ;;
+  stop)
+       echo -n "Stopping $DESC: "
+       start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
+               --exec $DAEMON
+       echo "$NAME."
+       ;;
+  #reload)
+       #
+       #       If the daemon can reload its config files on the fly
+       #       for example by sending it SIGHUP, do it here.
+       #
+       #       If the daemon responds to changes in its config file
+       #       directly anyway, make this a do-nothing entry.
+       #
+       # echo "Reloading $DESC configuration files."
+       # start-stop-daemon --stop --signal 1 --quiet --pidfile \
+       #       /var/run/$NAME.pid --exec $DAEMON
+  #;;
+  force-reload)
+       #
+       #       If the "reload" option is implemented, move the "force-reload"
+       #       option to the "reload" entry above. If not, "force-reload" is
+       #       just the same as "restart" except that it does nothing if the
+       #   daemon isn't already running.
+       # check wether $DAEMON is running. If so, restart
+       start-stop-daemon --stop --test --quiet --pidfile \
+               /var/run/$NAME.pid --exec $DAEMON \
+       && $0 restart \
+       || exit 0
+       ;;
+  restart)
+    echo -n "Restarting $DESC: "
+       start-stop-daemon --stop --quiet --pidfile \
+               /var/run/$NAME.pid --exec $DAEMON
+       sleep 1
+       start-stop-daemon --start --quiet --pidfile \
+               /var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS
+       echo "$NAME."
+       ;;
+  *)
+       N=/etc/init.d/$NAME
+       # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
+       echo "Usage: $N {start|stop|restart|force-reload}" >&2
+       exit 1
+       ;;
+esac
+
+exit 0
diff --git a/debian/manpage.1.ex b/debian/manpage.1.ex
new file mode 100644 (file)
index 0000000..7bf850d
--- /dev/null
@@ -0,0 +1,59 @@
+.\"                                      Hey, EMACS: -*- nroff -*-
+.\" First parameter, NAME, should be all caps
+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
+.\" other parameters are allowed: see man(7), man(1)
+.TH TELEPATHY-CALLBACK SECTION "December  5, 2009"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh        disable hyphenation
+.\" .hy        enable hyphenation
+.\" .ad l      left justify
+.\" .ad b      justify to both left and right margins
+.\" .nf        disable filling
+.\" .fi        enable filling
+.\" .br        insert line break
+.\" .sp <n>    insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME
+telepathy-callback \- program to do something
+.SH SYNOPSIS
+.B telepathy-callback
+.RI [ options ] " files" ...
+.br
+.B bar
+.RI [ options ] " files" ...
+.SH DESCRIPTION
+This manual page documents briefly the
+.B telepathy-callback
+and
+.B bar
+commands.
+.PP
+.\" TeX users may be more comfortable with the \fB<whatever>\fP and
+.\" \fI<whatever>\fP escape sequences to invode bold face and italics, 
+.\" respectively.
+\fBtelepathy-callback\fP is a program that...
+.SH OPTIONS
+These programs follow the usual GNU command line syntax, with long
+options starting with two dashes (`-').
+A summary of options is included below.
+For a complete description, see the Info files.
+.TP
+.B \-h, \-\-help
+Show summary of options.
+.TP
+.B \-v, \-\-version
+Show version of program.
+.SH SEE ALSO
+.BR bar (1),
+.BR baz (1).
+.br
+The programs are documented fully by
+.IR "The Rise and Fall of a Fooish Bar" ,
+available via the Info system.
+.SH AUTHOR
+telepathy-callback was written by <upstream author>.
+.PP
+This manual page was written by unknown <muelli@cryptobitch.de>,
+for the Debian project (but may be used by others).
diff --git a/debian/manpage.sgml.ex b/debian/manpage.sgml.ex
new file mode 100644 (file)
index 0000000..913454d
--- /dev/null
@@ -0,0 +1,156 @@
+<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
+
+<!-- Process this file with docbook-to-man to generate an nroff manual
+     page: `docbook-to-man manpage.sgml > manpage.1'.  You may view
+     the manual page with: `docbook-to-man manpage.sgml | nroff -man |
+     less'.  A typical entry in a Makefile or Makefile.am is:
+
+manpage.1: manpage.sgml
+       docbook-to-man $< > $@
+
+    
+       The docbook-to-man binary is found in the docbook-to-man package.
+       Please remember that if you create the nroff version in one of the
+       debian/rules file targets (such as build), you will need to include
+       docbook-to-man in your Build-Depends control field.
+
+  -->
+
+  <!-- Fill in your name for FIRSTNAME and SURNAME. -->
+  <!ENTITY dhfirstname "<firstname>FIRSTNAME</firstname>">
+  <!ENTITY dhsurname   "<surname>SURNAME</surname>">
+  <!-- Please adjust the date whenever revising the manpage. -->
+  <!ENTITY dhdate      "<date>December  5, 2009</date>">
+  <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
+       allowed: see man(7), man(1). -->
+  <!ENTITY dhsection   "<manvolnum>SECTION</manvolnum>">
+  <!ENTITY dhemail     "<email>muelli@cryptobitch.de</email>">
+  <!ENTITY dhusername  "unknown">
+  <!ENTITY dhucpackage "<refentrytitle>TELEPATHY-CALLBACK</refentrytitle>">
+  <!ENTITY dhpackage   "telepathy-callback">
+
+  <!ENTITY debian      "<productname>Debian</productname>">
+  <!ENTITY gnu         "<acronym>GNU</acronym>">
+  <!ENTITY gpl         "&gnu; <acronym>GPL</acronym>">
+]>
+
+<refentry>
+  <refentryinfo>
+    <address>
+      &dhemail;
+    </address>
+    <author>
+      &dhfirstname;
+      &dhsurname;
+    </author>
+    <copyright>
+      <year>2003</year>
+      <holder>&dhusername;</holder>
+    </copyright>
+    &dhdate;
+  </refentryinfo>
+  <refmeta>
+    &dhucpackage;
+
+    &dhsection;
+  </refmeta>
+  <refnamediv>
+    <refname>&dhpackage;</refname>
+
+    <refpurpose>program to do something</refpurpose>
+  </refnamediv>
+  <refsynopsisdiv>
+    <cmdsynopsis>
+      <command>&dhpackage;</command>
+
+      <arg><option>-e <replaceable>this</replaceable></option></arg>
+
+      <arg><option>--example <replaceable>that</replaceable></option></arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+  <refsect1>
+    <title>DESCRIPTION</title>
+
+    <para>This manual page documents briefly the
+      <command>&dhpackage;</command> and <command>bar</command>
+      commands.</para>
+
+    <para>This manual page was written for the &debian; distribution
+      because the original program does not have a manual page.
+      Instead, it has documentation in the &gnu;
+      <application>Info</application> format; see below.</para>
+
+    <para><command>&dhpackage;</command> is a program that...</para>
+
+  </refsect1>
+  <refsect1>
+    <title>OPTIONS</title>
+
+    <para>These programs follow the usual &gnu; command line syntax,
+      with long options starting with two dashes (`-').  A summary of
+      options is included below.  For a complete description, see the
+      <application>Info</application> files.</para>
+
+    <variablelist>
+      <varlistentry>
+        <term><option>-h</option>
+          <option>--help</option>
+        </term>
+        <listitem>
+          <para>Show summary of options.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term><option>-v</option>
+          <option>--version</option>
+        </term>
+        <listitem>
+          <para>Show version of program.</para>
+        </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+  <refsect1>
+    <title>SEE ALSO</title>
+
+    <para>bar (1), baz (1).</para>
+
+    <para>The programs are documented fully by <citetitle>The Rise and
+      Fall of a Fooish Bar</citetitle> available via the
+      <application>Info</application> system.</para>
+  </refsect1>
+  <refsect1>
+    <title>AUTHOR</title>
+
+    <para>This manual page was written by &dhusername; &dhemail; for
+      the &debian; system (but may be used by others).  Permission is
+      granted to copy, distribute and/or modify this document under
+      the terms of the &gnu; General Public License, Version 2 any 
+         later version published by the Free Software Foundation.
+    </para>
+       <para>
+         On Debian systems, the complete text of the GNU General Public
+         License can be found in /usr/share/common-licenses/GPL.
+       </para>
+
+  </refsect1>
+</refentry>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-default-dtd-file:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
+
+
diff --git a/debian/manpage.xml.ex b/debian/manpage.xml.ex
new file mode 100644 (file)
index 0000000..e196473
--- /dev/null
@@ -0,0 +1,148 @@
+<?xml version='1.0' encoding='ISO-8859-1'?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
+
+<!--
+
+Process this file with an XSLT processor: `xsltproc \
+-''-nonet /usr/share/sgml/docbook/stylesheet/xsl/nwalsh/\
+manpages/docbook.xsl manpage.dbk'.  A manual page
+<package>.<section> will be generated.  You may view the
+manual page with: nroff -man <package>.<section> | less'.  A
+typical entry in a Makefile or Makefile.am is:
+
+DB2MAN=/usr/share/sgml/docbook/stylesheet/xsl/nwalsh/\
+manpages/docbook.xsl
+XP=xsltproc -''-nonet
+
+manpage.1: manpage.dbk
+        $(XP) $(DB2MAN) $<
+    
+The xsltproc binary is found in the xsltproc package.  The
+XSL files are in docbook-xsl.  Please remember that if you
+create the nroff version in one of the debian/rules file
+targets (such as build), you will need to include xsltproc
+and docbook-xsl in your Build-Depends control field.
+
+-->
+
+  <!-- Fill in your name for FIRSTNAME and SURNAME. -->
+  <!ENTITY dhfirstname "<firstname>FIRSTNAME</firstname>">
+  <!ENTITY dhsurname   "<surname>SURNAME</surname>">
+  <!-- Please adjust the date whenever revising the manpage. -->
+  <!ENTITY dhdate      "<date>December  5, 2009</date>">
+  <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
+       allowed: see man(7), man(1). -->
+  <!ENTITY dhsection   "<manvolnum>SECTION</manvolnum>">
+  <!ENTITY dhemail     "<email>muelli@cryptobitch.de</email>">
+  <!ENTITY dhusername  "unknown">
+  <!ENTITY dhucpackage "<refentrytitle>TELEPATHY-CALLBACK</refentrytitle>">
+  <!ENTITY dhpackage   "telepathy-callback">
+
+  <!ENTITY debian      "<productname>Debian</productname>">
+  <!ENTITY gnu         "<acronym>GNU</acronym>">
+  <!ENTITY gpl         "&gnu; <acronym>GPL</acronym>">
+]>
+
+<refentry>
+  <refentryinfo>
+    <address>
+      &dhemail;
+    </address>
+    <author>
+      &dhfirstname;
+      &dhsurname;
+    </author>
+    <copyright>
+      <year>2003</year>
+      <holder>&dhusername;</holder>
+    </copyright>
+    &dhdate;
+  </refentryinfo>
+  <refmeta>
+    &dhucpackage;
+
+    &dhsection;
+  </refmeta>
+  <refnamediv>
+    <refname>&dhpackage;</refname>
+
+    <refpurpose>program to do something</refpurpose>
+  </refnamediv>
+  <refsynopsisdiv>
+    <cmdsynopsis>
+      <command>&dhpackage;</command>
+
+      <arg><option>-e <replaceable>this</replaceable></option></arg>
+
+      <arg><option>--example <replaceable>that</replaceable></option></arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+  <refsect1>
+    <title>DESCRIPTION</title>
+
+    <para>This manual page documents briefly the
+      <command>&dhpackage;</command> and <command>bar</command>
+      commands.</para>
+
+    <para>This manual page was written for the &debian; distribution
+      because the original program does not have a manual page.
+      Instead, it has documentation in the &gnu;
+      <application>Info</application> format; see below.</para>
+
+    <para><command>&dhpackage;</command> is a program that...</para>
+
+  </refsect1>
+  <refsect1>
+    <title>OPTIONS</title>
+
+    <para>These programs follow the usual &gnu; command line syntax,
+      with long options starting with two dashes (`-').  A summary of
+      options is included below.  For a complete description, see the
+      <application>Info</application> files.</para>
+
+    <variablelist>
+      <varlistentry>
+        <term><option>-h</option>
+          <option>--help</option>
+        </term>
+        <listitem>
+          <para>Show summary of options.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term><option>-v</option>
+          <option>--version</option>
+        </term>
+        <listitem>
+          <para>Show version of program.</para>
+        </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+  <refsect1>
+    <title>SEE ALSO</title>
+
+    <para>bar (1), baz (1).</para>
+
+    <para>The programs are documented fully by <citetitle>The Rise and
+      Fall of a Fooish Bar</citetitle> available via the
+      <application>Info</application> system.</para>
+  </refsect1>
+  <refsect1>
+    <title>AUTHOR</title>
+
+    <para>This manual page was written by &dhusername; &dhemail; for
+      the &debian; system (but may be used by others).  Permission is
+      granted to copy, distribute and/or modify this document under
+      the terms of the &gnu; General Public License, Version 2 any 
+         later version published by the Free Software Foundation.
+    </para>
+       <para>
+         On Debian systems, the complete text of the GNU General Public
+         License can be found in /usr/share/common-licenses/GPL.
+       </para>
+
+  </refsect1>
+</refentry>
+
diff --git a/debian/menu.ex b/debian/menu.ex
new file mode 100644 (file)
index 0000000..795eb2a
--- /dev/null
@@ -0,0 +1,2 @@
+?package(telepathy-callback):needs="X11|text|vc|wm" section="Apps/see-menu-manual"\
+  title="telepathy-callback" command="/usr/bin/telepathy-callback"
diff --git a/debian/postinst.ex b/debian/postinst.ex
new file mode 100644 (file)
index 0000000..ef5a1a2
--- /dev/null
@@ -0,0 +1,41 @@
+#!/bin/sh
+# postinst script for telepathy-callback
+#
+# see: dh_installdeb(1)
+
+set -e
+
+# summary of how this script can be called:
+#        * <postinst> `configure' <most-recently-configured-version>
+#        * <old-postinst> `abort-upgrade' <new version>
+#        * <conflictor's-postinst> `abort-remove' `in-favour' <package>
+#          <new-version>
+#        * <postinst> `abort-remove'
+#        * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
+#          <failed-install-package> <version> `removing'
+#          <conflicting-package> <version>
+# for details, see http://www.debian.org/doc/debian-policy/ or
+# the debian-policy package
+
+
+case "$1" in
+    configure)
+    ;;
+
+    abort-upgrade|abort-remove|abort-deconfigure)
+    ;;
+
+    *)
+        echo "postinst called with unknown argument \`$1'" >&2
+        exit 1
+    ;;
+esac
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+#DEBHELPER#
+
+exit 0
+
+
diff --git a/debian/postrm.ex b/debian/postrm.ex
new file mode 100644 (file)
index 0000000..d076e8f
--- /dev/null
@@ -0,0 +1,39 @@
+#!/bin/sh
+# postrm script for telepathy-callback
+#
+# see: dh_installdeb(1)
+
+set -e
+
+# summary of how this script can be called:
+#        * <postrm> `remove'
+#        * <postrm> `purge'
+#        * <old-postrm> `upgrade' <new-version>
+#        * <new-postrm> `failed-upgrade' <old-version>
+#        * <new-postrm> `abort-install'
+#        * <new-postrm> `abort-install' <old-version>
+#        * <new-postrm> `abort-upgrade' <old-version>
+#        * <disappearer's-postrm> `disappear' <overwriter>
+#          <overwriter-version>
+# for details, see http://www.debian.org/doc/debian-policy/ or
+# the debian-policy package
+
+
+case "$1" in
+    purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
+    ;;
+
+    *)
+        echo "postrm called with unknown argument \`$1'" >&2
+        exit 1
+    ;;
+esac
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+#DEBHELPER#
+
+exit 0
+
+
diff --git a/debian/preinst.ex b/debian/preinst.ex
new file mode 100644 (file)
index 0000000..213144b
--- /dev/null
@@ -0,0 +1,37 @@
+#!/bin/sh
+# preinst script for telepathy-callback
+#
+# see: dh_installdeb(1)
+
+set -e
+
+# summary of how this script can be called:
+#        * <new-preinst> `install'
+#        * <new-preinst> `install' <old-version>
+#        * <new-preinst> `upgrade' <old-version>
+#        * <old-preinst> `abort-upgrade' <new-version>
+# for details, see http://www.debian.org/doc/debian-policy/ or
+# the debian-policy package
+
+
+case "$1" in
+    install|upgrade)
+    ;;
+
+    abort-upgrade)
+    ;;
+
+    *)
+        echo "preinst called with unknown argument \`$1'" >&2
+        exit 1
+    ;;
+esac
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+#DEBHELPER#
+
+exit 0
+
+
diff --git a/debian/prerm.ex b/debian/prerm.ex
new file mode 100644 (file)
index 0000000..4da9699
--- /dev/null
@@ -0,0 +1,40 @@
+#!/bin/sh
+# prerm script for telepathy-callback
+#
+# see: dh_installdeb(1)
+
+set -e
+
+# summary of how this script can be called:
+#        * <prerm> `remove'
+#        * <old-prerm> `upgrade' <new-version>
+#        * <new-prerm> `failed-upgrade' <old-version>
+#        * <conflictor's-prerm> `remove' `in-favour' <package> <new-version>
+#        * <deconfigured's-prerm> `deconfigure' `in-favour'
+#          <package-being-installed> <version> `removing'
+#          <conflicting-package> <version>
+# for details, see http://www.debian.org/doc/debian-policy/ or
+# the debian-policy package
+
+
+case "$1" in
+    remove|upgrade|deconfigure)
+    ;;
+
+    failed-upgrade)
+    ;;
+
+    *)
+        echo "prerm called with unknown argument \`$1'" >&2
+        exit 1
+    ;;
+esac
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+#DEBHELPER#
+
+exit 0
+
+
diff --git a/debian/rules b/debian/rules
new file mode 100755 (executable)
index 0000000..fefb107
--- /dev/null
@@ -0,0 +1,98 @@
+#!/usr/bin/make -f
+# -*- makefile -*-
+# Sample debian/rules that uses debhelper.
+# This file was originally written by Joey Hess and Craig Small.
+# As a special exception, when this file is copied by dh-make into a
+# dh-make output file, you may use that output file without restriction.
+# This special exception was added by Craig Small in version 0.37 of dh-make.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+
+
+
+CFLAGS = -Wall -g
+
+ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
+       CFLAGS += -O0
+else
+       CFLAGS += -O2
+endif
+
+configure: configure-stamp
+configure-stamp:
+       dh_testdir
+       # Add here commands to configure the package.
+
+       touch configure-stamp
+
+
+build: build-stamp
+
+build-stamp: configure-stamp 
+       dh_testdir
+
+       # Add here commands to compile the package.
+       $(MAKE)
+       #docbook-to-man debian/telepathy-callback.sgml > telepathy-callback.1
+
+       touch $@
+
+clean:
+       dh_testdir
+       dh_testroot
+       rm -f build-stamp configure-stamp
+
+       # Add here commands to clean up after the build process.
+       -$(MAKE) clean
+
+       dh_clean 
+
+install: build
+       dh_testdir
+       dh_testroot
+       dh_clean -k 
+       dh_installdirs
+
+       # Add here commands to install the package into debian/telepathy-callback.
+       $(MAKE) DESTDIR=$(CURDIR)/debian/telepathy-callback install
+
+
+# Build architecture-independent files here.
+binary-indep: build install
+# We have nothing to do by default.
+
+# Build architecture-dependent files here.
+binary-arch: build install
+       dh_testdir
+       dh_testroot
+       dh_installchangelogs 
+       dh_installdocs
+       dh_installexamples
+#      dh_install
+#      dh_installmenu
+#      dh_installdebconf       
+#      dh_installlogrotate
+#      dh_installemacsen
+#      dh_installpam
+#      dh_installmime
+#      dh_python
+#      dh_installinit
+#      dh_installcron
+#      dh_installinfo
+       dh_installman
+       dh_link
+       dh_strip
+       dh_compress
+       dh_fixperms
+#      dh_perl
+#      dh_makeshlibs
+       dh_installdeb
+       dh_shlibdeps
+       dh_gencontrol
+       dh_md5sums
+       dh_builddeb
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install configure
diff --git a/debian/telepathy-callback-default.ex b/debian/telepathy-callback-default.ex
new file mode 100644 (file)
index 0000000..dd8a34b
--- /dev/null
@@ -0,0 +1,10 @@
+# Defaults for telepathy-callback initscript
+# sourced by /etc/init.d/telepathy-callback
+# installed at /etc/default/telepathy-callback by the maintainer scripts
+
+#
+# This is a POSIX shell fragment
+#
+
+# Additional options that are passed to the Daemon.
+DAEMON_OPTS=""
diff --git a/debian/telepathy-callback.doc-base.EX b/debian/telepathy-callback.doc-base.EX
new file mode 100644 (file)
index 0000000..213becd
--- /dev/null
@@ -0,0 +1,22 @@
+Document: telepathy-callback
+Title: Debian telepathy-callback Manual
+Author: <insert document author here>
+Abstract: This manual describes what telepathy-callback is
+ and how it can be used to
+ manage online manuals on Debian systems.
+Section: unknown
+
+Format: debiandoc-sgml
+Files: /usr/share/doc/telepathy-callback/telepathy-callback.sgml.gz
+
+Format: postscript
+Files: /usr/share/doc/telepathy-callback/telepathy-callback.ps.gz
+
+Format: text
+Files: /usr/share/doc/telepathy-callback/telepathy-callback.text.gz
+
+Format: HTML
+Index: /usr/share/doc/telepathy-callback/html/index.html
+Files: /usr/share/doc/telepathy-callback/html/*.html
+
+  
diff --git a/debian/watch.ex b/debian/watch.ex
new file mode 100644 (file)
index 0000000..6e50914
--- /dev/null
@@ -0,0 +1,22 @@
+# Example watch control file for uscan
+# Rename this file to "watch" and then you can run the "uscan" command
+# to check for upstream updates and more.
+# See uscan(1) for format
+
+# Compulsory line, this is a version 3 file
+version=3
+
+# Uncomment to examine a Webpage 
+# <Webpage URL> <string match>
+#http://www.example.com/downloads.php telepathy-callback-(.*)\.tar\.gz
+
+# Uncomment to examine a Webserver directory
+#http://www.example.com/pub/telepathy-callback-(.*)\.tar\.gz
+
+# Uncommment to examine a FTP server
+#ftp://ftp.example.com/pub/telepathy-callback-(.*)\.tar\.gz debian uupdate
+
+# Uncomment to find new files on sourceforge, for debscripts >= 2.9
+# http://sf.net/telepathy-callback/telepathy-callback-(.*)\.tar\.gz
+
+
diff --git a/setup.py b/setup.py
new file mode 100644 (file)
index 0000000..20115c4
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,10 @@
+from distutils.core import setup
+
+setup(name='Callback',
+       version='0.0.1',
+       scripts=['src/SMSListener.py'],
+       data_files = [
+                    ('share/pixmaps',             ['data/Callback.png']),
+                    ('share/applications/hildon', ['data/Callback.desktop']),
+                    ]
+      )
diff --git a/src/SMSListener.py b/src/SMSListener.py
new file mode 100755 (executable)
index 0000000..689e486
--- /dev/null
@@ -0,0 +1,229 @@
+#!/usr/bin/env python
+'''
+Created on 03.12.2009
+
+@author: muelli
+'''
+
+import dbus.glib
+import gobject
+import logging; logging.basicConfig(level=logging.DEBUG)
+
+import telepathy
+from telepathy.interfaces import CLIENT, \
+                                 CLIENT_OBSERVER, \
+                                 CHANNEL
+
+
+log = logging.getLogger("telepathy-callback")
+
+sender = None
+receiver = None
+gsm_connection = None
+gsm_account = None
+
+def is_number(nr):
+    """Checks whether a given string looks like an international phone
+    number"""
+    return True
+
+def handle_msg(msg, magic="call: ", filter=is_number):
+    """Handles a message, i.e. check for it containing the message containing
+    the magic keyword.
+    Returns the valid number or None
+    """
+    number_candidate = None
+    if msg.startswith(magic):
+        number_candidate = msg[len(magic):]
+        
+    retval = None
+    log.debug("Number candidate: %s" % number_candidate)
+    if number_candidate:
+        valid_number = filter(msg)
+        if valid_number:
+            retval = number_candidate
+            
+    return retval
+
+
+def request_call(bus, number):
+    channel_dispatcher = bus.get_object('org.freedesktop.Telepathy.ChannelDispatcher',
+                        '/org/freedesktop/Telepathy/ChannelDispatcher')
+    request_args = {'org.freedesktop.Telepathy.Channel.ChannelType:':
+                            dbus.String('org.freedesktop.Telepathy.Channel.Type.StreamedMedia', variant_level=1),
+                'org.freedesktop.Telepathy.Channel.TargetHandleType':
+                            dbus.String('Contact', variant_level=1),
+                'org.freedesktop.Telepathy.Channel.TargetID':
+                            dbus.String(sender, variant_level=1),
+                }
+    # Hopefully, the name of the Handler is correct
+    channel_request_object_name = channel_dispatcher.CreateChannel(gsm_account, request_args,
+                                    dbus.Int64(0),
+                                 "org.freedesktop.Telepathy.Client.Callback")
+    # Stupid DBus Binding don't return an object itself
+    # FIXME: Check whether the bus_name is correct
+    channel_request = bus.get_object('org.freedesktop.Telepathy.ChannelRequest',
+                                     channel_request_object_name)
+    log.debug("Returning Channel Request: %s", channel_request)
+    return channel_request
+
+def received_message_handler(sender=None, *args, **kwargs):
+    """Listens on the MessageReceived signal by Telepathy.
+    Turns out, that most of the application logic landed here instead
+    of the class created below
+    """
+    print "received_message_handler: %s" % locals()
+    global receiver
+    
+    bus = dbus.SessionBus()
+    
+    if isinstance(sender, dbus.Array):
+        for elem in sender:
+            if isinstance(elem, dbus.Dictionary):
+                msg = elem.get(u'content', None)
+                if msg: 
+                    print "Message: %s" % msg
+                    # TODO: Check for Prefix
+                    number = handle_msg(msg)
+                    
+                    if not number == None:
+                        receiver = number
+                        assert sender != None, "Somehow Sender is None, although it should have been set earlier"
+                        
+                        # FIXME: Get connection object
+
+                        
+                        # TODO: Get GSM Account
+#                        account_manager = bus.get_object('org.freedesktop.Telepathy.AccountManager',
+#                                                '/org/freedesktop/Telepathy/AccountManager')
+#                        accounts = account_manager.ValidAccounts()
+#                        log.debug('Accounts: %s', accounts) 
+                        
+                        # TODO: Call Sender
+                        channel_request = request_call(bus, sender)
+                        # TODO: Listen on channel_request signal: Succeeded
+                        def opened_channel(*args, **kwargs):
+                            log.debug("Opened channel. %s", locals())
+                        
+                                      
+                        bus.add_signal_receiver(opened_channel,
+                                               "Succeeded" )
+                        log.debug("msg: %s, %s", channel_request, dir(channel_request))
+                        channel_request.Proceed()
+                        
+                        # TODO: Call Receiver
+                        channel_request = request_call(bus, receiver)
+                        bus.add_signal_receiver(opened_channel,
+                                                "Succeeded" )
+                        channel_request.Proceed()
+                        
+                                                
+                        
+                        
+
+class Callback(dbus.service.Object, telepathy.server.DBusProperties):
+    name = 'org.freedesktop.Telepathy.Client.Callback'
+    def __init__(self, *args):
+        self.bus = dbus.SessionBus()
+        bus_name = dbus.service.BusName(Callback.name, bus = self.bus)
+        dbus.service.Object.__init__(self, bus_name, '/%s' % Callback.name.replace('.', '/'))
+        
+        self.log = logging.getLogger("Callback")
+        
+        self._interfaces = set()
+        
+        telepathy.server.DBusProperties.__init__(self)
+        
+        self._implement_property_get(CLIENT, {
+            'Interfaces': lambda: [ CLIENT_OBSERVER ],
+          })
+        self._implement_property_get(CLIENT_OBSERVER, {
+            'ObserverChannelFilter': lambda: dbus.Array([
+                    dbus.Dictionary({
+                        'org.freedesktop.Telepathy.Channel.ChannelType': dbus.String('org.freedesktop.Telepathy.Channel.Type.Text'),
+                        'org.freedesktop.Telepathy.Channel.TargetHandleType': dbus.UInt32(1),
+                    }, signature='sv'),
+                    dbus.Dictionary({
+                        'org.freedesktop.Telepathy.Channel.ChannelType': dbus.String('org.freedesktop.Telepathy.Channel.Type.Text'),
+                        'org.freedesktop.Telepathy.Channel.TargetHandleType': dbus.UInt32(2),
+                    }, signature='sv')
+
+                ], signature='a{sv}')
+          })
+        
+        self.first_call = None
+        self.second_call = None
+        
+        
+        
+    def listen(self):
+        loop = gobject.MainLoop()
+        loop.run()
+
+    
+
+    @dbus.service.method('org.freedesktop.Telepathy.Client.Observer',
+                     in_signature='ooa(oa{sv})oaoa{sv}', out_signature='')
+    def ObserveChannels(self, account, connection, channels, dispatch_operation,
+                        requests_satisfied, observer_info):
+        global sender
+        global gsm_connection
+        global gsm_account
+        
+        print "Incoming"
+        print "account %s" % account
+        print "connection %s" % connection
+        print "\n\n"
+        log = file('/tmp/incoming','wa')
+        log.write( "Incoming channels on %s:" % (connection))
+        log.write("Locals: %s" % locals())
+        
+        sender = None
+        for channel_object, props in channels:
+            print "Channel: %s" % channel_object
+            for k, v in props.iteritems():
+                print "k: %s :: %s " % (k, v)
+                print ""
+                
+            sender = props['org.freedesktop.Telepathy.Channel.InitiatorID']
+            # TODO: Check for SMS
+            gsm_connection = connection
+            gsm_account = account
+            self.bus.add_signal_receiver(received_message_handler,
+                                               "MessageReceived" )
+            print "\n\n"
+            log.write( " - %s :: %s" % (props[CHANNEL + '.ChannelType'],
+                                   props[CHANNEL + '.TargetID'])
+            )
+            
+        
+        print "Sender: %s" % sender    
+
+    
+    @dbus.service.method('org.freedesktop.Telepathy.Client.Handler',
+                     in_signature='ooa(oa{sv})aota{sv}', out_signature='')
+    def HandleChannels(self, account, connection, channels,
+                        requests_satisfied, user_action_time, handler_info):
+        self.log.debug("Hndling channels: %s", locals())
+        if self.first_call == None:
+            self.log.debug('first call set')
+            self.first_call = connection
+        elif self.second_call == None:
+            self.second_call = connection
+            self.log.debug('second call set')
+            
+            # TODO: Merge Calls
+            request_conference = "com.nokia.Telepathy.Channel.Interface.Conference"
+            conference_service = self.bus.get_object(request_conference)
+            request_args = [self.first_call, self.second_call]
+            handles = conference_service.get_dbus_method("AddMemberChannels", request_args)
+
+            
+        else:
+            self.log.critical("Handler got called but two calls apparently "\
+                                "have been initiated: %s %s",
+                                self.first_call, self.second_call)
+
+if __name__ == '__main__':
+    myservice = Callback()
+    myservice.listen()