Ejemplo n.º 1
0
 def _send_sms(self, tx_sms):
     # TODO handle delivery report
     if not self._is_network_available:
         err_msg = '%s: network unavailable' % tx_sms
         tx_sms.callback(status('ERROR', err_msg))
         return
     try:
         self.modem.sendSms(tx_sms.recipient, tx_sms.text)
     except Exception, e:
         logger.error('error:', exc_info=True)
         tx_sms.callback(status('ERROR', '%s: %r' % (tx_sms, e)))
Ejemplo n.º 2
0
 def _send_sms_when_stopped(self, tx_sms):
     assert tx_sms.sender is None
     if not self.sim_config.active:
         err_msg = '%s: modem is not active' % tx_sms
         tx_sms.callback(status('ERROR', err_msg))
     else:
         self._send_sms(tx_sms)
Ejemplo n.º 3
0
    def route(self, msg):
        sender = msg.sender
        imsi   = msg.imsi
        sim_config = None

        if sender:
            sim_config = self.sim_config_db.route(sender)
        if sim_config is None and imsi in self.sim_config_db:
            sim_config = self.sim_config_db[imsi]
        if sim_config is None:
            err_msg = '%s: sim not known' % msg
            if msg.callback:
                msg.callback(status('ERROR', err_msg))
            return

        worker = self.imsi2worker.get(sim_config.imsi)
        if worker:
            logger.info('%s: routing to dev %s', msg, worker.dev)
            worker.send(msg)
        else:
            msg.callback(status('ERROR', '%s: sim not found' % msg))
Ejemplo n.º 4
0
        else:
            self._send_sms(tx_sms)

    def _send_sms(self, tx_sms):
        # TODO handle delivery report
        if not self._is_network_available:
            err_msg = '%s: network unavailable' % tx_sms
            tx_sms.callback(status('ERROR', err_msg))
            return
        try:
            self.modem.sendSms(tx_sms.recipient, tx_sms.text)
        except Exception, e:
            logger.error('error:', exc_info=True)
            tx_sms.callback(status('ERROR', '%s: %r' % (tx_sms, e)))
        else:
            tx_sms.callback(status('OK', '%s: sms sent' % tx_sms))

    @cached_property(ttl=30)
    def _is_network_available(self):
        try:
            sig_strength = self.modem.waitForNetworkCoverage(timeout=3)
            ret = sig_strength > 0
        except (TimeoutException, InvalidStateException):
            ret = False
        except Exception:
            ret = False
        _log = logger.info if ret else logger.error
        _log('network check: available=%s', ret)
        return ret

    def _process_stored_sms(self):