diff options
Diffstat (limited to 'bindings/winrt/doubango_rt/include/rt_SipSession.h')
-rw-r--r-- | bindings/winrt/doubango_rt/include/rt_SipSession.h | 510 |
1 files changed, 510 insertions, 0 deletions
diff --git a/bindings/winrt/doubango_rt/include/rt_SipSession.h b/bindings/winrt/doubango_rt/include/rt_SipSession.h new file mode 100644 index 0000000..bf52ba5 --- /dev/null +++ b/bindings/winrt/doubango_rt/include/rt_SipSession.h @@ -0,0 +1,510 @@ +/*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. +*/ +#pragma once + +#include "rt_Config.h" +#include "rt_SipStack.h" +#include "rt_SipUri.h" +#include "rt_String.h" +#include "rt_ActionConfig.h" +#include "rt_MediaSessionMgr.h" + +#include "tinysip.h" + +class SipSession; +class InviteSession; +class CallSession; +class MsrpSession; +class MessagingSession; +class InfoSession; +class OptionsSession; +class PublicationSession; +class RegistrationSession; +class SubscriptionSession; +class SipStack; + +class T140CallbackData; +class T140Callback; + +// error C4585: 'doubango_rt::rtSipSession' : A WinRT 'public ref class' must either be sealed or derive from an existing unsealed class +#define rtISession_Declare() \ + virtual unsigned getId(); \ + virtual bool haveOwnership(); \ + virtual bool addHeader(Platform::String^ name, Platform::String^ value); \ + virtual bool removeHeader(Platform::String^ name); \ + [Windows::Foundation::Metadata::DefaultOverload] \ + virtual bool addCaps(Platform::String^ name, Platform::String^ value); \ + OVERRIDE_FUNC(virtual bool addCaps(Platform::String^ name);) \ + virtual bool removeCaps(Platform::String^ name); \ + virtual bool setExpires(unsigned expires); \ + OVERRIDE_FUNC(virtual bool setFromUri(Platform::String^ fromUriString);) \ + [Windows::Foundation::Metadata::DefaultOverload] \ + virtual bool setFromUri(rtSipUri^ fromUri); \ + OVERRIDE_FUNC(virtual bool setToUri(Platform::String^ toUriString);) \ + [Windows::Foundation::Metadata::DefaultOverload] \ + virtual bool setToUri(rtSipUri^ toUri); \ + virtual bool setSilentHangup(bool silent); \ + virtual bool addSigCompCompartment(Platform::String^ compId); \ + virtual bool removeSigCompCompartment(); \ + +#define rtISession_Implement(cls) \ + unsigned cls##::getId(){ \ + return m_pSipSession->getId(); \ +} \ + bool cls##::haveOwnership(){ \ + return m_pSipSession->haveOwnership(); \ +} \ + bool cls##::addHeader(Platform::String^ name, Platform::String^ value){ \ + return m_pSipSession->addHeader(rtString::toUtf8(name).data(), rtString::toUtf8(value).data()); \ +} \ + bool cls##::removeHeader(Platform::String^ name){ \ + return m_pSipSession->removeHeader(rtString::toUtf8(name).data()); \ +} \ + bool cls##::addCaps(Platform::String^ name, Platform::String^ value){ \ + return m_pSipSession->addCaps(rtString::toUtf8(name).data(), rtString::toUtf8(value).data()); \ +} \ +OVERRIDE_FUNC(bool cls##::addCaps(Platform::String^ name){ \ + return addCaps(name, nullptr); \ +}) \ + bool cls##::removeCaps(Platform::String^ name){ \ + return m_pSipSession->removeCaps(rtString::toUtf8(name).data()); \ +} \ + bool cls##::setExpires(unsigned expires){ \ + return m_pSipSession->setExpires(expires); \ +} \ +OVERRIDE_FUNC(bool cls##::setFromUri(Platform::String^ fromUriString){ \ + return m_pSipSession->setFromUri(rtString::toUtf8(fromUriString).data()); \ +}) \ + bool cls##::setFromUri(rtSipUri^ fromUri){ \ + return m_pSipSession->setFromUri(fromUri->getWrappedUri()); \ +} \ +OVERRIDE_FUNC(bool cls##::setToUri(Platform::String^ toUriString){ \ + return m_pSipSession->setToUri(rtString::toUtf8(toUriString).data()); \ +}) \ + bool cls##::setToUri(rtSipUri^ toUri){ \ + return m_pSipSession->setToUri(toUri->getWrappedUri()); \ +} \ + bool cls##::setSilentHangup(bool silent){ \ + return m_pSipSession->setSilentHangup(silent); \ +} \ + bool cls##::addSigCompCompartment(Platform::String^ compId){ \ + return m_pSipSession->addSigCompCompartment(rtString::toUtf8(compId).data()); \ +} \ + bool cls##::removeSigCompCompartment(){ \ + return m_pSipSession->removeSigCompCompartment(); \ +}\ + + +#define rtIInviteSession_Declare() \ + [Windows::Foundation::Metadata::DefaultOverload] \ + virtual bool accept(rtActionConfig^ config); \ + OVERRIDE_FUNC(virtual bool accept();) \ + [Windows::Foundation::Metadata::DefaultOverload] \ + virtual bool hangup(rtActionConfig^ config); \ + OVERRIDE_FUNC(virtual bool hangup();) \ + [Windows::Foundation::Metadata::DefaultOverload] \ + virtual bool reject(rtActionConfig^ config); \ + OVERRIDE_FUNC(virtual bool reject();) \ + [Windows::Foundation::Metadata::DefaultOverload] \ + virtual bool sendInfo(VISIBLE_VOID_PTR payload, unsigned len, rtActionConfig^ config); \ + OVERRIDE_FUNC(virtual bool sendInfo(VISIBLE_VOID_PTR payload, unsigned len);) \ + virtual rtMediaSessionMgr^ getMediaMgr(); \ + +#define rtIInviteSession_Implement(cls) \ +bool cls##::accept(rtActionConfig^ config){ \ + return m_pSipSession->accept(config ? config->getWrappedActionConfig() : tsk_null); \ +} \ +OVERRIDE_FUNC(bool cls##::accept(){ \ + return accept(nullptr); \ +}) \ +bool cls##::hangup(rtActionConfig^ config){ \ + return m_pSipSession->hangup(config ? config->getWrappedActionConfig() : tsk_null); \ +} \ +OVERRIDE_FUNC(bool cls##::hangup(){ \ + return hangup(nullptr); \ +}) \ +bool cls##::reject(rtActionConfig^ config){ \ + return m_pSipSession->reject(config ? config->getWrappedActionConfig() : tsk_null); \ +} \ +OVERRIDE_FUNC(bool cls##::reject(){ \ + return reject(nullptr); \ +}) \ +bool cls##::sendInfo(VISIBLE_VOID_PTR payload, unsigned len, rtActionConfig^ config){ \ + return m_pSipSession->sendInfo(VISIBLE_VOID_PTR_2_VOID_PTR(payload), len, config ? config->getWrappedActionConfig() : tsk_null); \ +} \ +OVERRIDE_FUNC(bool cls##::sendInfo(VISIBLE_VOID_PTR payload, unsigned len){ \ + return sendInfo(payload, len, nullptr); \ +}) \ +rtMediaSessionMgr^ cls##::getMediaMgr(){ \ + if(m_pSipSession->getMediaMgr()){ \ + return ref new rtMediaSessionMgr(const_cast<struct tmedia_session_mgr_s*>(m_pSipSession->getMediaMgr()->getWrappedMgr())); \ + } \ + return nullptr; \ +} \ + +namespace doubango_rt +{ + namespace BackEnd + { + ref class rtMsrpCallback; + interface class rtIMsrpCallback; + + + /* ======================== rtT140CallbackData ========================*/ + public ref class rtT140CallbackData sealed + { + internal: + rtT140CallbackData(enum tmedia_t140_data_type_e data_type, const void* data_ptr, unsigned data_size); + public: + virtual ~rtT140CallbackData(); + + private: + T140CallbackData* m_pData; + }; + + /* ======================== rtT140Callback ========================*/ + public interface class rtIT140Callback + { + virtual int ondata(rtT140CallbackData^ pData); + }; + public ref class rtT140Callback sealed + { + internal: + rtT140Callback(); + const T140Callback* getWrappedCallback(){ return m_pCallback; } + + public: + rtT140Callback(rtIT140Callback^ pI) + { + m_pI = pI; + } + virtual ~rtT140Callback(); + + protected: + virtual int ondata(rtT140CallbackData^ pData){ + if(m_pI) + { + return m_pI->ondata(pData); + } + return 0; + } + + private: + T140Callback* m_pCallback; + rtIT140Callback^ m_pI; + }; + + + /* ======================== rtISipSession ========================*/ + public interface class rtISipSession + { + rtISession_Declare(); + }; + + + /* ======================== rtIInviteSession ========================*/ + public interface class rtIInviteSession : rtISipSession + { + rtIInviteSession_Declare(); + }; + + /* ======================== rtSipSession ========================*/ + public ref class rtSipSession sealed: rtISipSession + { + public: + rtSipSession(rtSipStack^ pStack); + virtual ~rtSipSession(); + internal: + rtSipSession(SipStack* pStack, tsip_ssession_handle_t* pHandle); + SipSession* getWrappedSession(){ return m_pSipSession; } + + public: + rtISession_Declare(); + + private: + SipSession* m_pSipSession; + }; + + /* ======================== rtInviteSession ========================*/ + public ref class rtInviteSession sealed: rtIInviteSession + { + public: + rtInviteSession(rtSipStack^ pStack); + virtual ~rtInviteSession(); + internal: + rtInviteSession(SipStack* pStack, tsip_ssession_handle_t* pHandle); + InviteSession* getWrappedSession(){ return m_pSipSession; } + + public: + rtISession_Declare(); + rtIInviteSession_Declare(); + + private: + InviteSession* m_pSipSession; + }; + + /* ======================== CallSession ========================*/ + public ref class rtCallSession sealed : rtIInviteSession + { + public: + rtCallSession(rtSipStack^ pStack); + virtual ~rtCallSession(); + internal: + rtCallSession(SipStack* pStack, tsip_ssession_handle_t* pHandle); + CallSession* getWrappedSession(){ return m_pSipSession; } + + public: + rtISession_Declare(); + rtIInviteSession_Declare(); + + [Windows::Foundation::Metadata::DefaultOverload] + bool call(Platform::String^ remoteUriString, rt_twrap_media_type_t media, rtActionConfig^ config); + [Windows::Foundation::Metadata::DefaultOverload] + bool call(Platform::String^ remoteUriString, rt_twrap_media_type_t media); + bool call(rtSipUri^ remoteUri, rt_twrap_media_type_t media, rtActionConfig^ config); + bool call(rtSipUri^ remoteUri, rt_twrap_media_type_t media); + + bool setSessionTimer(unsigned timeout, Platform::String^ refresher); + bool set100rel(bool enabled); + bool setRtcp(bool enabled); + bool setRtcpMux(bool enabled); + bool setICE(bool enabled); + bool setQoS(rt_tmedia_qos_stype_t type, rt_tmedia_qos_strength_t strength); + bool setVideoFps(int32_t fps); + bool setVideoBandwidthUploadMax(int32_t max); + bool setVideoBandwidthDownloadMax(int32_t max); + bool setVideoPrefSize(rt_tmedia_pref_video_size_t pref_video_size); + bool hold(rtActionConfig^ config); + bool hold(); + bool resume(rtActionConfig^ config); + bool resume(); + bool transfer(Platform::String^ referToUriString, rtActionConfig^ config); + bool transfer(Platform::String^ referToUriString); + bool acceptTransfer(rtActionConfig^ config); + bool acceptTransfer(); + bool rejectTransfer(rtActionConfig^ config); + bool rejectTransfer(); + bool sendDTMF(int number); + unsigned getSessionTransferId(); +#if COM_VISIBLE + bool sendT140Data(rt_tmedia_t140_data_type_t data_type, Platform::String^ data); +#else + bool sendT140Data(rt_tmedia_t140_data_type_t data_type, Platform::IntPtr data_ptr, unsigned data_size); +#endif + bool sendT140Data(rt_tmedia_t140_data_type_t data_type); + bool setT140Callback(rtT140Callback^ pT140Callback); + + private: + CallSession* m_pSipSession; + }; + + + /* ======================== rtMsrpSession ========================*/ + public ref class rtMsrpSession sealed : rtIInviteSession + { + public: + rtMsrpSession(rtSipStack^ pStack, rtIMsrpCallback^ pCallback); + virtual ~rtMsrpSession(); + + internal: + rtMsrpSession(SipStack* pStack, tsip_ssession_handle_t* pHandle); + MsrpSession* getWrappedSession(){ return m_pSipSession; } + + public: + rtISession_Declare(); + rtIInviteSession_Declare(); + + bool setCallback(rtIMsrpCallback^ pCallback); + [Windows::Foundation::Metadata::DefaultOverload] + bool callMsrp(Platform::String^ remoteUriString, rtActionConfig^ config); + [Windows::Foundation::Metadata::DefaultOverload] + bool callMsrp(Platform::String^ remoteUriString); + bool callMsrp(rtSipUri^ remoteUri, rtActionConfig^ config); + bool callMsrp(rtSipUri^ remoteUri); +#if COM_VISIBLE + bool sendMessage(Platform::String^ payload, rtActionConfig^ config); + bool sendMessage(Platform::String^ payload); +#else + bool sendMessage(Platform::IntPtr payload, unsigned len, rtActionConfig^ config); + bool sendMessage(Platform::IntPtr payload, unsigned len); +#endif + + private: + MsrpSession* m_pSipSession; + rtMsrpCallback^ m_pCallback; + }; + + /* ======================== rtMessagingSession ========================*/ + public ref class rtMessagingSession sealed : rtISipSession + { + internal: + rtMessagingSession(SipStack* pStack, tsip_ssession_handle_t* pHandle); + public: + rtMessagingSession(rtSipStack^ pStack); + virtual ~rtMessagingSession(); + + rtISession_Declare(); + +#if COM_VISIBLE + bool send(Platform::String^ payload, rtActionConfig^ config); + bool send(Platform::String^ payload); +#else + [Windows::Foundation::Metadata::DefaultOverload] + bool send(Platform::IntPtr payload, unsigned len, rtActionConfig^ config); + bool send(Platform::IntPtr payload, unsigned len); +#endif + [Windows::Foundation::Metadata::DefaultOverload] + bool accept(rtActionConfig^ config); + bool accept(); + [Windows::Foundation::Metadata::DefaultOverload] + bool reject(rtActionConfig^ config); + bool reject(); + + private: + MessagingSession* m_pSipSession; + }; + + + /* ======================== rtInfoSession ========================*/ + public ref class rtInfoSession sealed : rtISipSession + { + internal: + rtInfoSession(SipStack* pStack, tsip_ssession_handle_t* pHandle); + public: + rtInfoSession(rtSipStack^ pStack); + virtual ~rtInfoSession(); + + rtISession_Declare(); + +#if COM_VISIBLE + bool send(Platform::String^ payload, rtActionConfig^ config); + bool send(Platform::String^ payload); +#else + [Windows::Foundation::Metadata::DefaultOverload] + bool send(Platform::IntPtr payload, unsigned len, rtActionConfig^ config); + bool send(Platform::IntPtr payload, unsigned len); +#endif + [Windows::Foundation::Metadata::DefaultOverload] + bool accept(rtActionConfig^ config); + bool accept(); + [Windows::Foundation::Metadata::DefaultOverload] + bool reject(rtActionConfig^ config); + bool reject(); + + private: + InfoSession* m_pSipSession; + }; + + + /* ======================== rtOptionsSession ========================*/ + public ref class rtOptionsSession sealed : rtISipSession + { + internal: + rtOptionsSession(SipStack* pStack, tsip_ssession_handle_t* pHandle); + public: + rtOptionsSession(rtSipStack^ pStack); + virtual ~rtOptionsSession(); + + rtISession_Declare(); + + [Windows::Foundation::Metadata::DefaultOverload] + bool send(rtActionConfig^ config); + bool send(); + [Windows::Foundation::Metadata::DefaultOverload] + bool accept(rtActionConfig^ config); + bool accept(); + [Windows::Foundation::Metadata::DefaultOverload] + bool reject(rtActionConfig^ config); + bool reject(); + + private: + OptionsSession* m_pSipSession; + }; + + + /* ======================== rtPublicationSession ========================*/ + public ref class rtPublicationSession sealed : rtISipSession + { + internal: + rtPublicationSession(SipStack* pStack, tsip_ssession_handle_t* pHandle); + public: + rtPublicationSession(rtSipStack^ pStack); + virtual ~rtPublicationSession(); + + rtISession_Declare(); + +#if COM_VISIBLE + bool publish(Platform::String^ payload, rtActionConfig^ config); + bool publish(Platform::String^ payload); +#else + [Windows::Foundation::Metadata::DefaultOverload] + bool publish(Platform::IntPtr payload, unsigned len, rtActionConfig^ config); + bool publish(Platform::IntPtr payload, unsigned len); +#endif + [Windows::Foundation::Metadata::DefaultOverload] + bool unPublish(rtActionConfig^ config); + bool unPublish(); + + private: + PublicationSession* m_pSipSession; + }; + + + /* ======================== rtRegistrationSession ========================*/ + public ref class rtRegistrationSession sealed : rtISipSession + { + internal: + rtRegistrationSession(SipStack* pStack, tsip_ssession_handle_t* pHandle); + public: + rtRegistrationSession(rtSipStack^ pStack); + virtual ~rtRegistrationSession(); + + rtISession_Declare(); + + bool register_(rtActionConfig^ config); + bool register_(); + bool unRegister(rtActionConfig^ config); + bool unRegister(); + bool accept(rtActionConfig^ config); + bool accept(); + bool reject(rtActionConfig^ config); + bool reject(); + + private: + RegistrationSession* m_pSipSession; + }; + + /* ======================== rtSubscriptionSession ========================*/ + public ref class rtSubscriptionSession sealed : rtISipSession + { + internal: + rtSubscriptionSession(SipStack* pStack, tsip_ssession_handle_t* pHandle); + public: + rtSubscriptionSession(rtSipStack^ pStack); + virtual ~rtSubscriptionSession(); + + rtISession_Declare(); + + bool subscribe(); + bool unSubscribe(); + + private: + SubscriptionSession* m_pSipSession; + }; + } +} |