Sisujuhataja

Sisend

Seirejuhtimine on esimene osa rühma tsate funktsioonidest. See klass haldab ühendusi kaaslastega ja pakub kasutajale multipleksitud soketeid seadmetele, mida nad tahavad ühendada. Näiteks, kui Alice tahab olla ühendatud ühe Bob’i seadmega, et üle kanda 2 faili, palub ta ConnectionManageril avada 2 kanalit (üks faili kohta) Bobile. See annab:

    aliceAccount->connectionManager().connectDevice(bobDeviceId, "file://file1",
        [](std::shared_ptr<ChannelSocket> socket) {
        if (socket) {
            // transfer first file
        }
    });

    aliceAccount->connectionManager().connectDevice(bobDeviceId, "file://file2",
        [](std::shared_ptr<ChannelSocket> socket) {
        if (socket) {
            // transfer second file
        }
    });

Selle taga ühendatakse ConnectionManager kõigepealt Bob’i seadmega DHT (ICE kaudu) ja seadib TLS-paketti.

DHT külg

See on sama kui call, vaata Exchange ICE kandidaatid, ICE läbirääkimised, Encrypt kontrollisõiduke kuid ainult TCP.

Kui üks pool saab uue ICE-nõue, siis aktiveeritakse siiski tagasivõtmine, mis on määratud null onICERequest(onICERequestCallback&&& cb);.

Uue kanali läbirääkimised

Kanalit määratletakse id (uniik) ja uri (ei ole unikaalne).

Kui see on valmis, peab ConnectionManager kanali 0 olemasolu.

Kasutatud protokoll on üsna lihtne ja näeb välja nagu RTP protokoll:

  1. 16 bitit kasutatakse keha pikkuse säilitamiseks.

  2. 16 bitit kanali ID (suunas)

  3. keha

Kõigil paketel on 32 bitise len header.

Uue kanali taotlemiseks saadab ConnectionManager kanali 0-sse ChannelRequest objekti (msgpack kasutatakse struktu seriaaliseerimiseks) ning saadetakse uue kanali ID ja nimi (sõnad on: isAnswer = false).

Kanali sulgemine

Kanali jaoks edastatakse EOF, kui sisu pikkus on 0.

Sisu struktuurManager

Isiklik omadus

  1. JamiAkonto omandab ConnectionManager ja on juurdepääs ChannelSocket objektidele (shared_ptr omandiga MultiplexedSocket.

  2. ConnectionManager omandab MultiplexedSockets ja ICE objekte

  3. MultiplexedSockets omandab TLS transpordi ja ChannelSocket objektide

  4. ChannelSocket omandab andmepufferid

Töökohti

  1. ConnectionManagerit kasutatakse kaaslaste ühenduste haldamiseks.

  2. MultiplexedSockets kasutatakse andmete saatmiseks TLSSocketis, sisenevate pakettide lugemiseks ja kanalite haldamiseks.

  3. ChannelSocketsit kasutab klient teise kaaslasega suhtlemiseks.

Kasutamine

Scenarioid kirjeldatakse vastavates üksusteeskuses (test/unitTest/connectionManager/connectionManager.cpp)