[Telepathy-commits] [telepathy-salut/master] Add service resolving

Sjoerd Simons sjoerd.simons at collabora.co.uk
Mon Sep 1 12:32:45 PDT 2008


---
 tests/twisted/avahitest.py |   45 +++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 44 insertions(+), 1 deletions(-)

diff --git a/tests/twisted/avahitest.py b/tests/twisted/avahitest.py
index aa7041c..f0b8583 100644
--- a/tests/twisted/avahitest.py
+++ b/tests/twisted/avahitest.py
@@ -14,12 +14,49 @@ def get_host_name():
             avahi.DBUS_PATH_SERVER), avahi.DBUS_INTERFACE_SERVER)
   return server.GetHostName()
 
+def txt_get_key(txt, key):
+  for x in txt:
+      if dbus.Byte('=') in x:
+        (rkey, value) = avahi.byte_array_to_string(x).split('=')
+        if rkey == key:
+            return value
+
+  return None
+
+class AvahiService:
+    def __init__(self, event_queue, bus, server,
+        interface, protocol, name, type, domain, aprotocol, flags):
+
+        self.event_queue = event_queue
+
+        resolver_path = server.ServiceResolverNew(interface,
+            protocol, name, type, domain, aprotocol, flags)
+        resolver_obj = bus.get_object(avahi.DBUS_NAME, resolver_path)
+        resolver = dbus.Interface(resolver_obj,
+            avahi.DBUS_INTERFACE_SERVICE_RESOLVER)
+
+        resolver.connect_to_signal('Found', self._service_found)
+        resolver.connect_to_signal('Failed', self._service_failed)
+
+    def _service_found(self, interface, protocol, name, stype, domain,
+        host_name, aprotocol, pt, port, txt, flags):
+
+        e = Event('service-resolved', service = self,
+          interface = interface, protocol = protocol, name = name,
+          stype = stype, host_name = host_name, aprotocol = aprotocol,
+          pt = pt, port = port, txt = txt, flags = flags)
+
+        self.event_queue.append(e)
+
+    def _service_failed(self, error):
+      e = Event('service-failed', service = self, error = error)
+      self.event_queue.append(e)
+
 class AvahiListener:
     def __init__(self, event_queue):
         self.event_queue = event_queue
 
         self.bus = dbus.SystemBus()
-
         self.server = dbus.Interface(self.bus.get_object(avahi.DBUS_NAME,
             avahi.DBUS_PATH_SERVER), avahi.DBUS_INTERFACE_SERVER)
         self.browsers = []
@@ -51,3 +88,9 @@ class AvahiListener:
         browser.connect_to_signal('ItemRemoved', self._service_removed_cb)
 
         self.browsers.append(browser)
+
+    def resolver_for_service(self, event):
+        return AvahiService(self.event_queue, self.bus, self.server,
+          event.interface, event.protocol, event.name, event.stype,
+          event.domain, event.protocol, 0)
+
-- 
1.5.6.3




More information about the Telepathy-commits mailing list