[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[FDclone-users:00707] Discussion on FDclone 3.0



 しらいです。

 次の version up では 2.10 ではなくて 3.00 にしようかなと考
えています。source code の構成が大きく変わるだけでなく、依存
library に変化が出て来ますので。
 で、それに伴って幾つかの相談ごとがあります。


◎本当に 3.00 に上げて問題ない?

 1.0x → 2.0x への変更では shell 内蔵という抜本的な変更があ
ったため、.fdrc に互換性が無くなるなどユーザレベルでの影響も
大きく、major version を上げざるを得ない事情がありました。
 それと比べると、3.00 は新規機能さえ使わなければ従来通りの
動作が可能なので、ユーザへの影響は比較的小さいと思われます。
なので rc の名前も .fd3rc じゃなくて .fd2rc のままの予定。

 じゃあ 2.10 でいいんじゃない?と言われればそうなんですけど、
3.00 ということにしておけば「make VERSION=2」として build す
ることで 2.09 相当の機能のみ実装することが出来ます。
 この配慮により、万が一 3.00 固有機能のために build 出来な
くなってしまった環境が出て来た場合の対応が可能かなと考えてい
ます。

 しかし、各 OS の package システムなんかでは minor version
の追随と比べて majot version の追随には慎重になるきらいがあ
るようで、3.00 にすることで出足が鈍ることも予想されます。
 その辺りの影響まで考慮した上で、本当に 3.00 として release
して問題がないかどうか、各自の都合で検討してみて下さい。


◎shell 文法

 3.00 の目玉の一つはネットワーク機能でして、実は shell の文
法の中に socket 関連の機能を織り込んで、shell script でちょ
っとした server/client の実装が出来るようにしてあります。
 例えばこんな感じ。
	# 80 番ポートで anyone 待受け
	cat <accept://0.0.0.0:80
	# localhost の 80 番ポートに接続
	echo foo bar >connect://localhost:80
 前者は socket() -> bind() -> listen() した socket に対して
accept() で返ってきた socket を redirect していて、後者は単
に socket() -> connect() した socket の redirect です。
 この二つを組合わせれば最低限の通信は可能ですので、HTTP や
SMTP くらいは何とかなります。FTP client も PASV 使う分には何
とか実装可能です。

 ところが、FTP client で PORT 使う時とか FTP server で PASV
に応答する時なんかだと、socket() -> bind() -> listen() の時
点で待受けポート番号を相手に通知する必要があります。
 なので、上の accept:// を前後に分割してこんな感じで実装す
ることを考えています。
	# まずは相手先に connect()
	exec 3>connect://1.2.3.4:21
	# 続いて認証
	echo "USER user" >&3
	echo "PASS pass" >&3
	# 任意ポートで bind() して listen() まで
	exec 4<bind://1.2.3.4:0
	# そのポート番号を取得
	PORT=`getport <&4`
	PORT1=`expr $PORT / 256`
	PORT2=`expr $PORT % 256`
	# 自アドレスも取得します
	ADDR=`getaddr <&4 | tr . ,`
	# 取得したアドレス/ポートを相手に送信
	echo "PORT $ADDR,$PORT1,$PORT2" >&3
	# データポートを使うコマンドを送信
	echo "LIST /" >&3
	# bind() したポートで accept()
	cat <accept://4

 手順としてはこんなもんだと思うんですが、問題は shell 文法
として最後の「accept://4」が今一つすっきりとしないということ
です。
 他の書式が「ident://host:port」となっているのに、これだけ
file descriptor を指定しないとならなくて、対称性が欠落してし
まいます。
 あと、動作的にはこの「accept://4」の中では file descriptor
4 を close() する筈なんですが、それが見た目判りにくい。なの
で、「cat 4<accept://」にした方がいいような気もします。

 何となく気持ち悪いといった感覚的な反応を含めて、みなさんの
ご意見をお聞かせ下さい。


◎その他リクエスト

 major version up は久しぶりなので、大きな変更を伴うリクエ
ストがあれば今のうちにお願いします。最後に書くのも何ですけど、
今のところこんな機能追加が予定されております。
	・connect:// とか accept:// とかの追加。
	・FTP ブラウザ。
	・画面表示文字列の message catalog 化。
	・「EDIT_CONFIG LANGUAGE」とかして変数を編集。
	・「AUTOUPDATE=1」とか書くと 1sec 毎に画面自動更新。

                                               しらい たかし