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:
16 bitova se koristi za skladištenje dužine tijela.
16 bitova za ID kanala (pošto se nalazi na odredištu)
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
JamiAccount posjeduje ConnectionManager i imaju pristup ChannelSocket objektima (shared_ptr posjeduje MultiplexedSocket.
ConnectionManager posjeduje MultiplexedSockets i ICE objekte
MultiplexedSockets posjeduje TLS transport i ChannelSocket objekte
ChannelSocket posjeduje rezervoare podataka
Uloga
ConnectionManager se koristi za upravljanje povezanostima s vršnjacima.
MultiplexedSockets se koristi za pošiljanje podataka preko TLSSocket, čitanje prihađenih paketa i upravljanje kanalima.
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
)