diff options
Diffstat (limited to 'farstream/python/examples/callhandler.py')
-rw-r--r-- | farstream/python/examples/callhandler.py | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/farstream/python/examples/callhandler.py b/farstream/python/examples/callhandler.py new file mode 100644 index 000000000..71af24cd9 --- /dev/null +++ b/farstream/python/examples/callhandler.py @@ -0,0 +1,116 @@ +# callhandler.py +# Copyright (C) 2008-2010 Collabora Ltd. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import gobject +# Need gio so GAsyncInitialbe is known +import gio + +import dbus +from dbus.mainloop.glib import DBusGMainLoop +DBusGMainLoop(set_as_default=True) + +from constants import * +from telepathy.interfaces import CHANNEL_INTERFACE, CLIENT, CLIENT_HANDLER +from telepathy.constants import CONNECTION_HANDLE_TYPE_CONTACT, CONNECTION_HANDLE_TYPE_ROOM +import telepathy + +from callchannel import CallChannel + +class CallHandler(dbus.service.Object, telepathy.server.DBusProperties): + def __init__(self, bus, bus_name = None): + self.bus = bus + if bus_name == None: + self.bus_name = "org.freedesktop.Telepathy.Client.CallDemo" \ + + bus.get_unique_name().replace(":", "_").replace(".","_") + else: + self.bus_name = bus_name + self.path = "/" + self.bus_name.replace(".", "/") + self._interfaces = set([CLIENT, CLIENT_HANDLER]) + self._prop_getters = {} + self._prop_setters = {} + + dbus.service.Object.__init__(self, bus, self.path) + telepathy.server.DBusProperties.__init__(self) + + self._name = dbus.service.BusName (self.bus_name, bus) + + self._implement_property_get (CLIENT, + { "Interfaces": self._get_interfaces } ) + self._implement_property_get (CLIENT_HANDLER, + { "HandlerChannelFilter": self._get_filters } ) + self._implement_property_get (CLIENT_HANDLER, + { "Capabilities": self._get_capabilities } ) + + def _get_interfaces(self): + return dbus.Array(self._interfaces, signature='s') + + def _get_filters(self): + return dbus.Array ([ + { CHANNEL_INTERFACE + ".ChannelType": CHANNEL_TYPE_CALL, + CHANNEL_INTERFACE + ".TargetHandleType": + CONNECTION_HANDLE_TYPE_CONTACT, + CALL_INITIAL_AUDIO: True, + }, + { CHANNEL_INTERFACE + ".ChannelType": CHANNEL_TYPE_CALL, + CHANNEL_INTERFACE + ".TargetHandleType": + CONNECTION_HANDLE_TYPE_CONTACT, + CALL_INITIAL_VIDEO: True, + }, + { CHANNEL_INTERFACE + ".ChannelType": CHANNEL_TYPE_CALL, + CHANNEL_INTERFACE + ".TargetHandleType": + CONNECTION_HANDLE_TYPE_ROOM, + CALL_INITIAL_AUDIO: True, + }, + { CHANNEL_INTERFACE + ".ChannelType": CHANNEL_TYPE_CALL, + CHANNEL_INTERFACE + ".TargetHandleType": + CONNECTION_HANDLE_TYPE_ROOM, + CALL_INITIAL_VIDEO: True, + } + ], + signature='a{sv}') + + def _get_capabilities(self): + return dbus.Array ([ + CHANNEL_TYPE_CALL + '/gtalk-p2p', + CHANNEL_TYPE_CALL + '/ice-udp', + CHANNEL_TYPE_CALL + '/video/h264', + ], signature='s') + + def do_handle_call_channel (self, requests, bus, conn, channel, properties): + cchannel = CallChannel(self.bus, conn, channel, properties) + cchannel.accept() + + @dbus.service.method(dbus_interface=CLIENT_HANDLER, + in_signature='ooa(oa{sv})aota{sv}', + async_callbacks= ('_success', '_error')) + def HandleChannels(self, account, connection, channels, + requests, time, info, _success, _error): + + conn = telepathy.client.Connection (connection[1:].replace('/','.'), + connection) + # Assume there can be only one + (channel, properties) = channels[0] + + _success() + self.do_handle_call_channel (requests, + self.bus, conn, channel, properties); + +if __name__ == '__main__': + gobject.threads_init() + loop = gobject.MainLoop() + CallHandler(dbus.SessionBus()) + loop.run() |