From 248ad66a92f98bc973ad37cedf190bdfeb490066 Mon Sep 17 00:00:00 2001
From: Tristan Matthews <tristan.matthews@savoirfairelinux.com>
Date: Mon, 3 Jun 2013 16:21:50 -0400
Subject: [PATCH] * #23661: daemon: restore getCallList

---
 daemon/src/Makefile.am         |  3 ++-
 daemon/src/iax/iaxvoiplink.cpp | 11 +++++++++++
 daemon/src/iax/iaxvoiplink.h   |  5 +++++
 daemon/src/managerimpl.cpp     | 23 +++++++++--------------
 daemon/src/map_utils.h         |  1 +
 daemon/src/sip/sipvoiplink.cpp | 12 ++++++++++++
 daemon/src/sip/sipvoiplink.h   |  4 ++++
 7 files changed, 44 insertions(+), 15 deletions(-)

diff --git a/daemon/src/Makefile.am b/daemon/src/Makefile.am
index 3ffa2b7c0f..83e3652fb4 100644
--- a/daemon/src/Makefile.am
+++ b/daemon/src/Makefile.am
@@ -102,4 +102,5 @@ libsflphone_la_SOURCES = conference.cpp \
 		sfl_types.h \
 		array_size.h \
 		account_schema.h \
-		registration_states.h
+		registration_states.h \
+		map_utils.h
diff --git a/daemon/src/iax/iaxvoiplink.cpp b/daemon/src/iax/iaxvoiplink.cpp
index 5a7ae52acd..6ff8a6e2e7 100644
--- a/daemon/src/iax/iaxvoiplink.cpp
+++ b/daemon/src/iax/iaxvoiplink.cpp
@@ -44,6 +44,7 @@
 #include "audio/samplerateconverter.h"
 #include "array_size.h"
 #include "scoped_lock.h"
+#include "map_utils.h"
 
 AccountMap IAXVoIPLink::iaxAccountMap_;
 IAXCallMap IAXVoIPLink::iaxCallMap_;
@@ -168,6 +169,16 @@ IAXVoIPLink::getEvent()
     return handlingEvents_;
 }
 
+std::vector<std::string>
+IAXVoIPLink::getCallIDs()
+{
+    std::vector<std::string> v;
+    sfl::ScopedLock m(iaxCallMapMutex_);
+
+    map_utils::vectorFromMapKeys(iaxCallMap_, v);
+    return v;
+}
+
 void
 IAXVoIPLink::sendAudioFromMic()
 {
diff --git a/daemon/src/iax/iaxvoiplink.h b/daemon/src/iax/iaxvoiplink.h
index f2a3ed02b4..d6f9ba14d5 100644
--- a/daemon/src/iax/iaxvoiplink.h
+++ b/daemon/src/iax/iaxvoiplink.h
@@ -72,6 +72,11 @@ class IAXVoIPLink : public VoIPLink {
          */
         virtual bool getEvent();
 
+
+        /* Returns a list of all callIDs */
+        static std::vector<std::string>
+        getCallIDs();
+
         /**
          * Return the internal account map for all VOIP links
          */
diff --git a/daemon/src/managerimpl.cpp b/daemon/src/managerimpl.cpp
index 0aa4e7ded4..eb11f5659c 100644
--- a/daemon/src/managerimpl.cpp
+++ b/daemon/src/managerimpl.cpp
@@ -43,6 +43,7 @@
 #include "dbus/callmanager.h"
 #include "global.h"
 #include "fileutils.h"
+#include "map_utils.h"
 #include "sip/sipvoiplink.h"
 #include "sip/sipaccount.h"
 #include "sip/sipcall.h"
@@ -2796,20 +2797,14 @@ std::vector<std::map<std::string, std::string> > ManagerImpl::getHistory()
     return history_.getSerialized();
 }
 
-namespace {
-template <typename M, typename V>
-void vectorFromMapKeys(const M &m, V &v)
-{
-    for (typename M::const_iterator it = m.begin(); it != m.end(); ++it)
-        v.push_back(it->first);
-}
-}
-
-// FIXME: get call ids from voiplinks
-std::vector<std::string> ManagerImpl::getCallList() const
+std::vector<std::string>
+ManagerImpl::getCallList() const
 {
-    std::vector<std::string> v;
-    // vectorFromMapKeys(callAccountMap_, v);
+    std::vector<std::string> v(SIPVoIPLink::instance()->getCallIDs());
+#if HAVE_IAX
+    const std::vector<std::string> iaxCalls(IAXVoIPLink::getCallIDs());
+    v.insert(v.end(), iaxCalls.begin(), iaxCalls.end());
+#endif
     return v;
 }
 
@@ -2830,7 +2825,7 @@ std::map<std::string, std::string> ManagerImpl::getConferenceDetails(
 std::vector<std::string> ManagerImpl::getConferenceList() const
 {
     std::vector<std::string> v;
-    vectorFromMapKeys(conferenceMap_, v);
+    map_utils::vectorFromMapKeys(conferenceMap_, v);
     return v;
 }
 
diff --git a/daemon/src/map_utils.h b/daemon/src/map_utils.h
index 9cb8bde4f8..eed64396c3 100644
--- a/daemon/src/map_utils.h
+++ b/daemon/src/map_utils.h
@@ -32,6 +32,7 @@
 #define MAP_UTILS_H_
 
 #include <vector>
+#include <map>
 
 namespace map_utils {
 template <typename M, typename V>
diff --git a/daemon/src/sip/sipvoiplink.cpp b/daemon/src/sip/sipvoiplink.cpp
index aa0f2496de..b2da24f374 100644
--- a/daemon/src/sip/sipvoiplink.cpp
+++ b/daemon/src/sip/sipvoiplink.cpp
@@ -40,6 +40,7 @@
 #include "sipvoiplink.h"
 #include "array_size.h"
 #include "manager.h"
+#include "map_utils.h"
 #include "logger.h"
 #include "scoped_lock.h"
 
@@ -1150,6 +1151,17 @@ SIPVoIPLink::clearSipCallMap()
     sipCallMap_.clear();
 }
 
+
+std::vector<std::string>
+SIPVoIPLink::getCallIDs()
+{
+    std::vector<std::string> v;
+    sfl::ScopedLock m(sipCallMapMutex_);
+
+    map_utils::vectorFromMapKeys(sipCallMap_, v);
+    return v;
+}
+
 void SIPVoIPLink::addSipCall(SIPCall* call)
 {
     if (!call)
diff --git a/daemon/src/sip/sipvoiplink.h b/daemon/src/sip/sipvoiplink.h
index 0dbd058d76..b37c05f4c3 100644
--- a/daemon/src/sip/sipvoiplink.h
+++ b/daemon/src/sip/sipvoiplink.h
@@ -96,6 +96,10 @@ class SIPVoIPLink : public VoIPLink {
          */
         virtual bool getEvent();
 
+        /* Returns a list of all callIDs */
+        std::vector<std::string>
+        getCallIDs();
+
         /**
          * Return the internal account map for this VOIP link
          */
-- 
GitLab