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. _______________________________________________ Telepathy mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/telepathy
