doubango/bindings/_common/SipSession.h
c732d49e
 /*
74ca6d11
 * Copyright (C) 2020, University of the Basque Country (UPV/EHU)
c732d49e
 * Contact for licensing options: <licensing-mcpttclient(at)mcopenplatform(dot)com>
 *
 * The original file was part of Open Source Doubango Framework
 * Copyright (C) 2010-2011 Mamadou Diop.
 * Copyright (C) 2012 Doubango Telecom <http://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.
 *
 */
 #ifndef TINYWRAP_SIPSESSION_H
 #define TINYWRAP_SIPSESSION_H
 
 #include "tinyWRAP_config.h"
 
 #include "tinysip.h"
 #include "tinymedia/tmedia_qos.h"
 #include "ActionConfig.h"
 
 
 
 class SipUri;
 class SipStack;
 class MsrpCallback;
 class MediaSessionMgr;
 //MCPTT
 class McpttCallback;
 class McpttMbmsCallback;
 class XcapCallback;
 
 
 
 /* ======================== T140Callback ========================*/
 class TINYWRAP_API T140CallbackData{
 	public:
 #if !defined(SWIG)
 	T140CallbackData(enum tmedia_t140_data_type_e data_type, const void* data_ptr, unsigned data_size){
 		m_eType = data_type;
 		m_pPtr = data_ptr;
 		m_nSize = data_size;
 	}
 #endif
 	virtual ~T140CallbackData(){}
 
 	inline enum tmedia_t140_data_type_e getType()const{ return m_eType; }
 	inline unsigned getSize()const{ return m_nSize; }
 	inline unsigned getData(void* pOutput, unsigned nMaxsize)const{
 		unsigned nRetsize = 0;
 		if(pOutput && nMaxsize && m_pPtr){
 			nRetsize = (m_nSize > nMaxsize) ? nMaxsize : m_nSize;
 			memcpy(pOutput, m_pPtr, nRetsize);
 		}
 		return nRetsize;
 	}
 
 	private:
 		enum tmedia_t140_data_type_e m_eType;
 		const void* m_pPtr;
 		unsigned m_nSize;
 };
 
 class TINYWRAP_API T140Callback
 {
 public:
 	T140Callback() {}
 	virtual ~T140Callback(){}
 	virtual int ondata(const T140CallbackData* pData){ return 0; }
 };
 
 #if !defined(SWIG)
 class RtcpCallbackData{
 	public:
 	RtcpCallbackData(enum tmedia_rtcp_event_type_e event_type, uint32_t ssrc_media){
 		m_eType = event_type;
 		m_nSSRC = ssrc_media;
 	}
 	virtual ~RtcpCallbackData(){}
 	inline enum tmedia_rtcp_event_type_e getType()const{ return m_eType; }
 	inline uint32_t getSSRC()const{ return m_nSSRC; }
 	private:
 		enum tmedia_rtcp_event_type_e m_eType;
 		uint32_t m_nSSRC;
 };
 
 class TINYWRAP_API RtcpCallback
 {
 public:
 	RtcpCallback() {}
 	virtual ~RtcpCallback(){}
 	virtual int onevent(const RtcpCallbackData* e){ return 0; }
 };
 #endif /* #if !defined(SWIG) */
 
 
 
 /* ======================== SipSession ========================*/
 class TINYWRAP_API SipSession
 {
 public:
 	SipSession(SipStack* stack);
 #if !defined(SWIG)
 	SipSession(SipStack* stack, tsip_ssession_handle_t* pHandle);
 #endif
 	virtual ~SipSession();
 
 public:
 	bool haveOwnership();
 	bool startMBMSManager(bool isStart);
 	bool addHeader(const char* name, const char* value);
 	bool removeHeader(const char* name);
 	bool addCaps(const char* name, const char* value);
 	bool addCaps(const char* name);
 	bool removeCaps(const char* name);
 
 	bool setExpires(unsigned expires);
 	bool setFromUri(const char* fromUriString);
 	bool setFromUri(const SipUri* fromUri);
 	bool setToUri(const char* toUriString);
 	bool setToUri(const SipUri* toUri);
 	bool setSilentHangup(bool silent);
 	bool addSigCompCompartment(const char* compId);
 	bool removeSigCompCompartment();
 #if !defined(SWIG)
 	bool setAuth(const char* authHa1, const char* authIMPI);
 #endif
 	unsigned getId()const;
 
 #if !defined(SWIG)
 	bool setWebSocketSrc(const char* host, int32_t port, const char* proto);
 	const SipStack* getStack() const;
 	const tsip_ssession_handle_t* getWrappedSession() { return m_pHandle; }
 #endif
 	
 private:
 	void init(SipStack* stack, tsip_ssession_handle_t* pHandle=tsk_null);
 
 protected:
 	tsip_ssession_handle_t* m_pHandle;
 	const SipStack* m_pStack;
 };
 
 /* ======================== InviteSession ========================*/
 class TINYWRAP_API InviteSession : public SipSession
 {
 public: /* ctor() and dtor() */
 	InviteSession(SipStack* Stack);
 #if !defined(SWIG)
 	InviteSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
 #endif
 	virtual ~InviteSession();
 
 public: /* Public functions */
 	bool accept(ActionConfig* config=tsk_null);
 	bool hangup(ActionConfig* config=tsk_null);
 	bool reject(ActionConfig* config=tsk_null);
 	bool sendInfo(const void* payload, unsigned len, ActionConfig* config=tsk_null);
 	const MediaSessionMgr* getMediaMgr();
 
 private:
 	MediaSessionMgr* m_pMediaMgr;
 };
 
 
 /* ======================== CallSession ========================*/
 class TINYWRAP_API CallSession : public InviteSession
 {
 public: /* ctor() and dtor() */
 	CallSession(SipStack* pStack);
 #if !defined(SWIG)
 	CallSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
 #endif
 	virtual ~CallSession();
 
 public: /* Public functions */
 	bool callAudio(const char* remoteUriString, ActionConfig* config=tsk_null); /* @deprecated */
 	bool callAudio(const SipUri* remoteUri, ActionConfig* config=tsk_null); /* @deprecated */
 	bool callAudioVideo(const char* remoteUriString, ActionConfig* config=tsk_null); /* @deprecated */
 	bool callAudioVideo(const SipUri* remoteUri, ActionConfig* config=tsk_null); /* @deprecated */
 	bool callVideo(const char* remoteUriString, ActionConfig* config=tsk_null); /* @deprecated */
 	bool callVideo(const SipUri* remoteUri, ActionConfig* config=tsk_null); /* @deprecated */
 
175b478c
 	bool call(const char* remoteUriString, twrap_media_type_t media
 			,const bool answer_mode_auto
 			, ActionConfig* config=tsk_null);
 	bool call(const SipUri* remoteUri, twrap_media_type_t media
 			,const bool answer_mode_auto
 			, ActionConfig* config=tsk_null);
 	bool callEmergency(const char* remoteUriString, twrap_media_type_t media
 			,const bool answerMode
 			,const char* emergencyType/*=tsk_null*/,const int levelEmergency, ActionConfig* config=tsk_null);
 	bool callEmergency(const SipUri* remoteUri, twrap_media_type_t media
 			,const bool answerMode
 			,const char* emergencyType/*=tsk_null*/,const int levelEmergency, ActionConfig* config=tsk_null);
 	bool callGroup(char** user_list, int user_count, twrap_media_type_t media, ActionConfig* config);
c732d49e
 	
 
 
 #if !defined(SWIG)
 	bool setSupportedCodecs(int32_t codecs);
 	int32_t getNegotiatedCodecs();
 	bool setMediaSSRC(twrap_media_type_t media, uint32_t ssrc);
 #endif
 	bool setSessionTimer(unsigned timeout, const char* refresher);
 	bool set100rel(bool enabled);
 	bool setRtcp(bool enabled);
 	bool setRtcpMux(bool enabled);
 	bool setSRtpMode(enum tmedia_srtp_mode_e mode);
 	bool setAvpfMode(enum tmedia_mode_e mode);
 	bool setICE(bool enabled);
 	bool setICEStun(bool enabled);
 	bool setICETurn(bool enabled);
 	bool setSTUNServer(const char* hostname, uint16_t port);
 	bool setSTUNCred(const char* username, const char* password);
 	bool setVideoFps(int32_t fps);
 	bool setVideoBandwidthUploadMax(int32_t max);
 	bool setVideoBandwidthDownloadMax(int32_t max);
 	bool setVideoPrefSize(tmedia_pref_video_size_t pref_video_size);
 	bool setQoS(tmedia_qos_stype_t type, tmedia_qos_strength_t strength);
 	bool setPoCQoE(tmedia_poc_qoe_profile_t profile, tmedia_poc_qoe_profile_strength_t strength);
 	bool hold(ActionConfig* config=tsk_null);
 	bool resume(ActionConfig* config=tsk_null);
 	bool transfer(const char* referToUriString, ActionConfig* config=tsk_null);
 	bool acceptTransfer(ActionConfig* config=tsk_null);
 	bool rejectTransfer(ActionConfig* config=tsk_null);
 	bool sendDTMF(int number);
 	unsigned getSessionTransferId();
 	bool sendT140Data(enum tmedia_t140_data_type_e data_type, const void* data_ptr = NULL, unsigned data_size = 0);
 	bool setT140Callback(const T140Callback* pT140Callback);
 	//MCPTT
 	bool setMcpttCallback(const McpttCallback* pMcpttCallback);
 	bool setMcpttMbmsCallback(const McpttMbmsCallback* pMcpttMbmsCallback);
175b478c
 	//MCPTT
c732d49e
 	bool requestMcpttToken(ActionConfig* config=tsk_null);
 	bool releaseMcpttToken(ActionConfig* config=tsk_null);
175b478c
 	//MCPTT MBMS
c732d49e
 	bool startMbmsManager(ActionConfig* config/*=tsk_null*/,const char* remoteIP,int remotePort, const char* localIface, int localIfaceIdx);
 	bool stopMbmsManager(ActionConfig* config/*=tsk_null*/ );
 	bool startMbmsMedia(ActionConfig* config/*=tsk_null*/, const char* mediaIP, int mediaPort, int mediaCtrlPort);
 	const char* getPTTMcpttGroupIdentity();
 	int getPTTMcpttGroupMembers();
 	const char* getPTTMcpttGroupMemberAtPosition(int pos);
175b478c
 	const char* getPttMcpttEmergencyResourcePriorityString();
 	const int getPttMcpttEmergencyResourcePriority();
c732d49e
 	//
 	char* getSipPartyUri();
 
 
 #if !defined(SWIG)
 	bool sendRtcpEvent(enum tmedia_rtcp_event_type_e event_type, twrap_media_type_t media_type, uint32_t ssrc_media = 0);
 	bool setRtcpCallback(const RtcpCallback* pRtcpCallback, twrap_media_type_t media_type);
 	const T140Callback* getT140Callback() const;
 	static int t140OnDataCallback(const void* context, enum tmedia_t140_data_type_e data_type, const void* data_ptr, unsigned data_size);
 	const RtcpCallback* getRtcpCallback() const;
 	static int rtcpOnCallback(const void* context, enum tmedia_rtcp_event_type_e event_type, uint32_t ssrc_media);
 	//MCPTT
 	const McpttCallback* getMcpttCallback() const;
 	const McpttMbmsCallback* getMcpttMbmsCallback() const;
 	const XcapCallback* getXcapCallback() const;
 	
 #endif /* #if !defined(SWIG) */
 
 private:
 	const T140Callback* m_pT140Callback;
 	const RtcpCallback* m_pRtcpCallback;
 	//MCPTT
 	const McpttCallback* m_pMcpttCallback;
 	const McpttMbmsCallback* m_pMcpttMbmsCallback;
 	const XcapCallback* m_pPTTXcapCallback;
 };
 
 /* ======================== MsrpSession ========================*/
 class TINYWRAP_API MsrpSession : public InviteSession
 {
 public: /* ctor() and dtor() */
 	MsrpSession(SipStack* pStack, MsrpCallback* pCallback);
 #if !defined(SWIG)
 	MsrpSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
 #endif
 	virtual ~MsrpSession();
 
 public: /* Public functions */
 	bool setCallback(MsrpCallback* pCallback);
 	bool callMsrp(const char* remoteUriString, ActionConfig* config=tsk_null);
 	bool callMsrp(const SipUri* remoteUri, ActionConfig* config=tsk_null);
 	bool sendMessage(const void* payload, unsigned len, ActionConfig* config=tsk_null);
 	bool sendFile(ActionConfig* config=tsk_null);
 
 	public: /* Public helper function */
 #if !defined(SWIG)
 		inline MsrpCallback* getCallback()const{
 			return m_pCallback;
 		}
 #endif
 
 private:
 	MsrpCallback* m_pCallback;
 };
175b478c
 
c732d49e
 /* ======================== McpttSession ========================*/
 class TINYWRAP_API McpttSession : public InviteSession
 {
 public: /* ctor() and dtor() */
 	McpttSession(SipStack* pStack, McpttCallback* pCallback);
 #if !defined(SWIG)
 	McpttSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
 #endif
 	virtual ~McpttSession();
 
 public: /* Public functions */
 	bool setCallback(McpttCallback* pCallback);
 	bool requestToken(ActionConfig* config=tsk_null);
 
 	public: /* Public helper function */
 #if !defined(SWIG)
 		inline McpttCallback* getCallback()const{
 			return m_pCallback;
 		}
 #endif
 
 private:
 	McpttCallback* m_pCallback;
 };
 
 
 /* ======================== MessagingSession ========================*/
 class TINYWRAP_API MessagingSession : public SipSession
 {
 public: /* ctor() and dtor() */
 	MessagingSession(SipStack* pStack);
 #if !defined(SWIG)
 	MessagingSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
 #endif
 	virtual ~MessagingSession();
 
 public: /* Public functions */
 	bool send(const void* payload, unsigned len, ActionConfig* config=tsk_null);
 	bool accept(ActionConfig* config=tsk_null);
 	bool reject(ActionConfig* config=tsk_null);
 };
175b478c
 
 
 //
c732d49e
 /* ======================== MessagingLocationSession ========================*/
 class TINYWRAP_API MessagingLocationSession : public SipSession
 {
 public: /* ctor() and dtor() */
 	MessagingLocationSession(SipStack* pStack);
 #if !defined(SWIG)
 	MessagingLocationSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
 #endif
 	virtual ~MessagingLocationSession();
 
 public: /* Public functions */
 	bool send(const void* payload, unsigned len, ActionConfig* config=tsk_null);
 	bool accept(ActionConfig* config=tsk_null);
 	bool reject(ActionConfig* config=tsk_null);
 };
 /* ======================== MessagingAffiliationSession ========================*/
 class TINYWRAP_API MessagingAffiliationSession : public SipSession
 {
 public: /* ctor() and dtor() */
 	MessagingAffiliationSession(SipStack* pStack);
 #if !defined(SWIG)
 	MessagingAffiliationSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
 #endif
 	virtual ~MessagingAffiliationSession();
 
 public: /* Public functions */
 	bool send(const void* payload, unsigned len, ActionConfig* config=tsk_null);
 	bool accept(ActionConfig* config=tsk_null);
 	bool reject(ActionConfig* config=tsk_null);
 };
 /* ======================== MessagingMbmsSession ========================*/
 class TINYWRAP_API MessagingMbmsSession : public SipSession
 {
 public: /* ctor() and dtor() */
 	MessagingMbmsSession(SipStack* pStack);
 #if !defined(SWIG)
 	MessagingMbmsSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
 #endif
 	virtual ~MessagingMbmsSession();
 
 public: /* Public functions */
 	bool send(const void* payload, unsigned len, ActionConfig* config=tsk_null);
 	bool accept(ActionConfig* config=tsk_null);
 	bool reject(ActionConfig* config=tsk_null);
 };
 
 /* ======================== InfoSession ========================*/
 class TINYWRAP_API InfoSession : public SipSession
 {
 public: /* ctor() and dtor() */
 	InfoSession(SipStack* pStack);
 #if !defined(SWIG)
 	InfoSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
 #endif
 	virtual ~InfoSession();
 
 public: /* Public functions */
 	bool send(const void* payload, unsigned len, ActionConfig* config=tsk_null);
 	bool accept(ActionConfig* config=tsk_null);
 	bool reject(ActionConfig* config=tsk_null);
 };
 
 /* ======================== OptionsSession ========================*/
 class TINYWRAP_API OptionsSession : public SipSession
 {
 public: /* ctor() and dtor() */
 	OptionsSession(SipStack* pStack);
 #if !defined(SWIG)
 	OptionsSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
 #endif
 	virtual ~OptionsSession();
 
 public: /* Public functions */
 	bool send(ActionConfig* config=tsk_null);
 	bool accept(ActionConfig* config=tsk_null);
 	bool reject(ActionConfig* config=tsk_null);
 };
 
 
 
 /* ======================== PublicationSession ========================*/
 class TINYWRAP_API PublicationSession : public SipSession
 {
 public: /* ctor() and dtor() */
 	PublicationSession(SipStack* pStack);
 #if !defined(SWIG)
 	PublicationSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
 #endif
 	virtual ~PublicationSession();
 
 public: /* Public functions */
 	bool publish(const void* payload, unsigned len, ActionConfig* config=tsk_null);
 	bool unPublish(ActionConfig* config=tsk_null);
 };
 
 /* ======================== PublicationAffiliationSession ========================*/
 class TINYWRAP_API PublicationAffiliationSession : public SipSession
 {
 public: /* ctor() and dtor() */
 	PublicationAffiliationSession(SipStack* pStack);
 #if !defined(SWIG)
 	PublicationAffiliationSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
 #endif
 	virtual ~PublicationAffiliationSession();
 
 public: /* Public functions */
 	bool publish(const void* payload, unsigned len, ActionConfig* config=tsk_null);
 	bool unPublish(const void* payload, unsigned len, ActionConfig* config=tsk_null);
 	/*bool unPublish(ActionConfig* config=tsk_null);*/
 	
 };
175b478c
 /* ======================== PublicationAuthenticationSession ========================*/
 class TINYWRAP_API PublicationAuthenticationSession : public SipSession
 {
 public: /* ctor() and dtor() */
 	PublicationAuthenticationSession(SipStack* pStack);
 #if !defined(SWIG)
 	PublicationAuthenticationSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
 #endif
 	virtual ~PublicationAuthenticationSession();
 
 public: /* Public functions */
 	bool publish(const char* mcptt_info,const char* poc_settings,const void* payload, unsigned len, ActionConfig* config=tsk_null);
 	bool unPublish(const void* payload, unsigned len, ActionConfig* config=tsk_null);
 	/*bool unPublish(ActionConfig* config=tsk_null);*/
 	
 };
c732d49e
 
 /* ======================== RegistrationSession ========================*/
 class TINYWRAP_API RegistrationSession : public SipSession
 {
 public: /* ctor() and dtor() */
 	RegistrationSession(SipStack* pStack);
 #if !defined(SWIG)
 	RegistrationSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
 #endif
 	virtual ~RegistrationSession();
     
 public: /* Public functions */
 	//bool register_(ActionConfig* config=tsk_null);
 
 	bool register_(ActionConfig* config=tsk_null);
 	bool registerWithMcpttInfo(const void* payload, unsigned len,ActionConfig* config=tsk_null);
 	bool unRegister(ActionConfig* config=tsk_null);
 	bool accept(ActionConfig* config=tsk_null);
 	bool reject(ActionConfig* config=tsk_null);
 
 
 
 };
 
 
 /* ======================== SubscriptionSession ========================*/
 class TINYWRAP_API SubscriptionSession : public SipSession
 {
 public: /* ctor() and dtor() */
 	SubscriptionSession(SipStack* pStack);
 #if !defined(SWIG)
 	SubscriptionSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
 #endif
 	virtual ~SubscriptionSession();
 
 public: /* Public functions */
 	bool subscribe();
 	bool unSubscribe();
 };
 
 /* ======================== SubscriptionAffiliationSession ========================*/
 class TINYWRAP_API SubscriptionAffiliationSession : public SipSession
 {
 public: /* ctor() and dtor() */
 	SubscriptionAffiliationSession(SipStack* pStack);
 #if !defined(SWIG)
 	SubscriptionAffiliationSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
 #endif
 	virtual ~SubscriptionAffiliationSession();
 
 public: /* Public functions */
 	bool subscribeAffiliation();
 	bool unSubscribeAffiliation();
 };
 
175b478c
 /* ======================== SubscriptionCMSSession ========================*/
 class TINYWRAP_API SubscriptionCMSSession : public SipSession
 {
 public: /* ctor() and dtor() */
 	SubscriptionCMSSession(SipStack* pStack);
 #if !defined(SWIG)
 	SubscriptionCMSSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
 #endif
 	virtual ~SubscriptionCMSSession();
 
 public: /* Public functions */
 	bool subscribeCMS(const void* payload, unsigned len,const void* payload2, unsigned len2,ActionConfig* config=tsk_null);
 	bool unSubscribeCMS();
 };
c732d49e
 
175b478c
 /* ======================== SubscriptionGMDSession ========================*/
 class TINYWRAP_API SubscriptionGMSSession : public SipSession
 {
 public: /* ctor() and dtor() */
 	SubscriptionGMSSession(SipStack* pStack);
 #if !defined(SWIG)
 	SubscriptionGMSSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
 #endif
 	virtual ~SubscriptionGMSSession();
 
 public: /* Public functions */
 	bool subscribeGMS(const void* payload, unsigned len, const void* payload2, unsigned len2,ActionConfig* config=tsk_null);
 	bool unSubscribeGMS();
 };
c732d49e
 
 
 #endif /* TINYWRAP_SIPSESSION_H */