opy2onを新バージョンと誤認する
O2NodeDB.cpp O2NodeDB::touch_preprocessor()にて ユーザーエージェントの指定桁数から後ろの数値を見ているため、 アプリ名の文字数が異なる場合に新バージョンと誤認する。
// O2/0.2 (o2on/0.02.0027; Win32) if (node.ua.size() > 13) { wstring node_ver = node.ua.substr(13, 9); if (wcscmp(node_ver.c_str(), ver) > 0) NewVerDetectionFlag = true; }13バイト目から見てるので 「O2/0.2 (opy2on/0.00.0001; Linux x86_64)」 の「n/0.00.00」を見てしまう。 「プロトコル名/プロトコルバージョン (アプリ名/アプリバージョン; 環境)」 として、区切り文字から抜き出して見るようにしないといけない。
あと、異なるアプリなら無視するように。
O2NodeDB::touch_preprocessor()は通信の度に呼ばれる。 ここでユーザーエージェントを切り分けると、無駄な処理が走るので、接続時にノード情報としてアプリ名とアプリバージョンを持つようにした。
http://pc12.2ch.net/test/read.cgi/tech/1231570128/431
O2/0.2 (opy2on/0.00.0001; Linux x86_64) 上記フォーマットのUAを新バージョンと勘違いするようです。 手元では未確認