0

私は、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 を構築するように受信機をコーディングしました。ほとんどの場合、ネットワークの既知の cellid と一致します。しかし、多くの場合、値は一致しません。

そこで、以下の情報を探しています。

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

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

私が間違っているかもしれないことについての洞察をいただければ幸いです!

4

2 に答える 2

2

位置情報をデコードするには、GSM11.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)、およびセルIDは、TS GSM04.08[8]のようにコード化されます。

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

于 2009-09-18T10:46:42.223 に答える
0

この質問にあまり多くのかみ傷はありません!他の人が役立つと思う場合に備えて、自分の調査結果を要約したいと思います。

  1. dcs設定が0でないメッセージを送信する必要があります。dcs="0"はパックされたデータを送信します(各オクテットの下位7ビットを尊重します。これにより、最大メッセージサイズが実際に140オクテットの場合に160文字のSMSメッセージが許可されます)

  2. バイナリセーフな方法でデータを解析する必要があります。0x0Aが検出されたときに検索を停止する正規表現は、バイナリデータ自体がその値になる可能性がある場合は失敗します。

  3. Kannelのデフォルト設定を変更する必要はありません。

乾杯

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

于 2009-09-09T21:53:15.030 に答える