Встраивание сот GSM в короткие сообщения

Я использую функцию WML «providelocalinfo», чтобы помещать информацию о местоположении в короткие сообщения, отправляемые через меню WIB на телефоне GSM.

Я использую спецификацию WIG WML v.4 от SmartTrust. Соответствующий раздел — «9.4 Элемент Providelocalinfo».

Я использую код, как в примере, а затем передаю переменную через SMS и использую Kannel для получения сообщения от SMSC.

Вот код, который я использую, за исключением того, что [myservicecentre] является моим фактическим сервисным центром:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE wml PUBLIC "-//SmartTrust//DTD WIG-WML 4.0//EN"
  "http://www.smarttrust.com/DTD/WIG-WML4.0.dtd">
<wml wibletenc="UCS2">  

  <card id="s">
    <p>
      <providelocalinfo cmdqualifier="location" destvar="LOC"/>
      <setvar name="X" value="loc=" class="binary"/>
      <sendsm>
          <destaddress value="367"/>
          <userdata docudenc="hex-binary" dcs="245">
              $(X)$(LOC)
          </userdata>
          <servicecentreaddress value="[myservicecentre]"/>
      </sendsm>
    </p>
  </card>
</wml>

То, что я вижу в своих полученных сообщениях, это «loc =», за которым следуют 7 байтов (октетов) или двоичные данные. Я попытался найти документацию, объясняющую, как декодировать эти данные, но ничего не нашел, что бы это четко объяснялось.

Из декодированных 7 октетов первые 3 октета всегда одни и те же. Следующие 2 октета имеют тенденцию варьироваться между тремя уникальными значениями, последние 2 октета представляют собой ячейку.

Поэтому я закодировал приемник так, чтобы он извлекал последние два октета и создавал 16-битный идентификатор ячейки GSM. В большинстве случаев он совпадает с известными целлидами из сети. Но довольно часто значение не совпадает.

Итак, я пытаюсь найти информацию о следующем:

  1. Как правильно передать информацию о местоположении безопасным способом (кодирование, приведение и т. д.)
  2. Как правильно расшифровать информацию
  3. Как настроить Kannel для учета двоичных данных о местоположении

В тщетных поисках я изучил следующие документы, но не нашел соответствующих данных: GSM 03.38, GSM 04.07, GSM 04.08, GSM 11.15, а также WIG WML Spec V.4.

Буду признателен за любое понимание того, что я могу делать неправильно!


person Joshua Berry    schedule 27.07.2009    source источник


Ответы (2)


Чтобы расшифровать информацию о местоположении, вам нужно посмотреть в GSM 11.14 стр. 48.

1.19 ИНФОРМАЦИЯ О МЕСТОПОЛОЖЕНИИ

          Byte(s)    Description                                           Length
            1         Location Information tag                               1
            2         Length (X) of bytes following                          1
           3-5        Mobile Country & Network Codes (MCC & MNC)             3
           6-7        Location Area Code (LAC)                               2
           8-9        Cell Identity Value (Cell ID)                          2

Мобильный код страны (MCC), мобильный код сети (MNC), код зоны местоположения (LAC) и идентификатор соты кодируются, как в TS GSM 04.08 [8].

Исходя из личного опыта, первый упомянутый здесь октет обычно не используется, поэтому ваши первые три неизменяемых байта — это длина и страна. Следующие 2 — это код оператора сети.

person Community    schedule 18.09.2009
comment
Это было полезно для меня: наивный захват последних двух октетов пропустил разные значения LAC для одной и той же или соседних ячеек. Информация, отправляемая различными платформами WIB, кажется, немного отличается от этой спецификации (по крайней мере, SmartTrust), но это шаг в правильном направлении и указывает на решение некоторых проблем, с которыми мы сталкивались. - person Joshua Berry; 06.10.2009

Не слишком много укусов на этот вопрос! Я хотел обобщить свои выводы на случай, если другие сочтут их полезными:

  1. Необходимо отправлять сообщения с настройкой dcs, отличной от 0. dcs="0" отправляет упакованные данные (учитывая младшие 7 бит каждого октета; это позволяет отправлять 160-символьные SMS-сообщения, когда максимальный размер сообщения фактически составляет 140 октетов).

  2. Необходимо анализировать данные безопасным для двоичного кода образом: выражения регулярных выражений, которые прекращают поиск при обнаружении 0x0A, завершатся ошибкой, когда сами двоичные данные могут быть этим значением.

  3. Я не обнаружил необходимости изменять конфигурацию Kannel по умолчанию.

Ваше здоровье

Отказ от ответственности: безопасная передача 16-битных GSM-идентификаторов требует работы с несколькими настройками, которые я понимаю только потому, что они не были настроены по умолчанию. Вероятно, есть и другие значения по умолчанию, от которых я зависел, но я не знаю, что они могут различаться.

person Joshua Berry    schedule 09.09.2009