Monday, July 9, 2007
README
Читать следует "с конца-в-начало", чтобы слвсем "по-блоггерски" получилось.
Что сказать... I got a fun!... чего и Вам желаю. Будут комментарии -- не стесняйтесь!
Выше, дальше, сильнее.
Это все про SMS?
Предыдущую статью следует считать некоей точкой в повествовании об SMS. Была еще мысль сделать -- небольшой на пару статей -- обзор остальных протоколов, но потом я от нее отказался по двум причинам. Во-первых, такой обзор получиться бы мог весьма скомканным. А во-вторых, работа с различными протоколами, _по_сути_, одинакова (бес, как известно, в деталях :). Думается, что ознакомившись с предыдущими статьями, читатель сможет построить клиента, способного отсылать и принимать _текстовые_ короткие сообщения по спецификациям любого протокола. Что же дальше? Хороший вопрос, и не менее хороший ответ: а, собственно, дальше и начнется рассмотрение технологий используемых в _современных_ сервисах. Я имею ввиду технологии EMS/MMS, принимающие статус отраслевых стандартов, и корпоративные технологии доставки rich media контента на мобильные устройства, то есть то что относится к так называемым сетям 2.5G. Но сначала, для того, чтобы "закруглить тему" поговорим еще немного о тексте.
Кодировка.
Часто (точнее -- всегда) недостаточно передавать только латинский текст, да и передача собственно "иностранных" сообщений, содержащих специальные символы требует некоторых дополнительных усилий. Таким образом вполне закономерно теперь поговорить о кодировке текста в сообщениях.
Видимо не секрет для читателей, уже разбиравшихся с протоколами SMS, что в мобильной сети сообщения большей частью передаются в так называемой кодировке GSM. Это семибитная кодировка -- каждый передаваемый символ предатавляется 7-ю старшими битами октета, младший бит относится уже к следующему символу. В следующем октете "отсекаются" уже два бита, и так далее, до тех пор, пока на 8-м октете символы опять не выровняются на границе. Не Бог весть какое сжатие, но позволяет сэкономить каждый восьмой октет, или, другими словами, впихнуть в 140 октетов пресловутые 160 символов. Приведем таблицу кодировки GSM (в сравнении с IA5):

Кодировка GSM.
Выбор кодировки осуществляется полем data_coding в submit_sm, о котором писано уже парой статей выше. Таким образом, при выборе кодировки 0x0, (SMSC default alphabet) можно надеятся, что центр воспримет текст сообщения именно в стандартной кодировке GSM.
Вообще говоря кодировке сообщений посвящен документ GSM 03.38, в котором возможные значания параметра data_coding (DCS -- data coding scheme) рассмотрены весьма подробно. Посмотрим и мы на них, так как этим параметром регулируется еще одна вещь: так называемый класс сообщения.
Класс сообщения.
Класс сообщения является своего рода "указанием" для принимающей стороны (SME, или мобильного терминала), как с этим сообщением поступить (в основном это, разумеется, относится к Mobile Terminated -- MT -- "предназначенным для мобильного устройства" сообщениям). Приняв сообщение, устройство может поступить с ним следующим образом:
- Немедленно отобразить. (Class 0)
- Записать в память устройства. (Class 1)
- Записать в память SIM-карты. (Class 2)
- Передать на терминальное устройство. (Class 3)
Сообщения класса 3 описаны в GSM TS 07.05 и здесь мы не будем на них останавливаться. С остальными классами, надеюсь, все ясно без комментариев. Можно только добавить, что сообщения 0-го класса называются также "Flash messages" и могут быть потеряны сразу же после прочтения.
Спецификация DCS.
А теперь приведем, наконец, описание DCS из GSM 03.38.
| Биты 7..4 (Coding Group Bits) | Значение битов 3..0 | ||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 00xx | Если бит 5 не установлен, то текст считается не сжатым, в противном случае используется стандартное сжатие GSM (в GSM 03.38 не описано). Если бит 4 не установлен, считается, что биты 1 и 0 не несут смысловой нагрузки и зарезервированы, в противном случае биты 1 и 0 указывают на класс сообщения:
Биты 3 и 2 указывают на алфавит:
Частный случай DCS = 0x0 -- 0000 0000(bin) -- означает Default alphabet с неуказанным классом. | ||||||||||||||||||||||||||||||
| 0100..1011 | Зарезервировано | ||||||||||||||||||||||||||||||
| 1100,1101,1110 | Эти группы используются, когда, наряду с передачей текста, пользователя необходимо уведомить о том, что на его адрес получены сообщения других типов (Message Waiting Indication group), напрмер сообщения Voice Mail, FAX, E-Mail или сообщение другого типа. Аппарат может уведомить пользователя с помощью иконки на экране (индикатора) или другим способом. При этом:
Бит 3 при этом может принимать значения:
Биты 1 и 0 указывают на тип ожидающего сообщения:
| ||||||||||||||||||||||||||||||
| 1111 | Бит 3 не используется и устанавливается в 0. Бит 2 указывает кодировку и может принимать значения:
Биты 1 и 0 указывают на класс сообщения.
|
Принимая во внимание вышесказанное приведем примеры: для передачи Flash сообщения, содержащего русское "Привет от Иванова!" нужно использовать DCS = 0x18, а для передачи двоичных данных (напрмер -- тех же картинок и мелодий) используется DCS=0xF5.
Заключение.
Вот мы и подошли вплотную к передаче rich media. Следующая статья будет посвящена передаче мелодий, логотипов, графики (точнее, с нее начнется обсуждение этих вопросов). Это еще не совсем 2.5G, но уже и не просто текст. Оставайтесь с нами!
SMS-приложение. Часть 5. "Разбор полетов"
Вопросы наших читателей.
Меня вот спросили: "А почему это Вы себя во множественном числе именуете?". Отвечаю: это не то что вы подумали (хотя, может и стоит у психоаналитика проконсультироваться на предмет мании величия ;), а издержки опыта "научнописания". В статьях считается хорошим тоном писать во множественном числе, имея ввиду коллектив авторов. Так и тут, предполагалось, что данный цикл я буду вести не в одиночку, посему и задан такой "околонаучный" тон. Однако так выходит, что заниматься этим мне приходится в "единственном числе", посему, принимая во внимание данное замечание, в дальнейшем обязуюсь повествовать от собственного лица (другого не имею :) пока-таки не появятся помощники.
Что же такое ESME?
В данной статье мы (с Вами :) побеседуем о том, как на самом деле устроены эти так называемые ESME и для чего, собственно, они предназначены. Вообще говоря, это нужно было бы сказать с самого начала, но я решил, что сначала неплохо дать читателю (т. е. Вам) присмотреться, а уж потом "делать строгое лицо". Итак, казалось бы чего проще -- подцепил к COM-порту радиопад, типа SIEMENS, и вещай себе прямо в эфир (по сути, такая конструкция эквивалентна "домашнему" сервис центру). В некоторых случаях подобный "агрегат" представляется приемлемой альтернативой, пока речь не заходит об интенсивности траффика. Именно при построении "профессиональных" сервисов, рассчитанных на охват большой аудитории, ESME и будет являться компонентой сервисных систем.
Так что же такое ESME? Для того, чтобы строго ответить на этот вопрос придется обратиться к известной OSI/ISO модели (рис. 1).

Рис. 1. Модель OSI
Ниже приведена таблица, показывающая, как на ней "размещается" ESME. Для примера приведены стэки протоколов для Microsoft Networking и регулярного TCP/IP приложения, например почтового клиента. Мы, по-прежнему, обсуждаем ESME, связывающееся с сервис центром по протоколу TCP/IP.
| OSI Layer | Microsoft Networking | TCP/IP Internet | ESME | OSI Protocols |
| Application Layer 7 | Application Programs and Protocols for file transfer, electronic mail, DB connectivity, etc. | |||
| Presentation Layer 6 | Server Message Block (SMB) | (Telnet, FTP, SMTP, etc.) | Protocol packet composing/parsing module (for example SMPP) | ISO 8823 |
| Session Layer 5 | Network Basic Input/Output System (NetBIOS) | Session management module, internal buffers management module | ISO 8327 | |
| Transport Layer 4 | Network Basic Extended User Interface (NetBEUI) | Transmission Control Protocol (TCP), Unacknowledged Datagram Protocol (UDP) | Transmission Control Protocol (TCP), Unacknowledged Datagram Protocol (UDP) | ISO 8073 TP0-4 |
| Network Layer 3 | Internet Protocol (IP) | Internet Protocol (IP) | ISO 8473 (CLNP) | |
| Data Link Layer 2 | Network Interface Cards: Ethernet, Token-Ring, ARCNET, StarLAN, LocalTalk, FDDI, ATM, etc. NIC Drivers: Open Datalink Interface (ODI), Network Independent Interface Specification (NDIS) | |||
| Physical Layer 1 | Transmission Media: Twisted Pair, Coax, Fiber Optic, Wireless Media, etc. | |||
Теперь видно, что собственно ESME занимает то же положение на стэке, что и регулярный TCP/IP клиент. Правда, если ESME не оформлено в виде библиотеки, оно может простираться и на самый верхний -- седьмой -- уровень. Таким образом, самым верхним подлежащим уровнем для ESME будет реализация TCP/IP стэка операционной системы, что мы собственно и видели. К слову, сама программа (библиотека) может быть и не так жестко разбита на "слои", но здесь я явно их выделил. Давайте обсудим эти уровни по отдельности.
- Session layer предназначен для решения задач, не относящихся собственно к передаче данных. В этот круг задач могут входить аутентификация сторон, восстановление физических или логических соединений, организация двунаправленных потоков (bidirectional traffic), token management, синхронизация и пр.
- Presentation layer отвечает за преобразование данных.
Общая структура dumb_esme представлена на картинке:
Перейдем к обсуждению назначения классов, вошедших в состав приложения опираясь на уровни модели OSI.
Session layer.
В нашем простом примере этот уровень не представлен со всей фундаментальной четкостью, часть функций (в т. ч. решение о закрытии соединений) делегирована основной функции (main), а восстановление соединений и поддержание внутренних циклических (FIFO) буферов и вовсе опущено. В реальных проектах приходится организовывать такие "очереди октетов" по той причине, что (в отличие от X.25) TCP/IP не гарантирует что одним вызовом recv мы получим ровно один отправленный протокольный пакет и целиком. Типичная ситуация, проявляющаяся в частности при больших загрузках: за один вызов recv приходит два целых пакета и "кусок" третьего. Разумеется, в связи с гарантированной доставкой данных по TCP-каналу, недостающий "кусок" будет получен следующим вызовом, но, возможно, еще с чем-то "на хвосте". Ситуацию, как я уже сказал, решают созданием FIFO буфера: модуль, непосредственно оперирующий сокетом, пишет в "хвост" такого буфера, а вышестоящий модуль, "откусывает помаленьку" с "головы". Кроме того, в протоколе SMPP, в отличие, скажем, от EMI или SIMD, не предусмотрены маркеры начала и конца пакета, так что при возникновении "мусора" в канале "ловля" начала следующего неиспорченного пакета превращается в серьезную (вообще говоря -- неразрешимую) проблему и проще переустановить соединение, сбросив буфер. Вообще говоря, достаточно в заголовке пакета указать неверную длину, чтобы вывести канал из строя.
В нашем простом примере проблема частично решена путем обработки входящих пакетов "в два удара": сначала обрабатывается заголовок пакета (длина которого строго фиксирована), а потом принимается из канала ровно столько октетов, сколько указано в заголовке. К слову, и при работе со внутренним буфером также приходится сначала обрабатывать заголовок, ибо именно в нем указан тип команды. Возвращаясь к модели OSI отметим, что все же многие функции обсуждаемого уровня инкапсулированы в нашем примере в двух классах.
class connector
Это простая классовая оболочка вокруг системной реализации протокола TCP/IP, именно он оперирует непосредственно с сокетом. В реальном проекте, скорее всего, здесь был бы реализован буфер FIFO. Интересной задачей могла бы являться реализация данного класса как наследника basic_iostream из стандартной библиотеки, что нибудь наподобие sockstream...
class smpp_connector
Наследник класса connector, выполняющий большинство функций, характерных для Session Layer, как то: аутентификацию (посредством SMPP bind), разбор и проверку заголовков пакетов, поддерживает внутреннюю нумерацию команд SMPP. Обращаясь к реальным проектам, следует сказать, что этот класс -- самое место для управления восстановлением соединения для ESME работающих в непрерывном (ждущем) режиме. Стоит также заметить, что есть все основания задуматься о вынесении функциональности данного класса в отдельный поток исполнения (thread).
Presentation layer.
Представлен двумя классами transmitter и receiver. Как явствует из названия, эти классы (будучи оба наследниками класса smpp_connector) инкапсулируют особенности сессий в состояниях BOUND_TX и BOUND_RX, занимаются распаковкой и упаковкой пакетов (я говорю пакеты, подразумевая, конечно же PDU) и переправляют их "вверх" приложению и "вниз" -- в сокет. Интерфейс с приложением поддерживается с помощью двух структур данных: message, являющейся абстракцией как для входящего, так и для исходящего сообщений, и status_info, отображающей факт изменения состояния сообщения (принято/не принято, доведено/не доведено).
Заключение.
Вот, собственно, и вся реализация протокола. Остальные классы, вошедшие в проект являются вспомогательными, их суть видна из названий (и откомментирована в коде).
Надеюсь, данным циклом статей, не затрагивающим, как я уже сказал, все "интересные" вопросы мне удалось показать технику написания такого класса приложений. Я старался обсудить наиболее общие вопросы, не привязываясь к определенной платформе и не "отступая далеко" от реальных проектов, в создании которых мне удалось принять участие (один из таких, кстати, оправдывая описанный подход, в настоящее время трудится в непрерывном режиме, пропуская в пиках до 5 млн. сообщений в сутки).
Что же "осталось за скобками"? Да довольно многое. Мы никак не обсудили передачу двоичных данных (графики, мелодий), сосредоточившись на SMPP, оставили без внмания другие протоколы, не коснулись интересных особенностей программирования под конкретные OS. Честно говоря, я не могу сейчас сказать, чем будет продолжен этот цикл статей, посему, это отличный повод для аудитории сделать заявки. Надеюсь на вашу активность.
SMS-приложение. Часть 4. Но не последняя...
И ни в чем себе не отказывать...
Наконец-то (с заметным перерывом), нам удалось выпустить следующую статью цикла. Собственно, как мы и обещали, она содержит код простого, но работающего SMS приложения (для нетерпеливых: брать тут (см. заголовок ;) ).
Некоторые детали.
Собственно, задержка обусловлена еще и тем, что мы достаточно долго решали, а насколько простым должно быть это приложение. С одной стороны, это не продукт, а нечто, что можно написать и отладить за пару дней и за столько же "разобрать" и осознать. Но, с другой, хотелось показать основные "подводные камни", с которыми приходится сталкиваться в реальных проектах. Как кажется, разумный компромисс найти удалось.
Что с этим делать.
Архив (в формате tar) содержит исходные файлы на C++ (содержащие, надеемся, достаточные комментарии); файлы окружения (.dsw) и проекта (.dsp) для MS VC 6 -- в каталоге MSVC6. Под *NIX (тестировался на Linux RH 6.2, если кто возьмет на себя труд собрать и потестировать на другой *NIX платформе -- будем благодарны за комментарии; фактически, должно работать на любой... но, как обычно -- as is) же проект собирается обычным образом:
Инсталлировать не надо -- надо положить рядышком конфигурационный файл. Вот пример такого файла:
$./configure
$make
# This is a dumb_esme configuration file
# Host and port
host=192.168.0.5
port=8200
# Bound parameters
system_id=System ID
password=the password
system_type=Dumb ESME
# Lifetime in seconds
lifetime=60
# Time delay for select operation seconds...
tv_sec=0
# ...and microseconds
tv_usec=100000
# i. e. 0.1 sec
Где брать эмулятор SMSC.
В googl'е наберите 'SMSC emulator'. Мы же тестировали на "внутреннем" эмуляторе и на реальном SMSC (поверьте на слово -- отправляет и принимает).
Как это работает.
Само приложение совсем простое: будучи запущенным, оно "висит" указанное количество времени (параметр "lifetime" в конфигурационном файле), открывая два соединения к центру (transmitter и receiver). Receiver принимает все, что успевает за это время (не забывая отвечать ACK-ами) и "складывает" принятое в файл с именем "inbox", а transmitter отправляет все, что смог прочитать из файла "outbox". Вот пример формата файла "outbox":
1234 1 1 9672345 1 1 9872345 Message text
- Первая группа цифр -- идентификатор сообщения, присваиваемый пользователем, ни для кого, кроме него он значения не имеет (и никуда не передается), но служит для связи ответов SMSC с исходными сообщениями.
- Далее, через пробел, TON, NPI и адрес оригинатора (т. к. ESME, в принципе, может обслуживать как отдельный номер, так и диапазон, или набор), т. е. адрес ESME.
- То же для получателя.
- Все остальное до конца строки -- текст сообщения. Проверка на длину, кстати, для простоты, опущена (как и многие другие проверки, в т. ч. на длину адресов).
После обработки "outbox" переименовывается. Далее, по приходу ACK'а заносится запись в файл "sent" (в случае, если код ACK'а рапортует положительный статус) или, в обратном случае, в файл "err". В файл "sent" помешается строчка, содержащая упомянутый пользовательский идентификатор и идентификатор, присваиваемый центром. В файл "err" -- только пользовательский. По приходу же delivery receipt'а (status report'а) в файл "deliv" помещается строчка с идентификатором сообщения, выданный центром, если, опять же, в рапорте сообщается об успешном доведении, и, в обратном случае, такая же запись помещается в файл "undeliv".
Такой механизм работы позволяет связать исходное сообщение с ответами центра. Действительно, не сложно написать приложение (а, фактически, с этим может справиться несложный скрипт) для анализа полученных файлов. На практике же, обычно "входом" и "выходом" часто является некая база данных, но механизм связывания остается примерно тем же. Это то, что мы между собой называем "чехордой идентификаторов" :). Но подробнее об этом в следующей статье.
Заключение.
Подробный "разбор полетов" будет в следующей статье. А пока можно просто проанализировать код и, кому удастся, потестировать приложение. Мы, к слову, ввиду недостатка времени, тестировали не очень интенсивно, так что bug-report'ы направляйте в форум ;). Тем не менее, на стенде этот простенький (dumb!) SMS client показал устойчивую работу при нагрузках порядка 100 mess/sec в обоих каналах, что явилось некоторой неожиданностью. Для тех же, кто дочитал до конца, еще раз ссылка:Dowload SMSC client sources (tarball ~45 Kb )
dumb_esme
когда компьютеры были большими, а диски маленькими, придуман был формат
UUE. Внизу -- примерчик. Для распаковки просто скопируйте все, что между линиями,
в буфер обмена и вставьте в текстовый файл dumb_esme-0.1.tar.gz.uue
Под Windows файл с расширением .uue открывают WinRAR, WinZip, 7-Zip etc.
Под *NIX следует выполнить:
$ uudecode -o dumb_esme-0.1.tar.gz dumb_esme-0.1.tar.gz.uue
-------------------------------------------------------------------------------------
begin 600 dumb_esme-0.1.tar.gz
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
M4"HFK(<M8(VK"T;K0."QN1OBH`9KQ]RX^[`&E^4)9'',VD_X"JT?#?OC0
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
MHS]J0IQIV5A]N`P)CV!@S!AM7YCVY9M"66<6E#\-6+-6'JBCFA"N"9'@`
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
M]$-4)C#RTQ#%?FCD/T[EV4R]?CLM$Q)01NU%HDBEY!-`*US:)IK,Y=963
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
IV6_VF_UFO]EO]IO]9K_9;_:;_6:_V6_VF_UFO]G/^?U_@$8")0!(`P``
`
end
-------------------------------------------------------------------------------------
Sunday, July 8, 2007
SMS-приложение. Часть 3
Отправка/прием сообщений.
Мы продолжаем обсуждать команды протокола. Нам осталось рассмотреть две самые интересные команды, с помощью которых, собственно, и осуществляется прием/передача сообщений. Это команды submit_sm и deliver_sm. Первая служит для отправки SMS от ESME в PLMN, а вторая -- для приема SMS из PLMN.
submit_sm. command_id = 0x04
Тело пакета submit_sm состоит из следующих полей:
| Field name | Size (octets) | Type | Description |
|---|---|---|---|
| service_type | Var. max 6 | C-Octet String | Используется для доступа к специальным функциям SMSC. Может принимать значения:
Если не используется (в большинстве случаев), выставляется в NULL. |
| source_address_ton | 1 | Integer | Тип номера источника (см. пред. статью) |
| source_address_npi | 1 | Integer | Индикатор плана номеров источника (см. пред. статью) |
| source_address | 20 | C-Octet String | Адрес источника, если неизвестен выставляется в NULL |
| dest_address_ton | 1 | Integer | Тип номера получателя (см. пред. статью) |
| dest_address_npi | 1 | Integer | Индикатор плана номеров получателя (см. пред. статью) |
| dest_address | 20 | C-Octet String | Адрес получателя. Для mobile-terminated (т. е. предназначенных для передачи непостредственно на сотовый телефон) сообщений это в точности номер телефона. |
| esm_class | 1 | Integer | Указывает на тип сообщешия и его режим (mode). Может принимать следующие значения: Bits 7 6 5 4 3 2 1 0 Meaning Messaging Mode (bits 1-0) x x x x x x 0 0 Default SMSC Mode (e.g. Store and Forward) x x x x x x 0 1 Datagram mode x x x x x x 1 0 Forward (i.e. Transaction) mode x x x x x x 1 1 Store and Forward mode (use to select Store and Forward mode if Default SMSC Mode is non Store and Forward) Message Type (bits 5-2) x x 0 0 0 0 x x Default message Type (i.e. normal message) x x 0 0 1 0 x x Short Message contains ESME Delivery Acknowledgement x x 0 1 0 0 x x Short Message contains ESME Manual/User Acknowledgement GSM Network Specific Features (bits 7-6) 0 0 x x x x x x No specific features selected 0 1 x x x x x x UDHI Indicator (only relevant for MT short messages) 1 0 x x x x x x Set Reply Path (only relevant for GSM network) 1 1 x x x x x x Set UDHI and Reply Path (only relevant for GSM network) При работе в т. н. Store and Forward mode и отказе от использования дополнительных свойств (что верно в большинстве случаев) это поле будет содержать 0. |
| protocol_id | 1 | Integer | Идентификатор протокола (специфично для сети). В стандарте GSM этот параметр регулируется документом GSM 03.40 (т. н. "Библией SMS") и используется для указания на низлежащий протокол связи ESME с SMSC. В простейшем случае -- 0. |
| priority_flag | 1 | Integer | При передаче по GSM сетям: 0 -- приоритет отсутствует, 1-3 -- приоритет (равноправны). >3 -- не используется |
| schedule_delivery_time | 1 или 17 | C-Octet String | Время отложенного доведения (в формате SMPP -- см. ниже) или 0 для немедленного доведения. |
| validity_period | 1 или 17 | C-Octet String | Срок годности (в формате SMPP -- см. ниже) или 0 для срока годности, установленного SMSC по умолчанию |
| registered_delivery | 1 | Integer | Запрос на подтверждение доставки от SMSC (delivery_receipt). 1 -- требуется, 0 -- не требуется |
| replace_if_present_flag | 1 | Integer | Флаг, указывающий, должно ли сообщение заместить уже имеющееся с совпадающими полями source address, destination address и service_type |
| data_coding | 1 | Integer | Указывает на то, каким образом представлены данные. Может принимать значения: Bits 7 6 5 4 3 2 1 0 Meaning 0 0 0 0 0 0 0 0 SMSC Default Alphabet 0 0 0 0 0 0 0 1 IA5 (CCITT T.50)/ASCII (ANSI X3.4) (b) 0 0 0 0 0 0 1 0 Octet unspecified (8-bit binary) (b) 0 0 0 0 0 0 1 1 Latin 1 (ISO-8859-1) (b) 0 0 0 0 0 1 0 0 Octet unspecified (8-bit binary) (a) 0 0 0 0 0 1 0 1 JIS (X 0208-1990) (b) 0 0 0 0 0 1 1 0 Cyrllic (ISO-8859-5) (b) 0 0 0 0 0 1 1 1 Latin/Hebrew (ISO-8859-8) (b) 0 0 0 0 1 0 0 0 UCS2 (ISO/IEC-10646) (a) 0 0 0 0 1 0 0 1 Pictogram Encoding (b) 0 0 0 0 1 0 1 0 ISO-2022-JP (Music Codes) (b) 0 0 0 0 1 0 1 1 reserved 0 0 0 0 1 1 0 0 reserved 0 0 0 0 1 1 0 1 Extended Kanji JIS(X 0212-1990) (b) 0 0 0 0 1 1 1 0 KS C 5601 (b) 0 0 0 0 1 1 1 1 reserved : 1 0 1 1 1 1 1 1 reserved 1 1 0 0 x x x x GSM MWI control - see [GSM 03.38] (d) 1 1 0 1 x x x x GSM MWI control - see [GSM 03.38] (d) 1 1 1 0 x x x x reserved 1 1 1 1 x x x x GSM message class control - see [GSM 03.38] (e) Notes: a. These coding schemes are common to GSM, TDMA and CDMA. The SMPP protocol allows ESME applications to use the same DCS value (i.e. the GSM 03.38 value) for all three technologies. b. In cases where a Data Coding Scheme is defined for TDMA and/ or CDMA but not defined for GSM, SMPP uses GSM 03.38 reserved values. c. There is no default setting for the data_coding parameter. d. The data_coding parameter will evolve to specify Character code settings only. Thus the recommended way to specify GSM MWI control is by specifying the relevant settings in the optional parameters _ms_msg_wait_facilities and ms_validity. e. The data_coding parameter will evolve to specify Character code settings only. Thus the recommended way to specify GSM message class control is by specifying the relevant setting in the optional parameter dest_addr_subunit. |
| sm_default_msg_id | 1 | Integer | Указывает на "предопределенное" ("canned") сообщение, т. е. заранее сохраненное на SMSC. Может принимать значение 0-254 (0 если не используется). |
| sm_length | 1 | Integer | Длина в октетах следующего поля |
| short_message | Var 0-254 | Octet String | Собственно, сообщение :). Обратим внимание, что это поле расширено до 254 остетов (против 160-ти). Это связано с тем, что возможна передача сообщений в различных кодировках. |
Далее в пакете могут быть необязательные параметры в TLV формате. Все они связаны с использованием дополнительных возможностей, предоставляемых SMPP и в нашем конкретном случае не надобны. Еще раз хотим обратить внимание, что в этой статье мы не собирались давать подробный перевод спецификации протокола, равно как и документов GSM. Напротив, мы хотели "спроецировать" тот необходимый минимум, который позволит создать работающее SMS-приложение. Дальнейшее его развитие -- дело ума чести и совести каждого :). Посему мы сейчас не станем детально останавливаться на описании каждого поля (там, где было возможно, мы посторались указать на наиболее употребительные значения). Позже мы приведем пример работающего кода и многое станет более понятно. Вопросы можно задать в комментариях.
submit_sm_resp. command_id = 0x80000004
Тело пакета submit_sm_resp состоит из следующих полей:
| Field name | Size (octets) | Type | Description |
|---|---|---|---|
| message_id | Var. max 65 | C-Octet String | Идентификатор сообщения, назначенный SMSC |
В том случае, если поле command_status заголовка пакета не содержит нулевого значения (т. е. указывает на ошибку), тело пакета не передается. Идентификатор, назначенный SMSC используется для дальнейших операций с сообщениями, как то: запросы, удаление, замещение. Кроме того, он же будет фигурировать в delivery_receipt-е. От внимательного читателя не укрылось, что длина идентификатора в 65 октетов (символов), вообще говоря, не позволяет хранить его ни в каком из цифровых форматов. Тем не менее, на практике почти всегда это поле содержит значение, укладывающееся в 32-х битное целое (по крайней мере, другого не наблюдалось). Так что выбор формата хранения smsc_id целиком на совести разработчика ESME ибо чаще всего эти значения хранятся в поле таблицы базы данных, а поиск цифрового значения гораздо более эффективен, нежели строки.
Формат представления даты в SMPP.
В данной версии протокола все поля, связанные с датой и временем должны быть представлены в формате “YYMMDDhhmmsstnnp” где:
- ‘YY’ последние две цифры года (00-99)
- ‘MM’ месяц (01-12)
- ‘DD’ день месяца (01-31)
- ‘hh’ час (00-23)
- ‘mm’ минута (00-59)
- ‘ss’ секунда (00-59)
- ‘t’ десятая секунды (0-9)
- ‘nn’ различие в четвертях часа между локальным временем и временем UTC(Universal Time Constant) (00-48).
- ‘p’ = “+”локальное время опережает UTC.
- ‘p’ = “-” локальное время отстает от UTC.
- ‘p’ = “R” локальное время задано относительно времени SMSC.
В зависимости от значения параметра "p" (+/- или R) различают абсолютный (+/-) или относительный (R) формат даты. Абсолютный формат указывает на точно специфицированный момент времени (как показано выше), а относительный -- промежуток времени относительно текущего времени SMSC. Например, '020610233429000R' будет истолковано как 2 года, 6 месяцев, 10 дней, 23 часа, 34 минуты и 29 секунд от текущего времени SMSC.
В ответах SMSC дается его локальное время в формате “YYMMDDhhmmss”.
deliver_sm. command_id = 0x5
Формат пакета deliver_sm полностью совпадает с форматом пакета submit_sm (в части описанных обязательных параметров), посему мы не будем здесь его еще раз повторять. Упомянем только о специфике в значениях некоторых полей:
- schedule_delivery_time не используется и выставляется в 0.
- Поле validity_period не используется и выставляется в 0.
- Поле registered_delivery указывает что необходимо подтверждение ESME (ESME acknowledgement). Для отправки подтверждения ESME должно использовать пакет submit_sm со специальным значением (см. выше) поля esm_class.
- Поле replace_if_present_flag не используется и выставляется в 0.
- Поле sm_default_msg_id не используется и выставляется в 0.
Напомним, что SMSC использует этот пакет как для доставки входящих (для ESME) сообщений так и для передачи подтверждений доставки (delivery_receipt). Тип сообщения (входящее/подтверждение) указывается, как и для submit_sm, в поле esm_class:
Bits 7 6 5 4 3 2 1 0 Meaning
Message Mode (bits 1-0)
x x x x x x x x not applicable - ignore bits 0 and 1
Message Type (bits 5-2)
x x 0 0 0 0 x x Default message Type (i.e. normal message)
x x 0 0 0 1 x x Short Message contains SMSC Delivery Receipt
x x 0 0 1 0 x x Short Message contains SME Delivery Acknowledgement
x x 0 0 1 1 x x reserved
x x 0 1 0 0 x x Short Message contains SME Manual/User Acknowledgment
x x 0 1 0 1 x x reserved
x x 0 1 1 0 x x Short Message contains Conversation Abort (Korean CDMA)
x x 0 1 1 1 x x reserved
x x 1 0 0 0 x x Short Message contains Intermediate Delivery Notification
all other values reserved
deliver_sm_resp. command_id = 0x80000005
Формат пакета deliver_sm_resp в точности совпадает с форматом пакета submit_sm_resp с тем исключением, что поле message_id не используется и выставляется в 0.Формат подтверждения доставки.
Как уже говорилось, для поттверждения доставки SMSC использует пакет deliver_sm со специальным (см. выше) значением поля esm_class. Обычно оно содержит значение 0x4, но, как видно, младшие два бита могут содержать любое значение. Сама информация подтверждения содержится в поле short_message. Точное значение этого поля зависит от производителя и модели SMSC, но, в большинстве случаев, подчиняется рекомендованному формату: “id:IIIIIIIIII sub:SSS dlvrd:DDD submit date:YYMMDDhhmm done date:YYMMDDhhmm stat:DDDDDDD err:E text: . . . . . . . . .” Где:
| Field name | Size (octets) | Type | Description |
|---|---|---|---|
| id | 10 | C-Octet String (Decimal) | Идентификатор сообщения, назначенный SMSC |
| sub | 3 | C-Octet String (Decimal) | Количество посланных сообщений. Используеся, если сообщения послано нескольким получателям. Дополняется ведущими нулями |
| dlvrd | 3 | C-Octet String (Decimal) | Количество доведенных сообщений. Используеся, если сообщения послано нескольким получателям. Дополняется ведущими нулями |
| submit date | 10 | C-Octet Fixed Length String | Время, когда сообщение было отправлено в формате 'YYMMDDhhmm' |
| done date | 10 | C-Octet Fixed Length String | Время, когда сообщение достигло финального состояния (доведено/не может быть доведено) в формате 'YYMMDDhhmm' |
| stat | 7 | C-Octet Fixed Length String | Состояние. (см. ниже) |
| err | 3 | C-Octet Fixed Length String | Может содержать код ошибки (если необходимо) |
| text | 20 | C-Octet String | Первые 20 символов исходного сообщения. |
| State | Stat field value | Description |
|---|---|---|
| DELIVERED | DELIVRD | Сообщение доведено получателю |
| EXPIRED | EXPIRED | Истек срок годности сообщения |
| DELETED | DELETED | Сообщение было удалено |
| UNDELIVERABLE | UNDELIV | Сообщение не может быть доведено |
| ACCEPTED | ACCEPTD | Было прочитано вручную от имени подписчика |
| UNKNOWN | UNKNOWN | Сообщение в некорректном состоянии |
| REJECTED | REJECTD | Сообщение отвергнуто |
Unbind.
Команды unbind и unbind_resp имеют значения command_id 0x6 и 0x80000006 соответственно и не содержат тел (т. е. состоят из одного header'а)
Заключение
Теперь, думается, мы знаем достаточно для того, чтобы написать наше первое настоящее SMS-приложение, чем мы и займемся в следующей статье.
SMS-приложение. Часть 2
Процедура авторизации.
Мы начинаем обсуждать команды протокола. В нашем, самом первом, приложении нам их понадобится совсем немного. Начнем с процедуры авторизации, выполняемой одной из команд семейства BIND.
Команды BIND.
Как уже говорилось, это семейство включает три команды:
- bind_receiver -- сообщает SMSC, что ESME подключается для приема сообщений. Такой режим (только прием) характерен, например, для пэйджинговых шлюзов.
- bind_transmitter -- сообщает SMSC, что ESME подключается для передачи сообщений. Данный режим используется, в частности, при организации рассылок (в том числе, к сожалению, и спама).
- bind_transceiver -- сообщает SMSC, что ESME подключается для приема и передачи (т. е. в полнодуплексной моде). Этот режим удобен для создания полнофункциональных шлюзов.
Ниже мы рассмотрим каждую из команд в отдельности и приведем формат пакетов. Как уже отмечалось, все команды (пакеты) SMPP должны предваряться заголовком. В заголовке команды поле command_id должно содержать соответствующее значение.
bind_receiver. command_id = 0x01
Тело пакета bind_receiver состоит из следующих полей:
| Field name | Size (octets) | Type | Description | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| system_id | Var. max 16 | C-Octet String | Идентифицирует ESME. Можно рассматривать это поле, как "username". | ||||||||
| password | Var. max 9 | C-Octet String | Пароль для аутентификации. | ||||||||
| system_type | Var. max 13 | C-Octet String | Необязательное. Используется для указания категории ESME, например "WWW", "E-MAIL" и т. д. Если не используется, должно содержать один октет NULL (0x0) | ||||||||
| interface_version | 1 | Integer | Идентифицирует версию протокола SMPP, поддерживаемую ESME. 0x00-0x33 указывают, что поддерживается версия 3.3 или более ранняя. 0x34 указывает, что поддерживается версия 3.4 | ||||||||
| addr_ton | 1 | Integer | Указывает тип адреса (TON - Type Of Number) ESME. (см. ниже). Если неизвестен, выставляется в NULL | ||||||||
| addr_npi | 1 | Integer | Указывает индикатор плана номеров (NPI -- Numbering Plan Indicator). (см. ниже). Если неизвестен, выставляется в NULL | ||||||||
| address_range | Var. max 41 | C-Octet String | Адрес или диапазон адресов, обслуживаемых ESME. Если неизвестен, выставляется в NULL |
bind_receiver_resp. command_id = 0x80000001
Тело пакета bind_receiver_resp состоит из следующих полей (*):
| Field name | Size (octets) | Type | Description | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| system_id | Var. max 16 | C-Octet String | Подтвержденный идентификатор ESME. | ||||||||
| sc_interface_version | - | TLV | Необязательное поле в формате TLV. Информирует о версии протокола SMPP, поддерживаемой SMSC |
(*) -- В том случае, если поле command_status заголовка содержит ненулевое значение (т. е. информирует об ошибке) тело пакета не передается.
bind_transmitter. command_id = 0x02
Формат и назначение полей тела пакета bind_transmitter совпадает с форматом и назначением полей тела пакета bind_receiver.
bind_transmitter_resp. command_id = 0x80000002
Формат и назначение полей тела пакета bind_transmitter_resp совпадает с форматом и назначением полей тела пакета bind_receiver_resp.
bind_tranceiver. command_id = 0x03
Формат и назначение полей тела пакета bind_transceiver совпадает с форматом и назначением полей тела пакета bind_receiver.
bind_tranceiver_resp. command_id = 0x80000003
Формат и назначение полей тела пакета bind_transceiver_resp совпадает с форматом и назначением полей тела пакета bind_receiver_resp.
Параметры TON и NPI.
Параметры TON и NPI не являются специфичными для протокола SMPP, поэтому мы здесь не будем останавливаться на них подробно, а просто приведем их возможные значения (подробнее об этих параметрах можно прочитать в документации GSM):
| TON | Value (bin) | ||||
|---|---|---|---|---|---|
| Unknown | 00000000 | ||||
| International | 00000001 | ||||
| National | 00000010 | ||||
| Network Specific | 00000011 | ||||
| Subscriber Number | 00000100 | ||||
| Alphanumeric | 00000101 | ||||
| Abbreviated | 00000110 | ||||
| Reserved | All others |
| NPI | Value (bin) | ||||
|---|---|---|---|---|---|
| Unknown | 00000000 | ||||
| ISDN (E163/E164) | 00000001 | ||||
| Data (X.121) | 00000011 | ||||
| Telex (F.69) | 00000100 | ||||
| Land Mobile (E.212) | 00000110 | ||||
| National | 00001000 | ||||
| Private | 00001001 | ||||
| ERMES | 00001010 | ||||
| Internet (IP) | 00001100 | ||||
| WAP Client Id (to be defined by WAP Forum) | 00010010 | ||||
| Reserved | All others |
Generic Negative Result (generic_nack)
Как уже отмечалось, любая из команд, испущенная той или иной из сторон должна квитироваться ACK'ом (за единственным, упомянутым в прошлой статье исключением). При этом поле command_id заголовка ACK'а должно содержать соответствующее значение (равное command_id оригинальной команды с выставленным 31-м битом), а поле sequence_number заголовка должно указывать номер транзакции оригинальной команды. Однако в некоторых случаях, в частности, когда принимающая сторона не может распознать заголовок оригинальной команды -- например, при возникновении "мусора" в TCP/IP канале -- информация, необходимая для формирования корректного ACK'а может оказаться недоступной. В таких случаях принимающая сторона отвечает специальным пакетом, называемым generic_nack (command_id = 0x80000000). Данный пакет состоит из одного заголовка с указанным command_id. Поле command_status содержит соответствующий код ошибки, а поле sequence_number может содержать NULL (0x0), если не удалось распознать номер транзакции оригинальной команды.
Замечания.
Несколько слов по поводу направления передачи данных по соединениям, т. к. могут возникать недоразумения, связанные с названиями сессий. Например, если ESME авторизовалось с помощью команды bind_transmitter и сессия перешла в состояние BOUND_TX, не следует думать, что SMSC не может передавать данные в такое соединение (т. е., что программист избавлен от вызова recv(2) с этим сокетом). Напротив, еще раз подчеркнем, что ACK'и передаются в рамках того же соединения (т. е. в тот же сокет), что и оригинальные команды. С другой стороны, разумеется, входящие сообщения (т. е. от SMSC к ESME) не могут быть переданы по соединению, находящемуся в BOUND_TX. Это важный момент и вот почему: как мы договорились, мы будем работать в т. н. Store And Forward Mode, при этом сообщения сначала помещаются в базу данных SMSC, а потом предпринимаются попытки их доведения. Таким образом, факт помещения в базу данных (подтверждаемый ACK'ом) еще не означает, что конечный пользователь получил данное сообщение, кроме того, оно вообще может быть не доведено до истечения срока годности в том случае, например, если аппарат пользователя остается отключенным не протяжении нескольких дней. SMSC сигнализирует о переходе сообщения в финальное состояние (доставлено/не может быть доставлено) с помощью (специального вида) команды deliver_sm, т. е. той же команды с помощью которой передаются входящие сообщения, и которая ... не может быть передана в соединение находящееся в BOUND_TX! В действительности, такие сообщения, называемые delivery receipts некоторое время хранятся на SMSC и передаются в первое же, авторизовавшееся с помощью bind_receiver, соединение с тем же system_id. Таким образом, достаточно время от времени открывать сессию с помощью bind_receiver и "снимать" delivery receipt'ы и входящие сообщения, буде таковые найдутся, или просто сразу же открывать две сессии. Понятно, что для сессий в состоянии BOUND_TRX таких проблем не существует. Однако, в случаях больших загрузок предпочтительней иметь отдельные сессии на прием и передачу (возможно, в разных потоках исполнения -- threads) чтобы распараллелить эти операции.
Промежуточный итог 2
В данной главе мы обсудили процедуру авторизации поверх сокетного соединения. Как мы видим, она не слишком сложна, хотя здесь есть некоторые интересные моменты. Нам осталось обсудить команды передачи и приема сообщений и мы вплотную приблизимся к кодированию.