Ejemplo n.º 1
0
 def _CH_register(self, command):
     notification_center = NotificationCenter()
     settings = SIPSimpleSettings()
     if self._register_timer is not None and self._register_timer.active():
         self._register_timer.cancel()
     self._register_timer = None
     supported_transports = set(transport for transport in settings.sip.transport_list if transport!='tls' or self.account.tls.certificate is not None)
     registered_transports = set(file.transport for file in self._files if isinstance(file, BonjourRegistrationFile))
     missing_transports = supported_transports - registered_transports
     added_transports = set()
     for transport in missing_transports:
         notification_center.post_notification('BonjourAccountWillRegister', sender=self.account, data=NotificationData(transport=transport))
         try:
             contact = self.account.contact[NoGRUU, transport]
             instance_id = str(uuid.UUID(settings.instance_id))
             txtdata = dict(txtvers=1, name=self.account.display_name.encode('utf-8'), 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.encode('utf-8')
             file = _bonjour.DNSServiceRegister(name=str(contact),
                                                regtype="_sipuri._%s" % (transport if transport == 'udp' else 'tcp'),
                                                port=contact.port,
                                                callBack=self._register_cb,
                                                txtRecord=_bonjour.TXTRecord(items=txtdata))
         except (_bonjour.BonjourError, KeyError), e:
             notification_center.post_notification('BonjourAccountRegistrationDidFail', sender=self.account, data=NotificationData(reason=str(e), transport=transport))
         else:
             self._files.append(BonjourRegistrationFile(file, transport))
             added_transports.add(transport)
Ejemplo n.º 2
0
 def _CH_register(self, command):
     notification_center = NotificationCenter()
     settings = SIPSimpleSettings()
     if self._register_timer is not None and self._register_timer.active():
         self._register_timer.cancel()
     self._register_timer = None
     supported_transports = set(
         transport for transport in settings.sip.transport_list
         if transport != 'tls' or self.account.tls.certificate is not None)
     registered_transports = set(
         file.transport for file in self._files
         if isinstance(file, BonjourRegistrationFile))
     missing_transports = supported_transports - registered_transports
     added_transports = set()
     for transport in missing_transports:
         notification_center.post_notification(
             'BonjourServiceWillRegister',
             sender=self,
             data=NotificationData(transport=transport))
         try:
             contact_uri = self.account.contact[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')
             file = _bonjour.DNSServiceRegister(
                 name=str(contact_uri),
                 regtype="_%s._%s" %
                 (self.service, transport if transport == 'udp' else 'tcp'),
                 port=contact_uri.port,
                 callBack=self._register_cb,
                 txtRecord=_bonjour.TXTRecord(items=txtdata))
         except (_bonjour.BonjourError, KeyError) as e:
             notification_center.post_notification(
                 'BonjourServiceRegistrationDidFail',
                 sender=self,
                 data=NotificationData(reason=str(e), transport=transport))
         else:
             self._files.append(BonjourRegistrationFile(file, transport))
             added_transports.add(transport)
     if added_transports:
         self._select_proc.kill(RestartSelect)
     if added_transports != missing_transports:
         self._register_timer = reactor.callLater(
             1, self._command_channel.send,
             Command('register', command.event))
     else:
         command.signal()