Beispiel #1
0
 def handle_deliver_sm(self, pdu):
     if pdu['header']['command_status'] == 'ESME_ROK':
         sequence_number = pdu['header']['sequence_number']
         message_id = str(uuid.uuid4())
         pdu_resp = DeliverSMResp(sequence_number, **self.defaults)
         self.send_pdu(pdu_resp)
         pdu_params = pdu['body']['mandatory_parameters']
         delivery_report = self.config.delivery_report_re.search(
             pdu_params['short_message'] or '')
         if delivery_report:
             self.esme_callbacks.delivery_report(
                 destination_addr=pdu_params['destination_addr'],
                 source_addr=pdu_params['source_addr'],
                 delivery_report=delivery_report.groupdict(),
             )
         elif detect_multipart(pdu):
             redis_key = "%s#multi_%s" % (
                 self.r_prefix, multipart_key(detect_multipart(pdu)))
             log.msg("Redis multipart key: %s" % (redis_key))
             value = json.loads(self.r_server.get(redis_key) or 'null')
             log.msg("Retrieved value: %s" % (repr(value)))
             multi = MultipartMessage(value)
             multi.add_pdu(pdu)
             completed = multi.get_completed()
             if completed:
                 self.r_server.delete(redis_key)
                 log.msg("Reassembled Message: %s" % (completed['message']))
                 # and we can finally pass the whole message on
                 self.esme_callbacks.deliver_sm(
                     destination_addr=completed['to_msisdn'],
                     source_addr=completed['from_msisdn'],
                     short_message=completed['message'],
                     message_id=message_id,
                 )
             else:
                 self.r_server.set(redis_key, json.dumps(multi.get_array()))
         else:
             decoded_msg = self._decode_message(pdu_params['short_message'],
                                                pdu_params['data_coding'])
             self.esme_callbacks.deliver_sm(
                 destination_addr=pdu_params['destination_addr'],
                 source_addr=pdu_params['source_addr'],
                 short_message=decoded_msg,
                 message_id=message_id,
             )
Beispiel #2
0
 def load_multipart_message(self, redis_key):
     value = yield self.redis.get(redis_key)
     value = json.loads(value) if value else {}
     self.log.debug("Retrieved value: %s" % (repr(value)))
     returnValue(MultipartMessage(self._unhex_from_redis(value)))