Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--shell/PresenceService/PresenceService.py22
-rw-r--r--shell/PresenceService/Service.py7
-rw-r--r--sugar/presence/PresenceService.py3
3 files changed, 31 insertions, 1 deletions
diff --git a/shell/PresenceService/PresenceService.py b/shell/PresenceService/PresenceService.py
index b69418b..42ca409 100644
--- a/shell/PresenceService/PresenceService.py
+++ b/shell/PresenceService/PresenceService.py
@@ -209,6 +209,19 @@ class PresenceServiceDBusHelper(dbus.service.Object):
return service.object_path()
@dbus.service.method(_PRESENCE_DBUS_INTERFACE,
+ in_signature="o", out_signature="")
+ def unregisterService(self, service_op):
+ found_serv = None
+ serv = self._parent.get_services()
+ for serv in services:
+ if serv.object_path() == service_op:
+ found_serv = serv
+ break
+ if not found_serv:
+ raise NotFoundError("The activity %s was not found." % service_op)
+ return self._parent.unregister_service(found_serv)
+
+ @dbus.service.method(_PRESENCE_DBUS_INTERFACE,
in_signature="s", out_signature="")
def registerServiceType(self, stype):
self._parent.register_service_type(stype)
@@ -628,6 +641,7 @@ class PresenceService(object):
group.AddService(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, 0, dbus.String(name),
dbus.String(stype), dbus.String(domain), dbus.String(""), # let Avahi figure the 'host' out
dbus.UInt16(port), info)
+ service.set_avahi_entry_group(group)
group.Commit()
except dbus.exceptions.DBusException, exc:
# FIXME: ignore local name collisions, since that means
@@ -638,6 +652,14 @@ class PresenceService(object):
self.register_service_type(stype)
return service
+ def unregister_service(self, service):
+ group = service.get_avahi_entry_group()
+ if not group:
+ raise ValueError("Service was not a local service provided by this laptop!")
+ group.Free()
+ key = (service.get_full_name(), service.get_type())
+ del self._services[key]
+
def register_service_type(self, stype):
"""Requests that the Presence service look for and recognize
a certain mDNS service types."""
diff --git a/shell/PresenceService/Service.py b/shell/PresenceService/Service.py
index cbbfb05..a908ce9 100644
--- a/shell/PresenceService/Service.py
+++ b/shell/PresenceService/Service.py
@@ -137,6 +137,7 @@ class Service(object):
self.set_port(port)
self._properties = {}
self.set_properties(properties)
+ self._avahi_entry_group = None
# Source address is the unicast source IP
self._source_address = None
@@ -257,11 +258,15 @@ class Service(object):
self._address = address
self._properties['address'] = address
-
def get_domain(self):
"""Return the ZeroConf/mDNS domain the service was found in."""
return self._domain
+ def set_avahi_entry_group(self, group):
+ self._avahi_entry_group = group
+
+ def get_avahi_entry_group(self):
+ return self._avahi_entry_group
#################################################################
# Tests
diff --git a/sugar/presence/PresenceService.py b/sugar/presence/PresenceService.py
index 44fd3c7..f50e034 100644
--- a/sugar/presence/PresenceService.py
+++ b/sugar/presence/PresenceService.py
@@ -194,6 +194,9 @@ class PresenceService(gobject.GObject):
serv_op = self._ps.registerService(name, stype, properties, address, port, domain)
return self._new_object(serv_op)
+ def unregister_service(self, service):
+ self._ps.unregisterService(service.object_path())
+
def register_service_type(self, stype):
self._ps.registerServiceType(stype)