From 3117d454b9dd3cfae7ed817cb07e17f4eeef28eb Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Wed, 02 Aug 2006 14:27:09 +0000 Subject: add service unregistration --- (limited to 'shell') 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 -- cgit v0.9.1