Tiedostojen siirto

THIS PAGE IS DEPRECATED: READ File transfer

Miten sitä käytetään?

Android

Kun puhut Android-käyttäjälle, sinulla on mahdollisuus lähettää kuva laitteellesi tai ottaa kuva näillä nappilla:

Android_file_button

Huomautus: lähettämällä tiedosto, toinen on hyväksyttävä sen.

! Android_waiting_peer

Miten se toimii?

Miten se toimii

Esitelmä

Jami on jakautunut sovellus ja sen on toimittava ilman internetyhteyttä. Joten tiedostojen siirto myös! Periaatteessa käytämme samaa menetelmää tiedostojen siirron ja puhelujen suorittamiseksi, mutta TCP:ssä.

Aliisin mukaan Aliisin IP-osoitteen lähettäminen on tehtävä yhdessä, ja sen jälkeen Aliisin IP-osoitteen lähettäminen on mahdollista. Aliisin IP-osoitteen lähettäminen on mahdollista, jos Bob voi lähettää paketteja Aliisin luo. Neuvottelu voi onnistua, mutta jos se epäonnistuu, siirtoa varten käytetään TURN-palvelinta (se, joka on määritelty asetuksiin). Jos neuvottelu onnistuu, Bob lähettää aliisin IP-osoitteen sen kanssa, jotta se suorittaa neuvottelut toisella suunnalta. Huomaa, että linkki ei vielä lähetä, joten Bob lähettää IP-osoitteet DHT:n kautta salautetussa viestissä.

Nyt kun kaksisuuntainen TCP-yhteys on täällä, seuraava askel on neuvotella TLS 1.3 (yleensä (TLS1.3) - DHE-FFDHE8192) - RSA-PSS-RSAE-SHA384) - AES-256-GCM) -aineiden kirjoittamisen yhteydessä Alice ja Bobin välillä, sitten Alice alkaa siirtää tiedostoa.

Ensimmäinen osa on pieni otsikko, jossa kuvataan tiedoston sisältö.

Prosessi

Lähetä tiedosto

Käytetään seuraava menetelmä:

1. Asiakas soittaa DataTransferFacade::sendFile() . DataTransferFacade on luokkaan, joka vastaa asiakkaan paljastettuja API:tä. Sitä käytetään tiedostojen siirtojen näkymän hallintaan (vastavat luokkat ovat DataTransfer, IncomingFileTransfer, OutgoingFileTransfer ja SubOutgoingFileTransfer).

![Diagramma: DataTransfer-luokan diagramma]images/file-transfer-dataatransfer-class-diagram.png)

2. Menetelmä DhtPeerConnector: requestConnection() käynnistetään ja luodaan yhteys kaikkien vertaisesta (DHT:n) liittyvien laitteiden välillä. DhtPeerConnector käytetään yhteyksiä hallinnoivan päätapahtuman pyörimiseen.

3. Tätä menetelmää käytetään ICE-liikenteen käynnistämiseen ja DHT:lle PeerConnectionMsg (joka sisältää SDP-viestin, ks. alla) ja odottaa vastausta (DhtPeerConnector::Impl::onResponseMsg).

4. Sitten DHT:stä vastaanotetaan vastaus, joka sisältää vertaislaitteen julkiset osoitteet. Nyt voimme neuvotella TLS-yhteyden (suoraan ICE:n kautta tai TURN:n kautta takaisin). Tämä TlsSocketEndpoint annetaan PeerConnection kohteelle ulkona ja siirto voi alkaa.

5.\ Kun TLS-liike on valmis, takaisinsoitusta kutsutaan DataTransferFacade::Impl::onConnectionRequestReply, ja OutgoingFileTransfer yhdistetään PeerConnection sisäänkäyntiksi. Tämä OutgoingFileTransfer sisältää luettelon SubOutgoingFileTransfer (yhdestä laitteesta) jossa jokainen alasiirto on siirto yhdelle laitteelle.

6. SubOutgoingFileTransfer siirtää ensin tiedoston otsikon, odottaa vertaisopimus (Sähköllä oleva ”GO\n” viesti) ja lähettää sitten tiedoston.

7. Jos pari- tai asiakas vastaanottaa peruutuksen tai jos tiedostojen siirto päättyy, yhteys suljetaan DhtPeerConnector::eventLoop() -viestien kautta ja resurssit vapautetaan.

! [TLSsocketEndpoint](kuvia/tiedostojen siirto-tlssocketendpoint-diagram.png)

Saadaan tiedosto

Tiedostojen vastaanottamiseen käytetään samaa rakenteetta, mutta menetelmä muuttuu hieman:

  1. JamiAccount luokka käytetään DHT:n viestejen vastaanottamiseen, koska ensimmäinen vastaanotettu asia on DHT-pyyntö.

  2. Tämän jälkeen tämä viesti toimitetaan DhtPeerConnector:onRequestMessage() tapahtuma-lähtöllä.

  3. DhtPeerConnector::Impl::answerToRequest yrittää yhdistyä TURN-palvelimelle (jos ei ole yhteydessä) ja käynnistää ICE-kuljetuksen. Tämä menetelmä avaa 2 ohjausyhteyttä TURN-palvelimelle (yhdinen IPv4-verkkotyypille, toinen IPv6-verkkotyypille, RFC 6156) jos se ei ole jo auki ja salli verkkotyyppien julkisten osoitteiden yhteyden. Sitten, jos vastaanotettu SDP ei sisällä ICE-ehdokastajia, käyttää TURN:tä ja suunnittelee SDP-vastauksen, jotta se odottaa verkkotyypää. Jos SDP sisältää ICE-ehdokastajia, menetelmä yrittää neuvotella linkin (tai pudottaa TURN:tä) ja vasta sitten SDP:lle (ICE-ehdokastajien kanssa tai ei).

  4. Kun linkit ovat valmiita, kuten lähettäjä, TLS-linkki neuvotellaan ja annetaan PeerConnection , joka annetaan IncomingFileTransfer sisäänpääsyä.

Pyydä uudelleen aiempaa tiedostojen siirtoa

As specified in Other mime types, the data-transfer interactions are now synced and stored into conversations. So, a device can easily detects if a file was downloaded or not. If not, it can asks all members in the conversation to transmits the file again.

Tätä varten laite lähettää json: mime-tyyppinen json: application/data-transfer-request+json, joka sisältää conversation (talkinnan tunnus), interaction (yhteenliittynyt vuorovaikutus), deviceId tiedostoon vastaanottavan laitteen.

Lähettäjä tarkistaa nyt, onko laite ilmoitetun vertaisen laite ja onko laite keskustelun jäsen ja voi lähettää tiedoston klassisen tiedoston siirron kautta.

vastaanottaja voi nyt hyväksyä ensimmäisen tulonsiirron, ladata tiedosto ja tarkistaa, että sha3sum on oikea.

Skeema

! [Kirjoitus: pääskema-kirjoitus]

SDP lähetettiin DHT:n kautta
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

Jos 0d04b932 on ufrag ja 7c33834e7cf944bf0e367b47 ICE-istunnossa oleva salasana. 2130706431 ja 1694498815 ovat ehdokkaiden ensisijainen tehtävä. 192.168.0.126 42751 tyyppi isäntä tcptype passiivinen on passiivinen isäntäkandidaatti ja 1694498815 X.X.X.X 42751 typ srflx tcptype passiivinen passiivinen isäntä, joka heijastaa julkista ip-kääntöä (esimerkiksi UPnP:n kautta kartoitettu).

Monenlaiset laitteet

A user can link its account to several devices. So, we need to implement the transfer when a user send a file to a contact who have multiple devices linked to this account.

Ensimmäinen lähestymistapa

Ensimmäinen lähestymistapa oli lähettää pyyntö DHT:n kautta kaikille laitteille ja ensimmäiset laitteet, jotka vastaavat saavat tiedoston siirretyksi. Tämä on huonoa yhteyteen, koska he eivät tiedä, mikä laite vastaanottaa saa siirron.

Nykyinen lähestymistapa

Nyt lähetämme edelleen pyynnön kaikille laitteille. Erotuksena on, että kaikilla laitteilla on tiedonanto tiedoston vastaanottamisesta ja ne voivat hyväksyä/ kieltäytyä siirrosta.

Now (since https://review.jami.net/c/jami-daemon/+/9327), when a user send a file, it will request a PeerConnection with all peer devices. And for all connections, we attach a new input stream to have the ability to accept/refuse/cancel each transfer separately.

data_transfer.cpp -luokassa määritellään OptimisticMetaOutgoingInfo -luokka, joka edustaa asiakkaalle esitettävää optimistista näkymistä. Se on optimistista, koska jos yhteys hyväksyy siirron yhdellä laitteella ja kieltäytyy muista, tämä luokka näyttää jatkuvan tiedostojen siirron.

Tämä luokka on sidottu * SubOutgoingFileTransfer* -järjestelmään, jotka edustavat yhden laitteen siirron tilaa. Asiakkailla on mahdollisuus näyttää jälkikäteen optimistiikkainen siirto (ks. TODO-luettelo).

Käyttämällä toista TURN-palvelimen

Actually the default TURN server is turn.jami.net. But you can host your own TURN server. For example by running a coturn server.

sudo turnserver -a -v -n -u käyttäjä: salasana -r "realm"

Then, you can configure the TURN server in the advanced settings of the app.

Huomautus: tämä vaatii tiettyjä teknisiä tietoja. Lisäksi TURN-palvelimella pitäisi nähdä sama yhteys, kun kohde-yhteys epäonnistuu (sillä valtuutus on virheellinen)

Koko lista

  1. Use libtorrent?

  2. Näytä ulottuvien tiedostojen alisiirtojen tila