From 28a71af65534f7d51f1466a7e39ac5344ea67843 Mon Sep 17 00:00:00 2001 From: Daniyar <31.10.93@bk.ru> Date: Fri, 12 Oct 2018 09:55:57 +0600 Subject: [PATCH] Added ucs2 compatible parts generator --- smpplib/gsm.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/smpplib/gsm.py b/smpplib/gsm.py index 8a78e7b..89459aa 100644 --- a/smpplib/gsm.py +++ b/smpplib/gsm.py @@ -77,3 +77,35 @@ def make_parts_encoded(encoded_text, part_size): def split_sequence(sequence, part_size): """Splits the sequence into equal parts""" return [sequence[i:i + part_size] for i in range(0, len(sequence), part_size)] + +def make_ucs2_compatible_parts(text): + """ + This method will make correct partition for latin and cyrillic letters + :param text: Text to partition + :return: parts, encoding, esm_class + """ + text_to_encode = text + parts = [] + + part = b'' + for letter in text_to_encode: + encoded_letter = letter.encode('utf-16-be') + if len(part) + len(encoded_letter) < consts.UCS2_MP_SIZE: + part += encoded_letter + else: + parts.append(part) + part = encoded_letter + parts.append(part) + + esm_class = consts.SMPP_MSGTYPE_DEFAULT + if len(parts) > 1: + esm_class = consts.SMPP_GSMFEAT_UDHI + uid = six.int2byte(random.randint(0, 255)) + parts = [b''.join((b'\x05\x00\x03', + uid, + six.int2byte(len(parts)), + six.int2byte(i + 1), + current_part)) + for i, current_part in enumerate(parts)] + + return parts, consts.SMPP_ENCODING_ISO10646, esm_class