diff options
Diffstat (limited to 'bindings/winrt/doubango_rt/src/rt_SipSession.cxx')
-rw-r--r-- | bindings/winrt/doubango_rt/src/rt_SipSession.cxx | 662 |
1 files changed, 662 insertions, 0 deletions
diff --git a/bindings/winrt/doubango_rt/src/rt_SipSession.cxx b/bindings/winrt/doubango_rt/src/rt_SipSession.cxx new file mode 100644 index 0000000..872a2e2 --- /dev/null +++ b/bindings/winrt/doubango_rt/src/rt_SipSession.cxx @@ -0,0 +1,662 @@ +/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org> +* +* This file is part of Open Source Doubango Framework. +* +* DOUBANGO 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. +* +* DOUBANGO 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 DOUBANGO. +*/ +#include "rt_SipSession.h" +#include "rt_String.h" +#include "rt_SipStack.h" +#include "rt_SipUri.h" +#include "rt_Msrp.h" + +#include "SipSession.h" +#include "MediaSessionMgr.h" + +using namespace doubango_rt::BackEnd; +using namespace Platform; +using namespace std; + +/* ======================== T140Callback ========================*/ +rtT140CallbackData::rtT140CallbackData(enum tmedia_t140_data_type_e data_type, const void* data_ptr, unsigned data_size) +{ + m_pData = new T140CallbackData(data_type, data_ptr, data_size); +} + +rtT140CallbackData::~rtT140CallbackData() +{ + rtSafeDelete(m_pData); +} + +/* ======================== rtT140Callback ========================*/ + +rtT140Callback::rtT140Callback() +{ + m_pCallback = new T140Callback(); +} + +rtT140Callback::~rtT140Callback() +{ + rtSafeDelete(m_pCallback); +} + +/* ======================== rtSipSession ========================*/ +rtISession_Implement(rtSipSession); + +rtSipSession::rtSipSession(rtSipStack^ pStack) +{ + m_pSipSession = new SipSession(const_cast<SipStack*>(pStack->getWrappedStack())); +} + +rtSipSession::rtSipSession(SipStack* pStack, tsip_ssession_handle_t* pHandle) +{ + m_pSipSession = new SipSession(pStack, pHandle); +} + +rtSipSession::~rtSipSession() +{ + rtSafeDelete(m_pSipSession); +} + + +/* ======================== rtInviteSession ========================*/ +rtISession_Implement(rtInviteSession); +rtIInviteSession_Implement(rtInviteSession); + +rtInviteSession::rtInviteSession(rtSipStack^ pStack) +{ + m_pSipSession = new InviteSession(const_cast<SipStack*>(pStack->getWrappedStack())); +} + +rtInviteSession::rtInviteSession(SipStack* pStack, tsip_ssession_handle_t* pHandle) +{ + m_pSipSession = new InviteSession(pStack, pHandle); +} + +rtInviteSession::~rtInviteSession() +{ + rtSafeDelete(m_pSipSession); +} + + +/* ======================== rtCallSession ========================*/ +rtISession_Implement(rtCallSession); +rtIInviteSession_Implement(rtCallSession); + +rtCallSession::rtCallSession(rtSipStack^ pStack) +{ + m_pSipSession = new CallSession(const_cast<SipStack*>(pStack->getWrappedStack())); +} + +rtCallSession::rtCallSession(SipStack* pStack, tsip_ssession_handle_t* pHandle) +{ + m_pSipSession = new CallSession(pStack, pHandle); +} + +rtCallSession::~rtCallSession() +{ + rtSafeDelete(m_pSipSession); +} + + +bool rtCallSession::call(String^ remoteUriString, rt_twrap_media_type_t media, rtActionConfig^ config) +{ + return m_pSipSession->call(rtString::toUtf8(remoteUriString).data(), (twrap_media_type_t)media, config ? config->getWrappedActionConfig() : tsk_null); + +} + +bool rtCallSession::call(String^ remoteUriString, rt_twrap_media_type_t media) +{ + return call(remoteUriString, media, nullptr); +} + +bool rtCallSession::call(rtSipUri^ remoteUri, rt_twrap_media_type_t media, rtActionConfig^ config) +{ + return m_pSipSession->call(remoteUri->getWrappedUri(), (twrap_media_type_t)media, config ? config->getWrappedActionConfig() : tsk_null); +} + +bool rtCallSession::call(rtSipUri^ remoteUri, rt_twrap_media_type_t media) +{ + return call(remoteUri, media, nullptr); +} + +bool rtCallSession::setSessionTimer(unsigned timeout, String^ refresher) +{ + return m_pSipSession->setSessionTimer(timeout, rtString::toUtf8(refresher).data()); +} + +bool rtCallSession::set100rel(bool enabled) +{ + return m_pSipSession->set100rel(enabled); +} + +bool rtCallSession::setRtcp(bool enabled) +{ + return m_pSipSession->setRtcp(enabled); +} + +bool rtCallSession::setRtcpMux(bool enabled) +{ + return m_pSipSession->setRtcpMux(enabled); +} + +bool rtCallSession::setICE(bool enabled) +{ + return m_pSipSession->setICE(enabled); +} + +bool rtCallSession::setQoS(rt_tmedia_qos_stype_t type, rt_tmedia_qos_strength_t strength) +{ + return m_pSipSession->setQoS((tmedia_qos_stype_t) type, (tmedia_qos_strength_t) strength); +} + +bool rtCallSession::setVideoFps(int32_t fps) +{ + return m_pSipSession->setVideoFps(fps); +} + +bool rtCallSession::setVideoBandwidthUploadMax(int32_t max) +{ + return m_pSipSession->setVideoBandwidthUploadMax(max); +} + +bool rtCallSession::setVideoBandwidthDownloadMax(int32_t max) +{ + return m_pSipSession->setVideoBandwidthDownloadMax(max); +} + +bool rtCallSession::setVideoPrefSize(rt_tmedia_pref_video_size_t pref_video_size) +{ + return m_pSipSession->setVideoPrefSize((tmedia_pref_video_size_t)pref_video_size); +} + +bool rtCallSession::hold(rtActionConfig^ config) +{ + return m_pSipSession->hold(config ? config->getWrappedActionConfig() : tsk_null); +} + +bool rtCallSession::hold() +{ + return hold(nullptr); +} + +bool rtCallSession::resume(rtActionConfig^ config) +{ + return m_pSipSession->resume(config ? config->getWrappedActionConfig() : tsk_null); +} + +bool rtCallSession::resume() +{ + return resume(nullptr); +} + +bool rtCallSession::transfer(String^ referToUriString, rtActionConfig^ config) +{ + return m_pSipSession->transfer(rtString::toUtf8(referToUriString).data(), config ? config->getWrappedActionConfig() : tsk_null); +} + +bool rtCallSession::transfer(String^ referToUriString) +{ + return transfer(referToUriString, nullptr); +} + +bool rtCallSession::acceptTransfer(rtActionConfig^ config) +{ + return m_pSipSession->acceptTransfer(config ? config->getWrappedActionConfig() : tsk_null); +} + +bool rtCallSession::acceptTransfer() +{ + return acceptTransfer(nullptr); +} + +bool rtCallSession::rejectTransfer(rtActionConfig^ config) +{ + return m_pSipSession->rejectTransfer(config ? config->getWrappedActionConfig() : tsk_null); +} + +bool rtCallSession::rejectTransfer() +{ + return rejectTransfer(nullptr); +} + +bool rtCallSession::sendDTMF(int number) +{ + return m_pSipSession->sendDTMF(number); +} + +unsigned rtCallSession::getSessionTransferId() +{ + return m_pSipSession->getSessionTransferId(); +} + +#if COM_VISIBLE +bool rtCallSession::sendT140Data(rt_tmedia_t140_data_type_t data_type, String^ data) +{ + std::vector<char> _data = rtString::toUtf8(data); + return m_pSipSession->sendT140Data((tmedia_t140_data_type_t) data_type, (const void*)_data.data(), _data.size()); +} +#else +bool rtCallSession::sendT140Data(rt_tmedia_t140_data_type_t data_type, IntPtr data_ptr, unsigned data_size) +{ + return m_pSipSession->sendT140Data((tmedia_t140_data_type_t) data_type, (const void*)data_ptr, data_size); +} + +#endif + +bool rtCallSession::sendT140Data(rt_tmedia_t140_data_type_t data_type) +{ + return sendT140Data(data_type, nullptr +#if !COM_VISIBLE + , 0 +#endif + ); +} + +bool rtCallSession::setT140Callback(rtT140Callback^ pT140Callback) +{ + return m_pSipSession->setT140Callback(const_cast<T140Callback*>(pT140Callback->getWrappedCallback())); +} + + +/* ======================== rtMsrpSession ========================*/ +rtISession_Implement(rtMsrpSession); +rtIInviteSession_Implement(rtMsrpSession); + +rtMsrpSession::rtMsrpSession(rtSipStack^ pStack, rtIMsrpCallback^ pCallback) +{ + m_pCallback = ref new rtMsrpCallback(pCallback); + m_pSipSession = new MsrpSession(const_cast<SipStack*>(pStack->getWrappedStack()), const_cast<MsrpCallback*>(m_pCallback->getWrappedCallback())); +} + +rtMsrpSession::rtMsrpSession(SipStack* pStack, tsip_ssession_handle_t* pHandle) +{ + m_pSipSession = new MsrpSession(pStack, pHandle); +} + +rtMsrpSession::~rtMsrpSession() +{ + rtSafeDelete(m_pSipSession); + rtSafeDelete(m_pCallback); +} + +bool rtMsrpSession::setCallback(rtIMsrpCallback^ pCallback) +{ + rtSafeDelete(m_pCallback); + if(!pCallback) + { + return m_pSipSession->setCallback(tsk_null); + return true; + } + m_pCallback = ref new rtMsrpCallback(pCallback); + return m_pSipSession->setCallback(const_cast<MsrpCallback*>(m_pCallback->getWrappedCallback())); +} + +bool rtMsrpSession::callMsrp(Platform::String^ remoteUriString, rtActionConfig^ config) +{ + return m_pSipSession->callMsrp(rtString::toUtf8(remoteUriString).data(), config ? config->getWrappedActionConfig() : tsk_null); +} + +bool rtMsrpSession::callMsrp(Platform::String^ remoteUriString) +{ + return callMsrp(remoteUriString, nullptr); +} + +bool rtMsrpSession::callMsrp(rtSipUri^ remoteUri, rtActionConfig^ config) +{ + return m_pSipSession->callMsrp(remoteUri->getWrappedUri(), config ? config->getWrappedActionConfig() : tsk_null); +} + +bool rtMsrpSession::callMsrp(rtSipUri^ remoteUri) +{ + return callMsrp(remoteUri, nullptr); +} + +#if COM_VISIBLE +bool rtMsrpSession::sendMessage(String^ payload, rtActionConfig^ config) +{ + std::vector<char> _payload = rtString::toUtf8(payload); + return m_pSipSession->sendMessage((const void*)_payload.data(), _payload.size(), config ? config->getWrappedActionConfig() : tsk_null); +} + +bool rtMsrpSession::sendMessage(Platform::String^ payload) +{ + return sendMessage(payload, nullptr); +} + +#else +bool rtMsrpSession::sendMessage(Platform::IntPtr payload, unsigned len, rtActionConfig^ config) +{ + return m_pSipSession->sendMessage((const void*)payload, len, config ? config->getWrappedActionConfig() : tsk_null); +} + +bool rtMsrpSession::sendMessage(Platform::IntPtr payload, unsigned len) +{ + return sendMessage(payload, len, nullptr); +} +#endif /* COM_VISIBLE */ + + +/* ======================== rtMessagingSession ========================*/ +rtISession_Implement(rtMessagingSession); + +rtMessagingSession::rtMessagingSession(SipStack* pStack, tsip_ssession_handle_t* pHandle) +{ + m_pSipSession = new MessagingSession(pStack, pHandle); +} + +rtMessagingSession::rtMessagingSession(rtSipStack^ pStack) +{ + m_pSipSession = new MessagingSession(const_cast<SipStack*>(pStack->getWrappedStack())); +} + +rtMessagingSession::~rtMessagingSession() +{ + rtSafeDelete(m_pSipSession); +} + +#if COM_VISIBLE +bool rtMessagingSession::send(String^ payload, rtActionConfig^ config) +{ + std::vector<char>_payload = rtString::toUtf8(payload); + return m_pSipSession->send((const void*)_payload.data(), _payload.size(), config ? config->getWrappedActionConfig() : tsk_null); +} + +bool rtMessagingSession::send(Platform::String^ payload) +{ + return send(payload, nullptr); +} + +#else +bool rtMessagingSession::send(IntPtr payload, unsigned len, rtActionConfig^ config) +{ + return m_pSipSession->send((const void*)payload, len, config ? config->getWrappedActionConfig() : tsk_null); +} + +bool rtMessagingSession::send(IntPtr payload, unsigned len) +{ + return send(payload, len, nullptr); +} +#endif + +bool rtMessagingSession::accept(rtActionConfig^ config) +{ + return m_pSipSession->accept(config ? config->getWrappedActionConfig() : tsk_null); +} + +bool rtMessagingSession::accept() +{ + return accept(nullptr); +} + +bool rtMessagingSession::reject(rtActionConfig^ config) +{ + return m_pSipSession->reject(config ? config->getWrappedActionConfig() : tsk_null); +} + +bool rtMessagingSession::reject() +{ + return reject(nullptr); +} + +/* ======================== rtInfoSession ========================*/ +rtISession_Implement(rtInfoSession); + +rtInfoSession::rtInfoSession(SipStack* pStack, tsip_ssession_handle_t* pHandle) +{ + m_pSipSession = new InfoSession(pStack, pHandle); +} + +rtInfoSession::rtInfoSession(rtSipStack^ pStack) +{ + m_pSipSession = new InfoSession(const_cast<SipStack*>(pStack->getWrappedStack())); +} + +rtInfoSession::~rtInfoSession() +{ + rtSafeDelete(m_pSipSession); +} + +#if COM_VISIBLE +bool rtInfoSession::send(Platform::String^ payload, rtActionConfig^ config) +{ + std::vector<char>_payload = rtString::toUtf8(payload); + return m_pSipSession->send((const void*)_payload.data(), _payload.size(), config ? config->getWrappedActionConfig() : tsk_null); +} + +bool rtInfoSession::send(Platform::String^ payload) +{ + return send(payload, nullptr); +} +#else +bool rtInfoSession::send(IntPtr payload, unsigned len, rtActionConfig^ config) +{ + return m_pSipSession->send((const void*)payload, len, config ? config->getWrappedActionConfig() : tsk_null); +} + +bool rtInfoSession::send(IntPtr payload, unsigned len) +{ + return send(payload, len, nullptr); +} +#endif + +bool rtInfoSession::accept(rtActionConfig^ config) +{ + return m_pSipSession->accept(config ? config->getWrappedActionConfig() : tsk_null); +} + +bool rtInfoSession::accept() +{ + return accept(nullptr); +} + +bool rtInfoSession::reject(rtActionConfig^ config) +{ + return m_pSipSession->reject(config ? config->getWrappedActionConfig() : tsk_null); +} + +bool rtInfoSession::reject() +{ + return reject(nullptr); +} + + + +/* ======================== rtOptionsSession ========================*/ +rtISession_Implement(rtOptionsSession); + +rtOptionsSession::rtOptionsSession(SipStack* pStack, tsip_ssession_handle_t* pHandle) +{ + m_pSipSession = new OptionsSession(pStack, pHandle); +} + +rtOptionsSession::rtOptionsSession(rtSipStack^ pStack) +{ + m_pSipSession = new OptionsSession(const_cast<SipStack*>(pStack->getWrappedStack())); +} + +rtOptionsSession::~rtOptionsSession() +{ + rtSafeDelete(m_pSipSession); +} + +bool rtOptionsSession::send(rtActionConfig^ config) +{ + return m_pSipSession->send(config ? config->getWrappedActionConfig() : tsk_null); +} + +bool rtOptionsSession::send() +{ + return send(nullptr); +} + +bool rtOptionsSession::accept(rtActionConfig^ config) +{ + return m_pSipSession->accept(config ? config->getWrappedActionConfig() : tsk_null); +} + +bool rtOptionsSession::accept() +{ + return accept(nullptr); +} + +bool rtOptionsSession::reject(rtActionConfig^ config) +{ + return m_pSipSession->reject(config ? config->getWrappedActionConfig() : tsk_null); +} + +bool rtOptionsSession::reject() +{ + return reject(nullptr); +} + + + +/* ======================== rtPublicationSession ========================*/ +rtISession_Implement(rtPublicationSession); + +rtPublicationSession::rtPublicationSession(rtSipStack^ pStack) +{ + m_pSipSession = new PublicationSession(const_cast<SipStack*>(pStack->getWrappedStack())); +} + +rtPublicationSession::rtPublicationSession(SipStack* pStack, tsip_ssession_handle_t* pHandle) +{ + m_pSipSession = new PublicationSession(pStack, pHandle); +} + +rtPublicationSession::~rtPublicationSession() +{ + rtSafeDelete(m_pSipSession); +} + +#if COM_VISIBLE +bool rtPublicationSession::publish(String^ payload, rtActionConfig^ config) +{ + std::vector<char>_payload = rtString::toUtf8(payload); + return m_pSipSession->publish((const void*)_payload.data(), _payload.size(), config ? config->getWrappedActionConfig() : tsk_null); +} +bool rtPublicationSession::publish(Platform::String^ payload) +{ + return publish(payload, nullptr); +} +#else +bool rtPublicationSession::publish(Platform::IntPtr payload, unsigned len, rtActionConfig^ config) +{ + return m_pSipSession->publish((const void*)payload, len, config ? config->getWrappedActionConfig() : tsk_null); +} + +bool rtPublicationSession::publish(Platform::IntPtr payload, unsigned len) +{ + return publish(payload, len, nullptr); +} +#endif + +bool rtPublicationSession::unPublish(rtActionConfig^ config) +{ + return m_pSipSession->unPublish(config ? config->getWrappedActionConfig() : tsk_null); +} + +bool rtPublicationSession::unPublish() +{ + return unPublish(nullptr); +} + + +/* ======================== rtRegistrationSession ========================*/ +rtISession_Implement(rtRegistrationSession); + +rtRegistrationSession::rtRegistrationSession(SipStack* pStack, tsip_ssession_handle_t* pHandle) +{ + m_pSipSession = new RegistrationSession(pStack, pHandle); +} + +rtRegistrationSession::rtRegistrationSession(rtSipStack^ pStack) +{ + m_pSipSession = new RegistrationSession(const_cast<SipStack*>(pStack->getWrappedStack())); +} + +rtRegistrationSession::~rtRegistrationSession() +{ + rtSafeDelete(m_pSipSession); +} + +bool rtRegistrationSession::register_(rtActionConfig^ config) +{ + return m_pSipSession->register_(config ? config->getWrappedActionConfig() : tsk_null); +} + +bool rtRegistrationSession::register_() +{ + return register_(nullptr); +} + +bool rtRegistrationSession::unRegister(rtActionConfig^ config) +{ + return m_pSipSession->unRegister(config ? config->getWrappedActionConfig() : tsk_null); +} + +bool rtRegistrationSession::unRegister() +{ + return unRegister(nullptr); +} + +bool rtRegistrationSession::accept(rtActionConfig^ config) +{ + return m_pSipSession->accept(config ? config->getWrappedActionConfig() : tsk_null); +} + +bool rtRegistrationSession::accept() +{ + return accept(nullptr); +} + +bool rtRegistrationSession::reject(rtActionConfig^ config) +{ + return m_pSipSession->reject(config ? config->getWrappedActionConfig() : tsk_null); +} + +bool rtRegistrationSession::reject() +{ + return reject(nullptr); +} + + +/* ======================== rtSubscriptionSession ========================*/ +rtISession_Implement(rtSubscriptionSession); + +rtSubscriptionSession::rtSubscriptionSession(rtSipStack^ pStack) +{ + m_pSipSession = new SubscriptionSession(const_cast<SipStack*>(pStack->getWrappedStack())); +} + +rtSubscriptionSession::rtSubscriptionSession(SipStack* pStack, tsip_ssession_handle_t* pHandle) +{ + m_pSipSession = new SubscriptionSession(pStack, pHandle); +} + +rtSubscriptionSession::~rtSubscriptionSession() +{ + rtSafeDelete(m_pSipSession); +} + +bool rtSubscriptionSession::subscribe() +{ + return m_pSipSession->subscribe(); +} + +bool rtSubscriptionSession::unSubscribe() +{ + return m_pSipSession->unSubscribe(); +}
\ No newline at end of file |