#sms #network-protocols #gsm #smpp
#sms #сетевые протоколы #gsm #smpp
Вопрос:
В настоящее время я пытаюсь выяснить, как классы sms правильно представлены в SMPP. Однако к настоящему времени я полностью запутался в стандарте и его документации.
В обычном sms мы имеем
- Class0: флэш-sms, которые отображаются на дисплее
- Класс 1: обычное SMS, которое должно храниться на sim-карте или внутри устройства
Просматривая спецификацию SMPP, я сначала нахожу параметр data_coding
в submit_sm
операции, который используется для настройки DCS, отправляемых через MAP. Насколько я понимаю, если мы хотим явно задать класс сообщений, нам нужно установить первые четыре бита этого параметра равными единицам, затем два бита, указывающие кодировку, а затем еще два бита, указывающие класс сообщений. Итак, для Class1 Sms мы бы установили 1111xx01
. Правильно ли это до сих пор?
Если мы попытаемся установить этот DCS, однако в настоящее время мы также устанавливаем кодировку данных на «8-битные данные». Кажется, несколько телефонов не в состоянии это понять. Указано ли это где-либо, и можем ли мы просто изменить это, или требуется специальное кодирование при отправке других классов сообщений.
Еще больше путаницы возникает, когда мы пытаемся использовать рекомендуемый SMPPv3.4 способ настройки класса сообщений. Начиная с 3.4, в submit_sm
операции есть необязательный параметр, называемый dest_addr_subunit
. В соответствии со стандартом этот параметр должен быть установлен в 0 для неизвестного, 1 для MS-дисплея, 2 для мобильного оборудования и т.д. Если я посмотрю на это, кажется, что параметры сдвинуты на единицу по сравнению с классами сообщений GSM. Class0 кодируется как 1, Class1 кодируется как 2 и так далее. Это правильно или за этим стоит какое-то более сложное отображение?
Кроме того, если мы установим dest_addr_subunit
, нужно ли нам также устанавливать DCS, или мы можем просто оставить этот параметр со значением по умолчанию?
Ответ №1:
Я рекомендую прочитать спецификацию 3GPP TS 23.038 с подробным описанием DCS (схемы кодирования данных).
В случае, если биты DCS равны 7654 00xx
, вы должны проверить DCS на значение бита 4.
- бит 4 == 0 — нет класса сообщения для этого сообщения (биты 1 и 0 зарезервированы)
- бит 4 == 1 — биты 1 и 0 содержат класс сообщения
Таким образом, вы должны установить data_coding
параметр SMPP в соответствии со спецификацией 3GPP TS 23.038 для message_class
правильной обработки.
По умолчанию SMS-сообщение GSM не имеет message_class, и это не то же самое, что message_class = 1.
Комментарии:
1. Итак, если я правильно понимаю этот документ, основная путаница возникает из-за того факта, что класс сообщения может быть обозначен схемой,
1111xxyy
гдеxx
— кодирование иyy
— класс сообщения, или схемой,00c10xyy
гдеc
указывается сжатие,x
указывает кодирование иyy
указывает класс сообщения. Что меня здесь смущает, так это то, что оба метода кажутся абсолютно одинаковыми, и, похоже, в нашем случае один работает не со всеми устройствами.2. Обычно я использую следующее представление:
0001ccmm
гдеcc
— кодировка (00
для GSM по умолчанию) иmm
— представление message_class (00
для flash SMS), поэтому примером будет00010000
для 7-битного flash SMS. Вариант11110cmm
возможен, но я никогда не видел, чтобы он использовался на практике.3. Я протестировал,
0001cc00
и это не работает для сообщений класса 0 («флэш» сообщения) на Android;1111cc00
работает так, как ожидалось.