最新バージョンとソースコード

今後、Winny 2b7.1ファイル共有との互換プロトコルを実装する際や、ファイヤーウォールやネットワークアナライザの類をWinnyに対応させるときには少しは役にやつと思われるソースコード

poeny_win32 (実行形式セット)
poeny_win32_src (ソースコード)

差分(実行ファイルのみ)

Winnyの規制が激しくなっている現状と、最近は別のソフトを作っているので、ポエニーネタは今回が最後かも。

  • 追記

Windowsに依存していると思われる部分。

  • task/guitask.d (GUI)
  • pes/system/*.d (イベント、クリティカルセクション、スレッド)
  • pes/conv.d (SJIS<->UTF8変換)
  • phobosは見きれていないが、Fileクラスでファイルのロックがされていない? Thread、Socketも違うので怪しいかも。

バグっているかもしれない部分。

  • キャッシュタブからキャッシュを複数個削除しつつ、削除中に同じタブをクリックしたとき
  • 設定ファイル(poeny.stt,download.stt)のフォーマットが変なとき
  • down,cache,upフォルダが存在しないとき
  • delete演算子 (GCがメモリを回収しないので途中で大量に入れたらかなりバグった経緯アリ)
  • さらに追記

Winnyが規制されるのは、日本だけかな。

安定

ポエニーの連想配列のバグが直った(見えなくなった?)ようです。
方法としては、1分おきにノードリストを保存するタイミングで、明示的なrehashをするようにしただけなのですが、18:00〜0:00まで元気に動いています。
ますますなぞ。

←セットの実行ファイルを最新バージョンに更新しています。

連想配列 orz

orz・・・

一番頻発しているWin32Exceptionは、internal/aaA.dの512行目 assert(0)がhltなので飛ぶ。
なぜか壊れる連想配列。keyはulong。値渡し。
orz・・・。

poenyの*nix移植版をvinelinuxで動かしたい! 1という話もあるのですが、とりあえずはWindows上でしっかり動くまでは移植なんてとても無理な感じ。もちろん、現在のバグバグは、D言語のポエニー特有のものなので、移植=作り直しという意味なら、ぜんぜん大丈夫ですが、それはpynyに期待。
ちなみにポエニーを*NIXにそのまま移動させるなら、UIを作るのと、MultiByteToWideCharなどの文字コード変換系をiconvなどへ置き換えるのと、スレッドの排他処理などをpthreadのAPIで置き換える程度のはず(はず)なので、Windowsできちんと動くようになったらネタとして移植するかも。
マイバイブルのAPRパクれば参考にすれば余裕の気がする。

←最新バージョン更新しました。
今のところは元気です。

ポエニーのWinny互換プロトコルメモなど

途中まで書いて、今後スレに流しました。
今回は、Winnyと通信をするための基本的な話と、接続開始からプロトコル認証を終えるところまで書いています。
今後も、今後スレに流します。

  • 誤->正

302行目 - クラスタリング文字列(3)の → クラスタリング文字列(2)の
305行目 - クラスタリング文字列(4)の → クラスタリング文字列(3)の

最新バージョン

リンクのはりかえが面倒になってきたので、最新バイナリセットは、
http://www.rootshell.be/~kienzan/poeny/poeny_win32.zip
に置いておきます。
poeny.exeだけのファイルは、poeny_YYYYMMDD_exe.zipにあります。
今回のは、20060322バージョンの実行形式が含まれています。

@ 前回(20060319)からの変更点

  • クエリキーワードがスペースのみの場合に落ちるバグを修正
  • 認証時の接続テストの方法をWinnyに合わせる

Winnyプロトコルの説明を書いてみてて、自分でバグに気づくという悲しい状況。まとめ資料は重要ですね。

poeny 20060319

一時中止といいつつ、バグ修正を重ね、安定したんじゃないかと個人的に思ったバージョンのバイナリパック。

主に落ちたり固まったりと、キャッシュの保持率が変になるバグの修正。
poeny_20060319

@ 前回からの変更点
* さまざまなバグ修正(詳細は今後スレのログ参照)
* ダウンロードフォルダ、アップロードフォルダ、キャッシュフォルダ指定可能に

アップロードフォルダの変更には注意が必要。

ソースは、火曜日あたりに出しますが、Dのstd.Threadを触ってしまったのでどうしようかと迷い中。

Cライブラリ

(ポエニーがまともに動くなら)C言語から使えるライブラリにしておいたら、今後いろいろと便利かなと思いました。
Cのデータ構造(キーの構造体とか)を作ったりは面倒くさそうですが、もともとの思想がWinny通信部分のモジュール化で、UIは分離させれるつもりなので(現在理由あってくっついていますが・・)、やるだけなら簡単なんですよね。
あまり細かい制御はできないかもしれないですけど、search()とかdownload()とか高レベルなAPIにして、他はライブラリ側で全部やっとけば手軽に使えるようにはなるかなと。
今のUIへの入力がC関数化しただけの感じ。ライブラリ側でスレッドが十数個もたちが上がるの気持ちが悪いですけど。

これなら、文字コード変換とスレッド制御の一部を作るだけで、Linuxへ移せそうですし。