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では、上記のようなチェックをしているもよう。後ろに文字列を追加してもチェックされない。コマンド長もチェックチェックされていないもよう。
また、バージョン側を変えると、バージョン警告などあるため、アプリ名(?)のほうを触る。
とりあえずこれで、テスト稼動中・・。