示例#1
0
 def _CH_update_registrations(self, command):
     notification_center = NotificationCenter()
     settings = SIPSimpleSettings()
     if self._update_timer is not None and self._update_timer.active():
         self._update_timer.cancel()
     self._update_timer = None
     available_transports = settings.sip.transport_list
     old_files = []
     for file in (f for f in self._files[:] if isinstance(f, BonjourRegistrationFile) and f.transport not in available_transports):
         old_files.append(file)
         self._files.remove(file)
     self._select_proc.kill(RestartSelect)
     for file in old_files:
         file.close()
     update_failure = False
     for file in (f for f in self._files if isinstance(f, BonjourRegistrationFile)):
         try:
             contact = self.account.contact[NoGRUU, file.transport]
             instance_id = str(uuid.UUID(settings.instance_id))
             txtdata = dict(txtvers=1, name=self.account.display_name, contact="<%s>" % str(contact), instance_id=instance_id)
             state = self.account.presence_state
             if self.account.presence.enabled and state is not None:
                 txtdata['state'] = state.state
                 txtdata['note'] = state.note
             _bonjour.DNSServiceUpdateRecord(file.file, None, flags=0, rdata=_bonjour.TXTRecord(items=txtdata), ttl=0)
         except (_bonjour.BonjourError, KeyError) as e:
             notification_center.post_notification('BonjourAccountRegistrationUpdateDidFail', sender=self.account, data=NotificationData(reason=str(e), transport=file.transport))
             update_failure = True
     self._command_channel.send(Command('register'))
     if update_failure:
         self._update_timer = reactor.callLater(1, self._command_channel.send, Command('update_registrations', command.event))
     else:
         command.signal()
示例#2
0
 def _CH_update_registrations(self, command):
     notification_center = NotificationCenter()
     settings = SIPSimpleSettings()
     if self._update_timer is not None and self._update_timer.active():
         self._update_timer.cancel()
     self._update_timer = None
     available_transports = settings.sip.transport_list
     old_files = []
     for file in (f for f in self._files[:]
                  if isinstance(f, BonjourRegistrationFile)
                  and f.transport not in available_transports):
         old_files.append(file)
         self._files.remove(file)
     self._select_proc.kill(RestartSelect)
     for file in old_files:
         file.close()
     update_failure = False
     for file in (f for f in self._files
                  if isinstance(f, BonjourRegistrationFile)):
         try:
             contact_uri = self.account.contact[file.transport]
             contact_uri.user = self.uri_user
             if self.is_focus:
                 contact_uri.parameters['isfocus'] = None
             txtdata = dict(txtvers=1,
                            name=self.name,
                            contact="<%s>" % str(contact_uri),
                            instance_id=self.id)
             state = self.presence_state
             if state is not None:
                 txtdata['state'] = state.state
                 txtdata['note'] = state.note.encode('utf-8')
             _bonjour.DNSServiceUpdateRecord(
                 file.file,
                 None,
                 flags=0,
                 rdata=_bonjour.TXTRecord(items=txtdata),
                 ttl=0)
         except (_bonjour.BonjourError, KeyError), e:
             notification_center.post_notification(
                 'BonjourServiceRegistrationUpdateDidFail',
                 sender=self,
                 data=NotificationData(reason=str(e),
                                       transport=file.transport))
             update_failure = True