From 0194edaa4cb411292a44d0280ef6a1a819f59a17 Mon Sep 17 00:00:00 2001 From: Petref Saraci Date: Mon, 9 Jan 2017 19:25:02 +0100 Subject: [PATCH] Risip VoIP SDK on a seperate repository. More focus on creating a clean set of APIs SIP and WebRTC endpoints. Some cleanups and fixes: - Removed the threading issue with RisipMedia - PjsipCall status update for the call is handled better when passed to RisipCall thread object. - Introduced a callExternalSIP() function for making calls to external SIP accounts - for testing purposes. --- LICENSE.GPLv3 | 2 +- LICENSE.HEADER.GPLv3 | 2 +- .../android-platform/androidplatform.pri | 1 - platforms/ios/iosplatform.pri | 6 ++--- platforms/linux/linuxplatform.pri | 8 +++--- platforms/macos/macplatform.pri | 8 +++--- risip.pro => risip-voipsdk.pro | 6 +++-- src/risipsdk/headers/risipcall.h | 1 + src/risipsdk/headers/risipcallmanager.h | 6 +++-- src/risipsdk/pjsipwrapper/pjsipcall.cpp | 4 +-- src/risipsdk/risip.cpp | 2 -- src/risipsdk/risipcall.cpp | 25 ++++++++++++++++++- src/risipsdk/risipcallmanager.cpp | 21 +++++++++++++--- 13 files changed, 63 insertions(+), 29 deletions(-) rename risip.pro => risip-voipsdk.pro (98%) diff --git a/LICENSE.GPLv3 b/LICENSE.GPLv3 index d6f9c1e..f87bdd5 100644 --- a/LICENSE.GPLv3 +++ b/LICENSE.GPLv3 @@ -1,6 +1,6 @@ GNU GENERAL PUBLIC LICENSE - The Risip software is Copyright (C) 2016 Petref Saraci. + The Risip software is Copyright (C) 2016 - 2017 Petref Saraci. Contact http://risip.io You may use, distribute and copy the Risip software under the terms of diff --git a/LICENSE.HEADER.GPLv3 b/LICENSE.HEADER.GPLv3 index 45238dc..3789e5b 100644 --- a/LICENSE.HEADER.GPLv3 +++ b/LICENSE.HEADER.GPLv3 @@ -1,5 +1,5 @@ /*********************************************************************************** -** Copyright (C) 2016 Petref Saraci +** Copyright (C) 2016 - 2017 Petref Saraci ** http://risip.io ** ** This program is free software: you can redistribute it and/or modify diff --git a/platforms/android-platform/androidplatform.pri b/platforms/android-platform/androidplatform.pri index 9834e9c..d97759b 100644 --- a/platforms/android-platform/androidplatform.pri +++ b/platforms/android-platform/androidplatform.pri @@ -20,7 +20,6 @@ DESTDIR = $$PWD/bin QT += androidextras -INCLUDEPATH += $$PWD/pjsip/armeabi/include ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android diff --git a/platforms/ios/iosplatform.pri b/platforms/ios/iosplatform.pri index 160202c..519cfc7 100644 --- a/platforms/ios/iosplatform.pri +++ b/platforms/ios/iosplatform.pri @@ -1,5 +1,5 @@ ################################################################################## -# Copyright (C) 2016 Petref Saraci +# Copyright (C) 2016 - 2017 Petref Saraci # http://risip.io # # This program is free software: you can redistribute it and/or modify @@ -19,8 +19,6 @@ ################################################################################### DESTDIR = $$PWD/bin -INCLUDEPATH += $$PWD/pjsip/ios-64/include - #QMAKE_IOS_DEPLOYMENT_TARGET = 10.1 QMAKE_CXXFLAGS = -miphoneos-version-min=9.0 @@ -34,7 +32,7 @@ OBJECTIVE_SOURCES += \ $$PWD/../../src/risipsdk/ios/risipioscontactaccessmanager.mm \ $$PWD/../../src/risipsdk/ios/risipioswifiprovider.mm -LIBS += -L$$PWD/pjsip/ios-64/lib \ +LIBS += -L$$PWD/../../pjsip/ios-64/staticlibs \ -lpjsua2-arm64-apple-darwin_ios \ -lpjsua-arm64-apple-darwin_ios \ -lpjsip-ua-arm64-apple-darwin_ios \ diff --git a/platforms/linux/linuxplatform.pri b/platforms/linux/linuxplatform.pri index 7e23766..7dd3c76 100644 --- a/platforms/linux/linuxplatform.pri +++ b/platforms/linux/linuxplatform.pri @@ -1,5 +1,5 @@ ################################################################################## -# Copyright (C) 2016 Petref Saraci +# Copyright (C) 2016 - 2017 Petref Saraci # http://risip.io # # This program is free software: you can redistribute it and/or modify @@ -19,10 +19,8 @@ ################################################################################### DESTDIR = $$PWD/bin -INCLUDEPATH += $$PWD/pjsip/include - # static linking with PJSIP -#LIBS += -L$$PWD/pjsip/lib \ +#LIBS += -L$$PWD/../../pjsip/linux-64/staticlibs \ # -lpjsua2-x86_64-unknown-linux-gnu \ # -lpjsua-x86_64-unknown-linux-gnu \ # -lpjsip-ua-x86_64-unknown-linux-gnu \ @@ -43,7 +41,7 @@ INCLUDEPATH += $$PWD/pjsip/include # -lg7221codec-x86_64-unknown-linux-gnu # dynamic linking with PJSIP -LIBS += -L$$PWD/pjsip/lib \ +LIBS += -L$$PWD/../../pjsip/linux-64/dylibs \ -lpjsua2 \ -lpjsua \ -lpjsip-ua \ diff --git a/platforms/macos/macplatform.pri b/platforms/macos/macplatform.pri index 27fa905..7d514e5 100644 --- a/platforms/macos/macplatform.pri +++ b/platforms/macos/macplatform.pri @@ -1,5 +1,5 @@ ################################################################################## -# Copyright (C) 2016 Petref Saraci +# Copyright (C) 2016 - 2017 Petref Saraci # http://risip.io # # This program is free software: you can redistribute it and/or modify @@ -20,15 +20,13 @@ DESTDIR = $$PWD/bin CONFIG += app_bundle -INCLUDEPATH += $$PWD/pjsip/include - QMAKE_MAC_SDK = macosx10.12 QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.12 QMAKE_CXXFLAGS += -mmacosx-version-min=10.12 QMAKE_LFLAGS += -mmacosx-version-min=10.12 # static linking with PJSIP -LIBS += -L$$PWD/pjsip/lib \ +LIBS += -L$$PWD/../../pjsip/macos-64/staticlibs \ -lpjsua2-x86_64-apple-darwin15.6.0 \ -lpjsua-x86_64-apple-darwin15.6.0 \ -lpjsip-simple-x86_64-apple-darwin15.6.0 \ @@ -55,7 +53,7 @@ LIBS += -L$$PWD/pjsip/lib \ -framework AudioUnit # dynamic linking with PJSIP -#LIBS += -L$$PWD/pjsip/lib \ +#LIBS += -L$$PWD../../macos-64/dylibs \ # -lpjsua2 \ # -lpjsua \ # -lpjsip-ua \ diff --git a/risip.pro b/risip-voipsdk.pro similarity index 98% rename from risip.pro rename to risip-voipsdk.pro index 57ed73e..63f120f 100644 --- a/risip.pro +++ b/risip-voipsdk.pro @@ -1,5 +1,5 @@ ################################################################################## -# Copyright (C) 2016 Petref Saraci +# Copyright (C) 2016 - 2017 Petref Saraci # http://risip.io # # This program is free software: you can redistribute it and/or modify @@ -18,7 +18,7 @@ # ################################################################################### -TARGET = risip +TARGET = risip-voip TEMPLATE = lib CONFIG += exceptions c++11 @@ -49,6 +49,8 @@ INCLUDEPATH += $$PWD/src \ $$PWD/src/risipsdk/headers/sipprovision \ $$PWD/src/risipsdk/headers/utils +INCLUDEPATH += $$PWD/pjsip/include + macx { include(platforms/macos/macplatform.pri) } diff --git a/src/risipsdk/headers/risipcall.h b/src/risipsdk/headers/risipcall.h index 75c2844..3477860 100644 --- a/src/risipsdk/headers/risipcall.h +++ b/src/risipsdk/headers/risipcall.h @@ -104,6 +104,7 @@ public Q_SLOTS: void answer(); void hangup(); void call(); + void callExternalSIP(const QString &uri); void hold(bool hold); Q_SIGNALS: diff --git a/src/risipsdk/headers/risipcallmanager.h b/src/risipsdk/headers/risipcallmanager.h index 47afddf..46e916d 100644 --- a/src/risipsdk/headers/risipcallmanager.h +++ b/src/risipsdk/headers/risipcallmanager.h @@ -49,15 +49,17 @@ class RISIP_SDK_EXPORT RisipCallManager : public QObject RisipCall *activeCall(); void setActiveCall(RisipCall *call); + //history related methods QAbstractItemModel *activeCallHistoryModel() const; void setActiveCallHistoryModel(QAbstractItemModel *model); - QQmlListProperty callHistoryModels(); + Q_INVOKABLE QAbstractItemModel *historyCallModelForAccount(const QString &account) const; - Q_INVOKABLE QAbstractItemModel *callHistoryModelForAccount(const QString &account) const; + //call related methods Q_INVOKABLE RisipCall *callSIPContact(const QString &contact); Q_INVOKABLE RisipCall *callBuddy(RisipBuddy *buddy); Q_INVOKABLE RisipCall *callPhone(const QString &number); + Q_INVOKABLE RisipCall *callExternalSIP(const QString &uri); void createModelsForAccount(RisipAccount *account); void removeModelsForAccount(const RisipAccount *account); diff --git a/src/risipsdk/pjsipwrapper/pjsipcall.cpp b/src/risipsdk/pjsipwrapper/pjsipcall.cpp index 7c242e7..64a997b 100644 --- a/src/risipsdk/pjsipwrapper/pjsipcall.cpp +++ b/src/risipsdk/pjsipwrapper/pjsipcall.cpp @@ -52,8 +52,8 @@ void PjsipCall::onCallState(OnCallStateParam &prm) // emit a status change signal otherwise if(!isActive()) m_risipCall->setPjsipCall(NULL); - - m_risipCall->statusChanged(); + else + m_risipCall->statusChanged(); } void PjsipCall::onCallTsxState(OnCallTsxStateParam &prm) diff --git a/src/risipsdk/risip.cpp b/src/risipsdk/risip.cpp index 129c092..4568980 100644 --- a/src/risipsdk/risip.cpp +++ b/src/risipsdk/risip.cpp @@ -39,7 +39,6 @@ #include "utils/qqmlsortfilterproxymodel.h" #include "location/risipgeopositionprovider.h" -#include "location/risiplocation.h" #include "models/risipcallhistorymodel.h" #include "models/risipcountryratesmodel.h" @@ -157,7 +156,6 @@ Risip::Risip(QObject *parent) { m_data->m_defaultAccountAlways = true; RisipGlobals::instance()->initializeCountries(); - RisipLocation::instance(); } Risip::~Risip() diff --git a/src/risipsdk/risipcall.cpp b/src/risipsdk/risipcall.cpp index 50ae02a..4407058 100644 --- a/src/risipsdk/risipcall.cpp +++ b/src/risipsdk/risipcall.cpp @@ -32,6 +32,7 @@ #include "pjsipwrapper/pjsipaccount.h" #include "pjsipwrapper/pjsipcall.h" +#include #include #include @@ -64,6 +65,7 @@ RisipCall::RisipCall(QObject *parent) RisipCall::~RisipCall() { setPjsipCall(NULL); + disconnect(this); delete m_data; m_data = NULL; } @@ -273,7 +275,7 @@ QString RisipCall::errorInfo() const void RisipCall::initializeMediaHandler() { if(!m_data->risipMedia) - setMedia(new RisipMedia(this)); + setMedia(new RisipMedia); m_data->risipMedia->startCallMedia(); } @@ -353,6 +355,27 @@ void RisipCall::call() } } +void RisipCall::callExternalSIP(const QString &uri) +{ + setCallType(RisipCall::Sip); + if(!m_data->account && uri.isEmpty()) + return; + + if(m_data->account->status() != RisipAccount::SignedIn) + return; + + setCallDirection(RisipCall::Outgoing); + createTimestamp(); + setPjsipCall(new PjsipCall(*m_data->account->pjsipAccount())); + CallOpParam prm(true); + + try { + m_data->pjsipCall->makeCall(uri.toStdString(), prm); + } catch (Error err) { + setError(err); + } +} + /** * @brief RisipCall::hold * @param hold diff --git a/src/risipsdk/risipcallmanager.cpp b/src/risipsdk/risipcallmanager.cpp index 312f0be..ac6a995 100644 --- a/src/risipsdk/risipcallmanager.cpp +++ b/src/risipsdk/risipcallmanager.cpp @@ -105,7 +105,7 @@ QQmlListProperty RisipCallManager::callHistoryModels() return QQmlListProperty(this, models); } -QAbstractItemModel *RisipCallManager::callHistoryModelForAccount(const QString &account) const +QAbstractItemModel *RisipCallManager::historyCallModelForAccount(const QString &account) const { if(m_data->m_callHistoryModels.contains(account)) return qobject_cast(m_data->m_callHistoryModels[account]); @@ -149,8 +149,8 @@ void RisipCallManager::setActiveAccount(RisipAccount *account) connect(m_data->m_activeAccount, &RisipAccount::incomingCall, this, &RisipCallManager::accountIncomingCall, Qt::UniqueConnection); - if(callHistoryModelForAccount(m_data->m_activeAccount->configuration()->uri())) - setActiveCallHistoryModel(callHistoryModelForAccount(m_data->m_activeAccount->configuration()->uri())); + if(historyCallModelForAccount(m_data->m_activeAccount->configuration()->uri())) + setActiveCallHistoryModel(historyCallModelForAccount(m_data->m_activeAccount->configuration()->uri())); //TODO what if call history model does not exists? emit activeAccountChanged(m_data->m_activeAccount); @@ -211,6 +211,21 @@ RisipCall *RisipCallManager::callPhone(const QString &number) return callBuddy(buddy); } +RisipCall *RisipCallManager::callExternalSIP(const QString &uri) +{ + RisipCall * call = new RisipCall(this); + call->setAccount(m_data->m_activeAccount); + call->callExternalSIP(uri); + + emit outgoingCall(call); + + //adding call record for the active account. + qobject_cast(m_data->m_activeCallHistoryModel)->addCallRecord(call); + setActiveCall(call); + + return call; +} + /** * @brief RisipCallManager::createModelsForAccount * @param activeAccount