[Telepathy] Connecting a remote DBus Object over a DBus Tube

Alban Crequy alban.crequy at collabora.co.uk
Thu Aug 19 08:01:10 PDT 2010


connect(8, {sa_family=AF_FILE, path="/tmp/dbus-gabble-eJmvd0ho"}, 27) =0

So it connects fine to the D-Bus tube and use the file descriptor 8.
When your process is waiting in poll() or select(), is the file
descriptor 8 included in the list of fd to watch? If not, dbus-python
is not using the mainloop correctly... I don't remember the syntax, but
something like that:

from dbus.mainloop.glib import DBusGMainLoop
DBusGMainLoop(set_as_default=True)
tube = dbus.connection.Connection(self.tube_addr,
  mainloop=DBusGMainLoop())

BR,
Alban

Le Thu, 19 Aug 2010 14:23:23 +0200,
tomw <tomw at ubilix.com> a écrit :

> Alban,
> 
> thanks for your quick reply,
> 
> the "SERVICE" is the service the tube was created for, e.g.
> "org.example.Service" and I'm using a 1-1 DBus tube.
> 
> I was tracing the remote app with strace but it does not seem to
> receive any communication on the socket. I guess I need to digg
> deeper...
> 
> br, tomw  
> 
> On Thu, 2010-08-19 at 12:37 +0100, Alban Crequy wrote:
> > Le Thu, 19 Aug 2010 08:34:35 +0200,
> > tomw <tomw at ubilix.com> a écrit :
> > 
> > > Hi folks,
> > > 
> > > I'm trying to use a remote Object over a DBus tube. So far
> > > everything works fine. The tube is open and upon the
> > > tube_channel_state_change I get a dbus.connection.Connection
> > > object with the related address like
> > > unix:path=/tmp/dbus-gabble-6k8gfh-V. If I proceed then with: 
> > > 
> > > if state == TUBE_CHANNEL_STATE_OPEN:
> > >             tube = dbus.connection.Connection(self.tube_addr)
> > >             tube.add_signal_receiver(self.signal_cb)
> > >             remote = tube.get_object(SERVICE, PATH)
> > 
> > What is "SERVICE" here? Are you using a 1-1 D-Bus tube or MUC D-Bus
> > tubes?
> > 
> > In D-Bus tubes (both 1-1 and MUC), there is no bus driver
> > implementing org.freedesktop.DBus, so there is no well-known names.
> > 
> > In the case of MUC D-Bus tubes, you can find the D-Bus unique name
> > (to use instead of "SERVICE") of a contact with the "DBusNames"
> > property on your tube channel:
> > http://telepathy.freedesktop.org/spec/Channel_Type_DBus_Tube.html#org.freedesktop.Telepathy.Channel.Type.DBusTube.DBusNames
> > 
> > >             remote.Method(reply_handler=self.tube_reply_cb,
> > > error_handler=self.tube_error_cb)
> > > 
> > > Calling Method on the remote object always creates a DBus timeout:
> > > "DBusException(dbus.String(u'Did not receive a reply..."
> > > The remote object is running on the DBUs and locally works like it
> > > should. So, what am I missing here?
> > 
> > You can use strace on your application to see if it receives a D-Bus
> > message on the tube socket.
> > 
> > > BTW, the telepathy framework is really a great piece of work
> > > (once you grasp it :-) 
> > 
> > BR,
> > Alban
> > _______________________________________________
> > telepathy mailing list
> > telepathy at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/telepathy
> 
> 


More information about the telepathy mailing list