[Telepathy] Get existing connection in clients

Xavier Claessens xclaesse at gmail.com
Thu Feb 8 03:04:10 PST 2007

On ven, 2007-01-19 at 09:55 +0100, Xavier Claessens wrote:
> On jeu, 2007-01-18 at 22:55 +0100, Xavier Claessens wrote:
> > On jeu, 2007-01-18 at 21:39 +0000, Dafydd Harries wrote:
> > > Ar 18/01/2007 am 22:30, ysgrifennodd Xavier Claessens:
> > > > 1) RequestConnection returns the existing object if it's already
> > > > connected. Currently if I try to connect an account that is already
> > > > connected I get this error:
> > > > 
> > > > * (gossip:6771): WARNING **: Connect() failed: Error acquiring bus name
> > > > org.freedesktop.Telepathy.Connection.idle.irc.xclaesse_irc_freenode_net,
> > > > The connection manager already has this connection active.
> > > 
> > > Why not just call RequestConnection and catch the error to determine whether
> > > the connection exists? If you don't need the resulting connection object, you
> > > can just call Disconnect() on it.
> > 
> > It can be a solution if all CM returns the same error. So there is three
> > solutions:
> > 
> > 3) Add in the spec a possible error on RequestConnection telling it's
> > already connected.
> > 
> Hum after some thinking, return an error isn't that useful. It just
> tells the client that a connection exists but it doesn't says the
> object's path on the bus.
> Xavier.

Ok so finally what can be done here ?!?

I need this problem fixed because it currently prevent gossip to connect
multiple IRC server. The problem is gossip reuse an existing connection
if the "account" parameter is the same, which is wrong for irc account!

Here is what I suggest:

RequestConnection should return an existing connection. The CM is the
only responsible of the dbus path naming and clients don't know how to
make a unique dbus name. So the CM takes parameters, create a dbus path
and checks if it already exists. If it doesn't exists it creates it and
return the new dbus object, otherwise it just return the existing
object. This should be done in this method and not in another because,
with another function like GetExistingConnection, we can call it and see
there is no other connection, another client request a new connection
with same parameters, then the first client request a new connection too
and get an error because the dbus object already exists even if he just
checked there is no existing connection.

Once the client gets a connection using RequestConnection it checks his
status. If it's not DISCONNECTED it means an existing connection was
returned, the client should check if the existing connection is good to
be reused. It needs a function like GetParameters on
org.freedesktop.Telepathy.Connection to get parameters used for this
connection, the client can maybe decide this connections can't be reused
because the user wants SSL enabled and the existing connection doesn't
have ssl. If the connection can't be reused the client disconnect it and
request a new one. If the connection can be reused the client should
request opened channels, etc.

Comments welcomed.

More information about the Telepathy mailing list