Skip to content
Snippets Groups Projects
Select Git revision
  • b3d8577db4d65bd713a4232dc7a888a2871e1ace
  • master default protected
  • release/202005
  • release/202001
  • release/201912
  • release/201911
  • release/releaseWindowsTestOne
  • release/windowsReleaseTest
  • release/releaseTest
  • release/releaseWindowsTest
  • release/201910
  • release/qt/201910
  • release/windows-test/201910
  • release/201908
  • release/201906
  • release/201905
  • release/201904
  • release/201903
  • release/201902
  • release/201901
  • release/201812
  • 4.0.0
  • 2.2.0
  • 2.1.0
  • 2.0.1
  • 2.0.0
  • 1.4.1
  • 1.4.0
  • 1.3.0
  • 1.2.0
  • 1.1.0
31 results

message_engine.cpp

Blame
    • Fadi Shehadeh's avatar
      b3d8577d
      DRT: integrate DRT components to conversation · b3d8577d
      Fadi Shehadeh authored and Sébastien Blin's avatar Sébastien Blin committed
      This patches avoid swarm members to connect to all devices of the
      conversation by using a better routing mechanism.
      The idea is to add a component called "DRT" that will store, like
      a DHT, a routing table containing the known devices of the conversation.
      The DRT is bootstraped with the list of the devices that already wrote
      a message in the conversation, else with some other members that have
      devices present (because lot of devices may never have written any message).
      Moreover, because a user can import an old backup without the conversation
      and without other devices present, we also try to connect to 2 other random
      members because they may never connect if they are on an old back-up.
      
      Once bootstraped, the DRT is used to decide to who a user should be
      connected. And it will use approximately log(N) connections (instead
      of N like before). So, when sending a message, a user will send to
      connected peers (and some mobiles). Then, some peers in the conversation
      will get the message, pull it, then announce to their nearest peers (and
      some mobiles) until all peers got the new message. To avoid infinite loop,
      we check if we already got the commit and if we have something to announce.
      
      Finally, if somebody disconnect, this will cause the DRT to try to re-fill
      its bucket and try to connect to a new device.
      
      GitLab: #297
      Change-Id: I137788c77219fe74287585882260547cc5628784
      b3d8577d
      History
      DRT: integrate DRT components to conversation
      Fadi Shehadeh authored and Sébastien Blin's avatar Sébastien Blin committed
      This patches avoid swarm members to connect to all devices of the
      conversation by using a better routing mechanism.
      The idea is to add a component called "DRT" that will store, like
      a DHT, a routing table containing the known devices of the conversation.
      The DRT is bootstraped with the list of the devices that already wrote
      a message in the conversation, else with some other members that have
      devices present (because lot of devices may never have written any message).
      Moreover, because a user can import an old backup without the conversation
      and without other devices present, we also try to connect to 2 other random
      members because they may never connect if they are on an old back-up.
      
      Once bootstraped, the DRT is used to decide to who a user should be
      connected. And it will use approximately log(N) connections (instead
      of N like before). So, when sending a message, a user will send to
      connected peers (and some mobiles). Then, some peers in the conversation
      will get the message, pull it, then announce to their nearest peers (and
      some mobiles) until all peers got the new message. To avoid infinite loop,
      we check if we already got the commit and if we have something to announce.
      
      Finally, if somebody disconnect, this will cause the DRT to try to re-fill
      its bucket and try to connect to a new device.
      
      GitLab: #297
      Change-Id: I137788c77219fe74287585882260547cc5628784
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    managerimpl.cpp 94.44 KiB
    /*
     *  Copyright (C) 2004-2007 Savoir-Faire Linux inc.
     *  Author: Alexandre Bourget <alexandre.bourget@savoirfairelinux.com>
     *  Author: Yan Morin <yan.morin@savoirfairelinux.com>
     *  Author: Laurielle Lea <laurielle.lea@savoirfairelinux.com>
     *  Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
     *  Author: Guillaume Carmel-Archambault <guillaume.carmel-archambault@savoirfairelinux.com>
     *
     *  This program is free software; you can redistribute it and/or modify
     *  it under the terms of the GNU General Public License as published by
     *  the Free Software Foundation; either version 3 of the License, or
     *  (at your option) any later version.
     *
     *  This program is distributed in the hope that it will be useful,
     *  but WITHOUT ANY WARRANTY; without even the implied warranty of
     *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     *  GNU General Public License for more details.
     *
     *  You should have received a copy of the GNU General Public License
     *  along with this program; if not, write to the Free Software
     *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
     */
    
    #include <errno.h>
    #include <time.h>
    #include <cstdlib>
    #include <iostream>
    #include <fstream>
    #include <sstream>
    #include <sys/types.h> // mkdir(2)
    #include <sys/stat.h>	// mkdir(2)
    
    #include <cc++/socket.h>   // why do I need this here?
    #include <ccrtp/channel.h> // why do I need this here?
    #include <ccrtp/rtp.h>     // why do I need this here?
    #include <cc++/file.h>
    
    #include "conference.h"
    
    #include "manager.h"
    #include "account.h"
    #include "sipaccount.h"
    #include "audio/audiolayer.h"
    #include "audio/alsalayer.h"
    #include "audio/pulselayer.h"
    #include "audio/tonelist.h"
    
    #include "accountcreator.h" // create new account
    #include "sipvoiplink.h"
    
    #include "user_cfg.h"
    
    #define fill_config_str(name, value) \
      (_config.addConfigTreeItem(section, Conf::ConfigTreeItem(std::string(name), std::string(value), type_str)))
    #define fill_config_int(name, value) \
      (_config.addConfigTreeItem(section, Conf::ConfigTreeItem(std::string(name), std::string(value), type_int)))
    
    ManagerImpl::ManagerImpl (void)
            : _hasTriedToRegister (false)
            , _config()
            , _currentCallId2()
            , _currentCallMutex()
            , _codecBuilder (NULL)
            , _audiodriver (NULL)
            , _dtmfKey (NULL)
            , _codecDescriptorMap()
            , _toneMutex()
            , _telephoneTone (NULL)
            , _audiofile()
            , _spkr_volume (0)