Pandora:Documentation_ja:Tentacle:Protocol
ドキュメント
- Tentacle プロトコル定義 (このガイド)
Tentacle プロトコル定義
Tentacle プロトコル自体は非常に簡単です。41121 番の TCP ポートを利用します(IANA で公式に割り当てられています: http://www.iana.org/assignments/port-numbers)。
いくつかの重要な特徴は以下の通りです。
- 通信は、常にクライアント側から開始します。
- コマンドは、常に改行コードで終了します。
- 次の文字はファイル名には利用できません: '?Pandora:Documentation_ja:Tentacle:Protocol/\=+<»;',*~'
ASCII 文字でのシーケンス図でユースケースを説明します。コマンドはシングルクォートでくくります。
ファイル送信
まず最初に、正しいファイル転送を示します。
+—————–+ +—————–+ | Tentacle client | | Tentacle server | +—————–+ +—————–+
| | +-------'SEND <file> SIZE size\n'---->>>+ | | +<<<-----------'SEND OK\n'--------------+ | | +-----------------data--------------->>>+ | | +-----------------data--------------->>>+ | | +-----------------data--------------->>>+ | | +<<<-----------'SEND OK\n'--------------+ | | +---------------'QUIT\n'------------->>>+ | | . .
一つのセッションで複数のファイル転送ができるように、一つのファイル転送が完了したあとに、'QUIT' の前に新たな 'SEND' コマンドを送ることができます。
もし、サーバがファイルの受け取りを拒否する場合は、クライアントにエラーメッセージが返されます。セキュリティ上の理由により詳細は示しませんが、ファイルが以下の場合に発生します。
- 不正なファイル名やパスが指定された。
- 空もしくはサーバが受け取れる最大サイズを超過した。
- すでにサーバ上にファイルがあり、ファイルの上書きが許可されていない。
+—————–+ +—————–+ | Tentacle client | | Tentacle server | +—————–+ +—————–+
| | +-------'SEND <file> SIZE size\n'---->>>+ | | +<<<-----------'SEND ERR\n'-------------+ | | . .
ファイル受信
単一のファイルをサーバから要求できます。
+—————–+ +—————–+ | Tentacle client | | Tentacle server | +—————–+ +—————–+
| | +------------'RECV <file>\n'--------->>>+ | | +<<<--------'RECV SIZE size\n'----------+ | | +--------------'RECV OK\n'----------->>>+ | | +<<<--------------data------------------+ | | +<<<--------------data------------------+ | | +<<<--------------data------------------+ | | +---------------'QUIT\n'------------->>>+ | | . .
クライアントは、サーバがサイズを報告してきた後にファイル受け取り拒否が可能です。
'SEND' と同様に、一つのファイルの受け取りが完了した後に、'QUIT' の前に(クライアントがファイル受信を拒否した場合でも)新たな 'RECV' コマンドを送信することができます。サーバがファイル送信を拒否した場合は、エラーメッセージが送られます。ファイルが次のような場合に発生します。
- 不正なファイル名やパスが指定された。
- サーバにファイルが存在しない。
+—————–+ +—————–+ | Tentacle client | | Tentacle server | +—————–+ +—————–+
| | +------------'RECV <file>\n'--------->>>+ | | +<<<-----------'RECV ERR\n'-------------+ | | . .
パスワード認証
サーバがパスワードを要求した場合、クライアントはコマンド送信前に認証を行う必要があります。
+—————–+ +—————–+ | Tentacle client | | Tentacle server | +—————–+ +—————–+
| | +----------'PASS pwd_digest\n'------->>>+ | | +<<<-----------'PASS OK\n'--------------+ | | . .
パスワードを隠蔽するためにパスワードの 2段階の md5 が送信されます。しかし、非暗号化接続では、それ以上のセキュリティはないことに注意してください。セキュアなファイル転送が必要な場合には、常に SSL を有効化してください。
エラーハンドリング
エラー状態になると、サーバは何らかの説明を行うことなく接続を切ります。不正なコマンド、不正なパスワード、送信すると通知したものよりも多くのデータ送信などの場合です。
+—————–+ +—————–+ | Tentacle client | | Tentacle server | +—————–+ +—————–+
| | +-------------'!@#$%&/()=?¿'--------->>>+ | | . .
+—————–+ +—————–+ | Tentacle client | | Tentacle server | +—————–+ +—————–+
| | +---------'PASS bad_pwd_digest'------>>>+ | | . .