質問

WML関数「Providelocalinfo」を使用して、GSMハンドセット上のWIBメニューを介して送信される短いメッセージに位置情報を配置しています。

SmartTrustのWig WML V.4 Specを使用しています。関連するセクションは「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オクテットは3つの一意の値の間で変化する傾向があり、最後の2オクテットはCellidのように見えます。

そこで、レシーバーをコード化して、最後の2オクテットを引いて16ビットGSM Cellidを構築しました。ほとんどの場合、ネットワークから既知のCellidsと一致します。しかし、多くの場合、値は一致しません。

だから私は次の情報を見つけようとしています:

  1. 安全な方法で位置情報を適切に送信する方法(エンコーディング、キャストなど)
  2. 情報を適切にデコードする方法
  3. バイナリの位置データを尊重するようにカネルを構成する方法

私は無駄な検索で次のドキュメントを調べましたが、関連するデータは見つかりませんでした:GSM 03.38、GSM 04.07、GSM 04.08、GSM 11.15、およびWig WML Spec v .4 .4

私が間違っているかもしれないことについての洞察は大歓迎です!

役に立ちましたか?

解決

位置情報をデコードするには、GSM 11.14 Page 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)、およびセルIDは、TS GSM 04.08 [8]のようにコーディングされています。

個人的な経験から、ここで述べた最初のオクテットは通常中断されているため、最初の3つの変更されていないバイトは長さと国です。次の2は、ネットワークオペレーターコードです。

他のヒント

この質問についてはあまり噛まれません!他の人が有用であると感じることができる場合に備えて、私の発見を要約したかった:

  1. 0に等しくないDCS設定でメッセージを送信する必要があります。DCS= "0"はデータパックされたデータを送信します(各オクテットの7ビットを尊重します。

  2. データをバイナリ安全な方法で解析する必要があります。0x0Aに遭遇したときに検索を停止する正規表現式は、バイナリデータ自体がその値になると失敗します。

  3. Kannelのデフォルト構成を変更する必要はありませんでした。

乾杯

免責事項:16ビットGSM Cell-IDの安全な送信では、デフォルトで構成されていないという理由だけで、私が理解しているいくつかの設定を扱う必要があります。おそらく私が依存していた他のデフォルトはありますが、それらが異なる可能性があることに気づいていません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top