Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
authorDan Williams <dcbw@localhost.localdomain>2006-07-23 05:32:10 (GMT)
committer Dan Williams <dcbw@localhost.localdomain>2006-07-23 05:32:10 (GMT)
commit1d0b4e12b8f6a0ddc7df0c80fe34796d127f80c5 (patch)
tree86c8bbeb547983d1f886c1d5f9f02cd373c0dc38 /shell
parentbca4e1ca9beb28c4afc48ef473ca35c689902de6 (diff)
More PS fixes
Diffstat (limited to 'shell')
-rw-r--r--shell/PresenceService/PresenceService.py65
-rw-r--r--shell/PresenceService/Service.py2
-rw-r--r--shell/Session.py2
3 files changed, 33 insertions, 36 deletions
diff --git a/shell/PresenceService/PresenceService.py b/shell/PresenceService/PresenceService.py
index c111e89..9df9077 100644
--- a/shell/PresenceService/PresenceService.py
+++ b/shell/PresenceService/PresenceService.py
@@ -369,6 +369,11 @@ class PresenceService(object):
self._services[key] = service
else:
service = self._services[key]
+ if not service.get_address():
+ set_addr = service.get_one_property('address')
+ if not set_addr:
+ set_addr = address
+ service.set_address(set_addr)
adv.set_service(service)
# Merge the service into our buddy and activity lists, if needed
@@ -382,6 +387,9 @@ class PresenceService(object):
gobject.idle_add(self._resolve_service_reply_cb, interface, protocol,
name, stype, domain, host, aprotocol, address, port, txt, flags)
+ def _resolve_service_error_handler(self, err):
+ logging.error("error resolving service: %s" % err)
+
def _resolve_service(self, adv):
"""Resolve and lookup a ZeroConf service to obtain its address and TXT records."""
# Ask avahi to resolve this particular service
@@ -523,47 +531,35 @@ class PresenceService(object):
def register_service(self, name, stype, properties={}, address=None, port=None, domain=u"local"):
"""Register a new service, advertising it to other Buddies on the network."""
- objid = self._get_next_object_id()
- service = Service.Service(self._bus_name, objid, name=name,
- stype=stype, domain=domain, address=address, port=port,
- properties=properties)
- key = (name, stype)
- self._services[key] = service
-
if self.get_owner() and name != self.get_owner().get_nick_name():
raise RuntimeError("Tried to register a service that didn't have Owner nick as the service name!")
- actid = service.get_activity_id()
- rs_name = name
- if actid:
- rs_name = Service.compose_service_name(rs_name, actid)
- rs_stype = service.get_type()
- rs_port = service.get_port()
- rs_props = service.get_properties()
- rs_domain = service.get_domain()
- rs_address = service.get_address()
- if not rs_domain or not len(rs_domain):
- rs_domain = ""
- logging.debug("registered service name '%s' type '%s' on port %d with args %s" % (rs_name, rs_stype, rs_port, rs_props))
+ if not domain or not len(domain):
+ domain = u"local"
try:
- obj = self._session_bus.get_object(avahi.DBUS_NAME, self._mdns_service.EntryGroupNew())
+ obj = self._system_bus.get_object(avahi.DBUS_NAME, self._mdns_service.EntryGroupNew())
group = dbus.Interface(obj, avahi.DBUS_INTERFACE_ENTRY_GROUP)
# Add properties; ensure they are converted to ByteArray types
# because python sometimes can't figure that out
- info = [""]
- for k, v in rs_props.items():
- tmp_item = "%s=%s" % (k, v)
- info.append(dbus.types.ByteArray(tmp_item))
-
- if rs_address and len(rs_address):
- info.append("address=%s" % (rs_address))
- logging.debug("PS: about to call AddService for Avahi with rs_name='%s' (%s), rs_stype='%s' (%s)," \
- " rs_domain='%s' (%s), rs_port=%d (%s), info='%s' (%s)" % (rs_name, type(rs_name), rs_stype,
- type(rs_stype), rs_domain, type(rs_domain), rs_port, type(rs_port), info, type(info)))
- group.AddService(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, 0, rs_name, rs_stype,
- rs_domain, "", # let Avahi figure the 'host' out
- dbus.UInt16(rs_port), info,)
+ info = []
+ for k, v in properties.items():
+ info.append(dbus.types.ByteArray("%s=%s" % (k, v)))
+
+ objid = self._get_next_object_id()
+ service = Service.Service(self._bus_name, objid, name=name,
+ stype=stype, domain=domain, address=address, port=port,
+ properties=properties)
+ self._services[(name, stype)] = service
+ port = service.get_port()
+
+ if address and len(address):
+ info.append("address=%s" % (address))
+ logging.debug("PS: Will register service with name='%s', stype='%s'," \
+ " domain='%s', port=%d, info='%s'" % (name, stype, domain, port, info))
+ group.AddService(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, 0, name, stype,
+ domain, "", # let Avahi figure the 'host' out
+ dbus.UInt16(port), info,)
group.Commit()
except dbus.dbus_bindings.DBusException, exc:
# FIXME: ignore local name collisions, since that means
@@ -571,8 +567,7 @@ class PresenceService(object):
# should un-register it an re-register with the correct info
if str(exc) == "Local name collision":
pass
- activity_stype = service.get_type()
- self.register_service_type(activity_stype)
+ self.register_service_type(stype)
return service
def register_service_type(self, stype):
diff --git a/shell/PresenceService/Service.py b/shell/PresenceService/Service.py
index 7c7aa54..77cd826 100644
--- a/shell/PresenceService/Service.py
+++ b/shell/PresenceService/Service.py
@@ -247,6 +247,8 @@ class Service(object):
if type(address) != type(u""):
raise ValueError("address must be unicode")
self._address = address
+ if not self._publisher_address:
+ self._publisher_address = address
def get_domain(self):
"""Return the ZeroConf/mDNS domain the service was found in."""
diff --git a/shell/Session.py b/shell/Session.py
index d44889d..412dd73 100644
--- a/shell/Session.py
+++ b/shell/Session.py
@@ -53,7 +53,7 @@ class PresenceServiceProcess(Process):
return "PresenceService"
def start(self):
- Process.start(self, True)
+ Process.start(self)
time.sleep(3)
class Session: