内輪のファイル交換用に、Mac でも Windows でも Linux でも使えるソフトはないかと探していて、Java で実装された OpenNap クライアント XNap がいいらしいということで、テスト。
- Project: XNap - A P2P framework and client (公式サイト)
- 超簡単XNap導入ガイド(Mac OS X 向けのガイド)
ローカルで opennap サーバを起動して LAN 内の Windows マシンと Linux マシンでファイル共有してみたんですが、互いに相手の持ってるファイルのファイル名が化けて、検索もダウンロードもできません。
どうも Linux (Fedora Core)は UTF-8 のファイル名、Windows は MS932 のファイル名でやりとりしようとしてコケてるようです。Java の起動オプションで -Dfile.encoding=MS932 とかしてみたけどダメ。調べてみると napster のプロトコルってバイナリの部分があるので、XNap の内部でもバイト列のパケットを作って流していました。文字列からバイト列への変換で引数なしの getBytes() を使っているので、デフォルトロケールのエンコーディングに変換されてしまうのが問題。
それっぽいところを全部 getBytes("MS932") に置き換えたりしてなんとかファイルのブラウズとやりとりはできるようになりました。チャットも日本語でオッケー。でも検索がヒットしたりしなかったりなんか変。元からこんなんだっけ?
ということで、改造済みのバイナリ(xnap.jar)とパッチを公開しておきます。
ちなみに OpenNap 接続の WinMX とのファイル共有もできました。