* limitations under the License.
*/
-#ifndef CALLUI_MODEL_CALL_BUILDER_H__
-#define CALLUI_MODEL_CALL_BUILDER_H__
+#ifndef __CALLUI_MODEL_CALL_BUILDER_H__
+#define __CALLUI_MODEL_CALL_BUILDER_H__
#include "types.h"
class CallBuilder {
public:
CallBuilder();
- CallBuilder &setListener(ICallListenerWRef value);
ICallSRef build() const;
-
- private:
- ICallListenerWRef m_listener;
};
}
-#endif // CALLUI_MODEL_CALL_BUILDER_H__
+#endif // __CALLUI_MODEL_CALL_BUILDER_H__
class ICall : public ucl::Polymorphic {
public:
+ virtual void setListener(const ICallListenerWRef &listener) = 0;
virtual ucl::Result processAppControl(app_control_h appControl) = 0;
virtual ISoundManagerSRef getSoundManager() = 0;
virtual ICallManagerSRef getCallManager() = 0;
CALLBACK_A(Instance::onBack), this);
// For testing
- static ListenerSRef listener = Listener::newInstance(*this);
- m_call = CallBuilder().
- setListener(listener).
- build();
-
+ m_call = CallBuilder().build();
if (!m_call) {
LOG_RETURN(RES_FAIL, "m_call is NULL");
}
+ static ListenerSRef listener = Listener::newInstance(*this);
+ m_call->setListener(listener);
+
return RES_OK;
}
using namespace ucl;
- ActiveCall::ActiveCall(CallManager &cm, cm_call_data_h callData):
+ ActiveCall::ActiveCall(CallManagerWRef cm, cm_call_data_h callData):
m_cm(cm),
m_isDialing(false)
{
{
}
- ActiveCallSRef ActiveCall::newInstance(CallManager &cm, cm_call_data_h callData)
+ ActiveCallSRef ActiveCall::newInstance(CallManagerWRef cm, cm_call_data_h callData)
{
+ if (!cm) {
+ LOG_RETURN_VALUE(RES_FAIL, {}, "cm is NULL");
+ }
+
if (!callData) {
LOG_RETURN_VALUE(RES_FAIL, {}, "callData is NULL");
}
Result ActiveCall::prepare(cm_call_data_h callData)
{
- m_callInfo = CallInfo::newInstance(*m_cm.getCallClient(), callData);
+ m_callInfo = CallInfo::newInstance(m_cm->getCallClient(), callData);
if (!m_callInfo) {
LOG_RETURN_VALUE(RES_FAIL, RES_FAIL, "CallInfo::newInstance() failed!");
}
Result ActiveCall::hold()
{
- return convertCMResult(cm_hold_call(*m_cm.getCallClient()));
+ if (!m_cm) {
+ LOG_RETURN(RES_FAIL, "Call Manager is NULL");
+ }
+ return convertCMResult(cm_hold_call(m_cm->getCallClient()));
}
Result ActiveCall::end()
{
- return m_cm.endCall(0, CallReleaseType::ALL_ACTIVE);
+ if (!m_cm) {
+ LOG_RETURN(RES_FAIL, "Call Manager is NULL");
+ }
+ return m_cm->endCall(0, CallReleaseType::ALL_ACTIVE);
}
Result ActiveCall::split(const IConferenceCallInfoSCRef &confCallInfo)
{
- return m_cm.splitCalls(m_callInfo, confCallInfo);
+ if (!m_cm) {
+ LOG_RETURN(RES_FAIL, "Call Manager is NULL");
+ }
+ return m_cm->splitCalls(m_callInfo, confCallInfo);
}
}
class ActiveCall final : public IActiveCall {
public:
- static ActiveCallSRef newInstance(CallManager &cm, cm_call_data_h callData);
+ static ActiveCallSRef newInstance(CallManagerWRef cm, cm_call_data_h callData);
virtual ~ActiveCall();
// IActiveCall
private:
friend class ucl::RefCountObj<ActiveCall>;
- ActiveCall(CallManager &cm, cm_call_data_h callData);
+ ActiveCall(CallManagerWRef cm, cm_call_data_h callData);
ucl::Result prepare(cm_call_data_h callData);
private:
- CallManager &m_cm;
+ CallManagerWRef m_cm;
CallInfoSRef m_callInfo;
bool m_isDialing;
};
using namespace ucl;
- Call::Call(RefCountObjBase &rc, ICallListenerWRef listener):
- RefCountAware(&rc),
- m_listener(listener)
+ Call::Call(RefCountObjBase &rc):
+ RefCountAware(&rc)
{
}
{
}
+ void Call::setListener(const ICallListenerWRef &listener)
+ {
+ m_listener = listener;
+ }
+
Result Call::processAppControl(app_control_h appControl)
{
if (!appControl) {
// ICall
+ virtual void setListener(const ICallListenerWRef &listener) override final;
virtual ucl::Result processAppControl(app_control_h appControl) override final;
virtual ISoundManagerSRef getSoundManager() override final;
virtual ICallManagerSRef getCallManager() override final;
private:
friend class CallBuilder;
friend class ucl::RefCountObj<Call>;
- Call(ucl::RefCountObjBase &rc, ICallListenerWRef listener);
+ Call(ucl::RefCountObjBase &rc);
ucl::Result prepare();
using namespace ucl;
- CallBuilder::CallBuilder():
- m_listener(nullptr)
+ CallBuilder::CallBuilder()
{
}
- CallBuilder &CallBuilder::setListener(ICallListenerWRef value)
- {
- m_listener = value;
- return *this;
- }
-
ICallSRef CallBuilder::build() const
{
- auto result = makeShared<Call>(m_listener);
+ auto result = makeShared<Call>();
FAIL_RETURN_VALUE(result->prepare(), {}, "result->prepare() failed!");
return result;
}
m_callId(-1),
m_startTime(0),
m_isEmergency(false),
+ m_isHDVoice(false),
m_confMemberCount(0)
{
}
using namespace ucl;
- CallManager::CallManager(const CallClientSRef &callClient,
- ICallManagerListenerWRef listener):
+ CallManager::CallManager(RefCountObjBase &rc,
+ const CallClientSRef &callClient,
+ ICallManagerListenerWRef listener):
+ RefCountAware(&rc),
m_callClient(callClient),
m_listener(listener),
m_slot(SimSlot::UNDEFINED),
FAIL_RETURN(updateCall(m_activeCall, active), "updateCall() failed!");
FAIL_RETURN(updateCall(m_heldCall, held), "updateCall() failed!");
+ cm_call_data_free(incom);
+ cm_call_data_free(active);
+ cm_call_data_free(held);
+
return RES_OK;
}
call.reset();
if (data) {
- call = TYPE::newInstance(*this, std::forward<TYPE2>(data));
+ call = TYPE::newInstance(asWeak(*this), std::forward<TYPE2>(data));
if (!call) {
LOG_RETURN(RES_FAIL, "newInstance() failed!");
}
return RES_OK;
}
- CallClientSRef CallManager::getCallClient()
+ CallClient &CallManager::getCallClient()
{
- return m_callClient;
+ return *m_callClient;
}
SimSlot CallManager::getSimSlot() const
namespace callui {
- class CallManager final : public ICallManager {
+ class CallManager final :
+ public ucl::RefCountAware,
+ public ICallManager {
public:
static CallManagerSRef newInstance(const CallClientSRef &callClient,
ICallManagerListenerWRef listener);
virtual ~CallManager();
- CallClientSRef getCallClient();
+ CallClient &getCallClient();
SimSlot getSimSlot() const;
ucl::Result dialVoiceCall(const std::string &number);
ucl::Result endCall(unsigned int callId, CallReleaseType type);
private:
friend class ucl::RefCountObj<CallManager>;
- CallManager(const CallClientSRef &callClient,
+ CallManager(ucl::RefCountObjBase &rc, const CallClientSRef &callClient,
ICallManagerListenerWRef listener);
ucl::Result prepare();
using namespace ucl;
- EndCall::EndCall(CallManager &cm, ICallInfoSCRef callInfo):
+ EndCall::EndCall(CallManagerWRef cm, ICallInfoSCRef callInfo):
m_cm(cm),
m_callInfo(callInfo)
{
{
}
- EndCallSRef EndCall::newInstance(CallManager &cm, ICallInfoSCRef callInfo)
+ EndCallSRef EndCall::newInstance(CallManagerWRef cm, ICallInfoSCRef callInfo)
{
+ if (!cm) {
+ LOG_RETURN_VALUE(RES_FAIL, {}, "cm is NULL");
+ }
+
if (!callInfo) {
LOG_RETURN_VALUE(RES_FAIL, {}, "callInfo is NULL");
}
Result EndCall::callBack()
{
- return m_cm.dialVoiceCall(m_callInfo->getPhoneNumber());
+ if (!m_cm) {
+ LOG_RETURN(RES_FAIL, "Call Manager is NULL");
+ }
+ return m_cm->dialVoiceCall(m_callInfo->getPhoneNumber());
}
Result EndCall::writeMessage()
class EndCall final : public IEndCall {
public:
- static EndCallSRef newInstance(CallManager &cm, ICallInfoSCRef callInfo);
+ static EndCallSRef newInstance(CallManagerWRef cm, ICallInfoSCRef callInfo);
virtual ~EndCall();
private:
friend class ucl::RefCountObj<EndCall>;
- EndCall(CallManager &cm, ICallInfoSCRef callInfo);
+ EndCall(CallManagerWRef cm, ICallInfoSCRef callInfo);
ucl::Result prepare();
private:
- CallManager &m_cm;
+ CallManagerWRef m_cm;
ICallInfoSCRef m_callInfo;
};
using namespace ucl;
- HeldCall::HeldCall(CallManager &cm, cm_call_data_h callData):
+ HeldCall::HeldCall(CallManagerWRef cm, cm_call_data_h callData):
m_cm(cm)
{
}
{
}
- HeldCallSRef HeldCall::newInstance(CallManager &cm, cm_call_data_h callData)
+ HeldCallSRef HeldCall::newInstance(CallManagerWRef cm, cm_call_data_h callData)
{
+ if (!cm) {
+ LOG_RETURN_VALUE(RES_FAIL, {}, "cm is NULL");
+ }
+
if (!callData) {
LOG_RETURN_VALUE(RES_FAIL, {}, "callData is NULL");
}
Result HeldCall::prepare(cm_call_data_h callData)
{
- m_callInfo = CallInfo::newInstance(*m_cm.getCallClient(), callData);
+ m_callInfo = CallInfo::newInstance(m_cm->getCallClient(), callData);
if (!m_callInfo) {
LOG_RETURN_VALUE(RES_FAIL, RES_FAIL, "CallInfo::newInstance() failed!");
}
Result HeldCall::unhold()
{
- return convertCMResult(cm_unhold_call(*m_cm.getCallClient()));
+ if (!m_cm) {
+ LOG_RETURN(RES_FAIL, "Call Manager is NULL");
+ }
+ return convertCMResult(cm_unhold_call(m_cm->getCallClient()));
}
Result HeldCall::joinWithActive()
{
- return convertCMResult(cm_join_call(*m_cm.getCallClient()));
+ if (!m_cm) {
+ LOG_RETURN(RES_FAIL, "Call Manager is NULL");
+ }
+ return convertCMResult(cm_join_call(m_cm->getCallClient()));
}
Result HeldCall::swapWithActive()
{
- return convertCMResult(cm_swap_call(*m_cm.getCallClient()));
+ if (!m_cm) {
+ LOG_RETURN(RES_FAIL, "Call Manager is NULL");
+ }
+ return convertCMResult(cm_swap_call(m_cm->getCallClient()));
}
Result HeldCall::end()
{
- return m_cm.endCall(0, CallReleaseType::ALL_HOLD);
+ if (!m_cm) {
+ LOG_RETURN(RES_FAIL, "Call Manager is NULL");
+ }
+ return m_cm->endCall(0, CallReleaseType::ALL_HOLD);
}
Result HeldCall::split(const IConferenceCallInfoSCRef &confCallInfo)
{
- return m_cm.splitCalls(m_callInfo, confCallInfo);
+ if (!m_cm) {
+ LOG_RETURN(RES_FAIL, "Call Manager is NULL");
+ }
+ return m_cm->splitCalls(m_callInfo, confCallInfo);
}
}
class HeldCall final : public IHeldCall {
public:
- static HeldCallSRef newInstance(CallManager &cm, cm_call_data_h callData);
+ static HeldCallSRef newInstance(CallManagerWRef cm, cm_call_data_h callData);
virtual ~HeldCall();
// IHeldCall
private:
friend class ucl::RefCountObj<HeldCall>;
- HeldCall(CallManager &cm, cm_call_data_h callData);
+ HeldCall(CallManagerWRef cm, cm_call_data_h callData);
ucl::Result prepare(cm_call_data_h callData);
private:
- CallManager &m_cm;
+ CallManagerWRef m_cm;
CallInfoSRef m_callInfo;
};
using namespace ucl;
- IncomingCall::IncomingCall(CallManager &cm, cm_call_data_h callData):
+ IncomingCall::IncomingCall(CallManagerWRef cm, cm_call_data_h callData):
m_cm(cm)
{
}
{
}
- IncomingCallSRef IncomingCall::newInstance(CallManager &cm, cm_call_data_h callData)
+ IncomingCallSRef IncomingCall::newInstance(CallManagerWRef cm, cm_call_data_h callData)
{
+ if (!cm) {
+ LOG_RETURN_VALUE(RES_FAIL, {}, "cm is NULL");
+ }
+
if (!callData) {
LOG_RETURN_VALUE(RES_FAIL, {}, "callData is NULL");
}
Result IncomingCall::prepare(cm_call_data_h callData)
{
- m_callInfo = CallInfo::newInstance(*m_cm.getCallClient(), callData);
+ m_callInfo = CallInfo::newInstance(m_cm->getCallClient(), callData);
if (!m_callInfo) {
LOG_RETURN_VALUE(RES_FAIL, RES_FAIL, "CallInfo::newInstance() failed!");
}
IRejectMsgProviderSRef IncomingCall::getRejectMsgProvider() const
{
- return m_cm.getRejectMsgProvider();
+ if (!m_cm) {
+ LOG_RETURN_VALUE(RES_FAIL, {}, "Call Manager is NULL");
+ }
+ return m_cm->getRejectMsgProvider();
}
Result IncomingCall::answer(CallAnswerType type)
{
- return convertCMResult(cm_answer_call(*m_cm.getCallClient(), convertCUICallAnswerType(type)));
+ if (!m_cm) {
+ LOG_RETURN(RES_FAIL, "Call Manager is NULL");
+ }
+ return convertCMResult(cm_answer_call(m_cm->getCallClient(), convertCUICallAnswerType(type)));
}
Result IncomingCall::reject()
{
- return convertCMResult(cm_reject_call(*m_cm.getCallClient()));
+ if (!m_cm) {
+ LOG_RETURN(RES_FAIL, "Call Manager is NULL");
+ }
+ return convertCMResult(cm_reject_call(m_cm->getCallClient()));
}
Result IncomingCall::rejectWithMessage(IRejectMsgSRef message)
if (!msg) {
LOG_RETURN(RES_FAIL, "message is not RejectMsg type!");
}
- return msg->send(m_callInfo->getPhoneNumber(), m_cm.getSimSlot());
+ if (!m_cm) {
+ LOG_RETURN(RES_FAIL, "Call Manager is NULL");
+ }
+ return msg->send(m_callInfo->getPhoneNumber(), m_cm->getSimSlot());
}
Result IncomingCall::stopAlert()
{
- return convertCMResult(cm_stop_alert(*m_cm.getCallClient()));
+ if (!m_cm) {
+ LOG_RETURN(RES_FAIL, "Call Manager is NULL");
+ }
+ return convertCMResult(cm_stop_alert(m_cm->getCallClient()));
}
}
class IncomingCall final : public IIncomingCall {
public:
- static IncomingCallSRef newInstance(CallManager &cm, cm_call_data_h callData);
+ static IncomingCallSRef newInstance(CallManagerWRef cm, cm_call_data_h callData);
virtual ~IncomingCall();
private:
friend class ucl::RefCountObj<IncomingCall>;
- IncomingCall(CallManager &cm, cm_call_data_h callData);
+ IncomingCall(CallManagerWRef cm, cm_call_data_h callData);
ucl::Result prepare(cm_call_data_h callData);
private:
- CallManager &m_cm;
+ CallManagerWRef m_cm;
CallInfoSRef m_callInfo;
};
using namespace ucl;
- RejectMsg::RejectMsg(MsgClientSRef client, const TString &string):
+ RejectMsg::RejectMsg(MsgClientWRef client, const TString &string):
m_msgClient(client),
m_msg(string)
{
{
}
- RejectMsgSRef RejectMsg::newInstance(MsgClientSRef client, const TString &string)
+ RejectMsgSRef RejectMsg::newInstance(MsgClientWRef client, const TString &string)
{
return makeShared<RejectMsg>(client, string);
}
class RejectMsg : public IRejectMsg {
public:
- static RejectMsgSRef newInstance(MsgClientSRef client, const ucl::TString &string);
+ static RejectMsgSRef newInstance(MsgClientWRef client, const ucl::TString &string);
virtual ~RejectMsg();
ucl::Result send(const std::string &number, SimSlot slot);
private:
friend class ucl::RefCountObj<RejectMsg>;
- RejectMsg(MsgClientSRef client, const ucl::TString &string);
+ RejectMsg(MsgClientWRef client, const ucl::TString &string);
ucl::Result prepare();