diff options
Diffstat (limited to 'src/common/zeroconf/zeroconf_bonjour.py')
-rw-r--r-- | src/common/zeroconf/zeroconf_bonjour.py | 50 |
1 files changed, 25 insertions, 25 deletions
diff --git a/src/common/zeroconf/zeroconf_bonjour.py b/src/common/zeroconf/zeroconf_bonjour.py index b46f82523..4fa9fc013 100644 --- a/src/common/zeroconf/zeroconf_bonjour.py +++ b/src/common/zeroconf/zeroconf_bonjour.py @@ -31,23 +31,23 @@ except ImportError, e: resolve_timeout = 1 class Zeroconf: - def __init__(self, new_serviceCB, remove_serviceCB, name_conflictCB, + def __init__(self, new_serviceCB, remove_serviceCB, name_conflictCB, disconnected_CB, error_CB, name, host, port): self.domain = None # specific domain to browse - self.stype = '_presence._tcp' - self.port = port # listening port that gets announced + self.stype = '_presence._tcp' + self.port = port # listening port that gets announced self.username = name self.host = host self.txt = pybonjour.TXTRecord() # service data - - # XXX these CBs should be set to None when we destroy the object - # (go offline), because they create a circular reference + + # XXX these CBs should be set to None when we destroy the object + # (go offline), because they create a circular reference self.new_serviceCB = new_serviceCB self.remove_serviceCB = remove_serviceCB self.name_conflictCB = name_conflictCB self.disconnected_CB = disconnected_CB self.error_CB = error_CB - + self.contacts = {} # all current local contacts with data self.connected = False self.announced = False @@ -64,7 +64,7 @@ class Zeroconf: if not (flags & pybonjour.kDNSServiceFlagsAdd): self.remove_service_callback(serviceName) return - + # asynchronous resolving resolve_sdRef = pybonjour.DNSServiceResolve(0, interfaceIndex, serviceName, regtype, replyDomain, self.service_resolved_callback) @@ -100,9 +100,9 @@ class Zeroconf: items = pybonjour.TXTRecord.parse(txt)._items return dict((v[0], v[1]) for v in items.values()) - def service_resolved_callback(self, sdRef, flags, interfaceIndex, errorCode, fullname, + def service_resolved_callback(self, sdRef, flags, interfaceIndex, errorCode, fullname, hosttarget, port, txtRecord): - + # TODO: do proper decoding... escaping= { r'\.': '.', @@ -114,7 +114,7 @@ class Zeroconf: result = re.split('(?<!\\\\)\.', fullname) name = result[0] protocol, domain = result[2:4] - + # Replace the escaped values for src, trg in escaping.items(): name = name.replace(src, trg) @@ -126,11 +126,11 @@ class Zeroconf: if not self.connected: return - + bare_name = name if '@' not in name: name = name + '@' + name - + # we don't want to see ourselves in the list if name != self.name: self.contacts[name] = (name, domain, interfaceIndex, protocol, hosttarget, hosttarget, port, bare_name, txtRecord) @@ -146,10 +146,10 @@ class Zeroconf: self.resolved.append(True) # different handler when resolving all contacts - def service_resolved_all_callback(self, sdRef, flags, interfaceIndex, errorCode, fullname, hosttarget, port, txtRecord): + def service_resolved_all_callback(self, sdRef, flags, interfaceIndex, errorCode, fullname, hosttarget, port, txtRecord): if not self.connected: return - + escaping= { r'\.': '.', r'\032': ' ', @@ -157,7 +157,7 @@ class Zeroconf: } name, stype, protocol, domain, dummy = fullname.split('.') - + # Replace the escaped values for src, trg in escaping.items(): name = name.replace(src, trg) @@ -165,7 +165,7 @@ class Zeroconf: bare_name = name if name.find('@') == -1: name = name + '@' + name - + # we don't want to see ourselves in the list if name != self.name: self.contacts[name] = (name, domain, interfaceIndex, protocol, hosttarget, hosttarget, port, bare_name, txtRecord) @@ -201,12 +201,12 @@ class Zeroconf: def create_service(self): txt = {} - + #remove empty keys for key,val in self.txt: if val: txt[key] = val - + txt['port.p2pj'] = self.port txt['version'] = 1 txt['txtvers'] = 1 @@ -218,7 +218,7 @@ class Zeroconf: txt['status'] = 'avail' self.txt = pybonjour.TXTRecord(txt, strict=True) - + try: sdRef = pybonjour.DNSServiceRegister(name = self.name, regtype = self.stype, port = self.port, txtRecord = self.txt, @@ -257,7 +257,7 @@ class Zeroconf: self.name = self.username + '@' + self.host # service name self.connected = True - + # start browsing if self.domain is None: # Explicitly browse .local @@ -268,7 +268,7 @@ class Zeroconf: else: self.browse_domain(self.domain) - + return True def disconnect(self): @@ -276,8 +276,8 @@ class Zeroconf: self.connected = False self.browse_sdRef.close() self.remove_announce() - - + + def browse_domain(self, domain=None): gajim.log.debug('starting to browse') try: @@ -320,7 +320,7 @@ class Zeroconf: if not jid in self.contacts: return None return self.contacts[jid] - + def update_txt(self, show = None): if show: self.txt['status'] = self.replace_show(show) |