送信コマンド一覧 | ||||
---|---|---|---|---|
種別 | 項目 | type | サーバ | クライアント |
認証 certification |
認証準備 | Preparation | ○ | × |
サーバ認証 | Server | × | ○ | |
ファイル認証 | File | × | ○ | |
認証結果通知 | Result | ○ | ○ | |
情報取得 information |
ファイル一覧取得 | Filenames | × | ○ |
サーバ情報取得 | Server | × | ○ | |
クライアント情報取得 | Client | ○ | × | |
情報通知 | Result | ○ | ○ | |
ファイル情報操作 data |
ファイル情報取得 | Verify | × | ○ |
ファイル情報更新 | Modify | × | ○ | |
操作結果通知 | Result | ○ | × | |
ファイル操作 files |
ファイル追加 | Add | × | ○ |
ファイル削除 | Delete | × | ○ | |
操作結果通知 | Result | ○ | × | |
通知 notice |
ファイル更新通知 | Updated | ○ | × |
ファイル削除通知 | Deleted | ○ | × | |
切断 | Disconnect | ○ | ○ | |
操作 command |
終了 | Exit | × | ○ |
コンフィグ | Config | × | ○ | |
エラー Error |
XMLエラー | XML | ○ | ○ |
権限エラー | Competence | ○ | ○ | |
状態エラー | State | ○ | ○ | |
内部エラー | Internal | ○ | ○ | |
そのほか | Misc | ○ | ○ |
受け入れ可能コマンド一覧 | ||||
---|---|---|---|---|
種別 | 項目 | type | サーバ | クライアント |
認証 certification |
認証準備 | Preparation | × | 1 |
サーバ認証 | Server | 1 | × | |
ファイル認証 | File | 2,3 | × | |
認証結果通知 | Result | 1 | 1,2,3 | |
情報取得 information |
ファイル一覧取得 | Filenames | 2,3 | × |
サーバ情報取得 | Server | 2,3 | × | |
クライアント情報取得 | Client | × | 2,3 | |
情報通知 | Result | 2,3 | 2,3 | |
ファイル情報操作 data |
ファイル情報取得 | Verify | 3 | × |
ファイル情報更新 | Modify | 3 | × | |
操作結果通知 | Result | × | 3 | |
ファイル操作 files |
ファイル追加 | Add | 2,3 | × |
ファイル削除 | Delete | 2,3 | × | |
操作結果通知 | Result | × | 2,3 | |
通知 notice |
ファイル更新通知 | Updated | × | 3 |
ファイル削除通知 | Deleted | × | 3 | |
切断 | Disconnect | 1,2,3 | 1,2,3 | |
操作 command |
終了 | Exit | 2,3 | × |
コンフィグ | Config | 2,3 | × | |
エラー Error |
XMLエラー | XML | 1,2,3 | 1,2,3 |
権限エラー | competence | 1,2,3 | 1,2,3 | |
状態エラー | State | 1,2,3 | 1,2,3 | |
内部エラー | Internal | 1,2,3 | 1,2,3 | |
そのほか | Misc | 1,2,3 | 1,2,3 |
サーバ |
---|
<certificate type="Preparation"> <type type="IP" /> <type type="Plain" /> <type type="Challenge/Response/MD5" /> <challenge>CHALLENGE_STRING</challenge> </type> ... </certificate> |
クライアント |
---成功時 無し(直ちにサーバ認証を開始) ---失敗時 <certificate type="Result" result="Failure" desc="" /> |
クライアント |
---|
<certificate type="Server"> {|<type type="IP"> <username>USER_NAME</username> </type> |<type type="Plain"> <username>USER_NAME</username> <password>PASSWORD_STRING</response> </type> |<type type="Challenge/Response/MD5"> <username>USER_NAME</username> <response>RESPONSE_STRING</response> </type> |... } </certificate> |
サーバ |
---成功時 <certificate type="Result" subtype="Server" result="Success" permission="User/Administrator" /> ---失敗時 <certificate type="Result" subtype="Server" result="Failure" desc="RESULT_MESSAGE" /> |
クライアント |
---|
<certificate type="File"> <file name="FILENAME.EXTENTION" /> {<type type="IP" /> |<type type="Plain"> <username>USER_NAME</username> <password>PASSWORD_STRING</response> </type> |<type type="Challenge/Response/MD5"> <username>USER_NAME</username> <response>RESPONSE_STRING</response> </type> |... } </certificate> |
サーバ |
---成功時 <certificate type="Result" subtype="File" result="Success" permission="Read/Write" /> ---失敗時 <certificate type="Result" subtype="File" result="Failure" desc="RESULT_MESSAGE" /> |
クライアント |
---|
<information type="Filenames" /> |
サーバ |
---成功時 <information type="Result" result="Success" subtype="Filenames" > <file name="FILENAME0.EXTENTION"> <file name="FILENAME1.EXTENTION"> ... </information> ---失敗時 <information type="Result" result="Failure" subtype="Filenames" desc="失敗原因" /> |
クライアント |
---|
<information type="Server" /> |
サーバ |
---成功時 <information type="Result" result="Success" subtype="Server" > </version major="0" minor="0" revision="0" > そのほか適当に・・・ </information> ---失敗時 <information type="Result" result="Failure" subtype="Server" desc="RESULT_MESSAGE" /> |
サーバ |
---|
<information type="Client" /> |
クライアント |
---成功時 <information type="Result" result="Success" subtype="Client" > </version major="0" minor="0" revision="0" > そのほか適当に・・・ </information> ---失敗時 <information type="Result" result="Failure" subtype="Client" desc="RESULT_MESSAGE" /> |
クライアント | ||||||
---|---|---|---|---|---|---|
<data type="Verify"> <schs baseage = ローカルに保存されているAge oldid = ローカルに保存されている最新のSchsID /> </data> | ||||||
サーバ | ||||||
例:schs.baseage=15でVerfyが来た場合SAgeが15より大きく、SAgeに関連付けられているSchsIDがクライアントからきたschs.oldidと等しい場合
対応するdata.type="Result" は返らない。
注意:これに呼応してnotice.type="Updated"がサーバから送信される。 これが実質的に返信である。 SAgeが15であり、SAgeに関連付けられているSchsIDがクライアントからきたschs.oldidと等しい場合
対応するdata.type="Result" は返らない。
注意:これに呼応してサーバが内容を持たないnotice.type="Updated"を送信するか、あるいは何も送信しないかは実装依存である。 SAge15が15未満であるか、以上であるがSAge15に関連付けられているSchsIDがクライアントからきたschs.oldidと異なる場合
注意:これに呼応して以下のnotice.type="Updated"がサーバから送信される。
これが実質的に返信である。 <?xml version="1.0" encoding="Shift-JIS"?> <notice type="Updated"> <schs type="Disagreement Occurred">/ </notice> |
クライアント | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
<data type="Modify"> <schs baseage = ローカルに保存されているAge oldid = ローカルに保存されている最新のSchsID newid = 新たに作成したSchsID > 1つ以上のsch(新しい/変更されたデータ) </schs> </data> | ||||||||||||||||||||
サーバ | ||||||||||||||||||||
サーバーはModifyセッションを受信したとき、以下の表の動作を行う。 動作は大きく分けて、 1.Verifyセッションと同じ動作 2.Modifyで送られてきたデータに対する返答 よりなる。 よってbaseageを同じとする Varify + Modify は Modifyのみの場合とほぼ同一の動作を行うことになる。 これはModifyセッションは暗黙のうちにbaseageを同じくするVerifyセッションを含み、それが先立って処理されることを表す。 ただし、暗黙のVerifyが失敗しても、それに対応するdata.type="Result"は返さない。 表 受信したModifyセッションとサーバの動作
表 既知のUIDを持つスケジュールが来たときの動作
例:schs.baseage=16でModifyが来た場合1.暗黙のVerifyを処理する。ここでSchsIDの齟齬が発生していた場合は6へ 2.schs.baseage=15でVerifyがきた場合と同じnotice.type="Updated"が返る。 3.サーバ内でAge=15からSAgeまでに登録されているデータと送られてきたデータのUIDを比較する。 4.すべての送られてきたデータがAge=15からSAgeまでの間に変更されていた場合以外はSAgeが1足される 5.データが保存される。 6.以下のdata.type="Result"が返る。 7.Commitedの予定があった場合は同じファイルを参照している各クライアントにnotice.type="Updated"が送信される。 以下の各返信に先立ち、暗黙のVerifyに対応するnotice.type="Upadated/Deleted"が送信される。 ただし、SAge=schs.baseageでNoticeが必要ない場合は送信されない Sageが15未満であるか、SAgeが15以上であるがSAge15に関連付けられているSchsIDがクライアントからきたschs.oldidと異なる場合
</notice>
<?xml version="1.0" encoding="Shift-JIS"?> <data type="Result" subtype="Modify" result="Failure" desc="Modify Ignored"/> </data> SAgeが15以降でuid="TestUID1" uid="TestUID2" が共に変更されていなかった場合
<?xml version="1.0" encoding="Shift-JIS"?>
<data type="Result" subtype="Modify" result="Success"> <schs baseage = "15" newage = 更新後のSAge newid="NewSchsID"> <sch uid= "TestUID1" action = "Commited" /> <sch uid= "TestUID2" action = "Commited" /> </schs> </data> *NewSchsIDはクライアントよりschs.newageとして送られて、更新後のSAgeと関連してサーバに保存されたUIDである。 SAge15が以降でuid="TestUID1" が変更/削除されており、 uid="TestUID2"が変更されていなかった場合
<?xml version="1.0" encoding="Shift-JIS"?>
<data type="Result" subtype="Modify" result="Success"> <schs baseage = "15" newage = 更新後のSAge newid="NewSchsID"> <sch uid= "TestUID1" action = "Aborted" /> <sch uid= "TestUID2" action = "Commited" /> </schs> </data> *NewSchsIDはクライアントよりschs.newageとして送られて、更新後のSAgeと関連してサーバに保存されたUIDである。 SAge15が以降でuid="TestUID1" usi="TestUID2" が共に変更/削除されていた場合
<?xml version="1.0" encoding="Shift-JIS"?>
<data type="Result" subtype="Modify" result="Success"> <schs baseage = "15" newage = SAge newid="NewSchsID"> <sch uid= "TestUID1" action = "Aborted" /> <sch uid= "TestUID2" action = "Aborted" /> </schs> </data> *NewSchsIDはSAgeと関連付けられてサーバに保存されていたSchsIDである。 これは先立つnotice.type="Updated"(があれば)に指定されたschs.newidと同一である。 この場合(すべてのModify Schがアボートされたとき)ではSAgeは更新されないことに注意。 ファイルが削除されてしまっていた場合
<?xml version="1.0" encoding="Shift-JIS"?>
<data type="Result" subtype="Modify" result="Success"> <schs baseage = "15" newage ="" newid=""> <sch uid= "TestUID1" action = "Aborted" /> <sch uid= "TestUID2" action = "Aborted" /> </schs> </data> *NewSchsID、newageは""となる。 先立つnotice.type="Deleted"がファイルの削除を通知しているので、 ここでは特に削除に関する情報は送信しない。 |
クライアント |
---|
<files type="Add"> <file name="FILEANAME0.EXTENTION"/> <file name="FILEANAME1.EXTENTION"/> </files> |
サーバ |
---成功時 <files type="Result" result="Success" subtype="Add" > <file name="FILENAME0.EXTENTION"> <file name="FILENAME1.EXTENTION"> ... </file> ---失敗時 <files type="Result" result="Failure" subtype="Add" desc="失敗原因" /> |
クライアント |
---|
<files type="Delete"> <file name="FILEANAME0.EXTENTION"/> <file name="FILEANAME1.EXTENTION"/> </files> |
サーバー |
---成功時 <files type="Result" result="Success" subtype="Delete" > <file name="FILEANAME0.EXTENTION"/> <file name="FILEANAME1.EXTENTION"/> </files> ---失敗時 <files type="Result" result="Failure" subtype="Delete" desc="失敗原因" /> |
サーバ |
---|
<notice type="Updated"> <schs filename="FILENAME.EXTENTION" baseage = "CAge" newage = SAge newid="NewSchsID" > <sch uid= "*****" ...>...</sch> ... </schs> </notice> |
サーバ |
---|
<notice type="Deleted"> <file name="FILEANAME0.EXTENTION"/> ... <notice/> |
サーバ |
---|
<notice type="Disconnect" /> |
クライアント |
---|
<command type="Exit" /> |
クライアント |
---|
<command type="Config"> <setting Key="SETTING_KEY_NAME" value="SETTING_VALUE" /> ... <command/> |
サーバ |
<command type="Result" result="Success" > <setting relult="Success/Failure" Key="SETTING_KEY_NAME" value="SETTING_VALUE" /> ... <command/> |
サーバ |
---|
<command type="Disconnect" /> |
<type type="IP" /> | IPアドレス認証 |
<type type="Plain" /> | プレーンテキスト認証 |
<type type="Challenge/Response/MD5" /> <challenge>CHALLENGE_STRING</challenge> </type> | MD5ダイジェストによるチャレンジ/レスポンス認証 *注意 将来の実装例 |