Upravitelj veze

Uvod

Upravitelj veze je prvi dio funkcije grupnog razgovora. Ova razreda upravlja povezanostima s vršnjacima i nudi korisniku multipleksirane socke na uređaje koje žele povezati. Na primjer, ako Alice želi biti povezana s jednim Bobovim uređajem za prenos 2 datoteke, ona će zatražiti od Upravitelja povezivanja da otvori 2 kanala (jedan po datoteku) Bobu.

    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
        }
    });

Nakon toga, ConnectionManager će se prvo povezati s Bobovim uređajem putem DHT-a (preko ICE-a) i postaviti TLS Socket.

DHT strana

To je isto kao call, gle Exchange ICE kandidati, ICE pregovore, Encrypt kontrolni soket ali samo u TCP.

Međutim, kada stranka primi novi zahtjev ICE-a, aktivira se povratni poziv koji je postavljen na nul onICERequest(onICERequestCallback&&& cb);.

Pregovarajući o novom kanalu

Kanala se definiše ID (unique) i uri (neunique).

Kada je spreman, ConnectionManager smatra da kanal 0 postoji. Ovaj kanal se zove kanal CONTROL i koristi se za traženje novih kanala.

Upotreban protokol je prilično jednostavan i izgleda kao RTP protokol:

  1. 16 bitova se koristi za skladištenje dužine tijela.

  2. 16 bitova za ID kanala (pošto se nalazi na odredištu)

  3. tijelo

Dakle, svi paketi imaju 32-bitni len header.

Za zahtjev za novi kanal, ConnectionManager će poslati ChannelRequest objekt (msgpack se koristi za serializaciju strukture) u kanalu 0 kako bi poslao ID i ime novog kanala vršnjacu (s isAnswer = false).

Zatvaranje kanala

U slučaju da je u skladu s člankom 3. stavkom 1. stavkom 1. stavkom 1.

Structura vezeManager

Vlasništvo

  1. JamiAccount posjeduje ConnectionManager i imaju pristup ChannelSocket objektima (shared_ptr posjeduje MultiplexedSocket.

  2. ConnectionManager posjeduje MultiplexedSockets i ICE objekte

  3. MultiplexedSockets posjeduje TLS transport i ChannelSocket objekte

  4. ChannelSocket posjeduje rezervoare podataka

Uloga

  1. ConnectionManager se koristi za upravljanje povezanostima s vršnjacima.

  2. MultiplexedSockets se koristi za pošiljanje podataka preko TLSSocket, čitanje prihađenih paketa i upravljanje kanalima.

  3. ChannelSockets se koristi klijentom za interakciju s drugim vršnjacima.

Ugrađivanje

Scenariji su opisani u odgovarajućim testovima jedinica (test/unitTest/connectionManager/connectionManager.cpp)