def mgsms_get_pdus(self, properties): p = PDU() number = None if not properties.has_key( "number") else properties["number"] text = None if not properties.has_key("text") else properties["text"] smsc = "" if not properties.has_key("smsc") else properties["smsc"] validity = "" if not properties.has_key( "validity") else properties["validity"] sms_class = "" if not properties.has_key( "class") else properties["class"] status_request = False if not properties.has_key( "status_request") else properties["status_request"] if number == None or text == None: return [] return p.encode_pdu(number, text, csca=smsc, request_status=status_request)
def function(task): self.io.com.send_query({ "type": "simple", "cmd": "AT+CMGF=0", "task": task }) raw_res = self.io.com.send_query({ "cmd": 'AT+CMGL=%s' % status, "task": task }) response = [] p = PDU() if raw_res[2] == "OK": for i in range(0, len(raw_res[1]), 2): if raw_res[1][i].startswith("+CMGL:"): pattern = re.compile( "\+CMGL:\ +(?P<index>\d*),(?P<status>\d*),") matched_res = pattern.match(raw_res[1][i]) try: sender, datestr, msg, csca, ref, cnt, seq, fmt, flash_sms = p.decode_pdu( raw_res[1][i + 1]) msg = { "number": sender, "text": msg, "smsc": csca, "date": datestr, "reference": int(ref), "concat_total": int(cnt), "concat_number": int(seq), "index": int(matched_res.group("index")), "status": int(matched_res.group("status")), "notification": flash_sms } if 'application/vnd.wap.mms-message' in msg[ "text"]: continue if msg["concat_total"] == 0: msg["completed"] = True else: msg["completed"] = False response.append(msg) except: pass #Check completed concatenated msgs refs = {} for m in response: if m["concat_total"] > 0: if not refs.has_key(m["reference"]): refs[m["reference"]] = [] refs[m["reference"]].append(m) for r in refs.keys(): if len(refs[r]) == refs[r][0]["concat_total"]: for m in response: if m["reference"] == r: m["completed"] = True return response