ファイル転送

このページは削除されています:読みなさい 開発者/集群:ファイル転送

どうやって使うか?

ゲノム

会話では,会話の右下にあるファイル送信アイコンをクリックする必要があります.

メールを送信する (Gnome_send_file)

転送が完了するとすぐに画像が表示されます (画像が活性化されます)

ゲノム・画像は, ゲノム・画像の画像を

ファイルが受信されても (画像ではなく 20 Mb) 転送を受け付けなければなりません

ゲノム・アセプト ゲノム・アセプト ゲノム・アセプト ゲノム・アセプト ゲノム・アセプト

転送中にキャンセルできる

プロジェクト/アップলোড/92f319f8a88f75c388020d999f607bdc/Gnome_ongoing.png)

Android

Androidで誰かと話しているとき,デバイスに写真を送信したり,

ダウンロード/アップলোড/d68472b2c2c7bfcc616b0c674c9c7a8fed/Android_file_buttons.png)

ファイルを送信すると,相手はそれを受け入れなければならない. この時点で"等しい同級者"が表示されます.

オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・オンライン・ オンライン・オンライン・オンライン・ オンライン・オンライン・オンライン・ オンライン・ オンライン・ オンライン・オンライン・ オンライン・ オンライン・ オンライン・ オンライン・ オンライン・ オンライン・ オンライン・ オンライン・ オンライン・ オンライン・ オンライン・ オンライン・ オンライン・ オンライン・ オンライン・ オンライン・ オンライン・ オンライン・ オンライン・ オンライン・ オンライン・ オンライン・ オンライン・ オンライン・ オンライン・ オンライン・ オンライン・・・・・・ オンライン・ オンライン・・・・ オンライン・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

どうなるの?

機能する仕組み

紹介

ファイル転送も同様です.基本的に,ファイル転送と通話を行うのに同じ方法を使用しますが,TCPではです.どのように機能するかをまとめると,アリス (A) がボブ (B) にファイル転送したいという状況を想像できます.

アリスは,最初にボブに接続を要請する.そのために,ジャミは同級者の間のリンクを交渉するために使用されるプロトコルであるICE (RFC 6544) を使用している.アリスは,DHTを通じて暗号化されたパケットにデバイスのIPを送信する.したがって,ボブがアリスのIPを受け取ると,彼らはボブがアリスに送信できる輸送を交渉することができる.交渉は成功する可能性があります.しかし,失敗した場合,転送を行うためにTURNサーバ (設定に設定されたもの) が使用される.交渉が成功した場合,ボブは他の方向で交渉を行うためにiPSをアリスに送信します.リンクはまだ送信されていないことに注意してください,したがってボブは暗号化されたメッセージでDHTを通じてiPSを安全に送信します.第2回の交渉が失敗した場合,TURNは後退として使用されます.

この2方向の TCP リンクがここにあるので 次のステップは,Alice と Bob の間で TLS 1.3 (通常は (TLS1.3) - (DHE-FFDHE8192) - (RSA-PSS-RSAE-SHA384) - (AES-256-GCM) を交渉することになります.

ファイル内容を記述する小さなヘッダーが最初の部分になります. ボブが転送を承認した後,ファイル全体が送信されます.

プロセス

ファイルを送信する

次の方法を使用します.

1. クライアントは, DataTransferFacade::sendFile() . DataTransferFacadeは,クライアントに暴露されたAPIに対応するクラスです. ファイル転送のビューを管理するために使用されます (対応するクラスは, DataTransfer, IncomingFileTransfer, OutgoingFileTransfer, SubOutgoingFileTransfer). この方法は,リンクされた JamiAccount`を接続を要求します.

画像/ファイル転送-データ転送-クラス図.png)

2.メソッド DhtPeerConnector: requestConnection() が起動され,ピアのすべての接続されたデバイス (DHTで見つかった) の間で接続を作成します. DhtPeerConnectorは接続を管理するメインイベントループに使用されます.デバイスが見つかったとき, *イベントループ*は, ClientConnector(一つのデバイスの接続を管理する) を作成し,プロセス) `メソッドを起動します.

3.この方法は,ICE輸送を初期化し,DHTにPeerConnectionMsg* (以下 SDPメッセージを含む) を入れて応答を待つ (DhtPeerConnector::Impl::onResponseMsg).

4. DHTから応答が受信され,ペアデバイスの公開アドレスが含まれます.現在,TLSリンクを交渉することができます (直接ICE,またはTURNを通じてバックバックとして).この TlsSocketEndpointは,出力として `PeerConnection オブジェクトに与え,転送が開始できます.

5.\ TLSソケットが準備ができると,コールバック DataTransferFacade::Impl::onConnectionRequestReplyを呼び出し,入力として OutgoingFileTransferPeerConnectionにリンクします.この OutgoingFileTransferには,各サブ転送が1デバイスへの転送である (各デバイスごとに1個) のリストが含まれます.我々は,転送の最も楽観的な見方を提供できるようにします (もし3デバイスとして連絡が1デバイスで転送をキャンセルし,他の2デバイスで転送を承認した場合は,最も高度な転送が表示されます).

SubOutgoingFileTransfer は,まずファイルのヘッダを転送し,ピア・受け入れを待つ (ソケットに"GO\n"メッセージ) を送信します.

7. ピアまたはクライアントからキャンセルが受信された場合,またはファイル転送が終了した場合, DhtPeerConnector::eventLoop() のメッセージを通じて接続が終了し,リソースが解放されます.

画像/ファイル転送-tlssocketendpoint-diagram.png)

ファイルを受け取る

ファイルを受け取るのに同じ構造が使用されますが,方法は少し変わります.

  1. JamiAccount クラスで DHTからのメッセージが受信されます.最初に受信されるものは DHT 要求です.

  2. DhtPeerConnector: onRequestMessage() にこのメッセージが送られます.

  3. DhtPeerConnector::Impl::answerToRequestは,TURNサーバーに接続し,ICE輸送を初期化します.この方法は,TURNサーバーに2つの制御接続を開きます. (RFC 6156によるIPv6ピアへのアクセス) がまだ開いていない場合,Peeer公開アドレスが接続できます.その後,受信されたSDPにはICE候補者が含まれていない場合,TURNを使用して,SDPの答えを作成してピアを待つ.SDPにはICE候補者が含まれている場合,この方法はリンクを交渉し,SDPに返信します (またはICE候補者または否).

  4. リンクが準備ができると,送信者のように TLS リンクが交渉され, PeerConnection に入力として IncomingFileTransfer に与えられます.ファイルのヘッダが来られ,クライアントは転送を承認またはキャンセルすることができます.

ファイル転送を再申請する

developer/swarm:Other mime typesで指定されているように,データ転送相互作用は,現在同期され,会話に保存されます.したがって,デバイスはファイルがダウンロードされたかどうかを容易に検出できます.そうでない場合,会話中のすべてのメンバーにファイルを再び送信するよう要求できます.

このために,デバイスは,mime型の json を送信します: アプリケーション/データ転送要求+json ヽ (会話 id) を含む, インタラクション (関連インタラクション), デバイスId ファイルを受け取るデバイス.

送信者は,デバイスが発表されたピアからのデバイスであり,デバイスが会話のメンバーであることを確認し,従来のファイル転送を通じてファイルを送信することができます.

受信者は最初の受信転送を受け取り,ファイルをダウンロードして sha3sumが正しいかどうかを確認できます.

計画

図書:主図図

SDPはDHTで送信されました
0d04b932
7c33834e7cf944bf0e367b47
H6e6ca682 1 TCP 2130706431 2607:fad8:4:6:9eb6:d0ff:dead:c0de 50693 typ host tcptype passive
H6e6ca682 1 TCP 2130706431 2607:fad8:4:6:9eb6:d0ff:dead:c0de 9 typ host tcptype active
H42c1b577 1 TCP 2130706431 fe80::9eb6:d0ff:fee7:1412 50693 typ host tcptype passive
H42c1b577 1 TCP 2130706431 fe80::9eb6:d0ff:fee7:1412 9 typ host tcptype active
Hc0a8007e 1 TCP 2130706431 192.168.0.123 42751 typ host tcptype passive
Hc0a8007e 1 TCP 2130706431 192.168.0.123 9 typ host tcptype active
Sc0a8007e 1 TCP 1694498815 X.X.X.X 42751 typ srflx tcptype passive
Z.Z.Z.Z:YYYY
A.A.A.A:YYYY

0d04b932は,ufragと 7c33834e7cf944bf0e367b47のICEセッションのパスワードである. 21307064311694498815は,候補者の優先事項である. 192.168.0.126 42751型ホスト tcptype pasiveは,被動ホスト候補であり, 1694498815 X.X.X.X 42751型 srflx tcptype pasiveは,公共 ip を反映する被動ホストである (例えば UPnP を介して地図化されている).

多重装置

RINGユーザーは複数のデバイスにアカウントをリンクすることができます. そのため,このアカウントに複数のデバイスがリンクされている連絡先にファイルを送信するユーザが転送を行う必要があります.

最初のアプローチ

最初のアプローチは,DHTを通じてすべてのデバイスに要求を送信し,応答する最初のデバイスはファイル転送をします.これはあなたの連絡先にとって悪い,なぜならどのデバイスが受信するか,転送を受け取るかわからないからです.

現在のアプローチ

ファイルを受け取る通知がすべてのデバイスに与えられ,転送を受け入れ/拒否することができます.そのコードの主要な部分は data_transfer.cppです.

現在 (https://gerrit-ring.savoirfairelinux.com/#/c/9327/> から) ユーザーがファイルを送信すると,すべてのピアデバイスで PeerConnection を要求します.そしてすべての接続に対して,私たちは新しい入力ストリームを添付し,それぞれの転送を別々に受け入れ/拒否/キャンセルする能力を有します.

data_transfer.cpp では,クライアントに表示される楽観的なビューを表す OptimisticMetaOutgoingInfo クラスを定義します. それは楽観的なものです. 連絡先が1つのデバイスで転送を承認し,他のデバイスで拒否した場合,このクラスは進行中のファイル転送を表示します. そしてすべてのデバイスが転送を拒否した場合のみエラーを表示します.

このクラスは,一つのデバイスで転送の状態を表す SubOutgoingFileTransfer にリンクされています.クライアントは,後で楽観的な代わりにサブ転送を表示することができます (TODOリストを参照).

別のTURNサーバを使用する

実際のデフォルトのTURNサーバーは turn.ring.cx. しかし,あなたは自分のTURNサーバーをホストすることができます.例えば, [coturn] (https://github.com/coturn/coturn) サーバを実行することによって.

sudoターンサーバー -a -v -n -u ユーザー:パスワード -r "領域"

RINGの先端設定で TURNサーバを設定できます

注:これは技術的な知識が必要である.さらに,TURNサーバーは目的 node またはピア接続が失敗する node の IP アドレスと同じ IP アドレスを見なければならない (権限が不正なため)

未来

現在,ファイル転送が進行中の間に失敗した場合,送信者は転送を再開することはできません.そして,転送全体を再起動する必要があります.将来,転送を再開するための再試用ボタンが表示されます.

Finally, because Jami do not support text conferences (just video conferences, where there is one master merging slaves SIP calls), there is no real file transfer in conferences. For now, when you are in a conference on the gnome client for example: A master, B and C slave. B will be able to send a file to A the master (C same) A will be able to send a file to B or to C (just have to select the correct conversation).

TODOリスト

  1. ユニットテストを追加する (https://gerrit-ring.savoirfairelinux.com/#/c/9365/)

  2. 出発ファイルへのサブ転送状態を表示

  3. 補償履歴書 (転出失敗の場合)