Управник веза

Увод

Menadžer veze je prvi deo funkcija grupnog ćaskanja. Ova klasa upravlja vezama sa kolegama i nudi korisnicima multipleksirane utičnice za uređaje koje žele da povežu. Na primer, ako Alisa želi da bude povezana sa jednim od Bobovih uređaja radi prenosa 2 fajla, ona će zatražiti od ConnectionManager-a da otvori 2 kanala (jedan po datoteci) Bobu. Ovo će dati:

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

Затим се ConnectionManager прво повезује са Бобovim уређајем преко DHT-а (преку ICE-а) и поставља TLS Socket. Онда ће тражити канал, а када је канал спреман, обавести Алису путем званог обављења.

ДХТ страна

То је исто као call, види Exchange ICE kandidati, ICE преговарање, Encrypt контролна затвара али само у TCP.

Међутим, када страна прими нову захтев за ИЦЕ, активира се повратна позива постављена са невадим onICERequest(onICERequestCallback&&& cb);.

Pregovaranje o novom kanalu

Канал се дефинише ID (уникално) и uri (не јединствено).

Када је спреман, Управник веза сматра да канал 0 постоји. Овај канал се назива канал CONTROL и користи се за тражење нових канала.

Протокол који се користи је прилично једноставан и изгледа као RTP протокол:

  1. 16 битова се користи за чување дужине тела.

  2. 16 битова за идентификатор канала (дестинација)

  3. тело

Дакле, сви пакети имају 32-битно леен наслово.

За захтев за нови канал, Управник веза ће послати ChannelRequest објекат (msgpack се користи за сериализацију структура) у каналу 0 да би послао идентификатор и име новог канала врснику (с isAnswer = false).

Затварање канала

ЕОФ се преноси за канал ако је дужина садржаја 0.

Структура повезивањаГраф

Собственост

  1. Јамиакунт поседује ConnectionManager и имају приступ објектима ChannelSocket (shared_ptr поседује са MultiplexedSocket.

  2. Коннекција менаџер поседује објекте MultiplexedSockets и ICE

  3. MultiplexedSockets поседује TLS транспорт и ChannelSocket објекте

  4. ChannelSocket поседује буфер податке

Улога

  1. ConnectionManager се користи за управљање везама са вршњацима.

  2. Мултиплексекс Сокети се користе за слање података преко ТЛССокета, читање долазних пакета и управљање каналима.

  3. ChannelSockets се користи од стране клијента за интеракцију са другим вршњацима.

Употреба

Сценари су описани у одговарајућим јединицам тестирања (test/unitTest/connectionManager/connectionManager.cpp)