def _get_phone_pdu(self): number = clean_number(self.number) ptype = 0x81 if number[0] == '+': number = number[1:] ptype = 0x91 pl = len(number) if len(number) % 2: number += 'F' ps = chr(ptype) for n in range(0, len(number), 2): num = number[n + 1] + number[n] ps += chr(int(num, 16)) ps = chr(pl) + ps return encode_str(ps)
def _get_sms_submit_pdu(self, udh=False): sms_submit = 0x1 if self.validity is None: # handle no validity pass elif isinstance(self.validity, datetime): # handle absolute validity sms_submit |= 0x18 elif isinstance(self.validity, timedelta): # handle relative validity sms_submit |= 0x10 if self.request_status: sms_submit |= 0x20 if udh: sms_submit |= 0x40 return encode_str(chr(sms_submit))
def _get_smsc_pdu(self): if not self.csca or not self.csca.strip(): return "00" number = clean_number(self.csca) ptype = 0x81 # set to unknown number by default if number[0] == '+': number = number[1:] ptype = 0x91 if len(number) % 2: number += 'F' ps = chr(ptype) for n in range(0, len(number), 2): num = number[n + 1] + number[n] ps += chr(int(num, 16)) pl = len(ps) ps = chr(pl) + ps return encode_str(ps)
def _get_msg_pdu(self): # Data coding scheme if self.fmt is None: if is_gsm_text(self.text): self.fmt = 0x00 else: self.fmt = 0x08 self.dcs = self.fmt if self.klass is not None: if self.klass == 0: self.dcs |= 0x10 elif self.klass == 1: self.dcs |= 0x11 elif self.klass == 2: self.dcs |= 0x12 elif self.klass == 3: self.dcs |= 0x13 dcs_pdu = encode_str(chr(self.dcs)) # Validity period msgvp_pdu = "" if self.validity is None: # handle no validity pass elif isinstance(self.validity, timedelta): # handle relative msgvp = timedelta_to_relative_validity(self.validity) msgvp_pdu = encode_str(chr(msgvp)) elif isinstance(self.validity, datetime): # handle absolute msgvp = datetime_to_absolute_validity(self.validity) msgvp_pdu = ''.join(map(encode_str, map(chr, msgvp))) # UDL + UD message_pdu = "" if self.fmt == 0x00: self.text_gsm = self.text.encode("gsm0338") if len(self.text_gsm) <= consts.SEVENBIT_SIZE: message_pdu = [pack_8bits_to_7bits(self.text_gsm)] else: message_pdu = self._split_sms_message(self.text_gsm) elif self.fmt == 0x04: if len(self.text) <= consts.EIGHTBIT_SIZE: message_pdu = [pack_8bits_to_8bit(self.text)] else: message_pdu = self._split_sms_message(self.text) elif self.fmt == 0x08: if len(self.text) <= consts.UCS2_SIZE: message_pdu = [pack_8bits_to_ucs2(self.text)] else: message_pdu = self._split_sms_message(self.text) else: raise ValueError("Unknown data coding scheme: %d" % self.fmt) ret = [] for msg in message_pdu: ret.append(dcs_pdu + msgvp_pdu + msg) return ret
def _get_tppid_pdu(self): return encode_str(chr(self.pid))
def _get_tpmessref_pdu(self): if self.ref is None: self.ref = self._get_rand_id() self.ref &= 0xFF return encode_str(chr(self.ref))