Как правильно представить класс сообщений в SMPP

#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 работает так, как ожидалось.