]> git.0d.be Git - empathy.git/commitdiff
Add empathy_offer_ipv4_stream_tube().
authorXavier Claessens <xclaesse@src.gnome.org>
Sat, 19 Apr 2008 21:04:16 +0000 (21:04 +0000)
committerXavier Claessens <xclaesse@src.gnome.org>
Sat, 19 Apr 2008 21:04:16 +0000 (21:04 +0000)
svn path=/trunk/; revision=980

libempathy/empathy-tp-tube.c
libempathy/empathy-tp-tube.h
libempathy/empathy-tube-handler.c

index efd9336b23d431e504dc962148d51f6283f3543a..b789bf07f5e421cc394faf8ff98923c428d82b25 100644 (file)
@@ -23,7 +23,6 @@
 
 #include <telepathy-glib/connection.h>
 
-#include "empathy-contact.h"
 #include "empathy-contact-factory.h"
 #include "empathy-debug.h"
 #include "empathy-enum-types.h"
@@ -487,6 +486,7 @@ empathy_tp_tube_get_ipv4_socket (EmpathyTpTube *tube,
 
   empathy_debug (DEBUG_DOMAIN, "Getting stream tube socket address");
 
+  /* FIXME: Same than for empathy_tp_tube_get_unix_socket() */
   if (!tp_cli_channel_type_tubes_run_get_stream_tube_socket_address (priv->channel,
       -1, priv->id, &address_type, &address, &error, NULL))
     {
@@ -501,3 +501,77 @@ empathy_tp_tube_get_ipv4_socket (EmpathyTpTube *tube,
   g_free (address);
 }
 
+void
+empathy_offer_ipv4_stream_tube (EmpathyContact *contact,
+                                const gchar *hostname,
+                                guint port,
+                                const gchar *service)
+{
+  MissionControl *mc;
+  McAccount *account;
+  TpConnection *connection;
+  TpChannel *channel;
+  gchar *object_path;
+  guint id;
+  GHashTable *params;
+  GValue *address;
+  GValue *control_param;
+  GError *error = NULL;
+
+  mc = empathy_mission_control_new ();
+  account = empathy_contact_get_account (contact);
+  connection = mission_control_get_tpconnection (mc, account, NULL);
+
+  if (!tp_cli_connection_run_request_channel (connection, -1,
+      TP_IFACE_CHANNEL_TYPE_TUBES, TP_HANDLE_TYPE_CONTACT,
+      empathy_contact_get_handle (contact), FALSE, &object_path, &error, NULL))
+    {
+      g_clear_error (&error);
+      g_object_unref (mc);
+      g_object_unref (account);
+      g_object_unref (connection);
+      return;
+    }
+
+  empathy_debug (DEBUG_DOMAIN, "Offering a new stream tube");
+
+  channel = tp_channel_new (connection, object_path,
+      TP_IFACE_CHANNEL_TYPE_TUBES, TP_HANDLE_TYPE_CONTACT,
+      empathy_contact_get_handle (contact), NULL);
+
+  params = g_hash_table_new (g_str_hash, g_str_equal);
+  address = g_new0 (GValue, 1);
+  g_value_init (address,
+      dbus_g_type_get_struct ("GValueArray", G_TYPE_STRING, G_TYPE_UINT,
+      G_TYPE_INVALID));
+  g_value_take_boxed (address,
+      dbus_g_type_specialized_construct (dbus_g_type_get_struct ("GValueArray",
+        G_TYPE_STRING, G_TYPE_UINT, G_TYPE_INVALID)));
+  dbus_g_type_struct_set (address, 0, hostname, 1, port, G_MAXUINT);
+
+  /* localhost access control, variant is ignored */
+  control_param = g_new0 (GValue, 1);
+  g_value_init (control_param, G_TYPE_STRING);
+
+  if (!tp_cli_channel_type_tubes_run_offer_stream_tube (channel, -1,
+        service, params, TP_SOCKET_ADDRESS_TYPE_IPV4, address,
+        TP_SOCKET_ACCESS_CONTROL_LOCALHOST, control_param, &id, &error, NULL))
+    {
+      empathy_debug (DEBUG_DOMAIN, "Couldn't offer tube: %s", error->message);
+      g_clear_error (&error);
+    }
+
+  empathy_debug (DEBUG_DOMAIN, "Stream tube id=%d offered", id);
+
+  g_object_unref (channel);
+  g_free (object_path);
+  g_hash_table_destroy (params);
+  g_value_reset (address);
+  g_value_reset (control_param);
+  g_free (address);
+  g_free (control_param);
+  g_object_unref (mc);
+  g_object_unref (account);
+  g_object_unref (connection);
+}
+
index 22f6b8dc80af439eb9c6a9a266e21ece37efeb50..b4c009ba1858d957483fe3db98c067b89808d599 100644 (file)
@@ -26,6 +26,8 @@
 
 #include <telepathy-glib/channel.h>
 
+#include "empathy-contact.h"
+
 G_BEGIN_DECLS
 
 #define EMPATHY_TYPE_TP_TUBE (empathy_tp_tube_get_type ())
@@ -59,6 +61,9 @@ void empathy_tp_tube_get_ipv4_socket (EmpathyTpTube *tube, gchar **hostname,
     guint *port);
 gchar * empathy_tp_tube_get_unix_socket (EmpathyTpTube *tube);
 
+void empathy_offer_ipv4_stream_tube (EmpathyContact *contact,
+    const gchar *hostname, guint port, const gchar *service);
+
 G_END_DECLS
 
 #endif /* __EMPATHY_TP_TUBE_H__ */
index b7eb66948d01832563ce7c2238534e539a07d776..0005a369d24840175e2a6b1af615968994cd7220 100644 (file)
@@ -70,7 +70,7 @@ tube_handler_handle_tube_idle_cb (gpointer data)
   EmpathyTpTube *tube;
   static TpDBusDaemon *daemon = NULL;
 
-  empathy_debug (DEBUG_DOMAIN, "New tube to be handled");
+  empathy_debug (DEBUG_DOMAIN, "New tube to be handled id=%d", idle_data->id);
 
   if (!daemon)
     daemon = tp_dbus_daemon_new (tp_get_bus ());