def _rx_sms(self, sms): if isinstance(sms, ReceivedSms): try: number = convert_to_international(sms.number, sms.smsc) except Exception, e: logger.error('error while converting to int: %s', e) number = sms.number sms_dict = dict(sender=number, recipient=self.sim_config.phone_number, text=sms.text, tstamp=sms.time, url=self.sim_config.url) if sms.udh is not None: concats = [i for i in sms.udh if isinstance(i, Concatenation)] assert len(concats) <= 1 if concats: sms_dict['concat'] = concats[0] logger.info('concat sms received - ' 'sender=%s recipient=%s part=%d/%d', sms_dict['sender'], sms_dict['recipient'], sms_dict['concat'].number, sms_dict['concat'].parts) concat_sms_dict = self.concat_pool.merge(sms_dict) if concat_sms_dict: http_client_manager.enqueue(concat_sms_dict) return http_client_manager.enqueue(sms_dict)
def _work(self): while True: try: self._stop_queue.get(timeout=10) break except Empty: pass now = time.time() with self.lock: for k, v in self.pool.items(): sms_dicts, tstamp = v if now - tstamp > self.CONCAT_TIMEOUT: del self.pool[k] sms_dict = self._process_concat_msg(sms_dicts) logger.warn('concat sms timeout - ' 'sender=%s recipient=%s', sms_dict['sender'], sms_dict['recipient']) http_client_manager.enqueue(sms_dict)