Разборка SMS и отправка на e-mail

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Ответить
pepelxl
Сообщения: 161
Зарегистрирован: 23 июл 2013, 18:47

Удаляются в любом случае. Надо комментировать ат команду удаления в файле extract. Весь остальной код по парсингу находится в файлах спутниках.


pepelxl
Сообщения: 161
Зарегистрирован: 23 июл 2013, 18:47

Да и если хотите разобраться сами, то зачем лазить по форумам? Не легче обратиться к первоисточнику? Наберите в Гугле - gsm 03.40 например и получите исчерпывающую информацию.


DyadyaGenya
Сообщения: 31
Зарегистрирован: 08 май 2023, 01:29

pepelxl писал(а): 04 июн 2023, 08:58 Да и если хотите разобраться сами, то зачем лазить по форумам? Не легче обратиться к первоисточнику? Наберите в Гугле - gsm 03.40 например и получите исчерпывающую информацию.
К сожалению не проще. Я так сказать, начинающий. Там все слишком сложно написано. И слишком много работы с битами. По сути, для перекодировки самого текста есть несколько сторонних функций, поэтому не слишком беспокоюсь про работу с битами.
В принципе на данный момент я почти со всеми полями PDU разобрался. Остались непонятными UDL/UDH. Пользовательские заголовки. Никак не могу понять, как определить, из скольки полей (бит) будут состоять эти заголовки. Уже если знаю из скольки, напр, подсмотрел программой PDUspy, то понимаю как дальше с этими полями работать., в том числе и как определить, составное это смс или нет и какая это часть составного смс.

Хотя ещё вопрос по типу смс. Я то это поле вырезаю из PDU, но не понимаю, как читать тип. Знаю, что 04 - SMS-DELIVER. Но оно может быть 44 или 60. Эти значения в тестовых смс на моем модеме. И как вообще считать эти значения, если вдруг будут другие.


DyadyaGenya
Сообщения: 31
Зарегистрирован: 08 май 2023, 01:29

pepelxl писал(а): 04 июн 2023, 08:39 Удаляются в любом случае. Надо комментировать ат команду удаления в файле extract. Весь остальной код по парсингу находится в файлах спутниках.
Закоментировать нужно всю эту секцию?

Код: Выделить всё

# стираем
:if ([:len ($curStruct->"index")] > 0) do={
:set $tmp [$chat ($m->"type") ($m->"name") "AT+CMGD=1,1"]
:if (($tmp->"f")) do={
:foreach i in=($curStruct->"index") do={
:local iterError 5
:while ($iterError > 0) do={
:set $tmp [$chat ($m->"type") ($m->"name") ("AT+CMGD=".[:tostr $i])]
:set $iterError ($iterError - 1)
:if (!($tmp->"f")) do={:set $iterError 0}}
:if (($tmp->"f")) do={:if (($m->"model")~"R11e" != true) do={
:set $tmp2 "wrong answer in CMGD\r\n"; throw;} else={:set ($tmp->"f") false}}
}}}


DyadyaGenya
Сообщения: 31
Зарегистрирован: 08 май 2023, 01:29

Ещё хотел уточнить про поле TP-MTI. Правильно ли я понимаю, что две цифры этого поля нужно из hex перевести в битовое представление
и в них рассматривать значение каждого бита в соответствии с таблицей? Тоесть "04" сделать как "00000100", "40" как "01000000", "44" как "01000100", "60" как "01100000"
Изображение
Последний раз редактировалось DyadyaGenya 08 июн 2023, 14:56, всего редактировалось 1 раз.


DyadyaGenya
Сообщения: 31
Зарегистрирован: 08 май 2023, 01:29

И в продолжение уточнений. Если я правильно понял, то должно получится нечто такое:

Код: Выделить всё

04 как:
1.=0	TP-MTI	SMS-DELIVER (поскольку 0)
2.=0	TP-MMS	Есть сообщения, поскольку 0
3.=0	
4.=0		
5.=0		
6.=1	TP-SRI	Будет отправлен отчет, поскольку 1
7.=0	TP-UDHI	блок User Data содержит только сообщение, поскольку 0
8.=0	TP-RP	Не запрашивается путь для ответа, поскольку 0


40 как:
1.=0	TP-MTI	SMS-DELIVER (поскольку 0)
2.=1	TP-MMS	Нет сообщений, поскольку 1
3.=0
4.=0
5.=0
6.=0	TP-SRI	Не будет отправлен отчет, поскольку 0
7.=0	TP-UDHI	блок User Data содержит только сообщение, поскольку 0
8.=0	TP-RP	Не запрашивается путь для ответа, поскольку 0


44 как:
1.=0	TP-MTI	SMS-DELIVER (поскольку 0)
2.=1	TP-MMS	Нет сообщений, поскольку 1
3.=0
4.=0
5.=0
6.=1	TP-SRI	Будет отправлен отчет, поскольку 1
7.=0	TP-UDHI	блок User Data содержит только сообщение, поскольку 0
8.=0	TP-RP	Не запрашивается путь для ответа, поскольку 0


60 как:
1.=0	TP-MTI	SMS-DELIVER (поскольку 0)
2.=1	TP-MMS	Нет сообщений, поскольку 1
3.=1
4.=0
5.=0
6.=0	TP-SRI	Не будет отправлен отчет, поскольку 0
7.=0	TP-UDHI	блок User Data содержит только сообщение, поскольку 0
8.=0	TP-RP	Не запрашивается путь для ответа, поскольку 0
Но я точно знаю, что там где 40, 44 и 60 есть ещё дополнительные поля заголовка, потому что располагаются в составном смс. Тоесть смс поделено на части и присылается частями, а потом уже модем/телефон собирает все вместе. И заголовки для сбора частей смс там есть


DyadyaGenya
Сообщения: 31
Зарегистрирован: 08 май 2023, 01:29

В предыдущем вопросе нужно было в обратном порядке делать.

Ну а так, смс уже разобрал на части. Осталось склеить составные смс и перекодировать.


pepelxl
Сообщения: 161
Зарегистрирован: 23 июл 2013, 18:47

Не забудьте результат выложить. А то что то многие "забывают".


DyadyaGenya
Сообщения: 31
Зарегистрирован: 08 май 2023, 01:29

pepelxl писал(а): 10 июн 2023, 17:24 Не забудьте результат выложить. А то что то многие "забывают".
Полностью готовое или то, что сейчас есть?

И у меня есть вопросы по перекодированию и склеиванию. К сожалению я не настолько хорошо разбираюсь в скриптах микротика, чтобы понять всё, что у вас сделано в вашем скрипте. На данный момент для пробы взял сторонний перекодировщик отсюда https://forum.mikrotik.com/viewtopic.ph ... 51#p993440 и затем вот этот https://forum.mikrotik.com/viewtopic.ph ... 51#p992792
Это перекодировка на случай, если кодировка была 7 бит, тоесть поле DCS = "00"
Выглядит это так:

Код: Выделить всё

> :put [$HexGSM7toCP1252 ([$pdutogsm7 ("\C8\32\9B\FD\06\5D\DF\72\36\39\04") ] )]
 Hello World!
 
Вроде бы распечатывает. Но это только с простыми, не составными смс. Если смс составная, то нужно брать не только сам текст, но и заголовки UDH и перекодировать все по отдельности, а потом склеивать. Возможно я ошибаюсь, но у вас склейка и перекодировка выглядят по-другому. Можете подсказать, действительно нужно при перекодировке составного смс в строку с текстом добавлять ещё и заголовки по типу, если строка текста составного смс выглядит так: "DCE532B94C06CDDF6F37" то к ней нужно добавить ещё и "050003590303" или все же можно перекодировать без этого?


pepelxl
Сообщения: 161
Зарегистрирован: 23 июл 2013, 18:47

Я уже ни черта не помню. Но кажется, что как раз в 7бит надо парсить отдельно и собирать вместе, а всё остальное надо собрать сначала, а потом парсить.


Ответить