Winnyへ影響を与えないプロトコルバージョンの変更方法
通信開始時のバージョン交換で、Winnyかポエニーかを判断したいなーと思ったのでちょっと調べてみた結果、Winnyへ影響をあえない変更方法が分かったのでメモ。
@ バージョン形式
- アプリ名(?) [文字列]
- バージョン [uint16 (little endian)]
@ Winnyb7.1の場合
- アプリ名: "Winny Ver2.0b1 "
- バージョン: 12710
@ ポエニーの場合
- アプリ名: "Winny Ver2.0b1 (poeny ver1.0a1)"
- バージョン: 12710
@ 理由
if (memcmp(application_name, "Winny Ver2.0", 12) == 0
&& ((version >= 12660
&& version < 12900)
|| (version >= 20000
&& version < 21000)))
{
// ok
}
Winnyでは、上記のようなチェックをしているもよう。後ろに文字列を追加してもチェックされない。コマンド長もチェックチェックされていないもよう。
また、バージョン側を変えると、バージョン警告などあるため、アプリ名(?)のほうを触る。
とりあえずこれで、テスト稼動中・・。