[Telepathy-commits] [telepathy-doc/master] 2008-12-15 Murray Cumming <murrayc at murrayc.com>

Murray Cumming murrayc at murrayc.com
Tue Dec 16 00:26:45 PST 2008


* configure.ac:
* docs/examples/Makefile.am
* docs/examples/send_message/main.c:  Added the beginnings of a
an example to send a single message to a single specific contact.
---
 ChangeLog                              |    7 +
 configure.ac                           |    1 +
 docs/examples/Makefile.am              |    2 +-
 docs/examples/list_contacts/main.c     |    1 +
 docs/examples/send_message/Makefile.am |    7 +
 docs/examples/send_message/main.c      |  300 ++++++++++++++++++++++++
 docs/examples/set_presence/Makefile.in |  395 ++++++++++++++++++++++++++++++++
 docs/examples/set_presence/main.c~     |  272 ++++++++++++++++++++++
 docs/examples/set_presence/main.o      |  Bin 0 -> 5652 bytes
 9 files changed, 984 insertions(+), 1 deletions(-)
 create mode 100644 docs/examples/send_message/Makefile.am
 create mode 100644 docs/examples/send_message/main.c
 create mode 100644 docs/examples/set_presence/Makefile.in
 create mode 100644 docs/examples/set_presence/main.c~
 create mode 100644 docs/examples/set_presence/main.o

diff --git a/ChangeLog b/ChangeLog
index 98d526a..8ef8a2f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2008-12-15  Murray Cumming  <murrayc at murrayc.com>
 
+	* configure.ac:
+	* docs/examples/Makefile.am
+	* docs/examples/send_message/main.c:  Added the beginnings of a 
+	an example to send a single message to a single specific contact.
+
+2008-12-15  Murray Cumming  <murrayc at murrayc.com>
+
 	* docs/examples/set_presence/main.c: 
 	* docs/examples/list_contacts/main.c: Use the *_call_when_ready() 
 	functions instead of *_run_until_ready().
diff --git a/configure.ac b/configure.ac
index 01cdba7..300e6ca 100644
--- a/configure.ac
+++ b/configure.ac
@@ -29,6 +29,7 @@ AC_OUTPUT([
       docs/examples/list_all_protocols/Makefile
       docs/examples/list_contacts/Makefile
       docs/examples/set_presence/Makefile
+      docs/examples/send_message/Makefile
 
     docs/book/Makefile
 ])
diff --git a/docs/examples/Makefile.am b/docs/examples/Makefile.am
index 326a940..fae4402 100644
--- a/docs/examples/Makefile.am
+++ b/docs/examples/Makefile.am
@@ -1,6 +1,6 @@
 include $(top_srcdir)/docs/Makefile_web.am_fragment
 
-example_dirs = connect list_all_protocols list_contacts set_presence
+example_dirs = connect list_all_protocols list_contacts set_presence send_message
 
 SUBDIRS = $(example_dirs)
 
diff --git a/docs/examples/list_contacts/main.c b/docs/examples/list_contacts/main.c
index 3b33121..ec178dd 100644
--- a/docs/examples/list_contacts/main.c
+++ b/docs/examples/list_contacts/main.c
@@ -123,6 +123,7 @@ void on_connection_ready (TpConnection *connection,
     NULL, /* user_data */
     NULL, /* destroy */
     NULL /* weak_object */);
+  g_free (handles);
 }
 
 void on_channel_ready (TpChannel *channel,
diff --git a/docs/examples/send_message/Makefile.am b/docs/examples/send_message/Makefile.am
new file mode 100644
index 0000000..d0a304f
--- /dev/null
+++ b/docs/examples/send_message/Makefile.am
@@ -0,0 +1,7 @@
+include $(top_srcdir)/docs/examples/Makefile.am_fragment
+
+#Build the executable, but don't install it.
+noinst_PROGRAMS = example
+
+example_SOURCES = main.c
+
diff --git a/docs/examples/send_message/main.c b/docs/examples/send_message/main.c
new file mode 100644
index 0000000..30cef22
--- /dev/null
+++ b/docs/examples/send_message/main.c
@@ -0,0 +1,300 @@
+/* Copyright 2008 Collabora Ltd
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <telepathy-glib/connection-manager.h>
+#include <telepathy-glib/connection.h>
+#include <telepathy-glib/contact.h>
+#include <telepathy-glib/util.h>
+#include <glib/gprintf.h>
+
+GMainLoop *mainloop = NULL;
+TpDBusDaemon *bus_daemon = NULL;
+TpConnection *connection = NULL;
+
+/* A utility function to make our debug output easier to read. */
+const gchar* get_reason_description (TpConnectionStatusReason reason)
+{
+  switch (reason)
+    {
+      case TP_CONNECTION_STATUS_REASON_NONE_SPECIFIED:
+        return "None specified";
+      case TP_CONNECTION_STATUS_REASON_REQUESTED:
+        return "Requested";
+      case TP_CONNECTION_STATUS_REASON_NETWORK_ERROR:
+        return "Network error";
+      case TP_CONNECTION_STATUS_REASON_AUTHENTICATION_FAILED:
+        return "Authentication failed";
+      case TP_CONNECTION_STATUS_REASON_ENCRYPTION_ERROR:
+        return "Encryption Error";
+      case TP_CONNECTION_STATUS_REASON_NAME_IN_USE:
+        return "Name in use";
+      case TP_CONNECTION_STATUS_REASON_CERT_NOT_PROVIDED:
+        return "Certificate not provided";
+      case TP_CONNECTION_STATUS_REASON_CERT_UNTRUSTED:
+        return "Certificate untrusted";
+      case TP_CONNECTION_STATUS_REASON_CERT_EXPIRED:
+        return "Certificate expired";
+      case TP_CONNECTION_STATUS_REASON_CERT_NOT_ACTIVATED:
+        return "Certificate not activated";
+      case TP_CONNECTION_STATUS_REASON_CERT_HOSTNAME_MISMATCH:
+        return "Certificate hostname mismatch";
+      case TP_CONNECTION_STATUS_REASON_CERT_FINGERPRINT_MISMATCH:
+        return "Certificate fingerprint mismatch";
+      case TP_CONNECTION_STATUS_REASON_CERT_SELF_SIGNED:
+        return "Cerficate is self signed";
+      case TP_CONNECTION_STATUS_REASON_CERT_OTHER_ERROR:
+        return "Other certificate error";
+      default:
+        return "Unknown reason";
+   }
+}
+
+void on_connection_set_presence(TpConnection *proxy,
+  const GError *error,
+  gpointer user_data, 
+  GObject *weak_object)
+{
+  if (error != NULL)
+    {
+      g_printf ("tp_cli_connection_interface_simple_presence_call_set_presence() failed: %s\n", error->message);
+      g_main_loop_quit (mainloop);
+      return;
+    }
+
+   g_printf ("Presence set.\n");
+
+
+   /* Disconnect the connection now that our example has finished.
+      Otherwise it will be orphaned. */
+   g_printf ("DEBUG: Disconnecting.\n");
+   tp_cli_connection_call_disconnect (connection, -1, NULL, NULL,
+            NULL, NULL); /* Also destroys the connection object. */
+   connection = NULL;
+}
+
+void on_get_contacts_by_id (TpConnection *connection,
+  guint n_contacts,
+  TpContact * const *contacts,
+  const gchar * const *requested_ids,
+  GHashTable *failed_id_errors,
+  const GError *error,
+  gpointer user_data,
+  GObject *weak_object)
+{
+  if (error)
+    {
+      g_printf ("tp_connection_get_contacts_by_id () failed: %s\n", error->message);
+      return;
+    }
+
+  /* We only requested one contact: */
+  if(n_contacts < 1)
+    {
+      g_printf ("tp_connection_get_contacts_by_id () returned no contacts\n");
+      return;
+    }
+
+  TpContact *contact = contacts[0];
+  if(!contact)
+    {
+      g_printf ("tp_connection_get_contacts_by_id () returned NULL contact\n");
+      return;
+    }
+
+  //TODO: Send a message.
+}
+
+void on_connection_ready (TpConnection *connection,
+  const GError *error,
+  gpointer user_data)
+{
+  if (error)
+    {
+      g_printf ("tp_connection_call_when_ready() failed: %s\n", error->message);
+      return;
+    }
+
+  //This crashes:
+  const gchar * ids[1];
+  ids[0] = "daniel.kitta at jabber.org"; //TODO: Rename this so he doesn't get spam.
+  tp_connection_get_contacts_by_id (connection,
+    1, ids, 
+    0, NULL, /* features */
+    &on_get_contacts_by_id,
+    NULL, NULL, NULL);
+}
+
+void on_connection_status_changed(TpConnection *proxy,
+  guint arg_Status,
+  guint arg_Reason,
+  gpointer user_data,
+  GObject *weak_object)
+{
+  switch(arg_Status)
+    {
+      case TP_CONNECTION_STATUS_CONNECTED:
+        g_printf ("Connection status: Connected (reason: %s)\n", get_reason_description (arg_Reason));
+
+        /* Set the presence: */
+
+        /* Most functions require the connection to be ready: */
+        tp_connection_call_when_ready (connection, 
+          &on_connection_ready,
+          NULL);
+
+        break;
+
+      case TP_CONNECTION_STATUS_CONNECTING:
+        g_printf ("Connection status: Connecting (reason: %s)\n", get_reason_description (arg_Reason));
+
+        break;
+
+      case TP_CONNECTION_STATUS_DISCONNECTED:
+        g_printf ("Connection status: Disconnected (reason: %s)\n", get_reason_description (arg_Reason));
+
+        /* Finish with the connection object: */
+        if (connection)
+          {
+            g_object_unref (connection);
+            connection = NULL;
+          }
+
+        /* Stop the application: */
+        g_main_loop_quit (mainloop);
+
+        break;
+
+      default:
+        g_printf ("Connection status: Unknown status.\n");
+        break;
+    }
+}
+
+void
+got_connection (TpConnectionManager *connection_manager,
+                const gchar *service_name,
+                const gchar *object_path,
+                const GError *request_connection_error,
+                gpointer user_data,
+                GObject *weak_object)
+{
+  TpProxySignalConnection *signal_connection;
+  GError *error = NULL;
+
+  if (request_connection_error != NULL)
+    {
+      g_printf ("RequestConnection failed: %s\n",
+          request_connection_error->message);
+      g_main_loop_quit (mainloop);
+      return;
+    }
+
+  connection = tp_connection_new (bus_daemon, service_name, object_path, &error);
+
+  if (error != NULL)
+    {
+      g_printf ("tp_connection_new() failed: %s\n", error->message);
+      g_clear_error (&error);
+      g_main_loop_quit (mainloop);
+      return;
+    }
+
+  g_printf("DEBUG: Connection created.\n");
+
+  /* React to connection status changes,
+   * including errors when we try to connect: */
+  signal_connection = tp_cli_connection_connect_to_status_changed (connection,
+      &on_connection_status_changed,
+      NULL, /* user_data */
+      NULL, /* destroy_callback */
+      NULL, /* weak_object */
+      &error);
+
+  if (error)
+    {
+      g_printf ("couldn't connect to StatusChanged: %s\n", error->message);
+      g_clear_error (&error);
+      g_main_loop_quit (mainloop);
+      return;
+    }
+
+  /* Connect the connection: */
+  g_printf ("DEBUG: Calling Connect().\n");
+  tp_cli_connection_call_connect (connection, -1, NULL, NULL, NULL, NULL);
+}
+
+
+int
+main (int argc, char **argv)
+{
+  g_type_init ();
+
+  /* Create the main loop: */
+  mainloop = g_main_loop_new (NULL, FALSE);
+
+  bus_daemon = tp_dbus_daemon_new (tp_get_bus ());
+
+  /* Get the connection manager: */
+  GError *error = NULL;
+  TpConnectionManager *connection_manager = 
+    tp_connection_manager_new (bus_daemon, "gabble", NULL, &error);
+  if (error)
+    {
+      g_printf ("tp_connection_manager_new() failed: %s\n", error->message);
+      g_clear_error (&error);
+      return 1;
+    }
+
+  /* Get the connection : */
+  GHashTable *parameters = g_hash_table_new_full (NULL, NULL, NULL,
+      (GDestroyNotify) tp_g_value_slice_free);
+
+  GValue *value = tp_g_value_slice_new (G_TYPE_STRING);
+  g_value_set_static_string (value, "murrayc at murrayc.com");
+  g_hash_table_insert (parameters, "account", value);
+
+  value = tp_g_value_slice_new (G_TYPE_STRING);
+  g_value_set_static_string (value, "passwordTODO");
+  g_hash_table_insert (parameters, "password", value);
+
+  /* This jabber-specific parameter can avoid clashes with 
+     other telepathy clients that use the default jabber 
+     resource name. */
+  value = tp_g_value_slice_new (G_TYPE_STRING);
+  g_value_set_static_string (value, "telepathy-doc send_message example");
+  g_hash_table_insert (parameters, "resource", value);
+
+  /* Call RequestConnection; it will return asynchronously by calling got_connection */
+  tp_cli_connection_manager_call_request_connection (connection_manager, -1,
+      "jabber", parameters, got_connection, NULL, NULL, NULL);
+
+  g_hash_table_unref (parameters);
+  parameters = NULL;
+
+
+  /* Run the main loop, 
+   * to keep our application alive while we wait for responses from telepathy.
+   * This function returns when we call g_main_loop_quit() from elsewhere.
+   */
+  g_main_loop_run (mainloop);
+
+  /* Clean up: */
+  g_object_unref (connection_manager);
+  g_main_loop_unref (mainloop);
+  g_object_unref (bus_daemon);
+
+  return 0;
+}
diff --git a/docs/examples/set_presence/Makefile.in b/docs/examples/set_presence/Makefile.in
new file mode 100644
index 0000000..4249b2b
--- /dev/null
+++ b/docs/examples/set_presence/Makefile.in
@@ -0,0 +1,395 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/docs/examples/Makefile.am_fragment
+noinst_PROGRAMS = example$(EXEEXT)
+subdir = docs/examples/set_presence
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/telepathy_docs_check_perl.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_example_OBJECTS = main.$(OBJEXT)
+example_OBJECTS = $(am_example_OBJECTS)
+example_LDADD = $(LDADD)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(example_SOURCES)
+DIST_SOURCES = $(example_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+HELP_DIR = @HELP_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = $(TELEPATHY_DOCS_LIBS)
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL_PATH = @PERL_PATH@
+PKG_CONFIG = @PKG_CONFIG@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TELEPATHY_DOCS_CFLAGS = @TELEPATHY_DOCS_CFLAGS@
+TELEPATHY_DOCS_LIBS = @TELEPATHY_DOCS_LIBS@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+all_includes = $(TELEPATHY_DOCS_CFLAGS) $(TELEPATHY_DOCS_WARNING_FLAGS)
+DEFAULT_INCLUDES = 
+INCLUDES = -I. -I$(srcdir) $(strip $(all_includes))
+example_SOURCES = main.c
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/docs/examples/Makefile.am_fragment $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  docs/examples/set_presence/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  docs/examples/set_presence/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstPROGRAMS:
+	-test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
+example$(EXEEXT): $(example_OBJECTS) $(example_DEPENDENCIES) 
+	@rm -f example$(EXEEXT)
+	$(LINK) $(example_OBJECTS) $(example_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/main.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	    $$tags $$unique; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-noinstPROGRAMS mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-noinstPROGRAMS ctags distclean distclean-compile \
+	distclean-generic distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+	uninstall-am
+
+
+post-html:
+	rsync $(rsync_options) $(example_dirs) $$USER@$(web_host):$(web_path)
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/docs/examples/set_presence/main.c~ b/docs/examples/set_presence/main.c~
new file mode 100644
index 0000000..6fddef0
--- /dev/null
+++ b/docs/examples/set_presence/main.c~
@@ -0,0 +1,272 @@
+/* Copyright 2008 Collabora Ltd
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <telepathy-glib/connection-manager.h>
+#include <telepathy-glib/connection.h>
+#include <telepathy-glib/util.h>
+#include <glib/gprintf.h>
+
+GMainLoop *mainloop = NULL;
+TpDBusDaemon *bus_daemon = NULL;
+TpConnection *connection = NULL;
+
+/* A utility function to make our debug output easier to read. */
+const gchar* get_reason_description (TpConnectionStatusReason reason)
+{
+  switch (reason)
+    {
+      case TP_CONNECTION_STATUS_REASON_NONE_SPECIFIED:
+        return "None specified";
+      case TP_CONNECTION_STATUS_REASON_REQUESTED:
+        return "Requested";
+      case TP_CONNECTION_STATUS_REASON_NETWORK_ERROR:
+        return "Network error";
+      case TP_CONNECTION_STATUS_REASON_AUTHENTICATION_FAILED:
+        return "Authentication failed";
+      case TP_CONNECTION_STATUS_REASON_ENCRYPTION_ERROR:
+        return "Encryption Error";
+      case TP_CONNECTION_STATUS_REASON_NAME_IN_USE:
+        return "Name in use";
+      case TP_CONNECTION_STATUS_REASON_CERT_NOT_PROVIDED:
+        return "Certificate not provided";
+      case TP_CONNECTION_STATUS_REASON_CERT_UNTRUSTED:
+        return "Certificate untrusted";
+      case TP_CONNECTION_STATUS_REASON_CERT_EXPIRED:
+        return "Certificate expired";
+      case TP_CONNECTION_STATUS_REASON_CERT_NOT_ACTIVATED:
+        return "Certificate not activated";
+      case TP_CONNECTION_STATUS_REASON_CERT_HOSTNAME_MISMATCH:
+        return "Certificate hostname mismatch";
+      case TP_CONNECTION_STATUS_REASON_CERT_FINGERPRINT_MISMATCH:
+        return "Certificate fingerprint mismatch";
+      case TP_CONNECTION_STATUS_REASON_CERT_SELF_SIGNED:
+        return "Cerficate is self signed";
+      case TP_CONNECTION_STATUS_REASON_CERT_OTHER_ERROR:
+        return "Other certificate error";
+      default:
+        return "Unknown reason";
+   }
+}
+
+void on_connection_set_presence(TpConnection *proxy,
+  const GError *error,
+  gpointer user_data, 
+  GObject *weak_object)
+{
+  if (error != NULL)
+    {
+      g_printf ("tp_cli_connection_interface_simple_presence_call_set_presence() failed: %s\n", error->message);
+      g_main_loop_quit (mainloop);
+      return;
+    }
+
+   g_printf ("Presence set.\n");
+
+
+   /* Disconnect the connection now that our example has finished.
+      Otherwise it will be orphaned. */
+   g_printf ("DEBUG: Disconnecting.\n");
+   tp_cli_connection_call_disconnect (connection, -1, NULL, NULL,
+            NULL, NULL); /* Also destroys the connection object. */
+   connection = NULL;
+}
+
+
+void on_connection_ready (TpConnection *connection,
+  const GError *error,
+  gpointer user_data)
+{
+  if (error)
+  {
+    g_printf ("tp_connection_call_when_ready() failed: %s\n", error->message);
+     return;
+  }
+
+  /* Actually set the presence: */
+  /* See https://bugs.freedesktop.org/show_bug.cgi?id=19097 about the 
+   * difficulty of discovering valid status strings.
+   */
+  tp_cli_connection_interface_simple_presence_call_set_presence (
+    connection, 
+    -1, /* timeout */
+    "away",
+    "Gone fishing",
+    &on_connection_set_presence,
+    NULL, NULL, NULL);
+}
+
+void on_connection_status_changed(TpConnection *proxy,
+  guint arg_Status,
+  guint arg_Reason,
+  gpointer user_data,
+  GObject *weak_object)
+{
+  switch(arg_Status)
+    {
+      case TP_CONNECTION_STATUS_CONNECTED:
+        g_printf ("Connection status: Connected (reason: %s)\n", get_reason_description (arg_Reason));
+
+        /* Set the presence: */
+
+        /* tp_cli_connection_interface_simple_presence_call_set_presence() requires the connection to be 
+         * ready: */
+        tp_connection_call_when_ready (connection, 
+          &on_connection_ready,
+          NULL);
+
+        break;
+
+      case TP_CONNECTION_STATUS_CONNECTING:
+        g_printf ("Connection status: Connecting (reason: %s)\n", get_reason_description (arg_Reason));
+
+        break;
+
+      case TP_CONNECTION_STATUS_DISCONNECTED:
+        g_printf ("Connection status: Disconnected (reason: %s)\n", get_reason_description (arg_Reason));
+
+        /* Finish with the connection object: */
+        if (connection)
+          {
+            g_object_unref (connection);
+            connection = NULL;
+          }
+
+        /* Stop the application: */
+        g_main_loop_quit (mainloop);
+
+        break;
+
+      default:
+        g_printf ("Connection status: Unknown status.\n");
+        break;
+    }
+}
+
+void
+got_connection (TpConnectionManager *connection_manager,
+                const gchar *service_name,
+                const gchar *object_path,
+                const GError *request_connection_error,
+                gpointer user_data,
+                GObject *weak_object)
+{
+  TpProxySignalConnection *signal_connection;
+  GError *error = NULL;
+
+  if (request_connection_error != NULL)
+    {
+      g_printf ("RequestConnection failed: %s\n",
+          request_connection_error->message);
+      g_main_loop_quit (mainloop);
+      return;
+    }
+
+  connection = tp_connection_new (bus_daemon, service_name, object_path, &error);
+
+  if (error != NULL)
+    {
+      g_printf ("tp_connection_new() failed: %s\n", error->message);
+      g_clear_error (&error);
+      g_main_loop_quit (mainloop);
+      return;
+    }
+
+  g_printf("DEBUG: Connection created.\n");
+
+  /* React to connection status changes,
+   * including errors when we try to connect: */
+  signal_connection = tp_cli_connection_connect_to_status_changed (connection,
+      &on_connection_status_changed,
+      NULL, /* user_data */
+      NULL, /* destroy_callback */
+      NULL, /* weak_object */
+      &error);
+
+  if (error)
+    {
+      g_printf ("couldn't connect to StatusChanged: %s\n", error->message);
+      g_clear_error (&error);
+      g_main_loop_quit (mainloop);
+      return;
+    }
+
+  /* Connect the connection: */
+  g_printf ("DEBUG: Calling Connect().\n");
+  tp_cli_connection_call_connect (connection, -1, NULL, NULL, NULL, NULL);
+}
+
+
+int
+main (int argc, char **argv)
+{
+  g_type_init ();
+
+  /* Create the main loop: */
+  mainloop = g_main_loop_new (NULL, FALSE);
+
+  bus_daemon = tp_dbus_daemon_new (tp_get_bus ());
+
+  /* Get the connection manager: */
+  GError *error = NULL;
+  TpConnectionManager *connection_manager = 
+    tp_connection_manager_new (bus_daemon, "gabble", NULL, &error);
+  if (error)
+    {
+      g_printf ("tp_connection_manager_new() failed: %s\n", error->message);
+      g_clear_error (&error);
+      return 1;
+    }
+
+  /* Get the connection : */
+  GHashTable *parameters = g_hash_table_new_full (NULL, NULL, NULL,
+      (GDestroyNotify) tp_g_value_slice_free);
+
+  GValue *value = tp_g_value_slice_new (G_TYPE_STRING);
+  g_value_set_static_string (value, "murrayc at murrayc.com");
+  g_hash_table_insert (parameters, "account", value);
+
+  value = tp_g_value_slice_new (G_TYPE_STRING);
+  g_value_set_static_string (value, "passwordTODO");
+  g_hash_table_insert (parameters, "password", value);
+
+  /* This jabber-specific parameter can avoid clashes with 
+     other telepathy clients that use the default jabber 
+     resource name. */
+  value = tp_g_value_slice_new (G_TYPE_STRING);
+  g_value_set_static_string (value, "telepathy-doc set_presence example");
+  g_hash_table_insert (parameters, "resource", value);
+
+  /* Call RequestConnection; it will return asynchronously by calling got_connection */
+  tp_cli_connection_manager_call_request_connection (connection_manager, -1,
+      "jabber", parameters, got_connection, NULL, NULL, NULL);
+
+  g_hash_table_unref (parameters);
+  parameters = NULL;
+
+
+  /* Run the main loop, 
+   * to keep our application alive while we wait for responses from telepathy.
+   * This function returns when we call g_main_loop_quit() from elsewhere.
+   */
+  g_main_loop_run (mainloop);
+
+  /* Clean up: */
+  g_object_unref (connection_manager);
+  g_main_loop_unref (mainloop);
+  g_object_unref (bus_daemon);
+
+  return 0;
+}
diff --git a/docs/examples/set_presence/main.o b/docs/examples/set_presence/main.o
new file mode 100644
index 0000000000000000000000000000000000000000..742856017d2d74c11ed3216d9ec1cfa2b2412f20
GIT binary patch
literal 5652
zcmb7IU2Ggz6~60ishc>&HHJD++DYmVJ0+{Q at k^~1(%92PO5`*pCJm&Tj%UaAB)c=4
znb|moMh%!hcWbE>6&|1}h*tc)L`aA{6e%HqTL=R2Bch6jRuqw7Q<;*7R2Z4>yL0dE
z?ATFZq`T*Q=kK0#?%la}_X%_VgSlKz=qD%Ehz1hkn`;wIza%}PP23_zX8t<8ke@!?
zx_-kKpMtz*wqAIxrFP~%I4-|7XD-op{&6rH$V6Z^k~s!uD;XQi{bU{iGfd_Hm`{*-
z5KKhoelRm+`oTO$=58=QCbJpLWilJVyiKMZOb2G4zZuLnFg0`Om5VaZuIbZlBHmIn
z+iJU7XNJ1-bNTKV7FU**mzTc<XEBrSmSFxcROht{{BJZb&E|%>J82Huu4tR0t%~Lm
za#@F)yNOahDw7_WNmo-QSM(I~gNS=OtwFmKT`^y0i`2JnN~oL<-Pcp<k}<`Mxio!x
zDHreKXSfcZE%DK-ETm?(YkSp>9z<)j1M}DGVIJCeK3eH{NPEtIe5LY?R?7B${(O9!
zWOTenf11SeZRq at 2?W$WhXI^J6)2BN{+*30<8*BLoZQ2y&>K!>$`d<3Xn%7Zh8}mbD
zYz;QSOlPv at -=;;)ypHU4f;7Tj(_!hZHc0afFToS3cCJy)OV8GcCf;z9a7sNtmMNKi
zN7L*(bkG~kKK}rwKCG=|VwiHpe&JN<^-S;2S1!)(@6J!ZvABF<3Ez~1(+mA_6Tm(%
z{qo%;QYPCZIo%5>QLB=!ye&Olhy)vzUP~(7-c;%1x`tGxb0)tQ;;M(wbIgJ3mySyr
z>L*E(G8X}NHQ)k^cmbhn=7P?cEH(f&=cHy)YgX|+e?#A2zoYNv8~Xk`<NFTZ_?o$>
zE6-y|m^l})W?s{o(?V^|IdhTyXxgJG%O-gfK)2~wGp|hltpCWPv-Z+Oz~R7mji}-}
z-k9eW#l!B2svE`NhTV8F2#*_X7zUwupc+rOe(X7R>;=9tW_u;rn7$KERiwm}X2W*b
zH9X&_My?oi!x%x~;TnDr8<j9P=@sFXR#g2stjhV)QukEF3p17sVLP#R67ia2OaxKv
zbK<fWmF?J>V43M~W1c_mhLzCs<Ax0kRB~QqL~d!!h`ezhp%0+a&~Q at OCoLH9kNd%-
zZ-lNL1wQAv1B2(>4vc#-c4O?rIE3*i#u!F`aSG!z7*Aq+1tYFlPRX;J!1rBL6!;c0
zLprwOT9H?-lw7M4x{>PxJ9epLMQ&V|^z^Fk4;Wjbwc;UVh!Wz$S}|nq9@#Ts40(}`
z?vF#9%-NVvMxDfpTBxQtm5I5Bdt%IsCeSxwPuf%PAFMkYQEbQ6Xuwb+w`lYvJz++@
znC!;32$(Tm#kP_B%FwID)(ey5g=*C%PK8ePYtpf7FMM}0Q@?6r%HKhO*mj8R1l3Z}
z-x?cE(hwsKjE~8N3{KeCX2oO at 9RjPznpLQtUPKtTM@LI8S}ONJy{%T+_HAraYh^y=
zY8cv6&Mrj at PEZ!MgG~HbRO~3i_q2HEz|es at U~ISKR_u6UYI`woxH;+@$Z${D++zYe
zC#Z&wD~=%}Hxy#e;NXDKGct;}RinSKvvAM$zN$oheZ7f5h(a_~j_py<I85k-=0dkr
zh}~1MC=~737KPC$5(NswAQ2$(GTtJhfG at LK*fTt`9c$(sXD|NO=S~>rFy5sc`axf>
z- at t^BM;c at wz_>-(kSyGaGX}3^ei!IZJ6?abC=8W+x^!TLb-cTQX`i-}*TRe)^I?2k
zE9Ap?>vRxEG|P8JI=>fihp9lu{8*08?>_L1r=PoEz?}7?btVLwr*1C;r5>$A8|pPs
zO}mj*>}aoRp!y7oeHwyw;MoV}*N(v&bWgyFcKj50HRY)1r7r!X<$3YX<+QH(mkHyi
zXCT&HOuW{}jx{2zkr}4(&2<SqZ-qbmKwe{B$#q at S^S#dJyBHnl>_-&;q{2r)^}{}l
zY5+>i-!}Roeiq{%6zzdB-uJW;l={D6d>#7Vfl{AOHHiAn8Qce4MxQ?kO8Z?I{lgjj
zSO!0p!9M_g8ExK(n2dKeqkk!bFJ<tbGWhQqoKNiu*7N=h-jTs(23r{%W$=p`d at h4u
z&R|itJ-^^cQVN2K7_CND(RRx?+SRKa2eTN*i!(XgtfCt^p(k%U0!MbksOfkX<9N~H
zI3EMUDJ%xJPE@^km1AEX!^Qepoe3+C=2g7 at kIO<PVsb)SPI6LZ&Y#Sk0Qm=_$8bNf
zs($FAoFGosobkn(1$(FD+M$))mR8<zRKu(|uvW>V`936bQ4Vs65Ivr%xVR{xk?GEI
zX3WKP!U~ctHdc~nX(rRuDJ%V~lXj_!Ygfs`Wos;ST|}R-qX`RV8}4BUV2xEvrIofx
z$;unEvnJ00!Rn7U2l4y}w at H~ubD26BS#FqIz0*x at N<}S0YFC9-Y|s==EQH|S3OO7i
zn-txq=uSoDnF75$GeG&z4DAmq`k118S5c0ufux^S^mB^ND*9DLpI7vPqQ3xbSuez|
zi1Bj$J at LDR__NZ#uJl(F{)fVE5#wCqJFf-jNe?LTK2qfK5aoy)660L at l#+i|(Pyd0
z3;yS%IIw=J<bNcF->bxk$9Gf?FQd08e-HlCB8B~0yel}*22k4HP73)}CI7IJ_Yot`
zfTFu8$8Yn!3Lhjz-A5=#-J`^aJ5G$avkE_>@Yjf8|2#45zfX(<c8>UcLR=!od~c8<
z&Q;10hyP);+$O}^l*2!V_c;C6gVL^p7<OI6 at c$@j2kv{6W3!ABGcRJ;@#j3_O;V0{
zPY@&Cmxy6EOANbbh!O9n#2e99Qe3>=B*lUHFY4ico%n-TR2;S~_|bF|DC_D_w3ifd
z`>4kSZ@<C^i80SnQsh&n+`#<An}qlV>1H9mLpl6^NPL$N7Zkok+%3dqQrP`P$=@V~
z-G3Brg)i+oNnv*<DC2D-hTXji4-vzzNR0bhq~u?qe2WlYCjF2Q&ry!LUnIsw;w&ll
z#gCNyC&WGI8!`IuOQq-ksyVD7&vMcsMfWPYUs3LV>JKUUh at wXo<ylXCQPBxSONv$$
F{V(<ZfG7X}

literal 0
HcmV?d00001

-- 
1.5.6.5




More information about the Telepathy-commits mailing list