Vitavonni

Sun, 03 Dec 2006

Skype bastardized DBus

I've started playing around with DBus a little. It's somewhat cute, I was able to quickly write a script that monitors my wireless network connection going up and down, and after some searching for useful documentation, I'm now able to tell gaim to disconnect when my wireless goes down and reconnect when it comes back. All with just a few lines of Python.

While searching for some docs on the Gaim API, I stumbled upon the Skype DBus API. But it's crap. Evil stuff. (And not working, from what I can tell; I read somewhere they're using a totally outdated DBus version, and to use it you have to downgrade and break lots of other stuff).

They've totally bastardized DBus. First of all, the trace of a DBus API I've found is on a system level, not a user/session level. It should be per-session; you especially don't want others to mess with your Skype.

Instead of offering an API with sane methods to invoke, they offer a single method, called "Invoke", and a single callback called "Notify". Ouch. With these methods you're expected to do a ascii protocol something like this:

-> NAME UltimateProgram
<- OK
-> PROTOCOL 5
<- PROTOCOL 5

Note that the name choice is up to the connecting application; so you can cloak yourself as a different application; it will be displayed to the user when asking for confirmation, apparently.

Another example how crappy Skype dbus is: their "dbus example in C" links to the Python example and the other way round. The C example consists of 2.4 MB precompiled example and about 100k source code (the example of course is a graphical client).

For comparison, this is a complete example on how to reconnect all your Gaim accounts via python-dbus:

import gobject, time, dbus, dbus.glib
# get DBus inteface
sesbus = dbus.SessionBus()
gaim_obj = sesbus.get_object("net.sf.gaim.GaimService", "/net/sf/gaim/GaimObject")
gaim = dbus.Interface(gaim_obj, "net.sf.gaim.GaimInterface")

for account in gaim.GaimAccountsGetAllActive(): gaim.GaimAccountDisconnect(account) time.sleep(5) for account in gaim.GaimAccountsGetAllActive(): gaim.GaimAccountConnect(account)

[category: /en/linux | Permalink]
Menu
[planet.debian]
[planet.xmlhack]
[planet SELinux]
[munichblogs]
[email]
[RSS 2 feed]
[English RSS 2]
Categories
< December 2006 >
SuMoTuWeThFrSa
      1 2
3 4 5 6 7 8 9
10111213141516
17181920212223
24252627282930
31      
Archives
2010-Feb
2010-Jan
2009-Dec
2009-Nov
2009-Oct
2009-Sep
2009-Aug
2009-Jul
2009-Jun
2009-May
2009-Apr
2009-Mar
2009-Feb
2009-Jan
2008-Dec
2008-Nov
2008-Oct
2008-Sep
2008-Aug
2008-Jul
2008-May
2008-Apr
2008-Mar
2008-Feb
2008-Jan
2007-Dec
2007-Nov
2007-Oct
2007-Sep
2007-Aug
2007-Jul
2007-Jun
2007-May
2007-Apr
2007-Mar
2007-Feb
2007-Jan
2006-Dec
2006-Nov
2006-Oct
2006-Sep
2006-Aug
2006-Jul
2006-Jun
2006-May
2006-Apr
2006-Mar
2006-Feb
2006-Jan
2005-Dec
2005-Nov
2005-Oct
2005-Sep
2005-Aug
2005-Jul
2005-Jun
2005-May
2005-Apr
2005-Mar
2005-Feb
2005-Jan
2004-Dec
2004-Nov
2004-Oct
2004-Sep
2004-Aug
2004-Jul
Other links:
Swing and the City - Lindy Hop in Munich