2012/11/10

[llcp]SSAPで0x20をもらったら

いつものことだが、マニアックな話だ。

Nexus7が来て、うちでもSNEPの動作が確認できるようになった。
送信(PUT)の方は、できる。
そうなると、SNEPサーバ側になってPUTを受けとる方もやりたいではないか。

 

PUTするときは、こんなシーケンス(site)だ。
それを受けとる方になるなら、こういうことになるだろう。

image

単に左右が逆になっただけだ。

そこまではよかった。
PaSoRiと向かい合わせて、Nexus7をタッチするとPDUでCONNECTが来ることもわかった。
しかし、CONNECTと一緒にくるSSAP(Source Service Access Point)が、0x20だったのだ。


SAP(Service Access Point)は、「HTTPだったら80」みたいなものと同じような扱いだ(と思っている)。
SAPの値によって、やりたいことが決まるのだ。

SSAPは、送信元のSAP。DSAPもあって、これは送信先のSAP。
PDUのCONNECTは、SSAPとDSAPを指定することになっているので、両方来る。

SAPの値は、0x00~0x0Fまでが「Well-known」になっていて、固定だ。
SNEPは0x04。
だから、私も「SSAP=0x04、DSAP=0x04」を期待していたのだ。

 

だが、やってきたのは「SSAP=0x20、DSAP=0x04」。
DSAP、つまり私に対しては、SNEPを要求している。

では、0x20は?
これは、「local LLC as the result of an upper layer service request」ってなってる。
0x20~0x3Fが、その値。
local LLCは、well-known LLCではない、という意味のlocalか。
それに続く「上位層のサービス要求の結果」は、何がいいたいのか。。。

0x00~0x0Fと、0x20~0x3Fは上記の要領だが、その間の0x10~0x1Fもある。
これは、名前検索(SDP)を使って割り当てる、ということらしい。
で?

よくわからんので、試すことにした。
Androidが先生なわけじゃないから、あまり好きではないのだが、わからんのだから仕方が無い。


  • SSAPが0x20~0x3Fのときは、PDU CCを返す

これは、いいとしよう。
CCにもSSAPとDSAPがいるので、その値が今回のポイントになる。

  • DSAPが0x04になっているので、SSAPも0x04で返す
  • SSAPが0x20になっているので、DSAPも0x20で返す

 

試した結果、前者はSYMMをやり返すだけになってしまったが、後者はI PDUを送り返してきた。
つまり「あんたにはSNEPでやってほしいけど、他の番号でやりとりしようや」ということなのかな。

これは、Nexus7のchromeで、このhiro99ma blogを表示したままタッチしたときのI PDUだ。

D/[analyzePdu() 1259] [D:0x20/S:0x20]
D/[analyzeInfo() 1427] PDU_I(NS:0 / NR:0))
D/[analyzeInfo() 1437]   [I]10  SNEP version(1.0)
D/[analyzeInfo() 1437]   [I]02  SNEP Put Request
D/[analyzeInfo() 1437]   [I]00  Length [0]
D/[analyzeInfo() 1437]   [I]00         [1]
D/[analyzeInfo() 1437]   [I]00         [2]
D/[analyzeInfo() 1437]   [I]1a         [3]
D/[analyzeInfo() 1437]   [I]d1  SR=1, TNF=WKS, MB=1, ME=1
D/[analyzeInfo() 1437]   [I]01  RecordType長
D/[analyzeInfo() 1437]   [I]16  Payload長
D/[analyzeInfo() 1437]   [I]55  U(URI)
D/[analyzeInfo() 1437]   [I]03  http://
D/[analyzeInfo() 1437]   [I]68  h
D/[analyzeInfo() 1437]   [I]69  i
D/[analyzeInfo() 1437]   [I]72  r
D/[analyzeInfo() 1437]   [I]6f  o
D/[analyzeInfo() 1437]   [I]39  9
D/[analyzeInfo() 1437]   [I]39  9
D/[analyzeInfo() 1437]   [I]6d  m
D/[analyzeInfo() 1437]   [I]61  a
D/[analyzeInfo() 1437]   [I]2e  .
D/[analyzeInfo() 1437]   [I]62  b
D/[analyzeInfo() 1437]   [I]6c  l
D/[analyzeInfo() 1437]   [I]6f  o
D/[analyzeInfo() 1437]   [I]67  g
D/[analyzeInfo() 1437]   [I]73  s
D/[analyzeInfo() 1437]   [I]70  p
D/[analyzeInfo() 1437]   [I]6f  o
D/[analyzeInfo() 1437]   [I]74  t
D/[analyzeInfo() 1437]   [I]2e  .
D/[analyzeInfo() 1437]   [I]6a  j
D/[analyzeInfo() 1437]   [I]70  p
D/[analyzeInfo() 1437]   [I]2f  /

 

いいのか・・・な?
どうも、LLCPについてはNFC Forumのドキュメントを読んでもよくわからんなぁ。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。