最終目標はMochaPPPです。
ネットワークに接続できるPCにHOTSYNCケーブルでPalmをつないで、Palmからネットワークに接続できるようにするPC用ソフトです。
PC側で必要な処理はPalmからのPPPパケットの分解。そしてそのパケットをPCが接続しているネットワークへ送り出さなければなりません。逆にネットワークからPalmへのパケットをPPPパケットに包みなおすことも必要です。
まずPPPアクセスのラッパクラスを製作することにします。
この時点での疑問は
です。
PPPについてのRFCを読むと、パケットの詳細などがかかれているもののピンと来ません。そこで実際にPalmから送信されるパケットを見てみることにしました。
~ }#タ!}!F} }.}"}&} } } } }'}"}(}"bO~~ }#タ!}!G} }.}"}&} }
} } }'}"}(}"マJ~~ }#タ!}! H} }.}"}&} } } } }'}"}(}"・~~ }#タ!}!I} }.}"}&} } } } }'}"}(}"Iz~~ }#タ!}!J} }.}"} &} } } } }'}"}(}"セt~~ }#タ!}!K} }.}"}&} } } } }'}"}(}"}3q~~ }#タ!}!L} }.}"}&} } } } }'}"}(}"Pi~~ }#タ!}!M} }.}"}&} } } } }'}"}(}"l~ |
予想通り人間には読めないものの、先頭の「~」が0x7eでありフラグシーケンスと確認できたのでOK。
つづいて、COMポートから受信した文字を表示するコマンドを製作し、上記と同じものを記録してみました。
ff 7e ff 7d 23 c0 21 7d 21 39 7d 20 7d 2e 7d 22 7d 26 7d 20 7d 20 7d 20 7d 20 7d 27 7d 22 7d 28 7d 22 68 f6 7e 7e ff 7d 23 c0 21 7d 21 3a 7d 20 7d 2e 7d 22 7d 26 7d 20 7d 20 7d 20 7d 20 7d 27 7d 22 7d 28 7d 22 9f f8 7e 7e ff 7d 23 c0 21 7d 21 3b 7d 20 7d 2e 7d 22 7d 26 7d 20 7d 20 7d 20 7d 20 7d 27 7d 22 7d 28 7d 22 32 fd 7e 7e ff 7d 23 c0 21 7d 21 3c 7d 20 7d 2e 7d 22 7d 26 7d 20 7d 20 7d 20 7d 20 7d 27 7d 22 7d 28 7d 22 71 e5 7e 7e ff 7d 23 c0 21 7d 21 3d 7d 20 7d 2e 7d 22 7d 26 7d 20 7d 20 7d 20 7d 20 7d 27 7d 22 7d 28 7d 22 dc e0 7e 7e ff 7d 23 c0 21 7d 21 3e 7d 20 7d 2e 7d 22 7d 26 7d 20 7d 20 7d 20 7d 20 7d 27 7d 22 7d 28 7d 22 2b ee 7e 7e ff 7d 23 c0 21 7d 21 3f 7d 20 7d 2e |
先頭の0xffはよくわかりませんが、7e〜7eのパケットのまとまりが確認できました。
RFCを読むとこれはLCPのようです。リンクを確立しようとしてるわけですね。確かにPalmのディスプレイ上には「接続状況 ログオン」と表示されています。よく似たパケットが繰り返されているのはリトライしているわけですね。
リンク制御プロトコルで通信設定要求し、PFCとACFCを要求しているようです。これに対してACKのパケットを返せば次のステップに進めそうです。
(つづく)
RFC1661を元にすべきのようです。
PalmのHOTSYNCケーブルはPCのCOMポートに接続するので、HDLC-likeのRFC1662も参照する必要があるようです。
while(i++ < 256 /* getch() != 'q' */ ){ DWORD dwRLength; unsigned char bfRecv[256]; dwRLength = 0; ReadFile(hCom, bfRecv, 1, &dwRLength, NULL); if(dwRLength >0) printf("%2x ",bfRecv[0]); } /* while */ |
2001.04.01
PPPはまぁだいたいわかった(うそ)ので、今度はPC上で行うパケット変換処理について考えてみます。
PPPではIPCP(RFC1332)でIPパケットを透過的に扱えるようです。ここで疑問にぶつかります。WINDOWSでIPパケットを直接扱えるのでしょうか?今まではなんとなくWinsockを使ってSocketプログラミングで行けるだろうと思っていました。しかしながらWinsockはTCP/IPまたはUDP/IPプロトコルを利用するためのAPIです。IPアドレスはIPCPで取得する仕組みがあります。ではポート番号はIPパケットに含まれるのでしょうか?なんとなく、IPパケットに包まれたTCPまたはUDPパケットの中に書かれているような気がします。作ろうとしているソフトでは、例えばPalmからのパケットを
というようなことをせにゃならんのでしょうか。うむ。がんばればできそうな気もします。逆にPalmへのパケットも処理はできそうですね。
でもこれで本当にいいんでしょうか?なんやえらい遠回りのような気がします。もしPC上でIPパケットを直接扱えるならば、IPCP<-->IP変換だけでいいはずなんですが…
あと、PPPってTAPI(RAS 誤記訂正2001.04.02)でさらっと処理できないんでしょうか?できたらいいなぁ…
参照文献
SoftwareDesign1999.11 特集
Interface2000.10 付録
2001.04.02
RASでPalmをつなぎます。ミス発見。TAPIと書いたのはRASのつもりでした。
実はNTのRASがPPPであることはわかっていたので、ヌルモデムケーブル接続でチャレンジしてみたことはあるんです。でもNT側が全く無反応でした。無反応というのは、リモートアクセス管理のダイアログが無反応だったのです。
今日別の件でPPPを調べているときにPalm to RASというのが目にとまりました。これを読む限り、PalmOS3.3以降では
NT4でも95でも追加ソフトなしでつながるやんけ〜。
(注:NT4ではRASで、95ではケーブル接続です。)
という結論です。ログインスクリプトに問題があり、まだうまくログインできていませんが、もうちょっとできそうな気がします。ダイアルネットワークモニタもピーピー反応していますし…
ここ数日の努力はなんだったのでしょうか?MochaPPPの利点がわかりません。RASではできないことがあるんでしょうか?WINDOWSにもIPルーティングの機能/設定があるので、OKのような気がします。
もしかすると、PalmOS3.3よりも前の「シリアル接続PC−PC」ができないPalmでMochaPPPが必要だっただけでは?という気もしてきました。
いきなりやる気がなくなってきました。MochaPPPの利点がわからないとこのまま進む気が起こりそうにありません。ふぅ。
2001.04.03
NTのRASにうまくつながりません。ログはNT側で採ることができます。(Article ID:Q115929) Palm側のログではNT側の応答が悪いように思えるのですが、NT側のログを見ると認証まで行っているのにPalm側が勝手にやり直しているように見えます。
そこで、comp.os.ms-windows.programmer.win32で見つけたportmonをつかってPalmとMochaPPPの間でおこなわれるやりとりを記録してみました。
この2つを比較すればRASにうまくPalmをつなぐ設定がわかるかもしれません。(だんだん趣旨がずれていっているような…)
Received(Palm m100 --> MochaPPP) 00-01-02-03-04-05-06-07-08-09-0a-0b-0c-0d-0e-0f- 7E FF 7D 23 C0 21 7D 21 7D 21 7D 20 7D 2E 7D 22 7D 26 7D 20 7D 20 7D 20 7D 20 7D 27 7D 22 7D 28 7D 22 70 34 7E Protocol 0xc021:LCP code 01:Configure-Request Identifier 01 Length 0x000e:14 octet Type 2,Length 6:ACCM 0x00 0x00 0x00 0x00 Type 7,Length 2:PFC Type 8,Length 2:ACFC Sent 00-01-02-03-04-05-06-07-08-09-0a-0b-0c-0d-0e-0f- 7E FF 03 C0 21 02 01 00 0E 02 06 00 00 00 00 07 02 08 02 4E B7 Protocol 0xc021:LCP code 02:Configure-Ack Identifier 01 Length 0x000e:14 octet Type 2,Length 6:ACCM 0x00 0x00 0x00 0x00 Type 7,Length 2:PFC Type 8,Length 2:ACFC Received 00-01-02-03-04-05-06-07-08-09-0a-0b-0c-0d-0e-0f- 7E FF 7D 23 C0 21 7D 22 7D 2B 7D 20 7D 2E 7D 22 7D 26 7D 20 7D 20 7D 20 7D 20 7D 27 7D 22 7D 28 7D 22 7C 91 7E Protocol 0xc021:LCP code 02:Configure-Ack Identifier 0x0b Length 0x000e:14 octet Type 2,Length 6:ACCM 0x00 0x00 0x00 0x00 Type 7,Length 2:PFC Type 8,Length 2:ACFC Received 00-01-02-03-04-05-06-07-08-09-0a-0b-0c-0d-0e-0f- 7E 80 21 01 01 00 1C 03 06 C0 A8 00 09 02 06 00 2D 03 01 81 06 00 00 00 00 83 06 00 00 00 00 B9 1A 7E Protocol 0x8021:ICPC code 01:Configure-Request Identifier 01 Length 0x001c:28 octet Type 3,Length 6:IP-Adress 0xc0 0xa8 0x00 0x09 Type 2,Length 6:IP-Compression-P 0x002d 0x03 0x01 Type 129,Length 6:IP Primary DNS 0x00 0x00 0x00 0x00 Type 131,Length 6:IP Secondary DNS 0x00 0x00 0x00 0x00 Sent 00-01-02-03-04-05-06-07-08-09-0a-0b-0c-0d-0e-0f- 7E 80 21 03 01 00 16 03 06 C0 A8 00 09 81 06 C0 A8 00 02 83 06 Protocol 0x8021:ICPC code 03:Configure-Ack Identifier 01 Length 0x0016:24 octet Type 3,Length 6:IP-Adress 0xc0 0xa8 0x00 0x09 Type 129,Length 6:IP Primary 0xc0 0xa8 0x00 0x09 Received 00-01-02-03-04-05-06-07-08-09-0a-0b-0c-0d-0e-0f- 7E 80 21 01 02 00 16 03 06 C0 A8 00 09 02 06 00 2D 03 01 81 06 C0 A8 00 02 FE B4 7E Protocol 0x8021:ICPC code 01:Configure-Request Identifier 02 Length 0x0016:24 octet Type 3,Length 6:IP-Adress 0xc0 0xa8 0x00 0x09 Type 2,Length 6:IP-Compression-P 0x002d 0x03 0x01 Type 129,Length 6:IP Primary 0xc0 0xa8 0x00 0x09 (以下略) Sent 00-01-02-03-04-05-06-07-08-09-0a-0b-0c-0d-0e-0f- 7E 80 21 02 02 00 16 03 06 C0 A8 00 09 02 06 00 2D 03 01 81 06 Received 00-01-02-03-04-05-06-07-08-09-0a-0b-0c-0d-0e-0f- 7E 80 21 02 02 00 0A 03 06 C0 A8 00 02 DD B5 7E Received 00-01-02-03-04-05-06-07-08-09-0a-0b-0c-0d-0e-0f- 7E 80 21 05 03 00 04 EF 5E 7E Received 00-01-02-03-04-05-06-07-08-09-0a-0b-0c-0d-0e-0f- 7E FF 7D 23 C0 21 7D 25 7D 22 7D 20 7D 24 59 28 7E Sent 00-01-02-03-04-05-06-07-08-09-0a-0b-0c-0d-0e-0f- 7E C0 21 06 02 00 04 2F 23 7E Sent 00-01-02-03-04-05-06-07-08-09-0a-0b-0c-0d-0e-0f- 7E C0 21 01 0C 00 0E 02 06 00 00 |