GetVersionそうしん〜

基本はまず、WndProcをoverrideして
m.MsgがWM_COPYDATA(0x4a)の時に
SendMessageを返せば良いんだよな
(・・・じしんね〜)


えっと、materiaの仕様書によると

仕様
wm_copydata でデータの受け渡しを行います。
以下のプロトコルで Direct SSTP サーバにリクエストを行って下さい。
Direct SSTP サーバはリクエストに応じた処理をした後
HWnd ヘッダで指定されたウインドウハンドルに対し
同じフォーマットでレスポンスを返します。

copydatastruct

dwData = 9801
cbData = リクエストヘッダの長さ
lpData = リクエストヘッダ文字列を指すポインタ


・・・よくわからん


えっと、m.LParamがリクエストのポインタで
その場所にはcopydatastructのdwDatamが格納されている
(・・・9801とは何だろう?ポート番号かな?)
で、その4バイト先にリクエストヘッダの長さが格納されている
(dwDatamはintだと思うからそこだよな)
さらにその4バイト先にリクエストヘッダ文字列を指すポインタが格納されている
(cbDataもintだよな)



なので、


COPYDATASTRUCT cd
cd.dwData = Marshal.ReadInt32(m.LParam);
cd.cbData = Marshal.ReadInt32(m.LParam, 4 );
cd.lpData = Marshal.ReadIntPtr(m.LParam, 8 );

byte[] messageBuffer = new byte[cd.cbData];
for(int i = 0; i < messageBuffer.Length ; i++)
{
messageBuffer[i] = Marshal.ReadByte(cd.lpData,i);
}
System.Text.Encoding ascii = System.Text.Encoding.Default;
string message = ascii.GetString(messageBuffer);

とすればリクエストヘッダ文字列を取得できる
まずボトルの場合は、Clientから
EXECUTE SSTP/1.1
Sender: SSTP Bottle Client
Command: GetVersion
CharSet: Shift_JIS
HWnd: 394314
こんな感じで送られてくる・・・と


・・・で、これをどう返すんだろ
・・・良くわかんね
・・・眠い頭で考えても無駄だな
・・・ねよ


・・・SSPとかSSSB、S-Vにリクエストしたらどんなの返ってくるんだろう
・・・そういや、リクエストの仕方がわかんね
・・・やっぱねよ