Add new QoS implementation

Code formatting
This commit is contained in:
Mamadou DIOP 2016-02-23 22:00:35 +01:00
parent 94b2219209
commit 50dfb43596
2065 changed files with 250781 additions and 246848 deletions

17
.gitignore vendored
View File

@ -2,3 +2,20 @@ Debug
*.user
*.suo
*.ncb
/bindings/csharp/Release
/tinyDAV/Release
/tinySIGCOMP/Release
/tinyBFCP/Release
/tinyMSRP/Release
/tinyHTTP/Release
/tinyMEDIA/Release
/tinyNET/Release
/tinySAK/Release
/plugins/pluginWinMF/Release
/tinySIP/Release
/tinySMS/Release
/tinyIPSec/Release
/tinySDP/Release
/tinyRTP/Release
/tinyXCAP/Release
*.orig

1
AStyle.sh Normal file
View File

@ -0,0 +1 @@
./thirdparties/win32/tools/AStyle.exe --style=k/r --lineend=linux --mode=c --add-brackets --break-closing-brackets --recursive "*.c" "*.cxx" "*.h" "*.cc"

View File

@ -25,70 +25,69 @@ bool IPSecCtx::sInitialized = false;
extern "C" const tipsec_plugin_def_t *plugin_win_ipsec_vista_plugin_def_t;
IPSecCtx::IPSecCtx(tipsec_ipproto_t ipproto,
bool use_ipv6,
tipsec_mode_t mode,
tipsec_ealg_t ealg,
tipsec_alg_t alg,
tipsec_proto_t protocol)
: m_pCtx(NULL)
bool use_ipv6,
tipsec_mode_t mode,
tipsec_ealg_t ealg,
tipsec_alg_t alg,
tipsec_proto_t protocol)
: m_pCtx(NULL)
{
tipsec_ctx_t* pCtx = NULL;
if (!IPSecCtx::sInitialized)
{
assert (tipsec_plugin_register_static(plugin_win_ipsec_vista_plugin_def_t) == 0);
IPSecCtx::sInitialized = true;
}
assert (tipsec_ctx_create(ipproto, use_ipv6, mode, ealg, alg, protocol, &m_pCtx) == 0 && m_pCtx != NULL);
tipsec_ctx_t* pCtx = NULL;
if (!IPSecCtx::sInitialized) {
assert (tipsec_plugin_register_static(plugin_win_ipsec_vista_plugin_def_t) == 0);
IPSecCtx::sInitialized = true;
}
assert (tipsec_ctx_create(ipproto, use_ipv6, mode, ealg, alg, protocol, &m_pCtx) == 0 && m_pCtx != NULL);
}
IPSecCtx::~IPSecCtx()
{
TSK_OBJECT_SAFE_FREE(m_pCtx);
TSK_OBJECT_SAFE_FREE(m_pCtx);
}
tipsec_error_t IPSecCtx::start()
{
return tipsec_ctx_start(m_pCtx);
return tipsec_ctx_start(m_pCtx);
}
tipsec_error_t IPSecCtx::setLocal(const char* addr_local, const char* addr_remote, tipsec_port_t port_uc, tipsec_port_t port_us)
{
return tipsec_ctx_set_local(m_pCtx, addr_local, addr_remote, port_uc, port_us);
return tipsec_ctx_set_local(m_pCtx, addr_local, addr_remote, port_uc, port_us);
}
tipsec_error_t IPSecCtx::setKeys(const tipsec_key_t* ik, const tipsec_key_t* ck)
{
return tipsec_ctx_set_keys(m_pCtx, ik, ck);
return tipsec_ctx_set_keys(m_pCtx, ik, ck);
}
tipsec_error_t IPSecCtx::setRemote(tipsec_spi_t spi_pc, tipsec_spi_t spi_ps, tipsec_port_t port_pc, tipsec_port_t port_ps, tipsec_lifetime_t lifetime)
{
return tipsec_ctx_set_remote(m_pCtx, spi_pc, spi_ps, port_pc, port_ps, lifetime);
return tipsec_ctx_set_remote(m_pCtx, spi_pc, spi_ps, port_pc, port_ps, lifetime);
}
tipsec_error_t IPSecCtx::stop()
{
return tipsec_ctx_stop(m_pCtx);
return tipsec_ctx_stop(m_pCtx);
}
tipsec_spi_t IPSecCtx::getSpiUC()
{
return m_pCtx->spi_uc;
return m_pCtx->spi_uc;
}
tipsec_spi_t IPSecCtx::getSpiUS()
{
return m_pCtx->spi_us;
return m_pCtx->spi_us;
}
tipsec_spi_t IPSecCtx::getSpiPC()
{
return m_pCtx->spi_pc;
return m_pCtx->spi_pc;
}
tipsec_spi_t IPSecCtx::getSpiPS()
{
return m_pCtx->spi_ps;
return m_pCtx->spi_ps;
}

View File

@ -24,27 +24,27 @@
class IPSecCtx
{
public:
IPSecCtx(tipsec_ipproto_t ipproto,
bool use_ipv6,
tipsec_mode_t mode,
tipsec_ealg_t ealg,
tipsec_alg_t alg,
tipsec_proto_t protocol);
virtual ~IPSecCtx();
tipsec_error_t start();
tipsec_error_t setLocal(const char* addr_local, const char* addr_remote, tipsec_port_t port_uc, tipsec_port_t port_us);
tipsec_error_t setKeys(const tipsec_key_t* ik, const tipsec_key_t* ck);
tipsec_error_t setRemote(tipsec_spi_t spi_pc, tipsec_spi_t spi_ps, tipsec_port_t port_pc, tipsec_port_t port_ps, tipsec_lifetime_t lifetime);
tipsec_error_t stop();
IPSecCtx(tipsec_ipproto_t ipproto,
bool use_ipv6,
tipsec_mode_t mode,
tipsec_ealg_t ealg,
tipsec_alg_t alg,
tipsec_proto_t protocol);
virtual ~IPSecCtx();
tipsec_error_t start();
tipsec_error_t setLocal(const char* addr_local, const char* addr_remote, tipsec_port_t port_uc, tipsec_port_t port_us);
tipsec_error_t setKeys(const tipsec_key_t* ik, const tipsec_key_t* ck);
tipsec_error_t setRemote(tipsec_spi_t spi_pc, tipsec_spi_t spi_ps, tipsec_port_t port_pc, tipsec_port_t port_ps, tipsec_lifetime_t lifetime);
tipsec_error_t stop();
tipsec_spi_t getSpiUC();
tipsec_spi_t getSpiUS();
tipsec_spi_t getSpiPC();
tipsec_spi_t getSpiPS();
tipsec_spi_t getSpiUC();
tipsec_spi_t getSpiUS();
tipsec_spi_t getSpiPC();
tipsec_spi_t getSpiPS();
private:
static bool sInitialized;
tipsec_ctx_t* m_pCtx;
static bool sInitialized;
tipsec_ctx_t* m_pCtx;
};
#endif /* IPSEC_CTX_H */

View File

@ -14,24 +14,43 @@
#ifdef __cplusplus
/* SwigValueWrapper is described in swig.swg */
template<typename T> class SwigValueWrapper {
struct SwigMovePointer {
T *ptr;
SwigMovePointer(T *p) : ptr(p) { }
~SwigMovePointer() { delete ptr; }
SwigMovePointer& operator=(SwigMovePointer& rhs) { T* oldptr = ptr; ptr = 0; delete oldptr; ptr = rhs.ptr; rhs.ptr = 0; return *this; }
} pointer;
SwigValueWrapper& operator=(const SwigValueWrapper<T>& rhs);
SwigValueWrapper(const SwigValueWrapper<T>& rhs);
template<typename T> class SwigValueWrapper
{
struct SwigMovePointer {
T *ptr;
SwigMovePointer(T *p) : ptr(p) { }
~SwigMovePointer() {
delete ptr;
}
SwigMovePointer& operator=(SwigMovePointer& rhs) {
T* oldptr = ptr;
ptr = 0;
delete oldptr;
ptr = rhs.ptr;
rhs.ptr = 0;
return *this;
}
} pointer;
SwigValueWrapper& operator=(const SwigValueWrapper<T>& rhs);
SwigValueWrapper(const SwigValueWrapper<T>& rhs);
public:
SwigValueWrapper() : pointer(0) { }
SwigValueWrapper& operator=(const T& t) { SwigMovePointer tmp(new T(t)); pointer = tmp; return *this; }
operator T&() const { return *pointer.ptr; }
T *operator&() { return pointer.ptr; }
SwigValueWrapper() : pointer(0) { }
SwigValueWrapper& operator=(const T& t) {
SwigMovePointer tmp(new T(t));
pointer = tmp;
return *this;
}
operator T&() const {
return *pointer.ptr;
}
T *operator&() {
return pointer.ptr;
}
};
template <typename T> T SwigValueInit() {
return T();
template <typename T> T SwigValueInit()
{
return T();
}
#endif
@ -153,72 +172,74 @@ template <typename T> T SwigValueInit() {
/* Support for throwing C# exceptions from C/C++. There are two types:
* Exceptions that take a message and ArgumentExceptions that take a message and a parameter name. */
typedef enum {
SWIG_CSharpApplicationException,
SWIG_CSharpArithmeticException,
SWIG_CSharpDivideByZeroException,
SWIG_CSharpIndexOutOfRangeException,
SWIG_CSharpInvalidCastException,
SWIG_CSharpInvalidOperationException,
SWIG_CSharpIOException,
SWIG_CSharpNullReferenceException,
SWIG_CSharpOutOfMemoryException,
SWIG_CSharpOverflowException,
SWIG_CSharpSystemException
SWIG_CSharpApplicationException,
SWIG_CSharpArithmeticException,
SWIG_CSharpDivideByZeroException,
SWIG_CSharpIndexOutOfRangeException,
SWIG_CSharpInvalidCastException,
SWIG_CSharpInvalidOperationException,
SWIG_CSharpIOException,
SWIG_CSharpNullReferenceException,
SWIG_CSharpOutOfMemoryException,
SWIG_CSharpOverflowException,
SWIG_CSharpSystemException
} SWIG_CSharpExceptionCodes;
typedef enum {
SWIG_CSharpArgumentException,
SWIG_CSharpArgumentNullException,
SWIG_CSharpArgumentOutOfRangeException
SWIG_CSharpArgumentException,
SWIG_CSharpArgumentNullException,
SWIG_CSharpArgumentOutOfRangeException
} SWIG_CSharpExceptionArgumentCodes;
typedef void (SWIGSTDCALL* SWIG_CSharpExceptionCallback_t)(const char *);
typedef void (SWIGSTDCALL* SWIG_CSharpExceptionArgumentCallback_t)(const char *, const char *);
typedef struct {
SWIG_CSharpExceptionCodes code;
SWIG_CSharpExceptionCallback_t callback;
SWIG_CSharpExceptionCodes code;
SWIG_CSharpExceptionCallback_t callback;
} SWIG_CSharpException_t;
typedef struct {
SWIG_CSharpExceptionArgumentCodes code;
SWIG_CSharpExceptionArgumentCallback_t callback;
SWIG_CSharpExceptionArgumentCodes code;
SWIG_CSharpExceptionArgumentCallback_t callback;
} SWIG_CSharpExceptionArgument_t;
static SWIG_CSharpException_t SWIG_csharp_exceptions[] = {
{ SWIG_CSharpApplicationException, NULL },
{ SWIG_CSharpArithmeticException, NULL },
{ SWIG_CSharpDivideByZeroException, NULL },
{ SWIG_CSharpIndexOutOfRangeException, NULL },
{ SWIG_CSharpInvalidCastException, NULL },
{ SWIG_CSharpInvalidOperationException, NULL },
{ SWIG_CSharpIOException, NULL },
{ SWIG_CSharpNullReferenceException, NULL },
{ SWIG_CSharpOutOfMemoryException, NULL },
{ SWIG_CSharpOverflowException, NULL },
{ SWIG_CSharpSystemException, NULL }
{ SWIG_CSharpApplicationException, NULL },
{ SWIG_CSharpArithmeticException, NULL },
{ SWIG_CSharpDivideByZeroException, NULL },
{ SWIG_CSharpIndexOutOfRangeException, NULL },
{ SWIG_CSharpInvalidCastException, NULL },
{ SWIG_CSharpInvalidOperationException, NULL },
{ SWIG_CSharpIOException, NULL },
{ SWIG_CSharpNullReferenceException, NULL },
{ SWIG_CSharpOutOfMemoryException, NULL },
{ SWIG_CSharpOverflowException, NULL },
{ SWIG_CSharpSystemException, NULL }
};
static SWIG_CSharpExceptionArgument_t SWIG_csharp_exceptions_argument[] = {
{ SWIG_CSharpArgumentException, NULL },
{ SWIG_CSharpArgumentNullException, NULL },
{ SWIG_CSharpArgumentOutOfRangeException, NULL }
{ SWIG_CSharpArgumentException, NULL },
{ SWIG_CSharpArgumentNullException, NULL },
{ SWIG_CSharpArgumentOutOfRangeException, NULL }
};
static void SWIGUNUSED SWIG_CSharpSetPendingException(SWIG_CSharpExceptionCodes code, const char *msg) {
SWIG_CSharpExceptionCallback_t callback = SWIG_csharp_exceptions[SWIG_CSharpApplicationException].callback;
if ((size_t)code < sizeof(SWIG_csharp_exceptions)/sizeof(SWIG_CSharpException_t)) {
callback = SWIG_csharp_exceptions[code].callback;
}
callback(msg);
static void SWIGUNUSED SWIG_CSharpSetPendingException(SWIG_CSharpExceptionCodes code, const char *msg)
{
SWIG_CSharpExceptionCallback_t callback = SWIG_csharp_exceptions[SWIG_CSharpApplicationException].callback;
if ((size_t)code < sizeof(SWIG_csharp_exceptions)/sizeof(SWIG_CSharpException_t)) {
callback = SWIG_csharp_exceptions[code].callback;
}
callback(msg);
}
static void SWIGUNUSED SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpExceptionArgumentCodes code, const char *msg, const char *param_name) {
SWIG_CSharpExceptionArgumentCallback_t callback = SWIG_csharp_exceptions_argument[SWIG_CSharpArgumentException].callback;
if ((size_t)code < sizeof(SWIG_csharp_exceptions_argument)/sizeof(SWIG_CSharpExceptionArgument_t)) {
callback = SWIG_csharp_exceptions_argument[code].callback;
}
callback(msg, param_name);
static void SWIGUNUSED SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpExceptionArgumentCodes code, const char *msg, const char *param_name)
{
SWIG_CSharpExceptionArgumentCallback_t callback = SWIG_csharp_exceptions_argument[SWIG_CSharpArgumentException].callback;
if ((size_t)code < sizeof(SWIG_csharp_exceptions_argument)/sizeof(SWIG_CSharpExceptionArgument_t)) {
callback = SWIG_csharp_exceptions_argument[code].callback;
}
callback(msg, param_name);
}
@ -226,40 +247,42 @@ static void SWIGUNUSED SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpExcepti
extern "C"
#endif
SWIGEXPORT void SWIGSTDCALL SWIGRegisterExceptionCallbacks_ipsec_lib(
SWIG_CSharpExceptionCallback_t applicationCallback,
SWIG_CSharpExceptionCallback_t arithmeticCallback,
SWIG_CSharpExceptionCallback_t divideByZeroCallback,
SWIG_CSharpExceptionCallback_t indexOutOfRangeCallback,
SWIG_CSharpExceptionCallback_t invalidCastCallback,
SWIG_CSharpExceptionCallback_t invalidOperationCallback,
SWIG_CSharpExceptionCallback_t ioCallback,
SWIG_CSharpExceptionCallback_t nullReferenceCallback,
SWIG_CSharpExceptionCallback_t outOfMemoryCallback,
SWIG_CSharpExceptionCallback_t overflowCallback,
SWIG_CSharpExceptionCallback_t systemCallback) {
SWIG_csharp_exceptions[SWIG_CSharpApplicationException].callback = applicationCallback;
SWIG_csharp_exceptions[SWIG_CSharpArithmeticException].callback = arithmeticCallback;
SWIG_csharp_exceptions[SWIG_CSharpDivideByZeroException].callback = divideByZeroCallback;
SWIG_csharp_exceptions[SWIG_CSharpIndexOutOfRangeException].callback = indexOutOfRangeCallback;
SWIG_csharp_exceptions[SWIG_CSharpInvalidCastException].callback = invalidCastCallback;
SWIG_csharp_exceptions[SWIG_CSharpInvalidOperationException].callback = invalidOperationCallback;
SWIG_csharp_exceptions[SWIG_CSharpIOException].callback = ioCallback;
SWIG_csharp_exceptions[SWIG_CSharpNullReferenceException].callback = nullReferenceCallback;
SWIG_csharp_exceptions[SWIG_CSharpOutOfMemoryException].callback = outOfMemoryCallback;
SWIG_csharp_exceptions[SWIG_CSharpOverflowException].callback = overflowCallback;
SWIG_csharp_exceptions[SWIG_CSharpSystemException].callback = systemCallback;
SWIG_CSharpExceptionCallback_t applicationCallback,
SWIG_CSharpExceptionCallback_t arithmeticCallback,
SWIG_CSharpExceptionCallback_t divideByZeroCallback,
SWIG_CSharpExceptionCallback_t indexOutOfRangeCallback,
SWIG_CSharpExceptionCallback_t invalidCastCallback,
SWIG_CSharpExceptionCallback_t invalidOperationCallback,
SWIG_CSharpExceptionCallback_t ioCallback,
SWIG_CSharpExceptionCallback_t nullReferenceCallback,
SWIG_CSharpExceptionCallback_t outOfMemoryCallback,
SWIG_CSharpExceptionCallback_t overflowCallback,
SWIG_CSharpExceptionCallback_t systemCallback)
{
SWIG_csharp_exceptions[SWIG_CSharpApplicationException].callback = applicationCallback;
SWIG_csharp_exceptions[SWIG_CSharpArithmeticException].callback = arithmeticCallback;
SWIG_csharp_exceptions[SWIG_CSharpDivideByZeroException].callback = divideByZeroCallback;
SWIG_csharp_exceptions[SWIG_CSharpIndexOutOfRangeException].callback = indexOutOfRangeCallback;
SWIG_csharp_exceptions[SWIG_CSharpInvalidCastException].callback = invalidCastCallback;
SWIG_csharp_exceptions[SWIG_CSharpInvalidOperationException].callback = invalidOperationCallback;
SWIG_csharp_exceptions[SWIG_CSharpIOException].callback = ioCallback;
SWIG_csharp_exceptions[SWIG_CSharpNullReferenceException].callback = nullReferenceCallback;
SWIG_csharp_exceptions[SWIG_CSharpOutOfMemoryException].callback = outOfMemoryCallback;
SWIG_csharp_exceptions[SWIG_CSharpOverflowException].callback = overflowCallback;
SWIG_csharp_exceptions[SWIG_CSharpSystemException].callback = systemCallback;
}
#ifdef __cplusplus
extern "C"
#endif
SWIGEXPORT void SWIGSTDCALL SWIGRegisterExceptionArgumentCallbacks_ipsec_lib(
SWIG_CSharpExceptionArgumentCallback_t argumentCallback,
SWIG_CSharpExceptionArgumentCallback_t argumentNullCallback,
SWIG_CSharpExceptionArgumentCallback_t argumentOutOfRangeCallback) {
SWIG_csharp_exceptions_argument[SWIG_CSharpArgumentException].callback = argumentCallback;
SWIG_csharp_exceptions_argument[SWIG_CSharpArgumentNullException].callback = argumentNullCallback;
SWIG_csharp_exceptions_argument[SWIG_CSharpArgumentOutOfRangeException].callback = argumentOutOfRangeCallback;
SWIG_CSharpExceptionArgumentCallback_t argumentCallback,
SWIG_CSharpExceptionArgumentCallback_t argumentNullCallback,
SWIG_CSharpExceptionArgumentCallback_t argumentOutOfRangeCallback)
{
SWIG_csharp_exceptions_argument[SWIG_CSharpArgumentException].callback = argumentCallback;
SWIG_csharp_exceptions_argument[SWIG_CSharpArgumentNullException].callback = argumentNullCallback;
SWIG_csharp_exceptions_argument[SWIG_CSharpArgumentOutOfRangeException].callback = argumentOutOfRangeCallback;
}
@ -271,8 +294,9 @@ static SWIG_CSharpStringHelperCallback SWIG_csharp_string_callback = NULL;
#ifdef __cplusplus
extern "C"
#endif
SWIGEXPORT void SWIGSTDCALL SWIGRegisterStringCallback_ipsec_lib(SWIG_CSharpStringHelperCallback callback) {
SWIG_csharp_string_callback = callback;
SWIGEXPORT void SWIGSTDCALL SWIGRegisterStringCallback_ipsec_lib(SWIG_CSharpStringHelperCallback callback)
{
SWIG_csharp_string_callback = callback;
}
@ -294,34 +318,38 @@ SWIGEXPORT void SWIGSTDCALL SWIGRegisterStringCallback_ipsec_lib(SWIG_CSharpStri
#endif
#include <string>
namespace Swig {
/* Director base class - not currently used in C# directors */
class Director {
};
namespace Swig
{
/* Director base class - not currently used in C# directors */
class Director
{
};
/* Base class for director exceptions */
class DirectorException {
protected:
/* Base class for director exceptions */
class DirectorException
{
protected:
std::string swig_msg;
public:
public:
DirectorException(const char* msg) : swig_msg(msg) {
}
DirectorException(const std::string &msg) : swig_msg(msg) {
}
const std::string& what() const {
return swig_msg;
return swig_msg;
}
virtual ~DirectorException() {
}
};
};
/* Pure virtual method exception */
class DirectorPureVirtualException : public Swig::DirectorException {
public:
/* Pure virtual method exception */
class DirectorPureVirtualException : public Swig::DirectorException
{
public:
DirectorPureVirtualException(const char* msg) : DirectorException(std::string("Attempt to invoke pure virtual method ") + msg) {
}
};
};
}
#endif /* __cplusplus */
@ -346,163 +374,174 @@ namespace Swig {
extern "C" {
#endif
SWIGEXPORT void * SWIGSTDCALL CSharp_new_IPSecCtx(int jarg1, unsigned int jarg2, int jarg3, int jarg4, int jarg5, int jarg6) {
void * jresult ;
tipsec_ipproto_t arg1 ;
bool arg2 ;
tipsec_mode_t arg3 ;
tipsec_ealg_t arg4 ;
tipsec_alg_t arg5 ;
tipsec_proto_t arg6 ;
IPSecCtx *result = 0 ;
SWIGEXPORT void * SWIGSTDCALL CSharp_new_IPSecCtx(int jarg1, unsigned int jarg2, int jarg3, int jarg4, int jarg5, int jarg6)
{
void * jresult ;
tipsec_ipproto_t arg1 ;
bool arg2 ;
tipsec_mode_t arg3 ;
tipsec_ealg_t arg4 ;
tipsec_alg_t arg5 ;
tipsec_proto_t arg6 ;
IPSecCtx *result = 0 ;
arg1 = (tipsec_ipproto_t)jarg1;
arg2 = jarg2 ? true : false;
arg3 = (tipsec_mode_t)jarg3;
arg4 = (tipsec_ealg_t)jarg4;
arg5 = (tipsec_alg_t)jarg5;
arg6 = (tipsec_proto_t)jarg6;
result = (IPSecCtx *)new IPSecCtx(arg1,arg2,arg3,arg4,arg5,arg6);
jresult = (void *)result;
return jresult;
arg1 = (tipsec_ipproto_t)jarg1;
arg2 = jarg2 ? true : false;
arg3 = (tipsec_mode_t)jarg3;
arg4 = (tipsec_ealg_t)jarg4;
arg5 = (tipsec_alg_t)jarg5;
arg6 = (tipsec_proto_t)jarg6;
result = (IPSecCtx *)new IPSecCtx(arg1,arg2,arg3,arg4,arg5,arg6);
jresult = (void *)result;
return jresult;
}
SWIGEXPORT void SWIGSTDCALL CSharp_delete_IPSecCtx(void * jarg1) {
IPSecCtx *arg1 = (IPSecCtx *) 0 ;
SWIGEXPORT void SWIGSTDCALL CSharp_delete_IPSecCtx(void * jarg1)
{
IPSecCtx *arg1 = (IPSecCtx *) 0 ;
arg1 = (IPSecCtx *)jarg1;
delete arg1;
arg1 = (IPSecCtx *)jarg1;
delete arg1;
}
SWIGEXPORT int SWIGSTDCALL CSharp_IPSecCtx_start(void * jarg1) {
int jresult ;
IPSecCtx *arg1 = (IPSecCtx *) 0 ;
tipsec_error_t result;
SWIGEXPORT int SWIGSTDCALL CSharp_IPSecCtx_start(void * jarg1)
{
int jresult ;
IPSecCtx *arg1 = (IPSecCtx *) 0 ;
tipsec_error_t result;
arg1 = (IPSecCtx *)jarg1;
result = (tipsec_error_t)(arg1)->start();
jresult = result;
return jresult;
arg1 = (IPSecCtx *)jarg1;
result = (tipsec_error_t)(arg1)->start();
jresult = result;
return jresult;
}
SWIGEXPORT int SWIGSTDCALL CSharp_IPSecCtx_setLocal(void * jarg1, char * jarg2, char * jarg3, unsigned short jarg4, unsigned short jarg5) {
int jresult ;
IPSecCtx *arg1 = (IPSecCtx *) 0 ;
char *arg2 = (char *) 0 ;
char *arg3 = (char *) 0 ;
tipsec_port_t arg4 ;
tipsec_port_t arg5 ;
tipsec_error_t result;
SWIGEXPORT int SWIGSTDCALL CSharp_IPSecCtx_setLocal(void * jarg1, char * jarg2, char * jarg3, unsigned short jarg4, unsigned short jarg5)
{
int jresult ;
IPSecCtx *arg1 = (IPSecCtx *) 0 ;
char *arg2 = (char *) 0 ;
char *arg3 = (char *) 0 ;
tipsec_port_t arg4 ;
tipsec_port_t arg5 ;
tipsec_error_t result;
arg1 = (IPSecCtx *)jarg1;
arg2 = (char *)jarg2;
arg3 = (char *)jarg3;
arg4 = (tipsec_port_t)jarg4;
arg5 = (tipsec_port_t)jarg5;
result = (tipsec_error_t)(arg1)->setLocal((char const *)arg2,(char const *)arg3,arg4,arg5);
jresult = result;
return jresult;
arg1 = (IPSecCtx *)jarg1;
arg2 = (char *)jarg2;
arg3 = (char *)jarg3;
arg4 = (tipsec_port_t)jarg4;
arg5 = (tipsec_port_t)jarg5;
result = (tipsec_error_t)(arg1)->setLocal((char const *)arg2,(char const *)arg3,arg4,arg5);
jresult = result;
return jresult;
}
SWIGEXPORT int SWIGSTDCALL CSharp_IPSecCtx_setKeys(void * jarg1, void * jarg2, void * jarg3) {
int jresult ;
IPSecCtx *arg1 = (IPSecCtx *) 0 ;
tipsec_key_t *arg2 = (tipsec_key_t *) 0 ;
tipsec_key_t *arg3 = (tipsec_key_t *) 0 ;
tipsec_error_t result;
SWIGEXPORT int SWIGSTDCALL CSharp_IPSecCtx_setKeys(void * jarg1, void * jarg2, void * jarg3)
{
int jresult ;
IPSecCtx *arg1 = (IPSecCtx *) 0 ;
tipsec_key_t *arg2 = (tipsec_key_t *) 0 ;
tipsec_key_t *arg3 = (tipsec_key_t *) 0 ;
tipsec_error_t result;
arg1 = (IPSecCtx *)jarg1;
arg2 = jarg2;
arg3 = jarg3;
result = (tipsec_error_t)(arg1)->setKeys((tipsec_key_t const *)arg2,(tipsec_key_t const *)arg3);
jresult = result;
return jresult;
arg1 = (IPSecCtx *)jarg1;
arg2 = jarg2;
arg3 = jarg3;
result = (tipsec_error_t)(arg1)->setKeys((tipsec_key_t const *)arg2,(tipsec_key_t const *)arg3);
jresult = result;
return jresult;
}
SWIGEXPORT int SWIGSTDCALL CSharp_IPSecCtx_setRemote(void * jarg1, unsigned int jarg2, unsigned int jarg3, unsigned short jarg4, unsigned short jarg5, unsigned long long jarg6) {
int jresult ;
IPSecCtx *arg1 = (IPSecCtx *) 0 ;
tipsec_spi_t arg2 ;
tipsec_spi_t arg3 ;
tipsec_port_t arg4 ;
tipsec_port_t arg5 ;
tipsec_lifetime_t arg6 ;
tipsec_error_t result;
SWIGEXPORT int SWIGSTDCALL CSharp_IPSecCtx_setRemote(void * jarg1, unsigned int jarg2, unsigned int jarg3, unsigned short jarg4, unsigned short jarg5, unsigned long long jarg6)
{
int jresult ;
IPSecCtx *arg1 = (IPSecCtx *) 0 ;
tipsec_spi_t arg2 ;
tipsec_spi_t arg3 ;
tipsec_port_t arg4 ;
tipsec_port_t arg5 ;
tipsec_lifetime_t arg6 ;
tipsec_error_t result;
arg1 = (IPSecCtx *)jarg1;
arg2 = (tipsec_spi_t)jarg2;
arg3 = (tipsec_spi_t)jarg3;
arg4 = (tipsec_port_t)jarg4;
arg5 = (tipsec_port_t)jarg5;
arg6 = (tipsec_lifetime_t)jarg6;
result = (tipsec_error_t)(arg1)->setRemote(arg2,arg3,arg4,arg5,arg6);
jresult = result;
return jresult;
arg1 = (IPSecCtx *)jarg1;
arg2 = (tipsec_spi_t)jarg2;
arg3 = (tipsec_spi_t)jarg3;
arg4 = (tipsec_port_t)jarg4;
arg5 = (tipsec_port_t)jarg5;
arg6 = (tipsec_lifetime_t)jarg6;
result = (tipsec_error_t)(arg1)->setRemote(arg2,arg3,arg4,arg5,arg6);
jresult = result;
return jresult;
}
SWIGEXPORT int SWIGSTDCALL CSharp_IPSecCtx_stop(void * jarg1) {
int jresult ;
IPSecCtx *arg1 = (IPSecCtx *) 0 ;
tipsec_error_t result;
SWIGEXPORT int SWIGSTDCALL CSharp_IPSecCtx_stop(void * jarg1)
{
int jresult ;
IPSecCtx *arg1 = (IPSecCtx *) 0 ;
tipsec_error_t result;
arg1 = (IPSecCtx *)jarg1;
result = (tipsec_error_t)(arg1)->stop();
jresult = result;
return jresult;
arg1 = (IPSecCtx *)jarg1;
result = (tipsec_error_t)(arg1)->stop();
jresult = result;
return jresult;
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_IPSecCtx_getSpiUC(void * jarg1) {
unsigned int jresult ;
IPSecCtx *arg1 = (IPSecCtx *) 0 ;
tipsec_spi_t result;
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_IPSecCtx_getSpiUC(void * jarg1)
{
unsigned int jresult ;
IPSecCtx *arg1 = (IPSecCtx *) 0 ;
tipsec_spi_t result;
arg1 = (IPSecCtx *)jarg1;
result = (tipsec_spi_t)(arg1)->getSpiUC();
jresult = result;
return jresult;
arg1 = (IPSecCtx *)jarg1;
result = (tipsec_spi_t)(arg1)->getSpiUC();
jresult = result;
return jresult;
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_IPSecCtx_getSpiUS(void * jarg1) {
unsigned int jresult ;
IPSecCtx *arg1 = (IPSecCtx *) 0 ;
tipsec_spi_t result;
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_IPSecCtx_getSpiUS(void * jarg1)
{
unsigned int jresult ;
IPSecCtx *arg1 = (IPSecCtx *) 0 ;
tipsec_spi_t result;
arg1 = (IPSecCtx *)jarg1;
result = (tipsec_spi_t)(arg1)->getSpiUS();
jresult = result;
return jresult;
arg1 = (IPSecCtx *)jarg1;
result = (tipsec_spi_t)(arg1)->getSpiUS();
jresult = result;
return jresult;
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_IPSecCtx_getSpiPC(void * jarg1) {
unsigned int jresult ;
IPSecCtx *arg1 = (IPSecCtx *) 0 ;
tipsec_spi_t result;
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_IPSecCtx_getSpiPC(void * jarg1)
{
unsigned int jresult ;
IPSecCtx *arg1 = (IPSecCtx *) 0 ;
tipsec_spi_t result;
arg1 = (IPSecCtx *)jarg1;
result = (tipsec_spi_t)(arg1)->getSpiPC();
jresult = result;
return jresult;
arg1 = (IPSecCtx *)jarg1;
result = (tipsec_spi_t)(arg1)->getSpiPC();
jresult = result;
return jresult;
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_IPSecCtx_getSpiPS(void * jarg1) {
unsigned int jresult ;
IPSecCtx *arg1 = (IPSecCtx *) 0 ;
tipsec_spi_t result;
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_IPSecCtx_getSpiPS(void * jarg1)
{
unsigned int jresult ;
IPSecCtx *arg1 = (IPSecCtx *) 0 ;
tipsec_spi_t result;
arg1 = (IPSecCtx *)jarg1;
result = (tipsec_spi_t)(arg1)->getSpiPS();
jresult = result;
return jresult;
arg1 = (IPSecCtx *)jarg1;
result = (tipsec_spi_t)(arg1)->getSpiPS();
jresult = result;
return jresult;
}

View File

@ -8,5 +8,5 @@ uint64_t AndroidUtils::getCpuFamily()
uint64_t AndroidUtils::getCpuFeatures()
{
return (uint64_t)android_getCpuFeatures();
return (uint64_t)android_getCpuFeatures();
}

View File

@ -3,30 +3,28 @@
#include <stdint.h>
typedef enum CpuFamily_e
{
UNKNOWN = 0,
ARM,
X86
typedef enum CpuFamily_e {
UNKNOWN = 0,
ARM,
X86
}
CpuFamily_t;
typedef enum CpuFeatures_e
{
ARMv7 = 1,
VFPv3 = 2,
NEON = 4
typedef enum CpuFeatures_e {
ARMv7 = 1,
VFPv3 = 2,
NEON = 4
}
CpuFeatures_t;
class AndroidUtils
{
public:
AndroidUtils(){};
virtual ~AndroidUtils(){};
AndroidUtils() {};
virtual ~AndroidUtils() {};
static uint64_t getCpuFamily();
static uint64_t getCpuFeatures();
static uint64_t getCpuFamily();
static uint64_t getCpuFeatures();
};
#endif /* ANDROID_UTILS_API_H */

View File

@ -85,13 +85,13 @@ static __inline__ void x86_cpuid(int func, int values[4])
/* We need to preserve ebx since we're compiling PIC code */
/* this means we can't use "=b" for the second output register */
__asm__ __volatile__ ( \
"push %%ebx\n"
"cpuid\n" \
"mov %1, %%ebx\n"
"pop %%ebx\n"
: "=a" (a), "=r" (b), "=c" (c), "=d" (d) \
: "a" (func) \
);
"push %%ebx\n"
"cpuid\n" \
"mov %1, %%ebx\n"
"pop %%ebx\n"
: "=a" (a), "=r" (b), "=c" (c), "=d" (d) \
: "a" (func) \
);
values[0] = a;
values[1] = b;
values[2] = c;
@ -110,12 +110,14 @@ read_file(const char* pathname, char* buffer, size_t buffsize)
int fd, len;
fd = open(pathname, O_RDONLY);
if (fd < 0)
if (fd < 0) {
return -1;
}
do {
len = read(fd, buffer, buffsize);
} while (len < 0 && errno == EINTR);
}
while (len < 0 && errno == EINTR);
close(fd);
@ -143,11 +145,13 @@ extract_cpuinfo_field(char* buffer, int buflen, const char* field)
bufend = buffer + buflen;
for (;;) {
p = memmem(p, bufend-p, field, fieldlen);
if (p == NULL)
if (p == NULL) {
goto EXIT;
}
if (p == buffer || p[-1] == '\n')
if (p == buffer || p[-1] == '\n') {
break;
}
p += fieldlen;
}
@ -155,20 +159,23 @@ extract_cpuinfo_field(char* buffer, int buflen, const char* field)
/* Skip to the first column followed by a space */
p += fieldlen;
p = memchr(p, ':', bufend-p);
if (p == NULL || p[1] != ' ')
if (p == NULL || p[1] != ' ') {
goto EXIT;
}
/* Find the end of the line */
p += 2;
q = memchr(p, '\n', bufend-p);
if (q == NULL)
if (q == NULL) {
q = bufend;
}
/* Copy the line into a heap-allocated buffer */
len = q-p;
result = malloc(len+1);
if (result == NULL)
if (result == NULL) {
goto EXIT;
}
memcpy(result, p, len);
result[len] = '\0';
@ -190,23 +197,27 @@ has_list_item(const char* list, const char* item)
const char* p = list;
int itemlen = strlen(item);
if (list == NULL)
if (list == NULL) {
return 0;
}
while (*p) {
const char* q;
/* skip spaces */
while (*p == ' ' || *p == '\t')
while (*p == ' ' || *p == '\t') {
p++;
}
/* find end of current list item */
q = p;
while (*q && *q != ' ' && *q != '\t')
while (*q && *q != ' ' && *q != '\t') {
q++;
}
if (itemlen == q-p && !memcmp(p, item, itemlen))
if (itemlen == q-p && !memcmp(p, item, itemlen)) {
return 1;
}
/* skip to next item */
p = q;
@ -231,13 +242,15 @@ parse_decimal(const char* input, const char* limit, int* result)
int val = 0;
while (p < limit) {
int d = (*p - '0');
if ((unsigned)d >= 10U)
if ((unsigned)d >= 10U) {
break;
}
val = val*10 + d;
p++;
}
if (p == input)
if (p == input) {
return NULL;
}
*result = val;
return p;
@ -254,24 +267,28 @@ typedef struct {
} CpuList;
static __inline__ void
cpulist_init(CpuList* list) {
cpulist_init(CpuList* list)
{
list->mask = 0;
}
static __inline__ void
cpulist_and(CpuList* list1, CpuList* list2) {
cpulist_and(CpuList* list1, CpuList* list2)
{
list1->mask &= list2->mask;
}
static __inline__ void
cpulist_set(CpuList* list, int index) {
cpulist_set(CpuList* list, int index)
{
if ((unsigned)index < 32) {
list->mask |= (uint32_t)(1U << index);
}
}
static __inline__ int
cpulist_count(CpuList* list) {
cpulist_count(CpuList* list)
{
return __builtin_popcount(list->mask);
}
@ -295,8 +312,7 @@ cpulist_parse(CpuList* list, const char* line, int line_len)
/* NOTE: the input line coming from sysfs typically contains a
* trailing newline, so take care of it in the code below
*/
while (p < end && *p != '\n')
{
while (p < end && *p != '\n') {
int val, start_value, end_value;
/* Find the end of current item, and put it into 'q' */
@ -307,8 +323,9 @@ cpulist_parse(CpuList* list, const char* line, int line_len)
/* Get first value */
p = parse_decimal(p, q, &start_value);
if (p == NULL)
if (p == NULL) {
goto BAD_FORMAT;
}
end_value = start_value;
@ -317,8 +334,9 @@ cpulist_parse(CpuList* list, const char* line, int line_len)
*/
if (p < q && *p == '-') {
p = parse_decimal(p+1, q, &end_value);
if (p == NULL)
if (p == NULL) {
goto BAD_FORMAT;
}
}
/* Set bits CPU list bits */
@ -328,8 +346,9 @@ cpulist_parse(CpuList* list, const char* line, int line_len)
/* Jump to next item */
p = q;
if (p < end)
if (p < end) {
p++;
}
}
BAD_FORMAT:
@ -391,7 +410,7 @@ android_cpuInit(void)
D("cpuinfo_len is (%d):\n%.*s\n", cpuinfo_len,
cpuinfo_len >= 0 ? cpuinfo_len : 0, cpuinfo);
if (cpuinfo_len < 0) /* should not happen */ {
if (cpuinfo_len < 0) { /* should not happen */
return;
}
@ -478,11 +497,13 @@ android_cpuInit(void)
D("found cpuFeatures = '%s'\n", cpuFeatures);
if (has_list_item(cpuFeatures, "vfpv3"))
if (has_list_item(cpuFeatures, "vfpv3")) {
g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_VFPv3;
}
else if (has_list_item(cpuFeatures, "vfpv3d16"))
else if (has_list_item(cpuFeatures, "vfpv3d16")) {
g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_VFPv3;
}
if (has_list_item(cpuFeatures, "neon")) {
/* Note: Certain kernels only report neon but not vfpv3
@ -503,7 +524,7 @@ android_cpuInit(void)
int regs[4];
/* According to http://en.wikipedia.org/wiki/CPUID */
/* According to http://en.wikipedia.org/wiki/CPUID */
#define VENDOR_INTEL_b 0x756e6547
#define VENDOR_INTEL_c 0x6c65746e
#define VENDOR_INTEL_d 0x49656e69

View File

@ -14,24 +14,43 @@
#ifdef __cplusplus
/* SwigValueWrapper is described in swig.swg */
template<typename T> class SwigValueWrapper {
struct SwigMovePointer {
T *ptr;
SwigMovePointer(T *p) : ptr(p) { }
~SwigMovePointer() { delete ptr; }
SwigMovePointer& operator=(SwigMovePointer& rhs) { T* oldptr = ptr; ptr = 0; delete oldptr; ptr = rhs.ptr; rhs.ptr = 0; return *this; }
} pointer;
SwigValueWrapper& operator=(const SwigValueWrapper<T>& rhs);
SwigValueWrapper(const SwigValueWrapper<T>& rhs);
template<typename T> class SwigValueWrapper
{
struct SwigMovePointer {
T *ptr;
SwigMovePointer(T *p) : ptr(p) { }
~SwigMovePointer() {
delete ptr;
}
SwigMovePointer& operator=(SwigMovePointer& rhs) {
T* oldptr = ptr;
ptr = 0;
delete oldptr;
ptr = rhs.ptr;
rhs.ptr = 0;
return *this;
}
} pointer;
SwigValueWrapper& operator=(const SwigValueWrapper<T>& rhs);
SwigValueWrapper(const SwigValueWrapper<T>& rhs);
public:
SwigValueWrapper() : pointer(0) { }
SwigValueWrapper& operator=(const T& t) { SwigMovePointer tmp(new T(t)); pointer = tmp; return *this; }
operator T&() const { return *pointer.ptr; }
T *operator&() { return pointer.ptr; }
SwigValueWrapper() : pointer(0) { }
SwigValueWrapper& operator=(const T& t) {
SwigMovePointer tmp(new T(t));
pointer = tmp;
return *this;
}
operator T&() const {
return *pointer.ptr;
}
T *operator&() {
return pointer.ptr;
}
};
template <typename T> T SwigValueInit() {
return T();
template <typename T> T SwigValueInit()
{
return T();
}
#endif
@ -147,7 +166,7 @@ template <typename T> T SwigValueInit() {
/* Fix for jlong on some versions of gcc on Windows */
#if defined(__GNUC__) && !defined(__INTEL_COMPILER)
typedef long long __int64;
typedef long long __int64;
#endif
/* Fix for jlong on 64-bit x86 Solaris */
@ -164,46 +183,49 @@ template <typename T> T SwigValueInit() {
/* Support for throwing Java exceptions */
typedef enum {
SWIG_JavaOutOfMemoryError = 1,
SWIG_JavaIOException,
SWIG_JavaRuntimeException,
SWIG_JavaIndexOutOfBoundsException,
SWIG_JavaArithmeticException,
SWIG_JavaIllegalArgumentException,
SWIG_JavaNullPointerException,
SWIG_JavaDirectorPureVirtual,
SWIG_JavaUnknownError
SWIG_JavaOutOfMemoryError = 1,
SWIG_JavaIOException,
SWIG_JavaRuntimeException,
SWIG_JavaIndexOutOfBoundsException,
SWIG_JavaArithmeticException,
SWIG_JavaIllegalArgumentException,
SWIG_JavaNullPointerException,
SWIG_JavaDirectorPureVirtual,
SWIG_JavaUnknownError
} SWIG_JavaExceptionCodes;
typedef struct {
SWIG_JavaExceptionCodes code;
const char *java_exception;
SWIG_JavaExceptionCodes code;
const char *java_exception;
} SWIG_JavaExceptions_t;
static void SWIGUNUSED SWIG_JavaThrowException(JNIEnv *jenv, SWIG_JavaExceptionCodes code, const char *msg) {
jclass excep;
static const SWIG_JavaExceptions_t java_exceptions[] = {
{ SWIG_JavaOutOfMemoryError, "java/lang/OutOfMemoryError" },
{ SWIG_JavaIOException, "java/io/IOException" },
{ SWIG_JavaRuntimeException, "java/lang/RuntimeException" },
{ SWIG_JavaIndexOutOfBoundsException, "java/lang/IndexOutOfBoundsException" },
{ SWIG_JavaArithmeticException, "java/lang/ArithmeticException" },
{ SWIG_JavaIllegalArgumentException, "java/lang/IllegalArgumentException" },
{ SWIG_JavaNullPointerException, "java/lang/NullPointerException" },
{ SWIG_JavaDirectorPureVirtual, "java/lang/RuntimeException" },
{ SWIG_JavaUnknownError, "java/lang/UnknownError" },
{ (SWIG_JavaExceptionCodes)0, "java/lang/UnknownError" }
};
const SWIG_JavaExceptions_t *except_ptr = java_exceptions;
static void SWIGUNUSED SWIG_JavaThrowException(JNIEnv *jenv, SWIG_JavaExceptionCodes code, const char *msg)
{
jclass excep;
static const SWIG_JavaExceptions_t java_exceptions[] = {
{ SWIG_JavaOutOfMemoryError, "java/lang/OutOfMemoryError" },
{ SWIG_JavaIOException, "java/io/IOException" },
{ SWIG_JavaRuntimeException, "java/lang/RuntimeException" },
{ SWIG_JavaIndexOutOfBoundsException, "java/lang/IndexOutOfBoundsException" },
{ SWIG_JavaArithmeticException, "java/lang/ArithmeticException" },
{ SWIG_JavaIllegalArgumentException, "java/lang/IllegalArgumentException" },
{ SWIG_JavaNullPointerException, "java/lang/NullPointerException" },
{ SWIG_JavaDirectorPureVirtual, "java/lang/RuntimeException" },
{ SWIG_JavaUnknownError, "java/lang/UnknownError" },
{ (SWIG_JavaExceptionCodes)0, "java/lang/UnknownError" }
};
const SWIG_JavaExceptions_t *except_ptr = java_exceptions;
while (except_ptr->code != code && except_ptr->code)
except_ptr++;
while (except_ptr->code != code && except_ptr->code) {
except_ptr++;
}
jenv->ExceptionClear();
excep = jenv->FindClass(except_ptr->java_exception);
if (excep)
jenv->ThrowNew(excep, msg);
jenv->ExceptionClear();
excep = jenv->FindClass(except_ptr->java_exception);
if (excep) {
jenv->ThrowNew(excep, msg);
}
}
@ -224,127 +246,139 @@ static void SWIGUNUSED SWIG_JavaThrowException(JNIEnv *jenv, SWIG_JavaExceptionC
#include <iostream>
#endif
namespace Swig {
/* Java object wrapper */
class JObjectWrapper {
public:
namespace Swig
{
/* Java object wrapper */
class JObjectWrapper
{
public:
JObjectWrapper() : jthis_(NULL), weak_global_(true) {
}
~JObjectWrapper() {
jthis_ = NULL;
weak_global_ = true;
jthis_ = NULL;
weak_global_ = true;
}
bool set(JNIEnv *jenv, jobject jobj, bool mem_own, bool weak_global) {
if (!jthis_) {
weak_global_ = weak_global;
if (jobj)
jthis_ = ((weak_global_ || !mem_own) ? jenv->NewWeakGlobalRef(jobj) : jenv->NewGlobalRef(jobj));
if (!jthis_) {
weak_global_ = weak_global;
if (jobj) {
jthis_ = ((weak_global_ || !mem_own) ? jenv->NewWeakGlobalRef(jobj) : jenv->NewGlobalRef(jobj));
}
#if defined(DEBUG_DIRECTOR_OWNED)
std::cout << "JObjectWrapper::set(" << jobj << ", " << (weak_global ? "weak_global" : "global_ref") << ") -> " << jthis_ << std::endl;
std::cout << "JObjectWrapper::set(" << jobj << ", " << (weak_global ? "weak_global" : "global_ref") << ") -> " << jthis_ << std::endl;
#endif
return true;
} else {
return true;
}
else {
#if defined(DEBUG_DIRECTOR_OWNED)
std::cout << "JObjectWrapper::set(" << jobj << ", " << (weak_global ? "weak_global" : "global_ref") << ") -> already set" << std::endl;
std::cout << "JObjectWrapper::set(" << jobj << ", " << (weak_global ? "weak_global" : "global_ref") << ") -> already set" << std::endl;
#endif
return false;
}
return false;
}
}
jobject get(JNIEnv *jenv) const {
#if defined(DEBUG_DIRECTOR_OWNED)
std::cout << "JObjectWrapper::get(";
if (jthis_)
std::cout << jthis_;
else
std::cout << "null";
std::cout << ") -> return new local ref" << std::endl;
std::cout << "JObjectWrapper::get(";
if (jthis_) {
std::cout << jthis_;
}
else {
std::cout << "null";
}
std::cout << ") -> return new local ref" << std::endl;
#endif
return (jthis_ ? jenv->NewLocalRef(jthis_) : jthis_);
return (jthis_ ? jenv->NewLocalRef(jthis_) : jthis_);
}
void release(JNIEnv *jenv) {
#if defined(DEBUG_DIRECTOR_OWNED)
std::cout << "JObjectWrapper::release(" << jthis_ << "): " << (weak_global_ ? "weak global ref" : "global ref") << std::endl;
std::cout << "JObjectWrapper::release(" << jthis_ << "): " << (weak_global_ ? "weak global ref" : "global ref") << std::endl;
#endif
if (jthis_) {
if (weak_global_) {
if (jenv->IsSameObject(jthis_, NULL) == JNI_FALSE)
jenv->DeleteWeakGlobalRef((jweak)jthis_);
} else
jenv->DeleteGlobalRef(jthis_);
}
if (jthis_) {
if (weak_global_) {
if (jenv->IsSameObject(jthis_, NULL) == JNI_FALSE) {
jenv->DeleteWeakGlobalRef((jweak)jthis_);
}
}
else {
jenv->DeleteGlobalRef(jthis_);
}
}
jthis_ = NULL;
weak_global_ = true;
jthis_ = NULL;
weak_global_ = true;
}
jobject peek() {
return jthis_;
return jthis_;
}
/* Java proxy releases ownership of C++ object, C++ object is now
responsible for destruction (creates NewGlobalRef to pin Java
proxy) */
void java_change_ownership(JNIEnv *jenv, jobject jself, bool take_or_release) {
if (take_or_release) { /* Java takes ownership of C++ object's lifetime. */
if (!weak_global_) {
jenv->DeleteGlobalRef(jthis_);
jthis_ = jenv->NewWeakGlobalRef(jself);
weak_global_ = true;
if (take_or_release) { /* Java takes ownership of C++ object's lifetime. */
if (!weak_global_) {
jenv->DeleteGlobalRef(jthis_);
jthis_ = jenv->NewWeakGlobalRef(jself);
weak_global_ = true;
}
}
} else { /* Java releases ownership of C++ object's lifetime */
if (weak_global_) {
jenv->DeleteWeakGlobalRef((jweak)jthis_);
jthis_ = jenv->NewGlobalRef(jself);
weak_global_ = false;
else { /* Java releases ownership of C++ object's lifetime */
if (weak_global_) {
jenv->DeleteWeakGlobalRef((jweak)jthis_);
jthis_ = jenv->NewGlobalRef(jself);
weak_global_ = false;
}
}
}
}
private:
private:
/* pointer to Java object */
jobject jthis_;
/* Local or global reference flag */
bool weak_global_;
};
};
/* director base class */
class Director {
/* director base class */
class Director
{
/* pointer to Java virtual machine */
JavaVM *swig_jvm_;
protected:
protected:
#if defined (_MSC_VER) && (_MSC_VER<1300)
class JNIEnvWrapper;
friend class JNIEnvWrapper;
#endif
/* Utility class for managing the JNI environment */
class JNIEnvWrapper {
const Director *director_;
JNIEnv *jenv_;
class JNIEnvWrapper
{
const Director *director_;
JNIEnv *jenv_;
public:
JNIEnvWrapper(const Director *director) : director_(director), jenv_(0) {
JNIEnvWrapper(const Director *director) : director_(director), jenv_(0) {
#if defined(SWIG_JAVA_ATTACH_CURRENT_THREAD_AS_DAEMON)
// Attach a daemon thread to the JVM. Useful when the JVM should not wait for
// the thread to exit upon shutdown. Only for jdk-1.4 and later.
director_->swig_jvm_->AttachCurrentThreadAsDaemon((JNIEnv **) &jenv_, NULL);
// Attach a daemon thread to the JVM. Useful when the JVM should not wait for
// the thread to exit upon shutdown. Only for jdk-1.4 and later.
director_->swig_jvm_->AttachCurrentThreadAsDaemon((JNIEnv **) &jenv_, NULL);
#else
director_->swig_jvm_->AttachCurrentThread((JNIEnv **) &jenv_, NULL);
director_->swig_jvm_->AttachCurrentThread((JNIEnv **) &jenv_, NULL);
#endif
}
~JNIEnvWrapper() {
}
~JNIEnvWrapper() {
#if !defined(SWIG_JAVA_NO_DETACH_CURRENT_THREAD)
// Some JVMs, eg jdk-1.4.2 and lower on Solaris have a bug and crash with the DetachCurrentThread call.
// However, without this call, the JVM hangs on exit when the thread was not created by the JVM and creates a memory leak.
director_->swig_jvm_->DetachCurrentThread();
// Some JVMs, eg jdk-1.4.2 and lower on Solaris have a bug and crash with the DetachCurrentThread call.
// However, without this call, the JVM hangs on exit when the thread was not created by the JVM and creates a memory leak.
director_->swig_jvm_->DetachCurrentThread();
#endif
}
JNIEnv *getJNIEnv() const {
return jenv_;
}
}
JNIEnv *getJNIEnv() const {
return jenv_;
}
};
/* Java object wrapper */
@ -352,48 +386,48 @@ namespace Swig {
/* Disconnect director from Java object */
void swig_disconnect_director_self(const char *disconn_method) {
JNIEnvWrapper jnienv(this) ;
JNIEnv *jenv = jnienv.getJNIEnv() ;
jobject jobj = swig_self_.peek();
JNIEnvWrapper jnienv(this) ;
JNIEnv *jenv = jnienv.getJNIEnv() ;
jobject jobj = swig_self_.peek();
#if defined(DEBUG_DIRECTOR_OWNED)
std::cout << "Swig::Director::disconnect_director_self(" << jobj << ")" << std::endl;
std::cout << "Swig::Director::disconnect_director_self(" << jobj << ")" << std::endl;
#endif
if (jobj && jenv->IsSameObject(jobj, NULL) == JNI_FALSE) {
jmethodID disconn_meth = jenv->GetMethodID(jenv->GetObjectClass(jobj), disconn_method, "()V");
if (disconn_meth) {
if (jobj && jenv->IsSameObject(jobj, NULL) == JNI_FALSE) {
jmethodID disconn_meth = jenv->GetMethodID(jenv->GetObjectClass(jobj), disconn_method, "()V");
if (disconn_meth) {
#if defined(DEBUG_DIRECTOR_OWNED)
std::cout << "Swig::Director::disconnect_director_self upcall to " << disconn_method << std::endl;
std::cout << "Swig::Director::disconnect_director_self upcall to " << disconn_method << std::endl;
#endif
jenv->CallVoidMethod(jobj, disconn_meth);
jenv->CallVoidMethod(jobj, disconn_meth);
}
}
}
}
public:
public:
Director(JNIEnv *jenv) : swig_jvm_((JavaVM *) NULL), swig_self_() {
/* Acquire the Java VM pointer */
jenv->GetJavaVM(&swig_jvm_);
/* Acquire the Java VM pointer */
jenv->GetJavaVM(&swig_jvm_);
}
virtual ~Director() {
JNIEnvWrapper jnienv(this) ;
JNIEnv *jenv = jnienv.getJNIEnv() ;
swig_self_.release(jenv);
JNIEnvWrapper jnienv(this) ;
JNIEnv *jenv = jnienv.getJNIEnv() ;
swig_self_.release(jenv);
}
bool swig_set_self(JNIEnv *jenv, jobject jself, bool mem_own, bool weak_global) {
return swig_self_.set(jenv, jself, mem_own, weak_global);
return swig_self_.set(jenv, jself, mem_own, weak_global);
}
jobject swig_get_self(JNIEnv *jenv) const {
return swig_self_.get(jenv);
return swig_self_.get(jenv);
}
// Change C++ object's ownership, relative to Java
void swig_java_change_ownership(JNIEnv *jenv, jobject jself, bool take_or_release) {
swig_self_.java_change_ownership(jenv, jself, take_or_release);
swig_self_.java_change_ownership(jenv, jself, take_or_release);
}
};
};
}
#endif /* __cplusplus */
@ -418,81 +452,85 @@ namespace Swig {
extern "C" {
#endif
SWIGEXPORT jlong JNICALL Java_org_doubango_utils_utilsJNI_new_1AndroidUtils(JNIEnv *jenv, jclass jcls) {
jlong jresult = 0 ;
AndroidUtils *result = 0 ;
SWIGEXPORT jlong JNICALL Java_org_doubango_utils_utilsJNI_new_1AndroidUtils(JNIEnv *jenv, jclass jcls)
{
jlong jresult = 0 ;
AndroidUtils *result = 0 ;
(void)jenv;
(void)jcls;
result = (AndroidUtils *)new AndroidUtils();
*(AndroidUtils **)&jresult = result;
return jresult;
(void)jenv;
(void)jcls;
result = (AndroidUtils *)new AndroidUtils();
*(AndroidUtils **)&jresult = result;
return jresult;
}
SWIGEXPORT void JNICALL Java_org_doubango_utils_utilsJNI_delete_1AndroidUtils(JNIEnv *jenv, jclass jcls, jlong jarg1) {
AndroidUtils *arg1 = (AndroidUtils *) 0 ;
SWIGEXPORT void JNICALL Java_org_doubango_utils_utilsJNI_delete_1AndroidUtils(JNIEnv *jenv, jclass jcls, jlong jarg1)
{
AndroidUtils *arg1 = (AndroidUtils *) 0 ;
(void)jenv;
(void)jcls;
arg1 = *(AndroidUtils **)&jarg1;
delete arg1;
(void)jenv;
(void)jcls;
arg1 = *(AndroidUtils **)&jarg1;
delete arg1;
}
SWIGEXPORT jobject JNICALL Java_org_doubango_utils_utilsJNI_AndroidUtils_1getCpuFamily(JNIEnv *jenv, jclass jcls) {
jobject jresult = 0 ;
uint64_t result;
SWIGEXPORT jobject JNICALL Java_org_doubango_utils_utilsJNI_AndroidUtils_1getCpuFamily(JNIEnv *jenv, jclass jcls)
{
jobject jresult = 0 ;
uint64_t result;
(void)jenv;
(void)jcls;
result = (uint64_t)AndroidUtils::getCpuFamily();
{
jbyteArray ba = jenv->NewByteArray(9);
jbyte* bae = jenv->GetByteArrayElements(ba, 0);
jclass clazz = jenv->FindClass("java/math/BigInteger");
jmethodID mid = jenv->GetMethodID(clazz, "<init>", "([B)V");
jobject bigint;
int i;
(void)jenv;
(void)jcls;
result = (uint64_t)AndroidUtils::getCpuFamily();
{
jbyteArray ba = jenv->NewByteArray(9);
jbyte* bae = jenv->GetByteArrayElements(ba, 0);
jclass clazz = jenv->FindClass("java/math/BigInteger");
jmethodID mid = jenv->GetMethodID(clazz, "<init>", "([B)V");
jobject bigint;
int i;
bae[0] = 0;
for(i=1; i<9; i++ ) {
bae[i] = (jbyte)(result>>8*(8-i));
bae[0] = 0;
for(i=1; i<9; i++ ) {
bae[i] = (jbyte)(result>>8*(8-i));
}
jenv->ReleaseByteArrayElements(ba, bae, 0);
bigint = jenv->NewObject(clazz, mid, ba);
jresult = bigint;
}
jenv->ReleaseByteArrayElements(ba, bae, 0);
bigint = jenv->NewObject(clazz, mid, ba);
jresult = bigint;
}
return jresult;
return jresult;
}
SWIGEXPORT jobject JNICALL Java_org_doubango_utils_utilsJNI_AndroidUtils_1getCpuFeatures(JNIEnv *jenv, jclass jcls) {
jobject jresult = 0 ;
uint64_t result;
SWIGEXPORT jobject JNICALL Java_org_doubango_utils_utilsJNI_AndroidUtils_1getCpuFeatures(JNIEnv *jenv, jclass jcls)
{
jobject jresult = 0 ;
uint64_t result;
(void)jenv;
(void)jcls;
result = (uint64_t)AndroidUtils::getCpuFeatures();
{
jbyteArray ba = jenv->NewByteArray(9);
jbyte* bae = jenv->GetByteArrayElements(ba, 0);
jclass clazz = jenv->FindClass("java/math/BigInteger");
jmethodID mid = jenv->GetMethodID(clazz, "<init>", "([B)V");
jobject bigint;
int i;
(void)jenv;
(void)jcls;
result = (uint64_t)AndroidUtils::getCpuFeatures();
{
jbyteArray ba = jenv->NewByteArray(9);
jbyte* bae = jenv->GetByteArrayElements(ba, 0);
jclass clazz = jenv->FindClass("java/math/BigInteger");
jmethodID mid = jenv->GetMethodID(clazz, "<init>", "([B)V");
jobject bigint;
int i;
bae[0] = 0;
for(i=1; i<9; i++ ) {
bae[i] = (jbyte)(result>>8*(8-i));
bae[0] = 0;
for(i=1; i<9; i++ ) {
bae[i] = (jbyte)(result>>8*(8-i));
}
jenv->ReleaseByteArrayElements(ba, bae, 0);
bigint = jenv->NewObject(clazz, mid, ba);
jresult = bigint;
}
jenv->ReleaseByteArrayElements(ba, bae, 0);
bigint = jenv->NewObject(clazz, mid, ba);
jresult = bigint;
}
return jresult;
return jresult;
}

View File

@ -23,66 +23,66 @@
ActionConfig::ActionConfig()
{
m_pHandle = tsip_action_create(tsip_atype_config,
TSIP_ACTION_SET_NULL());
m_pHandle = tsip_action_create(tsip_atype_config,
TSIP_ACTION_SET_NULL());
}
ActionConfig::~ActionConfig()
{
TSK_OBJECT_SAFE_FREE(m_pHandle);
TSK_OBJECT_SAFE_FREE(m_pHandle);
}
bool ActionConfig::addHeader(const char* name, const char* value)
{
return (tsip_action_set(m_pHandle,
TSIP_ACTION_SET_HEADER(name, value),
TSIP_ACTION_SET_NULL()) == 0);
return (tsip_action_set(m_pHandle,
TSIP_ACTION_SET_HEADER(name, value),
TSIP_ACTION_SET_NULL()) == 0);
}
bool ActionConfig::addPayload(const void* payload, unsigned len)
{
return (tsip_action_set(m_pHandle,
TSIP_ACTION_SET_PAYLOAD(payload, len),
TSIP_ACTION_SET_NULL()) == 0);
return (tsip_action_set(m_pHandle,
TSIP_ACTION_SET_PAYLOAD(payload, len),
TSIP_ACTION_SET_NULL()) == 0);
}
bool ActionConfig::setActiveMedia(twrap_media_type_t type)
{
tmedia_type_t media_type = twrap_get_native_media_type(type);
return (tsip_action_set(m_pHandle,
TSIP_ACTION_SET_MEDIA_TYPE(media_type),
TSIP_ACTION_SET_NULL()) == 0);
tmedia_type_t media_type = twrap_get_native_media_type(type);
return (tsip_action_set(m_pHandle,
TSIP_ACTION_SET_MEDIA_TYPE(media_type),
TSIP_ACTION_SET_NULL()) == 0);
}
ActionConfig* ActionConfig::setResponseLine(short code, const char* phrase)
{
int32_t _code = code;
tsip_action_set(m_pHandle,
TSIP_ACTION_SET_RESP_LINE(_code, phrase),
TSIP_ACTION_SET_NULL());
return this;
int32_t _code = code;
tsip_action_set(m_pHandle,
TSIP_ACTION_SET_RESP_LINE(_code, phrase),
TSIP_ACTION_SET_NULL());
return this;
}
ActionConfig* ActionConfig::setMediaString(twrap_media_type_t type, const char* key, const char* value)
{
tmedia_type_t media_type = twrap_get_native_media_type(type);
tsip_action_set(m_pHandle,
TSIP_ACTION_SET_MEDIA(
TMEDIA_SESSION_SET_STR(media_type, key, value),
TMEDIA_SESSION_SET_NULL()),
TSIP_ACTION_SET_NULL());
tmedia_type_t media_type = twrap_get_native_media_type(type);
tsip_action_set(m_pHandle,
TSIP_ACTION_SET_MEDIA(
TMEDIA_SESSION_SET_STR(media_type, key, value),
TMEDIA_SESSION_SET_NULL()),
TSIP_ACTION_SET_NULL());
return this;
return this;
}
ActionConfig* ActionConfig::setMediaInt(twrap_media_type_t type, const char* key, int value)
{
tmedia_type_t media_type = twrap_get_native_media_type(type);
tsip_action_set(m_pHandle,
TSIP_ACTION_SET_MEDIA(
TMEDIA_SESSION_SET_INT32(media_type, key, value),
TMEDIA_SESSION_SET_NULL()),
TSIP_ACTION_SET_NULL());
tmedia_type_t media_type = twrap_get_native_media_type(type);
tsip_action_set(m_pHandle,
TSIP_ACTION_SET_MEDIA(
TMEDIA_SESSION_SET_INT32(media_type, key, value),
TMEDIA_SESSION_SET_NULL()),
TSIP_ACTION_SET_NULL());
return this;
return this;
}

View File

@ -26,25 +26,25 @@
class TINYWRAP_API ActionConfig
{
public:
ActionConfig();
virtual ~ActionConfig();
ActionConfig();
virtual ~ActionConfig();
bool addHeader(const char* name, const char* value);
bool addPayload(const void* payload, unsigned len);
bool setActiveMedia(twrap_media_type_t type);
bool addHeader(const char* name, const char* value);
bool addPayload(const void* payload, unsigned len);
bool setActiveMedia(twrap_media_type_t type);
ActionConfig* setResponseLine(short code, const char* phrase);
ActionConfig* setMediaString(twrap_media_type_t type, const char* key, const char* value);
ActionConfig* setMediaInt(twrap_media_type_t type, const char* key, int value);
ActionConfig* setResponseLine(short code, const char* phrase);
ActionConfig* setMediaString(twrap_media_type_t type, const char* key, const char* value);
ActionConfig* setMediaInt(twrap_media_type_t type, const char* key, int value);
private:
tsip_action_handle_t* m_pHandle;
tsip_action_handle_t* m_pHandle;
#if !defined(SWIG)
public:
const inline tsip_action_handle_t* getHandle()const{
return m_pHandle;
}
const inline tsip_action_handle_t* getHandle()const {
return m_pHandle;
}
#endif
};

View File

@ -32,42 +32,42 @@
#include "tsk_debug.h"
AudioResampler::AudioResampler(uint32_t nInFreq, uint32_t nOutFreq, uint32_t nFrameDuration, uint32_t nChannels, uint32_t nQuality):
m_nOutFreq(nOutFreq),
m_nInFreq(nInFreq),
m_nFrameDuration(nFrameDuration),
m_nChannels(nChannels),
m_nQuality(nQuality)
m_nOutFreq(nOutFreq),
m_nInFreq(nInFreq),
m_nFrameDuration(nFrameDuration),
m_nChannels(nChannels),
m_nQuality(nQuality)
{
if ((m_pWrappedResampler = tmedia_resampler_create())) {
int ret;
if ((ret = tmedia_resampler_open(m_pWrappedResampler, nInFreq, nOutFreq, nFrameDuration, nChannels, nChannels, m_nQuality, 16))){
TSK_DEBUG_ERROR("Failed to open audio resampler (%d)", ret);
TSK_OBJECT_SAFE_FREE(m_pWrappedResampler);
}
}
else {
TSK_DEBUG_ERROR("No audio resampler could be found. Did you forget to call tdav_init()?");
}
if ((m_pWrappedResampler = tmedia_resampler_create())) {
int ret;
if ((ret = tmedia_resampler_open(m_pWrappedResampler, nInFreq, nOutFreq, nFrameDuration, nChannels, nChannels, m_nQuality, 16))) {
TSK_DEBUG_ERROR("Failed to open audio resampler (%d)", ret);
TSK_OBJECT_SAFE_FREE(m_pWrappedResampler);
}
}
else {
TSK_DEBUG_ERROR("No audio resampler could be found. Did you forget to call tdav_init()?");
}
}
AudioResampler::~AudioResampler()
{
TSK_OBJECT_SAFE_FREE(m_pWrappedResampler);
TSK_OBJECT_SAFE_FREE(m_pWrappedResampler);
}
uint32_t AudioResampler::process(const void* pInData, uint32_t nInSizeInBytes, void* pOutData, uint32_t nOutSizeInBytes)
{
if(!m_pWrappedResampler){
TSK_DEBUG_ERROR("Embedded resampler is invalid");
return 0;
}
if(nInSizeInBytes < getInputRequiredSizeInShort()/2){
TSK_DEBUG_ERROR("Input buffer is too short");
return 0;
}
if(nOutSizeInBytes < getOutputRequiredSizeInShort()/2){
TSK_DEBUG_ERROR("Output buffer is too short");
return 0;
}
return 2*tmedia_resampler_process(m_pWrappedResampler, (uint16_t*)pInData, nInSizeInBytes/2, (uint16_t*)pOutData, nOutSizeInBytes/2);
if(!m_pWrappedResampler) {
TSK_DEBUG_ERROR("Embedded resampler is invalid");
return 0;
}
if(nInSizeInBytes < getInputRequiredSizeInShort()/2) {
TSK_DEBUG_ERROR("Input buffer is too short");
return 0;
}
if(nOutSizeInBytes < getOutputRequiredSizeInShort()/2) {
TSK_DEBUG_ERROR("Output buffer is too short");
return 0;
}
return 2*tmedia_resampler_process(m_pWrappedResampler, (uint16_t*)pInData, nInSizeInBytes/2, (uint16_t*)pOutData, nOutSizeInBytes/2);
}

View File

@ -34,22 +34,28 @@
class AudioResampler
{
public:
AudioResampler(uint32_t nInFreq, uint32_t nOutFreq, uint32_t nFrameDuration, uint32_t nChannels, uint32_t nQuality);
~AudioResampler();
AudioResampler(uint32_t nInFreq, uint32_t nOutFreq, uint32_t nFrameDuration, uint32_t nChannels, uint32_t nQuality);
~AudioResampler();
public:
inline bool isValid(){ return (m_pWrappedResampler != tsk_null); }
inline uint32_t getOutputRequiredSizeInShort(){ return (m_nOutFreq * m_nFrameDuration)/1000; }
inline uint32_t getInputRequiredSizeInShort(){ return (m_nInFreq * m_nFrameDuration)/1000; }
uint32_t process(const void* pInData, uint32_t nInSizeInBytes, void* pOutData, uint32_t nOutSizeInBytes);
inline bool isValid() {
return (m_pWrappedResampler != tsk_null);
}
inline uint32_t getOutputRequiredSizeInShort() {
return (m_nOutFreq * m_nFrameDuration)/1000;
}
inline uint32_t getInputRequiredSizeInShort() {
return (m_nInFreq * m_nFrameDuration)/1000;
}
uint32_t process(const void* pInData, uint32_t nInSizeInBytes, void* pOutData, uint32_t nOutSizeInBytes);
private:
struct tmedia_resampler_s* m_pWrappedResampler;
uint32_t m_nOutFreq;
uint32_t m_nInFreq;
uint32_t m_nFrameDuration;
uint32_t m_nChannels;
uint32_t m_nQuality;
struct tmedia_resampler_s* m_pWrappedResampler;
uint32_t m_nOutFreq;
uint32_t m_nInFreq;
uint32_t m_nFrameDuration;
uint32_t m_nChannels;
uint32_t m_nQuality;
};

View File

@ -32,65 +32,62 @@
# define __JNIENV void
#endif
typedef enum twrap_media_type_e
{
// because of Java don't use OR
twrap_media_none = 0x00,
typedef enum twrap_media_type_e {
// because of Java don't use OR
twrap_media_none = 0x00,
twrap_media_audio = 0x01, // (0x01 << 0)
twrap_media_video = 0x02, // (0x01 << 1)
twrap_media_msrp = 0x04, // (0x01 << 2)
twrap_media_t140 = 0x08, // (0x01 << 3)
twrap_media_bfcp = 0x10, // (0x01 << 4)
twrap_media_bfcp_audio = 0x30, // (0x01 << 5) | twrap_media_bfcp;
twrap_media_bfcp_video = 0x50, // (0x01 << 6) | twrap_media_bfcp;
twrap_media_audio = 0x01, // (0x01 << 0)
twrap_media_video = 0x02, // (0x01 << 1)
twrap_media_msrp = 0x04, // (0x01 << 2)
twrap_media_t140 = 0x08, // (0x01 << 3)
twrap_media_bfcp = 0x10, // (0x01 << 4)
twrap_media_bfcp_audio = 0x30, // (0x01 << 5) | twrap_media_bfcp;
twrap_media_bfcp_video = 0x50, // (0x01 << 6) | twrap_media_bfcp;
twrap_media_audiovideo = 0x03, /* @deprecated */
twrap_media_audio_video = twrap_media_audiovideo,
twrap_media_audiovideo = 0x03, /* @deprecated */
twrap_media_audio_video = twrap_media_audiovideo,
}
twrap_media_type_t;
#if !defined(SWIG)
#include "tinymedia/tmedia_common.h"
struct media_type_bind_s
{
twrap_media_type_t twrap;
tmedia_type_t tnative;
struct media_type_bind_s {
twrap_media_type_t twrap;
tmedia_type_t tnative;
};
static const struct media_type_bind_s __media_type_binds[] =
{
{ twrap_media_msrp, tmedia_msrp },
{ twrap_media_audio , tmedia_audio },
{ twrap_media_video, tmedia_video },
{ twrap_media_audio_video, (tmedia_type_t)(tmedia_audio | tmedia_video) },
{ twrap_media_t140, tmedia_t140 },
{ twrap_media_bfcp, tmedia_bfcp },
{ twrap_media_bfcp_audio, tmedia_bfcp_audio },
{ twrap_media_bfcp_video, tmedia_bfcp_video },
static const struct media_type_bind_s __media_type_binds[] = {
{ twrap_media_msrp, tmedia_msrp },
{ twrap_media_audio , tmedia_audio },
{ twrap_media_video, tmedia_video },
{ twrap_media_audio_video, (tmedia_type_t)(tmedia_audio | tmedia_video) },
{ twrap_media_t140, tmedia_t140 },
{ twrap_media_bfcp, tmedia_bfcp },
{ twrap_media_bfcp_audio, tmedia_bfcp_audio },
{ twrap_media_bfcp_video, tmedia_bfcp_video },
};
static const tsk_size_t __media_type_binds_count = sizeof(__media_type_binds)/sizeof(__media_type_binds[0]);
static tmedia_type_t twrap_get_native_media_type(twrap_media_type_t type)
{
tsk_size_t u;
tmedia_type_t t = tmedia_none;
for (u = 0; u < __media_type_binds_count; ++u) {
if ((__media_type_binds[u].twrap & type) == __media_type_binds[u].twrap) {
t = (tmedia_type_t)(t | __media_type_binds[u].tnative);
}
}
return t;
tsk_size_t u;
tmedia_type_t t = tmedia_none;
for (u = 0; u < __media_type_binds_count; ++u) {
if ((__media_type_binds[u].twrap & type) == __media_type_binds[u].twrap) {
t = (tmedia_type_t)(t | __media_type_binds[u].tnative);
}
}
return t;
}
static twrap_media_type_t twrap_get_wrapped_media_type(tmedia_type_t type)
{
twrap_media_type_t t = twrap_media_none;
tsk_size_t u;
for (u = 0; u < __media_type_binds_count; ++u) {
if ((__media_type_binds[u].tnative & type) == __media_type_binds[u].tnative) {
t = (twrap_media_type_t)(t | __media_type_binds[u].twrap);
}
}
return t;
twrap_media_type_t t = twrap_media_none;
tsk_size_t u;
for (u = 0; u < __media_type_binds_count; ++u) {
if ((__media_type_binds[u].tnative & type) == __media_type_binds[u].tnative) {
t = (twrap_media_type_t)(t | __media_type_binds[u].twrap);
}
}
return t;
}
#endif

View File

@ -34,109 +34,112 @@
* Callbacks should not be used with Android (JNI).
*/
enum cb_type{
cb_info,
cb_warn,
cb_error,
cb_fatal
enum cb_type {
cb_info,
cb_warn,
cb_error,
cb_fatal
};
int debug_xxx_cb(const void* arg, const char* fmt, enum cb_type type, va_list *app)
{
int ret = -1;
if(!arg){
return -1;
}
int ret = -1;
if(!arg) {
return -1;
}
const SipStack* stack = dyn_cast<const SipStack*>((const SipStack*)arg);
const SipStack* stack = dyn_cast<const SipStack*>((const SipStack*)arg);
if(stack && stack->getDebugCallback()){
char* message = tsk_null;
tsk_sprintf_2(&message, fmt, app);
if(stack && stack->getDebugCallback()) {
char* message = tsk_null;
tsk_sprintf_2(&message, fmt, app);
switch(type){
case cb_info:
ret=
switch(type) {
case cb_info:
ret=
#if ANDROID
__android_log_write(ANDROID_LOG_INFO, ANDROID_DEBUG_TAG, message);
__android_log_write(ANDROID_LOG_INFO, ANDROID_DEBUG_TAG, message);
#else
stack->getDebugCallback()-> OnDebugInfo(message);
stack->getDebugCallback()-> OnDebugInfo(message);
#endif
break;
case cb_warn:
ret=
break;
case cb_warn:
ret=
#if ANDROID
__android_log_write(ANDROID_LOG_WARN, ANDROID_DEBUG_TAG, message);
__android_log_write(ANDROID_LOG_WARN, ANDROID_DEBUG_TAG, message);
#else
stack->getDebugCallback()-> OnDebugWarn(message);
stack->getDebugCallback()-> OnDebugWarn(message);
#endif
break;
case cb_error:
ret=
break;
case cb_error:
ret=
#if ANDROID
__android_log_write(ANDROID_LOG_ERROR, ANDROID_DEBUG_TAG, message);
__android_log_write(ANDROID_LOG_ERROR, ANDROID_DEBUG_TAG, message);
#else
stack->getDebugCallback()-> OnDebugError(message);
stack->getDebugCallback()-> OnDebugError(message);
#endif
break;
case cb_fatal:
ret=
break;
case cb_fatal:
ret=
#if ANDROID
__android_log_write(ANDROID_LOG_FATAL, ANDROID_DEBUG_TAG, message);
__android_log_write(ANDROID_LOG_FATAL, ANDROID_DEBUG_TAG, message);
#else
stack->getDebugCallback()-> OnDebugFatal(message);
stack->getDebugCallback()-> OnDebugFatal(message);
#endif
break;
}
break;
}
TSK_FREE(message);
}
TSK_FREE(message);
}
return ret;
return ret;
}
int DDebugCallback::debug_info_cb(const void* arg, const char* fmt, ...)
{
va_list ap;
int ret;
va_list ap;
int ret;
va_start(ap, fmt);
ret = debug_xxx_cb(arg, fmt, cb_info, &ap);
va_end(ap);
va_start(ap, fmt);
ret = debug_xxx_cb(arg, fmt, cb_info, &ap);
va_end(ap);
return ret;
return ret;
}
int DDebugCallback::debug_warn_cb(const void* arg, const char* fmt, ...){
va_list ap;
int ret;
int DDebugCallback::debug_warn_cb(const void* arg, const char* fmt, ...)
{
va_list ap;
int ret;
va_start(ap, fmt);
ret = debug_xxx_cb(arg, fmt, cb_warn, &ap);
va_end(ap);
va_start(ap, fmt);
ret = debug_xxx_cb(arg, fmt, cb_warn, &ap);
va_end(ap);
return ret;
return ret;
}
int DDebugCallback::debug_error_cb(const void* arg, const char* fmt, ...){
va_list ap;
int ret;
int DDebugCallback::debug_error_cb(const void* arg, const char* fmt, ...)
{
va_list ap;
int ret;
va_start(ap, fmt);
ret = debug_xxx_cb(arg, fmt, cb_error, &ap);
va_end(ap);
va_start(ap, fmt);
ret = debug_xxx_cb(arg, fmt, cb_error, &ap);
va_end(ap);
return ret;
return ret;
}
int DDebugCallback::debug_fatal_cb(const void* arg, const char* fmt, ...){
va_list ap;
int ret;
int DDebugCallback::debug_fatal_cb(const void* arg, const char* fmt, ...)
{
va_list ap;
int ret;
va_start(ap, fmt);
ret = debug_xxx_cb(arg, fmt, cb_fatal, &ap);
va_end(ap);
va_start(ap, fmt);
ret = debug_xxx_cb(arg, fmt, cb_fatal, &ap);
va_end(ap);
return ret;
return ret;
}

View File

@ -25,21 +25,29 @@
class DDebugCallback
{
public:
DDebugCallback() { }
virtual ~DDebugCallback() {}
DDebugCallback() { }
virtual ~DDebugCallback() {}
virtual int OnDebugInfo(const char* message) { return -1; }
virtual int OnDebugWarn(const char* message) { return -1; }
virtual int OnDebugError(const char* message) { return -1; }
virtual int OnDebugFatal(const char* message) { return -1; }
virtual int OnDebugInfo(const char* message) {
return -1;
}
virtual int OnDebugWarn(const char* message) {
return -1;
}
virtual int OnDebugError(const char* message) {
return -1;
}
virtual int OnDebugFatal(const char* message) {
return -1;
}
#if !defined(SWIG)
public:
static int debug_info_cb(const void* arg, const char* fmt, ...);
static int debug_warn_cb(const void* arg, const char* fmt, ...);
static int debug_error_cb(const void* arg, const char* fmt, ...);
static int debug_fatal_cb(const void* arg, const char* fmt, ...);
static int debug_info_cb(const void* arg, const char* fmt, ...);
static int debug_warn_cb(const void* arg, const char* fmt, ...);
static int debug_error_cb(const void* arg, const char* fmt, ...);
static int debug_fatal_cb(const void* arg, const char* fmt, ...);
#endif
private:

View File

@ -24,91 +24,91 @@
MediaContent::MediaContent(tmedia_content_t* pContent)
: m_pData(tsk_null)
: m_pData(tsk_null)
{
m_pContent = (tmedia_content_t*)tsk_object_ref(pContent);
m_pContent = (tmedia_content_t*)tsk_object_ref(pContent);
}
MediaContent::~MediaContent()
{
TSK_OBJECT_SAFE_FREE(m_pContent);
TSK_OBJECT_SAFE_FREE(m_pData);
TSK_OBJECT_SAFE_FREE(m_pContent);
TSK_OBJECT_SAFE_FREE(m_pData);
}
const char* MediaContent::getType()
{
if(m_pContent){
return m_pContent->type;
}
return tsk_null;
if(m_pContent) {
return m_pContent->type;
}
return tsk_null;
}
unsigned MediaContent::getDataLength()
{
if(!m_pContent){
TSK_DEBUG_ERROR("Invalid internal object");
return 0;
}
if(!m_pContent) {
TSK_DEBUG_ERROR("Invalid internal object");
return 0;
}
if(!m_pData){
m_pData = tmedia_content_get_data(m_pContent);
}
if(!m_pData) {
m_pData = tmedia_content_get_data(m_pContent);
}
return (m_pData ? m_pData->size : 0);
return (m_pData ? m_pData->size : 0);
}
unsigned MediaContent::getData(void* pOutput, unsigned nMaxsize)
{
unsigned nRetsize = 0;
unsigned nRetsize = 0;
if(!m_pContent){
TSK_DEBUG_ERROR("Invalid internal object");
return 0;
}
if(!m_pContent) {
TSK_DEBUG_ERROR("Invalid internal object");
return 0;
}
if(!m_pData){
m_pData = tmedia_content_get_data(m_pContent);
}
if(!m_pData) {
m_pData = tmedia_content_get_data(m_pContent);
}
if(pOutput && nMaxsize && m_pData){
nRetsize = (m_pData->size > nMaxsize) ? nMaxsize : m_pData->size;
memcpy(pOutput, m_pData->data, nRetsize);
}
if(pOutput && nMaxsize && m_pData) {
nRetsize = (m_pData->size > nMaxsize) ? nMaxsize : m_pData->size;
memcpy(pOutput, m_pData->data, nRetsize);
}
return nRetsize;
return nRetsize;
}
MediaContent* MediaContent::parse(const void* pData, unsigned nSize, const char* pType)
{
MediaContent* pMediaContent = tsk_null;
MediaContent* pMediaContent = tsk_null;
tmedia_content_t* pContent = tmedia_content_parse(pData, (tsk_size_t)nSize, pType);
if(pContent){
if(TMEDIA_CONTENT_IS_CPIM(pContent)){
pMediaContent = new MediaContentCPIM(pContent);
}
else if(TMEDIA_CONTENT_IS_DUMMY(pContent)){
// Todo
}
TSK_OBJECT_SAFE_FREE(pContent);
}
tmedia_content_t* pContent = tmedia_content_parse(pData, (tsk_size_t)nSize, pType);
if(pContent) {
if(TMEDIA_CONTENT_IS_CPIM(pContent)) {
pMediaContent = new MediaContentCPIM(pContent);
}
else if(TMEDIA_CONTENT_IS_DUMMY(pContent)) {
// Todo
}
TSK_OBJECT_SAFE_FREE(pContent);
}
return pMediaContent;
return pMediaContent;
}
MediaContentCPIM* MediaContent::parse(const void* pData, unsigned nSize)
{
MediaContent* pMediaContent;
if((pMediaContent = MediaContent::parse(pData, nSize, TMEDIA_CONTENT_CPIM_TYPE))){
return dyn_cast<MediaContentCPIM*>(pMediaContent);
}
return tsk_null;
MediaContent* pMediaContent;
if((pMediaContent = MediaContent::parse(pData, nSize, TMEDIA_CONTENT_CPIM_TYPE))) {
return dyn_cast<MediaContentCPIM*>(pMediaContent);
}
return tsk_null;
}
/* ============ message/CPIM ================= */
MediaContentCPIM::MediaContentCPIM(tmedia_content_t* pContent)
: MediaContent(pContent)
: MediaContent(pContent)
{
}
@ -118,61 +118,62 @@ MediaContentCPIM::~MediaContentCPIM()
unsigned MediaContentCPIM::getPayloadLength()
{
if(!m_pContent || !TMEDIA_CONTENT_IS_CPIM(m_pContent)){
TSK_DEBUG_ERROR("Invalid internal object");
return 0;
}
if(!m_pContent || !TMEDIA_CONTENT_IS_CPIM(m_pContent)) {
TSK_DEBUG_ERROR("Invalid internal object");
return 0;
}
return (TMEDIA_CONTENT_CPIM(m_pContent)->e ? TMEDIA_CONTENT_CPIM(m_pContent)->e->size : 0);
return (TMEDIA_CONTENT_CPIM(m_pContent)->e ? TMEDIA_CONTENT_CPIM(m_pContent)->e->size : 0);
}
unsigned MediaContentCPIM::getPayload(void* pOutput, unsigned nMaxsize)
{
unsigned nRetsize = 0;
unsigned nRetsize = 0;
if(!m_pContent || !TMEDIA_CONTENT_IS_CPIM(m_pContent)){
TSK_DEBUG_ERROR("Invalid internal object");
return 0;
}
if(!m_pContent || !TMEDIA_CONTENT_IS_CPIM(m_pContent)) {
TSK_DEBUG_ERROR("Invalid internal object");
return 0;
}
if(pOutput && nMaxsize && TMEDIA_CONTENT_CPIM(m_pContent)->e){
nRetsize = (TMEDIA_CONTENT_CPIM(m_pContent)->e->size > nMaxsize) ? nMaxsize : TMEDIA_CONTENT_CPIM(m_pContent)->e->size;
memcpy(pOutput, TMEDIA_CONTENT_CPIM(m_pContent)->e->data, nRetsize);
}
if(pOutput && nMaxsize && TMEDIA_CONTENT_CPIM(m_pContent)->e) {
nRetsize = (TMEDIA_CONTENT_CPIM(m_pContent)->e->size > nMaxsize) ? nMaxsize : TMEDIA_CONTENT_CPIM(m_pContent)->e->size;
memcpy(pOutput, TMEDIA_CONTENT_CPIM(m_pContent)->e->data, nRetsize);
}
return nRetsize;
return nRetsize;
}
const void* MediaContentCPIM::getPayloadPtr(){
if(!m_pContent || !TMEDIA_CONTENT_IS_CPIM(m_pContent)){
TSK_DEBUG_ERROR("Invalid internal object");
return tsk_null;
}
const void* MediaContentCPIM::getPayloadPtr()
{
if(!m_pContent || !TMEDIA_CONTENT_IS_CPIM(m_pContent)) {
TSK_DEBUG_ERROR("Invalid internal object");
return tsk_null;
}
return TMEDIA_CONTENT_CPIM(m_pContent)->e ? TMEDIA_CONTENT_CPIM(m_pContent)->e->data : tsk_null;
return TMEDIA_CONTENT_CPIM(m_pContent)->e ? TMEDIA_CONTENT_CPIM(m_pContent)->e->data : tsk_null;
}
const char* MediaContentCPIM::getHeaderValue(const char* name)
{
const tmedia_content_cpim_t* cpim;
const tsk_list_item_t* item;
const tmedia_content_cpim_t* cpim;
const tsk_list_item_t* item;
if(!m_pContent || !TMEDIA_CONTENT_IS_CPIM(m_pContent)){
TSK_DEBUG_ERROR("Invalid internal object");
return tsk_null;
}
if(!m_pContent || !TMEDIA_CONTENT_IS_CPIM(m_pContent)) {
TSK_DEBUG_ERROR("Invalid internal object");
return tsk_null;
}
cpim = TMEDIA_CONTENT_CPIM(m_pContent);
tsk_list_foreach(item, cpim->h_headers){
if(tsk_striequals(name, TMEDIA_CONTENT_HEADER(item->data)->name)){
return TMEDIA_CONTENT_HEADER(item->data)->value;
}
}
tsk_list_foreach(item, cpim->m_headers){
if(tsk_striequals(name, TMEDIA_CONTENT_HEADER(item->data)->name)){
return TMEDIA_CONTENT_HEADER(item->data)->value;
}
}
cpim = TMEDIA_CONTENT_CPIM(m_pContent);
tsk_list_foreach(item, cpim->h_headers) {
if(tsk_striequals(name, TMEDIA_CONTENT_HEADER(item->data)->name)) {
return TMEDIA_CONTENT_HEADER(item->data)->value;
}
}
tsk_list_foreach(item, cpim->m_headers) {
if(tsk_striequals(name, TMEDIA_CONTENT_HEADER(item->data)->name)) {
return TMEDIA_CONTENT_HEADER(item->data)->value;
}
}
return tsk_null;
return tsk_null;
}

View File

@ -31,27 +31,27 @@ class MediaContent
{
public:
#if !defined(SWIG)
MediaContent(tmedia_content_t* content);
MediaContent(tmedia_content_t* content);
#endif
virtual ~MediaContent();
virtual ~MediaContent();
public:
const char* getType();
virtual unsigned getDataLength();
virtual unsigned getData(void* pOutput, unsigned nMaxsize);
const char* getType();
virtual unsigned getDataLength();
virtual unsigned getData(void* pOutput, unsigned nMaxsize);
// SWIG %newobject()
static MediaContent* parse(const void* pData, unsigned nSize, const char* pType);
static MediaContentCPIM* parse(const void* pData, unsigned nSize);
// SWIG %newobject()
static MediaContent* parse(const void* pData, unsigned nSize, const char* pType);
static MediaContentCPIM* parse(const void* pData, unsigned nSize);
virtual unsigned getPayloadLength() = 0;
virtual unsigned getPayload(void* pOutput, unsigned nMaxsize) = 0;
virtual unsigned getPayloadLength() = 0;
virtual unsigned getPayload(void* pOutput, unsigned nMaxsize) = 0;
protected:
tmedia_content_t* m_pContent;
tmedia_content_t* m_pContent;
private:
tsk_buffer_t* m_pData;
tsk_buffer_t* m_pData;
};
@ -60,17 +60,17 @@ class MediaContentCPIM : public MediaContent
{
public:
#if !defined(SWIG)
MediaContentCPIM(tmedia_content_t* pContent);
MediaContentCPIM(tmedia_content_t* pContent);
#endif
virtual ~MediaContentCPIM();
virtual ~MediaContentCPIM();
public:
virtual unsigned getPayloadLength();
virtual unsigned getPayload(void* pOutput, unsigned nMaxsize);
virtual unsigned getPayloadLength();
virtual unsigned getPayload(void* pOutput, unsigned nMaxsize);
#if !defined(SWIG)
const void* getPayloadPtr();
const void* getPayloadPtr();
#endif
const char* getHeaderValue(const char* pName);
const char* getHeaderValue(const char* pName);
};
#endif /*TINYWRAP_MEDIA_CONTENT_H*/

View File

@ -21,78 +21,108 @@
*/
#include "MediaSessionMgr.h"
//
// QoS
//
QoS::QoS(float qavg, float q1 /*= -1.f*/, float q2 /*= -1.f*/, float q3 /*= -1.f*/, float q4 /*= -1.f*/, float q5 /*= -1.f*/)
: m_Qqvg(qavg)
, m_VideoInWidth(0)
, m_VideoOutWidth(0)
, m_VideoInHeight(0)
, m_VideoOutHeight(0)
, m_BandwidthDownKbps(0)
, m_BandwidthUpKbps(0)
, m_VideoInAvgFps(0)
, m_VideoDecAvgTime(0)
, m_VideoEncAvgTime(0)
{
m_Qn[0] = q1;
m_Qn[1] = q2;
m_Qn[2] = q3;
m_Qn[3] = q4;
m_Qn[4] = q5;
}
QoS::~QoS()
{
}
//
// Codec
//
Codec::Codec(const struct tmedia_codec_s* pWrappedCodec)
{
m_pWrappedCodec = (struct tmedia_codec_s*)tsk_object_ref(TSK_OBJECT(pWrappedCodec));
m_pWrappedCodec = (struct tmedia_codec_s*)tsk_object_ref(TSK_OBJECT(pWrappedCodec));
}
Codec::~Codec()
{
TSK_OBJECT_SAFE_FREE(m_pWrappedCodec);
TSK_OBJECT_SAFE_FREE(m_pWrappedCodec);
}
twrap_media_type_t Codec::getMediaType()
{
if(m_pWrappedCodec){
switch(m_pWrappedCodec->type){
case tmedia_audio: return twrap_media_audio;
case tmedia_video: return twrap_media_video;
case tmedia_msrp: return twrap_media_msrp;
default: break;
}
}
return twrap_media_none;
if(m_pWrappedCodec) {
switch(m_pWrappedCodec->type) {
case tmedia_audio:
return twrap_media_audio;
case tmedia_video:
return twrap_media_video;
case tmedia_msrp:
return twrap_media_msrp;
default:
break;
}
}
return twrap_media_none;
}
const char* Codec::getName()
{
if(m_pWrappedCodec){
return m_pWrappedCodec->name;
}
return tsk_null;
if(m_pWrappedCodec) {
return m_pWrappedCodec->name;
}
return tsk_null;
}
const char* Codec::getDescription()
{
if(m_pWrappedCodec){
return m_pWrappedCodec->desc;
}
return tsk_null;
if(m_pWrappedCodec) {
return m_pWrappedCodec->desc;
}
return tsk_null;
}
const char* Codec::getNegFormat()
{
if(m_pWrappedCodec){
return m_pWrappedCodec->neg_format ? m_pWrappedCodec->neg_format : m_pWrappedCodec->format;
}
return tsk_null;
if(m_pWrappedCodec) {
return m_pWrappedCodec->neg_format ? m_pWrappedCodec->neg_format : m_pWrappedCodec->format;
}
return tsk_null;
}
int Codec::getAudioSamplingRate()
{
if(m_pWrappedCodec && m_pWrappedCodec->plugin){
return m_pWrappedCodec->plugin->rate;
}
return 0;
if(m_pWrappedCodec && m_pWrappedCodec->plugin) {
return m_pWrappedCodec->plugin->rate;
}
return 0;
}
int Codec::getAudioChannels()
{
if(m_pWrappedCodec && (m_pWrappedCodec->type & tmedia_audio) && m_pWrappedCodec->plugin){
return m_pWrappedCodec->plugin->audio.channels;
}
return 0;
if(m_pWrappedCodec && (m_pWrappedCodec->type & tmedia_audio) && m_pWrappedCodec->plugin) {
return m_pWrappedCodec->plugin->audio.channels;
}
return 0;
}
int Codec::getAudioPTime()
{
if(m_pWrappedCodec && (m_pWrappedCodec->type & tmedia_audio) && m_pWrappedCodec->plugin){
return m_pWrappedCodec->plugin->audio.ptime;
}
return 0;
if(m_pWrappedCodec && (m_pWrappedCodec->type & tmedia_audio) && m_pWrappedCodec->plugin) {
return m_pWrappedCodec->plugin->audio.ptime;
}
return 0;
}
//
@ -100,78 +130,107 @@ int Codec::getAudioPTime()
//
MediaSessionMgr::MediaSessionMgr(tmedia_session_mgr_t* pWrappedMgr)
{
m_pWrappedMgr = (tmedia_session_mgr_t*)tsk_object_ref(pWrappedMgr);
m_pWrappedMgr = (tmedia_session_mgr_t*)tsk_object_ref(pWrappedMgr);
}
MediaSessionMgr::~MediaSessionMgr()
{
TSK_OBJECT_SAFE_FREE(m_pWrappedMgr);
TSK_OBJECT_SAFE_FREE(m_pWrappedMgr);
}
bool MediaSessionMgr::sessionSetInt32(twrap_media_type_t media, const char* key, int32_t value)
{
tmedia_type_t _media = twrap_get_native_media_type(media);
return (tmedia_session_mgr_set(m_pWrappedMgr,
TMEDIA_SESSION_SET_INT32(_media, key, value),
TMEDIA_SESSION_SET_NULL()) == 0);
tmedia_type_t _media = twrap_get_native_media_type(media);
return (tmedia_session_mgr_set(m_pWrappedMgr,
TMEDIA_SESSION_SET_INT32(_media, key, value),
TMEDIA_SESSION_SET_NULL()) == 0);
}
int32_t MediaSessionMgr::sessionGetInt32(twrap_media_type_t media, const char* key)
{
int32_t value = 0;
tmedia_type_t _media = twrap_get_native_media_type(media);
(tmedia_session_mgr_get(m_pWrappedMgr,
TMEDIA_SESSION_GET_INT32(_media, key, &value),
TMEDIA_SESSION_GET_NULL()));
return value;
int32_t value = 0;
tmedia_type_t _media = twrap_get_native_media_type(media);
(tmedia_session_mgr_get(m_pWrappedMgr,
TMEDIA_SESSION_GET_INT32(_media, key, &value),
TMEDIA_SESSION_GET_NULL()));
return value;
}
QoS* MediaSessionMgr::sessionGetQoS(twrap_media_type_t media)
{
tmedia_type_t _media = twrap_get_native_media_type(media);
tmedia_session_t* session = tmedia_session_mgr_find(m_pWrappedMgr, _media);
if (session) {
QoS* pQoS = new QoS(
session->qos_metrics.qvag,
session->qos_metrics.q1,
session->qos_metrics.q2,
session->qos_metrics.q3,
session->qos_metrics.q4,
session->qos_metrics.q5);
if (pQoS && ((_media & tmedia_video) || (_media & tmedia_bfcp_video))) {
pQoS->m_VideoInWidth = session->qos_metrics.video_in_width;
pQoS->m_VideoInHeight = session->qos_metrics.video_in_height;
pQoS->m_VideoOutWidth = session->qos_metrics.video_out_width;
pQoS->m_VideoOutHeight = session->qos_metrics.video_out_height;
pQoS->m_BandwidthDownKbps = session->qos_metrics.bw_down_est_kbps;
pQoS->m_BandwidthUpKbps = session->qos_metrics.bw_up_est_kbps;
pQoS->m_VideoInAvgFps = session->qos_metrics.video_in_avg_fps;
pQoS->m_VideoDecAvgTime = session->qos_metrics.video_dec_avg_time;
pQoS->m_VideoEncAvgTime = session->qos_metrics.video_enc_avg_time;
}
TSK_OBJECT_SAFE_FREE(session);
return pQoS;
}
return NULL;
}
bool MediaSessionMgr::consumerSetInt32(twrap_media_type_t media, const char* key, int32_t value)
{
tmedia_type_t _media = twrap_get_native_media_type(media);
return (tmedia_session_mgr_set(m_pWrappedMgr,
TMEDIA_SESSION_CONSUMER_SET_INT32(_media, key, value),
TMEDIA_SESSION_SET_NULL()) == 0);
tmedia_type_t _media = twrap_get_native_media_type(media);
return (tmedia_session_mgr_set(m_pWrappedMgr,
TMEDIA_SESSION_CONSUMER_SET_INT32(_media, key, value),
TMEDIA_SESSION_SET_NULL()) == 0);
}
bool MediaSessionMgr::consumerSetInt64(twrap_media_type_t media, const char* key, int64_t value)
{
tmedia_type_t _media = twrap_get_native_media_type(media);
return (tmedia_session_mgr_set(m_pWrappedMgr,
TMEDIA_SESSION_CONSUMER_SET_INT64(_media, key, value),
TMEDIA_SESSION_SET_NULL()) == 0);
tmedia_type_t _media = twrap_get_native_media_type(media);
return (tmedia_session_mgr_set(m_pWrappedMgr,
TMEDIA_SESSION_CONSUMER_SET_INT64(_media, key, value),
TMEDIA_SESSION_SET_NULL()) == 0);
}
bool MediaSessionMgr::producerSetInt32(twrap_media_type_t media, const char* key, int32_t value)
{
tmedia_type_t _media = twrap_get_native_media_type(media);
return (tmedia_session_mgr_set(m_pWrappedMgr,
TMEDIA_SESSION_PRODUCER_SET_INT32(_media, key, value),
TMEDIA_SESSION_SET_NULL()) == 0);
tmedia_type_t _media = twrap_get_native_media_type(media);
return (tmedia_session_mgr_set(m_pWrappedMgr,
TMEDIA_SESSION_PRODUCER_SET_INT32(_media, key, value),
TMEDIA_SESSION_SET_NULL()) == 0);
}
bool MediaSessionMgr::producerSetInt64(twrap_media_type_t media, const char* key, int64_t value)
{
tmedia_type_t _media = twrap_get_native_media_type(media);
return (tmedia_session_mgr_set(m_pWrappedMgr,
TMEDIA_SESSION_PRODUCER_SET_INT64(_media, key, value),
TMEDIA_SESSION_SET_NULL()) == 0);
tmedia_type_t _media = twrap_get_native_media_type(media);
return (tmedia_session_mgr_set(m_pWrappedMgr,
TMEDIA_SESSION_PRODUCER_SET_INT64(_media, key, value),
TMEDIA_SESSION_SET_NULL()) == 0);
}
Codec* MediaSessionMgr::producerGetCodec(twrap_media_type_t media)
{
tmedia_codec_t* _codec = tsk_null;
tmedia_type_t _media = twrap_get_native_media_type(media);
(tmedia_session_mgr_get(m_pWrappedMgr,
TMEDIA_SESSION_PRODUCER_GET_POBJECT(_media, "codec", &_codec),
TMEDIA_SESSION_GET_NULL()));
tmedia_codec_t* _codec = tsk_null;
tmedia_type_t _media = twrap_get_native_media_type(media);
(tmedia_session_mgr_get(m_pWrappedMgr,
TMEDIA_SESSION_PRODUCER_GET_POBJECT(_media, "codec", &_codec),
TMEDIA_SESSION_GET_NULL()));
if(_codec){
Codec* pCodec = new Codec(_codec);
TSK_OBJECT_SAFE_FREE(_codec);
return pCodec;
}
return tsk_null;
if(_codec) {
Codec* pCodec = new Codec(_codec);
TSK_OBJECT_SAFE_FREE(_codec);
return pCodec;
}
return NULL;
}
#include "tinydav/audio/tdav_session_audio.h"
@ -181,379 +240,426 @@ Codec* MediaSessionMgr::producerGetCodec(twrap_media_type_t media)
const ProxyPlugin* MediaSessionMgr::findProxyPlugin(twrap_media_type_t media, bool consumer)const
{
const ProxyPlugin* plugin = tsk_null;
ProxyPluginMgr* manager = ProxyPluginMgr::getInstance();
const ProxyPlugin* plugin = tsk_null;
ProxyPluginMgr* manager = ProxyPluginMgr::getInstance();
if(media != twrap_media_audio && media != twrap_media_video){
TSK_DEBUG_ERROR("Invalid media type");
return tsk_null;
}
if(media != twrap_media_audio && media != twrap_media_video) {
TSK_DEBUG_ERROR("Invalid media type");
return tsk_null;
}
if(manager && m_pWrappedMgr){
tmedia_type_t _media = twrap_get_native_media_type(media);
tmedia_session_t* session = tmedia_session_mgr_find(m_pWrappedMgr, _media);
if(session){
if(session->plugin == tdav_session_audio_plugin_def_t){
if(consumer){
plugin = manager->findPlugin(TDAV_SESSION_AV(session)->consumer);
}
else{
plugin = manager->findPlugin(TDAV_SESSION_AV(session)->producer);
}
}
else if(session->plugin == tdav_session_video_plugin_def_t){
if(consumer){
plugin = manager->findPlugin(TDAV_SESSION_AV(session)->consumer);
}
else{
plugin = manager->findPlugin(TDAV_SESSION_AV(session)->producer);
}
}
else{
TSK_DEBUG_ERROR("Unknown session with media type = %d", _media);
}
tsk_object_unref(session);
}
}
else{
TSK_DEBUG_ERROR("Invalid state");
}
if(manager && m_pWrappedMgr) {
tmedia_type_t _media = twrap_get_native_media_type(media);
tmedia_session_t* session = tmedia_session_mgr_find(m_pWrappedMgr, _media);
if(session) {
if(session->plugin == tdav_session_audio_plugin_def_t) {
if(consumer) {
plugin = manager->findPlugin(TDAV_SESSION_AV(session)->consumer);
}
else {
plugin = manager->findPlugin(TDAV_SESSION_AV(session)->producer);
}
}
else if(session->plugin == tdav_session_video_plugin_def_t) {
if(consumer) {
plugin = manager->findPlugin(TDAV_SESSION_AV(session)->consumer);
}
else {
plugin = manager->findPlugin(TDAV_SESSION_AV(session)->producer);
}
}
else {
TSK_DEBUG_ERROR("Unknown session with media type = %d", _media);
}
tsk_object_unref(session);
}
}
else {
TSK_DEBUG_ERROR("Invalid state");
}
return plugin;
return plugin;
}
// FIXME: create generic function to register any kind and number of plugin from a file
unsigned int MediaSessionMgr::registerAudioPluginFromFile(const char* path)
{
static struct tsk_plugin_s* __plugin = tsk_null;
if(__plugin){
TSK_DEBUG_ERROR("Audio plugin already registered");
return 0;
}
if((__plugin = tsk_plugin_create(path))){
unsigned int count = 0;
tsk_plugin_def_ptr_const_t plugin_def_ptr_const;
if((plugin_def_ptr_const = tsk_plugin_get_def(__plugin, tsk_plugin_def_type_consumer, tsk_plugin_def_media_type_audio))){
if(tmedia_consumer_plugin_register((const tmedia_consumer_plugin_def_t*)plugin_def_ptr_const) == 0){
++count;
}
}
if((plugin_def_ptr_const = tsk_plugin_get_def(__plugin, tsk_plugin_def_type_producer, tsk_plugin_def_media_type_audio))){
if(tmedia_producer_plugin_register((const tmedia_producer_plugin_def_t*)plugin_def_ptr_const) == 0){
++count;
}
}
return count;
}
TSK_DEBUG_ERROR("Failed to create plugin with path=%s", path);
return 0;
static struct tsk_plugin_s* __plugin = tsk_null;
if(__plugin) {
TSK_DEBUG_ERROR("Audio plugin already registered");
return 0;
}
if((__plugin = tsk_plugin_create(path))) {
unsigned int count = 0;
tsk_plugin_def_ptr_const_t plugin_def_ptr_const;
if((plugin_def_ptr_const = tsk_plugin_get_def(__plugin, tsk_plugin_def_type_consumer, tsk_plugin_def_media_type_audio))) {
if(tmedia_consumer_plugin_register((const tmedia_consumer_plugin_def_t*)plugin_def_ptr_const) == 0) {
++count;
}
}
if((plugin_def_ptr_const = tsk_plugin_get_def(__plugin, tsk_plugin_def_type_producer, tsk_plugin_def_media_type_audio))) {
if(tmedia_producer_plugin_register((const tmedia_producer_plugin_def_t*)plugin_def_ptr_const) == 0) {
++count;
}
}
return count;
}
TSK_DEBUG_ERROR("Failed to create plugin with path=%s", path);
return 0;
}
uint64_t MediaSessionMgr::getSessionId(twrap_media_type_t media)const
{
//const ProxyPlugin* plugin = tsk_null;
ProxyPluginMgr* manager = ProxyPluginMgr::getInstance();
uint64_t id = 0;
//const ProxyPlugin* plugin = tsk_null;
ProxyPluginMgr* manager = ProxyPluginMgr::getInstance();
uint64_t id = 0;
if (media != twrap_media_audio && media != twrap_media_video) {
TSK_DEBUG_ERROR("Invalid media type");
return 0;
}
if (media != twrap_media_audio && media != twrap_media_video) {
TSK_DEBUG_ERROR("Invalid media type");
return 0;
}
if (manager && m_pWrappedMgr) {
tmedia_type_t _media = twrap_get_native_media_type(media);
tmedia_session_t* session = tmedia_session_mgr_find(m_pWrappedMgr, _media);
if (session) {
id = session->id;
}
tsk_object_unref(session);
}
else {
TSK_DEBUG_ERROR("Invalid state");
}
if (manager && m_pWrappedMgr) {
tmedia_type_t _media = twrap_get_native_media_type(media);
tmedia_session_t* session = tmedia_session_mgr_find(m_pWrappedMgr, _media);
if (session) {
id = session->id;
}
tsk_object_unref(session);
}
else {
TSK_DEBUG_ERROR("Invalid state");
}
return id;
return id;
}
bool MediaSessionMgr::defaultsSetProfile(tmedia_profile_t profile)
{
return (tmedia_defaults_set_profile(profile) == 0);
return (tmedia_defaults_set_profile(profile) == 0);
}
tmedia_profile_t MediaSessionMgr::defaultsGetProfile()
{
return tmedia_defaults_get_profile();
return tmedia_defaults_get_profile();
}
bool MediaSessionMgr::defaultsSetBandwidthLevel(tmedia_bandwidth_level_t bl) // @deprecated
{
return tmedia_defaults_set_bl(bl) == 0;
return tmedia_defaults_set_bl(bl) == 0;
}
tmedia_bandwidth_level_t MediaSessionMgr::defaultsGetBandwidthLevel() // @deprecated
{
return tmedia_defaults_get_bl();
return tmedia_defaults_get_bl();
}
bool MediaSessionMgr::defaultsSetCongestionCtrlEnabled(bool enabled)
{
return tmedia_defaults_set_congestion_ctrl_enabled(enabled ? tsk_true : tsk_false) == 0;
return tmedia_defaults_set_congestion_ctrl_enabled(enabled ? tsk_true : tsk_false) == 0;
}
bool MediaSessionMgr::defaultsSetVideoMotionRank(int32_t video_motion_rank)
{
return (tmedia_defaults_set_video_motion_rank(video_motion_rank) == 0);
return (tmedia_defaults_set_video_motion_rank(video_motion_rank) == 0);
}
bool MediaSessionMgr::defaultsSetVideoFps(int32_t video_fps)
{
return (tmedia_defaults_set_video_fps(video_fps) == 0);
return (tmedia_defaults_set_video_fps(video_fps) == 0);
}
bool MediaSessionMgr::defaultsSetBandwidthVideoUploadMax(int32_t bw_video_up_max_kbps)
{
return (tmedia_defaults_set_bandwidth_video_upload_max(bw_video_up_max_kbps) == 0);
return (tmedia_defaults_set_bandwidth_video_upload_max(bw_video_up_max_kbps) == 0);
}
bool MediaSessionMgr::defaultsSetBandwidthVideoDownloadMax(int32_t bw_video_down_max_kbps)
{
return (tmedia_defaults_set_bandwidth_video_download_max(bw_video_down_max_kbps) == 0);
return (tmedia_defaults_set_bandwidth_video_download_max(bw_video_down_max_kbps) == 0);
}
bool MediaSessionMgr::defaultsSetPrefVideoSize(tmedia_pref_video_size_t pref_video_size)
{
return tmedia_defaults_set_pref_video_size(pref_video_size) == 0;
return tmedia_defaults_set_pref_video_size(pref_video_size) == 0;
}
bool MediaSessionMgr::defaultsSetPrefVideoSizeOutRange(tmedia_pref_video_size_t min, tmedia_pref_video_size_t max)
{
return tmedia_defaults_set_pref_video_size_range(min, max) == 0;
}
bool MediaSessionMgr::defaultsSetAdaptativeVideoSizeOutEnabled(bool enabled)
{
return tmedia_defaults_set_adapt_video_size_range_enabled(enabled ? tsk_true : tsk_false) == 0;
}
bool MediaSessionMgr::defaultsSetJbMargin(uint32_t jb_margin_ms)
{
return tmedia_defaults_set_jb_margin(jb_margin_ms) == 0;
return tmedia_defaults_set_jb_margin(jb_margin_ms) == 0;
}
bool MediaSessionMgr::defaultsSetJbMaxLateRate(uint32_t jb_late_rate_percent)
{
return tmedia_defaults_set_jb_max_late_rate(jb_late_rate_percent) == 0;
return tmedia_defaults_set_jb_max_late_rate(jb_late_rate_percent) == 0;
}
bool MediaSessionMgr::defaultsSetEchoTail(uint32_t echo_tail)
{
return tmedia_defaults_set_echo_tail(echo_tail) == 0;
return tmedia_defaults_set_echo_tail(echo_tail) == 0;
}
uint32_t MediaSessionMgr::defaultsGetEchoTail()
{
return tmedia_defaults_get_echo_tail();
return tmedia_defaults_get_echo_tail();
}
bool MediaSessionMgr::defaultsSetEchoSkew(uint32_t echo_skew)
{
return tmedia_defaults_set_echo_skew(echo_skew) == 0;
return tmedia_defaults_set_echo_skew(echo_skew) == 0;
}
bool MediaSessionMgr::defaultsSetEchoSuppEnabled(bool echo_supp_enabled)
{
return tmedia_defaults_set_echo_supp_enabled(echo_supp_enabled ? tsk_true : tsk_false) == 0;
return tmedia_defaults_set_echo_supp_enabled(echo_supp_enabled ? tsk_true : tsk_false) == 0;
}
bool MediaSessionMgr::defaultsGetEchoSuppEnabled()
{
return tmedia_defaults_get_echo_supp_enabled() ? true : false;
return tmedia_defaults_get_echo_supp_enabled() ? true : false;
}
bool MediaSessionMgr::defaultsSetAgcEnabled(bool agc_enabled)
{
return tmedia_defaults_set_agc_enabled(agc_enabled ? tsk_true : tsk_false) == 0;
return tmedia_defaults_set_agc_enabled(agc_enabled ? tsk_true : tsk_false) == 0;
}
bool MediaSessionMgr::defaultsGetAgcEnabled()
{
return tmedia_defaults_get_agc_enabled() ? true : false;
return tmedia_defaults_get_agc_enabled() ? true : false;
}
bool MediaSessionMgr::defaultsSetAgcLevel(float agc_level)
{
return tmedia_defaults_set_agc_level(agc_level) == 0;
return tmedia_defaults_set_agc_level(agc_level) == 0;
}
float MediaSessionMgr::defaultsGetAgcLevel()
{
return tmedia_defaults_get_agc_level();
return tmedia_defaults_get_agc_level();
}
bool MediaSessionMgr::defaultsSetVadEnabled(bool vad_enabled)
{
return tmedia_defaults_set_vad_enabled(vad_enabled ? tsk_true : tsk_false) == 0;
return tmedia_defaults_set_vad_enabled(vad_enabled ? tsk_true : tsk_false) == 0;
}
bool MediaSessionMgr::defaultsGetGetVadEnabled()
{
return tmedia_defaults_get_vad_enabled() ? true : false;
return tmedia_defaults_get_vad_enabled() ? true : false;
}
bool MediaSessionMgr::defaultsSetNoiseSuppEnabled(bool noise_supp_enabled)
{
return tmedia_defaults_set_noise_supp_enabled(noise_supp_enabled ? tsk_true : tsk_false) == 0;
return tmedia_defaults_set_noise_supp_enabled(noise_supp_enabled ? tsk_true : tsk_false) == 0;
}
bool MediaSessionMgr::defaultsGetNoiseSuppEnabled()
{
return tmedia_defaults_get_noise_supp_enabled() ? true : false;
return tmedia_defaults_get_noise_supp_enabled() ? true : false;
}
bool MediaSessionMgr::defaultsSetNoiseSuppLevel(int32_t noise_supp_level)
{
return tmedia_defaults_set_noise_supp_level(noise_supp_level) == 0;
return tmedia_defaults_set_noise_supp_level(noise_supp_level) == 0;
}
int32_t MediaSessionMgr::defaultsGetNoiseSuppLevel()
{
return tmedia_defaults_get_noise_supp_level();
return tmedia_defaults_get_noise_supp_level();
}
bool MediaSessionMgr::defaultsSet100relEnabled(bool _100rel_enabled){
return tmedia_defaults_set_100rel_enabled(_100rel_enabled ? tsk_true : tsk_false) == 0;
bool MediaSessionMgr::defaultsSet100relEnabled(bool _100rel_enabled)
{
return tmedia_defaults_set_100rel_enabled(_100rel_enabled ? tsk_true : tsk_false) == 0;
}
bool MediaSessionMgr::defaultsGet100relEnabled(){
return tmedia_defaults_get_100rel_enabled() == 0;
bool MediaSessionMgr::defaultsGet100relEnabled()
{
return tmedia_defaults_get_100rel_enabled() == 0;
}
bool MediaSessionMgr::defaultsSetScreenSize(int32_t sx, int32_t sy){
return tmedia_defaults_set_screen_size(sx, sy) == 0;
bool MediaSessionMgr::defaultsSetScreenSize(int32_t sx, int32_t sy)
{
return tmedia_defaults_set_screen_size(sx, sy) == 0;
}
bool MediaSessionMgr::defaultsSetAudioGain(int32_t producer_gain, int32_t consumer_gain){
return tmedia_defaults_set_audio_gain(producer_gain, consumer_gain) == 0;
bool MediaSessionMgr::defaultsSetAudioGain(int32_t producer_gain, int32_t consumer_gain)
{
return tmedia_defaults_set_audio_gain(producer_gain, consumer_gain) == 0;
}
bool MediaSessionMgr::defaultsSetAudioPtime(int32_t ptime){
return tmedia_defaults_set_audio_ptime(ptime) == 0;
bool MediaSessionMgr::defaultsSetAudioPtime(int32_t ptime)
{
return tmedia_defaults_set_audio_ptime(ptime) == 0;
}
bool MediaSessionMgr::defaultsSetAudioChannels(int32_t channel_playback, int32_t channel_record){
return tmedia_defaults_set_audio_channels(channel_playback, channel_record) == 0;
bool MediaSessionMgr::defaultsSetAudioChannels(int32_t channel_playback, int32_t channel_record)
{
return tmedia_defaults_set_audio_channels(channel_playback, channel_record) == 0;
}
bool MediaSessionMgr::defaultsSetRtpPortRange(uint16_t range_start, uint16_t range_stop){
return tmedia_defaults_set_rtp_port_range(range_start, range_stop) == 0;
bool MediaSessionMgr::defaultsSetRtpPortRange(uint16_t range_start, uint16_t range_stop)
{
return tmedia_defaults_set_rtp_port_range(range_start, range_stop) == 0;
}
bool MediaSessionMgr::defaultsSetRtpSymetricEnabled(bool enabled){
return tmedia_defaults_set_rtp_symetric_enabled(enabled ? tsk_true : tsk_false) == 0;
bool MediaSessionMgr::defaultsSetRtpSymetricEnabled(bool enabled)
{
return tmedia_defaults_set_rtp_symetric_enabled(enabled ? tsk_true : tsk_false) == 0;
}
bool MediaSessionMgr::defaultsSetMediaType(twrap_media_type_t media_type)
{
return (tmedia_defaults_set_media_type(twrap_get_native_media_type(media_type)) == 0);
return (tmedia_defaults_set_media_type(twrap_get_native_media_type(media_type)) == 0);
}
bool MediaSessionMgr::defaultsSetVolume(int32_t volume)
{
return (tmedia_defaults_set_volume(volume) == 0);
return (tmedia_defaults_set_volume(volume) == 0);
}
int32_t MediaSessionMgr::defaultsGetVolume()
{
return tmedia_defaults_get_volume();
return tmedia_defaults_get_volume();
}
bool MediaSessionMgr::defaultsSetInviteSessionTimers(int32_t timeout, const char* refresher)
{
int ret = tmedia_defaults_set_inv_session_expires(timeout);
ret &= tmedia_defaults_set_inv_session_refresher(refresher);
return (ret == 0);
int ret = tmedia_defaults_set_inv_session_expires(timeout);
ret &= tmedia_defaults_set_inv_session_refresher(refresher);
return (ret == 0);
}
bool MediaSessionMgr::defaultsSetSRtpMode(tmedia_srtp_mode_t mode){
return (tmedia_defaults_set_srtp_mode(mode) == 0);
bool MediaSessionMgr::defaultsSetSRtpMode(tmedia_srtp_mode_t mode)
{
return (tmedia_defaults_set_srtp_mode(mode) == 0);
}
tmedia_srtp_mode_t MediaSessionMgr::defaultsGetSRtpMode(){
return tmedia_defaults_get_srtp_mode();
tmedia_srtp_mode_t MediaSessionMgr::defaultsGetSRtpMode()
{
return tmedia_defaults_get_srtp_mode();
}
bool MediaSessionMgr::defaultsSetSRtpType(tmedia_srtp_type_t srtp_type){
return (tmedia_defaults_set_srtp_type(srtp_type) == 0);
bool MediaSessionMgr::defaultsSetSRtpType(tmedia_srtp_type_t srtp_type)
{
return (tmedia_defaults_set_srtp_type(srtp_type) == 0);
}
tmedia_srtp_type_t MediaSessionMgr::defaultsGetSRtpType(){
return tmedia_defaults_get_srtp_type();
tmedia_srtp_type_t MediaSessionMgr::defaultsGetSRtpType()
{
return tmedia_defaults_get_srtp_type();
}
bool MediaSessionMgr::defaultsSetRtcpEnabled(bool enabled){
return (tmedia_defaults_set_rtcp_enabled(enabled ? tsk_true : tsk_false) == 0);
bool MediaSessionMgr::defaultsSetRtcpEnabled(bool enabled)
{
return (tmedia_defaults_set_rtcp_enabled(enabled ? tsk_true : tsk_false) == 0);
}
bool MediaSessionMgr::defaultsGetRtcpEnabled(){
return (tmedia_defaults_get_rtcp_enabled() == tsk_true);
bool MediaSessionMgr::defaultsGetRtcpEnabled()
{
return (tmedia_defaults_get_rtcp_enabled() == tsk_true);
}
bool MediaSessionMgr::defaultsSetRtcpMuxEnabled(bool enabled){
return (tmedia_defaults_set_rtcpmux_enabled(enabled ? tsk_true : tsk_false) == 0);
bool MediaSessionMgr::defaultsSetRtcpMuxEnabled(bool enabled)
{
return (tmedia_defaults_set_rtcpmux_enabled(enabled ? tsk_true : tsk_false) == 0);
}
bool MediaSessionMgr::defaultsGetRtcpMuxEnabled(){
return (tmedia_defaults_get_rtcpmux_enabled() == tsk_true);
bool MediaSessionMgr::defaultsGetRtcpMuxEnabled()
{
return (tmedia_defaults_get_rtcpmux_enabled() == tsk_true);
}
bool MediaSessionMgr::defaultsSetStunEnabled(bool stun_enabled){
return (tmedia_defaults_set_stun_enabled(stun_enabled ? tsk_true : tsk_false) == 0);
bool MediaSessionMgr::defaultsSetStunEnabled(bool stun_enabled)
{
return (tmedia_defaults_set_stun_enabled(stun_enabled ? tsk_true : tsk_false) == 0);
}
bool MediaSessionMgr::defaultsSetIceStunEnabled(bool icestun_enabled){
return (tmedia_defaults_set_icestun_enabled(icestun_enabled ? tsk_true : tsk_false) == 0);
bool MediaSessionMgr::defaultsSetIceStunEnabled(bool icestun_enabled)
{
return (tmedia_defaults_set_icestun_enabled(icestun_enabled ? tsk_true : tsk_false) == 0);
}
bool MediaSessionMgr::defaultsSetIceTurnEnabled(bool iceturn_enabled){
return (tmedia_defaults_set_iceturn_enabled(iceturn_enabled ? tsk_true : tsk_false) == 0);
bool MediaSessionMgr::defaultsSetIceTurnEnabled(bool iceturn_enabled)
{
return (tmedia_defaults_set_iceturn_enabled(iceturn_enabled ? tsk_true : tsk_false) == 0);
}
bool MediaSessionMgr::defaultsSetStunServer(const char* server_ip, uint16_t server_port){
return (tmedia_defaults_set_stun_server(server_ip, server_port) == 0);
bool MediaSessionMgr::defaultsSetStunServer(const char* server_ip, uint16_t server_port)
{
return (tmedia_defaults_set_stun_server(server_ip, server_port) == 0);
}
bool MediaSessionMgr::defaultsSetStunCred(const char* username, const char* password){
return (tmedia_defaults_set_stun_cred(username, password) == 0);
bool MediaSessionMgr::defaultsSetStunCred(const char* username, const char* password)
{
return (tmedia_defaults_set_stun_cred(username, password) == 0);
}
bool MediaSessionMgr::defaultsSetIceEnabled(bool ice_enabled){
return (tmedia_defaults_set_ice_enabled(ice_enabled ? tsk_true : tsk_false) == 0);
bool MediaSessionMgr::defaultsSetIceEnabled(bool ice_enabled)
{
return (tmedia_defaults_set_ice_enabled(ice_enabled ? tsk_true : tsk_false) == 0);
}
bool MediaSessionMgr::defaultsSetByPassEncoding(bool enabled){
return (tmedia_defaults_set_bypass_encoding(enabled ? tsk_true : tsk_false) == 0);
bool MediaSessionMgr::defaultsSetByPassEncoding(bool enabled)
{
return (tmedia_defaults_set_bypass_encoding(enabled ? tsk_true : tsk_false) == 0);
}
bool MediaSessionMgr::defaultsGetByPassEncoding(){
return (tmedia_defaults_get_bypass_encoding() == tsk_true);
bool MediaSessionMgr::defaultsGetByPassEncoding()
{
return (tmedia_defaults_get_bypass_encoding() == tsk_true);
}
bool MediaSessionMgr::defaultsSetByPassDecoding(bool enabled){
return (tmedia_defaults_set_bypass_decoding(enabled ? tsk_true : tsk_false) == 0);
bool MediaSessionMgr::defaultsSetByPassDecoding(bool enabled)
{
return (tmedia_defaults_set_bypass_decoding(enabled ? tsk_true : tsk_false) == 0);
}
bool MediaSessionMgr::defaultsGetByPassDecoding(){
return (tmedia_defaults_get_bypass_decoding() == tsk_true);
bool MediaSessionMgr::defaultsGetByPassDecoding()
{
return (tmedia_defaults_get_bypass_decoding() == tsk_true);
}
bool MediaSessionMgr::defaultsSetVideoJbEnabled(bool enabled){
return (tmedia_defaults_set_videojb_enabled(enabled ? tsk_true : tsk_false) == 0);
bool MediaSessionMgr::defaultsSetVideoJbEnabled(bool enabled)
{
return (tmedia_defaults_set_videojb_enabled(enabled ? tsk_true : tsk_false) == 0);
}
bool MediaSessionMgr::defaultsGetVideoJbEnabled(){
return (tmedia_defaults_get_videojb_enabled() == tsk_true);
bool MediaSessionMgr::defaultsGetVideoJbEnabled()
{
return (tmedia_defaults_get_videojb_enabled() == tsk_true);
}
bool MediaSessionMgr::defaultsSetVideoZeroArtifactsEnabled(bool enabled){
return (tmedia_defaults_set_video_zeroartifacts_enabled(enabled ? tsk_true : tsk_false) == 0);
bool MediaSessionMgr::defaultsSetVideoZeroArtifactsEnabled(bool enabled)
{
return (tmedia_defaults_set_video_zeroartifacts_enabled(enabled ? tsk_true : tsk_false) == 0);
}
bool MediaSessionMgr::defaultsGetVideoZeroArtifactsEnabled(){
return (tmedia_defaults_get_video_zeroartifacts_enabled() == tsk_true);
bool MediaSessionMgr::defaultsGetVideoZeroArtifactsEnabled()
{
return (tmedia_defaults_get_video_zeroartifacts_enabled() == tsk_true);
}
bool MediaSessionMgr::defaultsSetRtpBuffSize(unsigned buffSize){
return (tmedia_defaults_set_rtpbuff_size(buffSize) == 0);
bool MediaSessionMgr::defaultsSetRtpBuffSize(unsigned buffSize)
{
return (tmedia_defaults_set_rtpbuff_size(buffSize) == 0);
}
unsigned MediaSessionMgr::defaultsGetRtpBuffSize(){
return tmedia_defaults_get_rtpbuff_size();
unsigned MediaSessionMgr::defaultsGetRtpBuffSize()
{
return tmedia_defaults_get_rtpbuff_size();
}
bool MediaSessionMgr::defaultsSetAvpfTail(unsigned tail_min, unsigned tail_max){
return (tmedia_defaults_set_avpf_tail(tail_min, tail_max) == 0);
bool MediaSessionMgr::defaultsSetAvpfTail(unsigned tail_min, unsigned tail_max)
{
return (tmedia_defaults_set_avpf_tail(tail_min, tail_max) == 0);
}
bool MediaSessionMgr::defaultsSetAvpfMode(enum tmedia_mode_e mode){
return (tmedia_defaults_set_avpf_mode(mode) == 0);
bool MediaSessionMgr::defaultsSetAvpfMode(enum tmedia_mode_e mode)
{
return (tmedia_defaults_set_avpf_mode(mode) == 0);
}
bool MediaSessionMgr::defaultsSetOpusMaxCaptureRate(uint32_t opus_maxcapturerate){
return (tmedia_defaults_set_opus_maxcapturerate(opus_maxcapturerate) == 0);
bool MediaSessionMgr::defaultsSetOpusMaxCaptureRate(uint32_t opus_maxcapturerate)
{
return (tmedia_defaults_set_opus_maxcapturerate(opus_maxcapturerate) == 0);
}
bool MediaSessionMgr::defaultsSetOpusMaxPlaybackRate(uint32_t opus_maxplaybackrate){
return (tmedia_defaults_set_opus_maxplaybackrate(opus_maxplaybackrate) == 0);
bool MediaSessionMgr::defaultsSetOpusMaxPlaybackRate(uint32_t opus_maxplaybackrate)
{
return (tmedia_defaults_set_opus_maxplaybackrate(opus_maxplaybackrate) == 0);
}
bool MediaSessionMgr::defaultsSetMaxFds(int32_t max_fds) {
return (tmedia_defaults_set_max_fds(max_fds) == 0);
bool MediaSessionMgr::defaultsSetMaxFds(int32_t max_fds)
{
return (tmedia_defaults_set_max_fds(max_fds) == 0);
}

View File

@ -28,142 +28,219 @@
#include "Common.h"
class ProxyPlugin;
class MediaSessionMgr;
class TINYWRAP_API QoS
{
friend class MediaSessionMgr;
public:
#if !defined(SWIG)
QoS(float qavg, float q1 = -1.f, float q2 = -1.f, float q3 = -1.f, float q4 = -1.f, float q5 = -1.f);
#endif
virtual ~QoS();
float getQavg() {
return m_Qqvg;
}
float getQ1() {
return m_Qn[0];
}
float getQ2() {
return m_Qn[1];
}
float getQ3() {
return m_Qn[2];
}
float getQ4() {
return m_Qn[3];
}
float getQ5() {
return m_Qn[4];
}
unsigned getVideoInWidth() {
return m_VideoInWidth;
}
unsigned getVideoOutWidth() {
return m_VideoOutWidth;
}
unsigned getVideoInHeight() {
return m_VideoInHeight;
}
unsigned getVideoOutHeight() {
return m_VideoOutHeight;
}
unsigned getBandwidthDownKbps() {
return m_BandwidthDownKbps;
}
unsigned getBandwidthUpKbps() {
return m_BandwidthUpKbps;
}
unsigned getVideoInAvgFps() {
return m_VideoInAvgFps;
}
unsigned getVideoDecAvgTime() { // In millis
return m_VideoDecAvgTime;
}
unsigned getVideoEncAvgTime() { // In millis
return m_VideoEncAvgTime;
}
private:
float m_Qqvg;
float m_Qn[5];
unsigned m_VideoInWidth;
unsigned m_VideoOutWidth;
unsigned m_VideoInHeight;
unsigned m_VideoOutHeight;
unsigned m_BandwidthDownKbps;
unsigned m_BandwidthUpKbps;
unsigned m_VideoInAvgFps;
unsigned m_VideoDecAvgTime;
unsigned m_VideoEncAvgTime;
};
class TINYWRAP_API Codec
{
public:
#if !defined(SWIG)
Codec(const struct tmedia_codec_s* pWrappedCodec);
Codec(const struct tmedia_codec_s* pWrappedCodec);
#endif
virtual ~Codec();
virtual ~Codec();
public:
#if !defined(SWIG)
const struct tmedia_codec_s* getWrappedCodec(){ return m_pWrappedCodec; }
inline bool isOpened(){ return (m_pWrappedCodec && (m_pWrappedCodec->opened == tsk_true)); }
const struct tmedia_codec_s* getWrappedCodec() {
return m_pWrappedCodec;
}
inline bool isOpened() {
return (m_pWrappedCodec && (m_pWrappedCodec->opened == tsk_true));
}
#endif
twrap_media_type_t getMediaType();
const char* getName();
const char* getDescription();
const char* getNegFormat();
int getAudioSamplingRate();
int getAudioChannels();
int getAudioPTime();
twrap_media_type_t getMediaType();
const char* getName();
const char* getDescription();
const char* getNegFormat();
int getAudioSamplingRate();
int getAudioChannels();
int getAudioPTime();
private:
struct tmedia_codec_s* m_pWrappedCodec;
struct tmedia_codec_s* m_pWrappedCodec;
};
class TINYWRAP_API MediaSessionMgr
{
public:
#if !defined(SWIG)
MediaSessionMgr(tmedia_session_mgr_t* pWrappedMgr);
MediaSessionMgr(tmedia_session_mgr_t* pWrappedMgr);
#endif
virtual ~MediaSessionMgr();
virtual ~MediaSessionMgr();
public:
bool sessionSetInt32(twrap_media_type_t media, const char* key, int32_t value);
int32_t sessionGetInt32(twrap_media_type_t media, const char* key);
bool sessionSetInt32(twrap_media_type_t media, const char* key, int32_t value);
int32_t sessionGetInt32(twrap_media_type_t media, const char* key);
QoS* sessionGetQoS(twrap_media_type_t media);
bool consumerSetInt32(twrap_media_type_t media, const char* key, int32_t value);
bool consumerSetInt64(twrap_media_type_t media, const char* key, int64_t value);
bool consumerSetInt32(twrap_media_type_t media, const char* key, int32_t value);
bool consumerSetInt64(twrap_media_type_t media, const char* key, int64_t value);
bool producerSetInt32(twrap_media_type_t media, const char* key, int32_t value);
bool producerSetInt64(twrap_media_type_t media, const char* key, int64_t value);
Codec* producerGetCodec(twrap_media_type_t media);
bool producerSetInt32(twrap_media_type_t media, const char* key, int32_t value);
bool producerSetInt64(twrap_media_type_t media, const char* key, int64_t value);
Codec* producerGetCodec(twrap_media_type_t media);
#if !defined(SWIG)
const ProxyPlugin* findProxyPlugin(twrap_media_type_t media, bool consumer)const;
const ProxyPlugin* findProxyPlugin(twrap_media_type_t media, bool consumer)const;
#endif
const ProxyPlugin* findProxyPluginConsumer(twrap_media_type_t media)const{
return this->findProxyPlugin(media, true);
}
const ProxyPlugin* findProxyPluginProducer(twrap_media_type_t media)const{
return this->findProxyPlugin(media, false);
}
const ProxyPlugin* findProxyPluginConsumer(twrap_media_type_t media)const {
return this->findProxyPlugin(media, true);
}
const ProxyPlugin* findProxyPluginProducer(twrap_media_type_t media)const {
return this->findProxyPlugin(media, false);
}
static unsigned int registerAudioPluginFromFile(const char* path);
static unsigned int registerAudioPluginFromFile(const char* path);
uint64_t getSessionId(twrap_media_type_t media)const;
uint64_t getSessionId(twrap_media_type_t media)const;
#if !defined(SWIG)
inline const tmedia_session_mgr_t* getWrappedMgr()const { return m_pWrappedMgr; }
inline const tmedia_session_mgr_t* getWrappedMgr()const {
return m_pWrappedMgr;
}
#endif
// Defaults
static bool defaultsSetProfile(tmedia_profile_t profile);
static tmedia_profile_t defaultsGetProfile();
static bool defaultsSetBandwidthLevel(tmedia_bandwidth_level_t bl); // @deprecated
static tmedia_bandwidth_level_t defaultsGetBandwidthLevel(); // @deprecated
static bool defaultsSetCongestionCtrlEnabled(bool enabled);
static bool defaultsSetVideoMotionRank(int32_t video_motion_rank);
static bool defaultsSetVideoFps(int32_t video_fps);
static bool defaultsSetBandwidthVideoUploadMax(int32_t bw_video_up_max_kbps);
static bool defaultsSetBandwidthVideoDownloadMax(int32_t bw_video_down_max_kbps);
static bool defaultsSetPrefVideoSize(tmedia_pref_video_size_t pref_video_size);
static bool defaultsSetJbMargin(uint32_t jb_margin_ms);
static bool defaultsSetJbMaxLateRate(uint32_t jb_late_rate_percent);
static bool defaultsSetEchoTail(uint32_t echo_tail);
static uint32_t defaultsGetEchoTail();
static bool defaultsSetEchoSkew(uint32_t echo_skew);
static bool defaultsSetEchoSuppEnabled(bool echo_supp_enabled);
static bool defaultsGetEchoSuppEnabled();
static bool defaultsSetAgcEnabled(bool agc_enabled);
static bool defaultsGetAgcEnabled();
static bool defaultsSetAgcLevel(float agc_level);
static float defaultsGetAgcLevel();
static bool defaultsSetVadEnabled(bool vad_enabled);
static bool defaultsGetGetVadEnabled();
static bool defaultsSetNoiseSuppEnabled(bool noise_supp_enabled);
static bool defaultsGetNoiseSuppEnabled();
static bool defaultsSetNoiseSuppLevel(int32_t noise_supp_level);
static int32_t defaultsGetNoiseSuppLevel();
static bool defaultsSet100relEnabled(bool _100rel_enabled);
static bool defaultsGet100relEnabled();
static bool defaultsSetScreenSize(int32_t sx, int32_t sy);
static bool defaultsSetAudioGain(int32_t producer_gain, int32_t consumer_gain);
static bool defaultsSetAudioPtime(int32_t ptime);
static bool defaultsSetAudioChannels(int32_t channel_playback, int32_t channel_record);
static bool defaultsSetRtpPortRange(uint16_t range_start, uint16_t range_stop);
static bool defaultsSetRtpSymetricEnabled(bool enabled);
static bool defaultsSetMediaType(twrap_media_type_t media_type);
static bool defaultsSetVolume(int32_t volume);
static int32_t defaultsGetVolume();
static bool defaultsSetInviteSessionTimers(int32_t timeout, const char* refresher);
static bool defaultsSetSRtpMode(tmedia_srtp_mode_t mode);
static tmedia_srtp_mode_t defaultsGetSRtpMode();
static bool defaultsSetSRtpType(tmedia_srtp_type_t srtp_type);
static tmedia_srtp_type_t defaultsGetSRtpType();
static bool defaultsSetRtcpEnabled(bool enabled);
static bool defaultsGetRtcpEnabled();
static bool defaultsSetRtcpMuxEnabled(bool enabled);
static bool defaultsGetRtcpMuxEnabled();
static bool defaultsSetStunEnabled(bool stun_enabled);
static bool defaultsSetIceStunEnabled(bool icestun_enabled);
static bool defaultsSetIceTurnEnabled(bool iceturn_enabled);
static bool defaultsSetStunServer(const char* server_ip, uint16_t server_port);
static bool defaultsSetStunCred(const char* username, const char* password);
static bool defaultsSetIceEnabled(bool ice_enabled);
static bool defaultsSetByPassEncoding(bool enabled);
static bool defaultsGetByPassEncoding();
static bool defaultsSetByPassDecoding(bool enabled);
static bool defaultsGetByPassDecoding();
static bool defaultsSetVideoJbEnabled(bool enabled);
static bool defaultsGetVideoJbEnabled();
static bool defaultsSetVideoZeroArtifactsEnabled(bool enabled);
static bool defaultsGetVideoZeroArtifactsEnabled();
static bool defaultsSetRtpBuffSize(unsigned buffSize);
static unsigned defaultsGetRtpBuffSize();
static bool defaultsSetAvpfTail(unsigned tail_min, unsigned tail_max);
static bool defaultsSetAvpfMode(enum tmedia_mode_e mode);
static bool defaultsSetOpusMaxCaptureRate(uint32_t opus_maxcapturerate);
static bool defaultsSetOpusMaxPlaybackRate(uint32_t opus_maxplaybackrate);
static bool defaultsSetMaxFds(int32_t max_fds);
// Defaults
static bool defaultsSetProfile(tmedia_profile_t profile);
static tmedia_profile_t defaultsGetProfile();
static bool defaultsSetBandwidthLevel(tmedia_bandwidth_level_t bl); // @deprecated
static tmedia_bandwidth_level_t defaultsGetBandwidthLevel(); // @deprecated
static bool defaultsSetCongestionCtrlEnabled(bool enabled);
static bool defaultsSetVideoMotionRank(int32_t video_motion_rank);
static bool defaultsSetVideoFps(int32_t video_fps);
static bool defaultsSetBandwidthVideoUploadMax(int32_t bw_video_up_max_kbps);
static bool defaultsSetBandwidthVideoDownloadMax(int32_t bw_video_down_max_kbps);
static bool defaultsSetPrefVideoSize(tmedia_pref_video_size_t pref_video_size);
static bool defaultsSetPrefVideoSizeOutRange(tmedia_pref_video_size_t min, tmedia_pref_video_size_t max);
static bool defaultsSetAdaptativeVideoSizeOutEnabled(bool enabled);
static bool defaultsSetJbMargin(uint32_t jb_margin_ms);
static bool defaultsSetJbMaxLateRate(uint32_t jb_late_rate_percent);
static bool defaultsSetEchoTail(uint32_t echo_tail);
static uint32_t defaultsGetEchoTail();
static bool defaultsSetEchoSkew(uint32_t echo_skew);
static bool defaultsSetEchoSuppEnabled(bool echo_supp_enabled);
static bool defaultsGetEchoSuppEnabled();
static bool defaultsSetAgcEnabled(bool agc_enabled);
static bool defaultsGetAgcEnabled();
static bool defaultsSetAgcLevel(float agc_level);
static float defaultsGetAgcLevel();
static bool defaultsSetVadEnabled(bool vad_enabled);
static bool defaultsGetGetVadEnabled();
static bool defaultsSetNoiseSuppEnabled(bool noise_supp_enabled);
static bool defaultsGetNoiseSuppEnabled();
static bool defaultsSetNoiseSuppLevel(int32_t noise_supp_level);
static int32_t defaultsGetNoiseSuppLevel();
static bool defaultsSet100relEnabled(bool _100rel_enabled);
static bool defaultsGet100relEnabled();
static bool defaultsSetScreenSize(int32_t sx, int32_t sy);
static bool defaultsSetAudioGain(int32_t producer_gain, int32_t consumer_gain);
static bool defaultsSetAudioPtime(int32_t ptime);
static bool defaultsSetAudioChannels(int32_t channel_playback, int32_t channel_record);
static bool defaultsSetRtpPortRange(uint16_t range_start, uint16_t range_stop);
static bool defaultsSetRtpSymetricEnabled(bool enabled);
static bool defaultsSetMediaType(twrap_media_type_t media_type);
static bool defaultsSetVolume(int32_t volume);
static int32_t defaultsGetVolume();
static bool defaultsSetInviteSessionTimers(int32_t timeout, const char* refresher);
static bool defaultsSetSRtpMode(tmedia_srtp_mode_t mode);
static tmedia_srtp_mode_t defaultsGetSRtpMode();
static bool defaultsSetSRtpType(tmedia_srtp_type_t srtp_type);
static tmedia_srtp_type_t defaultsGetSRtpType();
static bool defaultsSetRtcpEnabled(bool enabled);
static bool defaultsGetRtcpEnabled();
static bool defaultsSetRtcpMuxEnabled(bool enabled);
static bool defaultsGetRtcpMuxEnabled();
static bool defaultsSetStunEnabled(bool stun_enabled);
static bool defaultsSetIceStunEnabled(bool icestun_enabled);
static bool defaultsSetIceTurnEnabled(bool iceturn_enabled);
static bool defaultsSetStunServer(const char* server_ip, uint16_t server_port);
static bool defaultsSetStunCred(const char* username, const char* password);
static bool defaultsSetIceEnabled(bool ice_enabled);
static bool defaultsSetByPassEncoding(bool enabled);
static bool defaultsGetByPassEncoding();
static bool defaultsSetByPassDecoding(bool enabled);
static bool defaultsGetByPassDecoding();
static bool defaultsSetVideoJbEnabled(bool enabled);
static bool defaultsGetVideoJbEnabled();
static bool defaultsSetVideoZeroArtifactsEnabled(bool enabled);
static bool defaultsGetVideoZeroArtifactsEnabled();
static bool defaultsSetRtpBuffSize(unsigned buffSize);
static unsigned defaultsGetRtpBuffSize();
static bool defaultsSetAvpfTail(unsigned tail_min, unsigned tail_max);
static bool defaultsSetAvpfMode(enum tmedia_mode_e mode);
static bool defaultsSetOpusMaxCaptureRate(uint32_t opus_maxcapturerate);
static bool defaultsSetOpusMaxPlaybackRate(uint32_t opus_maxplaybackrate);
static bool defaultsSetMaxFds(int32_t max_fds);
private:
tmedia_session_mgr_t* m_pWrappedMgr;
tmedia_session_mgr_t* m_pWrappedMgr;
};
#endif /* TINYWRAP_MEDIA_SESSIONMGR_H */

View File

@ -26,191 +26,223 @@
/* ======================== MsrpMessage ========================*/
MsrpMessage::MsrpMessage()
:m_pMessage(tsk_null)
:m_pMessage(tsk_null)
{
}
MsrpMessage::MsrpMessage(tmsrp_message_t *_message)
{
m_pMessage = (tmsrp_message_t *)tsk_object_ref(_message);
m_pMessage = (tmsrp_message_t *)tsk_object_ref(_message);
}
MsrpMessage::~MsrpMessage()
{
TSK_OBJECT_SAFE_FREE(m_pMessage);
TSK_OBJECT_SAFE_FREE(m_pMessage);
}
bool MsrpMessage::isRequest()
{
return (m_pMessage->type == tmsrp_request);
return (m_pMessage->type == tmsrp_request);
}
short MsrpMessage::getCode()
{
return TMSRP_RESPONSE_CODE(m_pMessage);
return TMSRP_RESPONSE_CODE(m_pMessage);
}
const char* MsrpMessage::getPhrase()
{
return TMSRP_RESPONSE_PHRASE(m_pMessage);
return TMSRP_RESPONSE_PHRASE(m_pMessage);
}
tmsrp_request_type_t MsrpMessage::getRequestType()
{
if(TMSRP_MESSAGE_IS_REQUEST(m_pMessage)){
return m_pMessage->line.request.type;
}
return tmsrp_NONE;
if(TMSRP_MESSAGE_IS_REQUEST(m_pMessage)) {
return m_pMessage->line.request.type;
}
return tmsrp_NONE;
}
void MsrpMessage::getByteRange(int64_t* start, int64_t* end, int64_t* total)
{
if(m_pMessage->ByteRange){
*start = m_pMessage->ByteRange->start;
*end = m_pMessage->ByteRange->end;
*total = m_pMessage->ByteRange->total;
}
else{
*start = *end = *total = -1;
}
if(m_pMessage->ByteRange) {
*start = m_pMessage->ByteRange->start;
*end = m_pMessage->ByteRange->end;
*total = m_pMessage->ByteRange->total;
}
else {
*start = *end = *total = -1;
}
}
bool MsrpMessage::isLastChunck()
{
if(TMSRP_MESSAGE_IS_REQUEST(m_pMessage)){
return (m_pMessage->end_line.cflag == '$');
}
else{
if(m_pMessage->ByteRange){
return (m_pMessage->ByteRange->end >= m_pMessage->ByteRange->total);
}
}
return false;
if(TMSRP_MESSAGE_IS_REQUEST(m_pMessage)) {
return (m_pMessage->end_line.cflag == '$');
}
else {
if(m_pMessage->ByteRange) {
return (m_pMessage->ByteRange->end >= m_pMessage->ByteRange->total);
}
}
return false;
}
bool MsrpMessage::isSuccessReport()
{
if(TMSRP_REQUEST_IS_REPORT(m_pMessage)){
if(m_pMessage->Status){
return m_pMessage->Status->code >= 200 && m_pMessage->Status->code <= 299;
}
}
return false;
if(TMSRP_REQUEST_IS_REPORT(m_pMessage)) {
if(m_pMessage->Status) {
return m_pMessage->Status->code >= 200 && m_pMessage->Status->code <= 299;
}
}
return false;
}
bool MsrpMessage::isFirstChunck()
{
return (m_pMessage && m_pMessage->ByteRange->start == 1);
return (m_pMessage && m_pMessage->ByteRange->start == 1);
}
char* MsrpMessage::getMsrpHeaderValue(const char* name)
{
const tmsrp_header_t* header = this->getMsrpHeader(name, 0);
if(header){
return tmsrp_header_tostring(header);
}
return tsk_null;
const tmsrp_header_t* header = this->getMsrpHeader(name, 0);
if(header) {
return tmsrp_header_tostring(header);
}
return tsk_null;
}
char* MsrpMessage::getMsrpHeaderParamValue(const char* name, const char* param)
{
return tsk_null;
return tsk_null;
}
unsigned MsrpMessage::getMsrpContentLength()
{
if(m_pMessage &&
m_pMessage->Content &&
m_pMessage->Content->data &&
m_pMessage->Content->size){
return m_pMessage->Content->size;
}
return 0;
if(m_pMessage &&
m_pMessage->Content &&
m_pMessage->Content->data &&
m_pMessage->Content->size) {
return m_pMessage->Content->size;
}
return 0;
}
unsigned MsrpMessage::getMsrpContent(void* output, unsigned maxsize)
{
unsigned retsize = 0;
if(!output ||
!m_pMessage ||
!m_pMessage->Content ||
!m_pMessage->Content->data ||
!m_pMessage->Content->size){
return 0;
}
unsigned retsize = 0;
if(!output ||
!m_pMessage ||
!m_pMessage->Content ||
!m_pMessage->Content->data ||
!m_pMessage->Content->size) {
return 0;
}
retsize = (m_pMessage->Content->size > maxsize) ? maxsize : m_pMessage->Content->size;
memcpy(output, m_pMessage->Content->data, retsize);
return retsize;
retsize = (m_pMessage->Content->size > maxsize) ? maxsize : m_pMessage->Content->size;
memcpy(output, m_pMessage->Content->data, retsize);
return retsize;
}
const tmsrp_header_t* MsrpMessage::getMsrpHeader(const char* name, unsigned index /*= 0*/)
{
tsk_size_t pos = 0;
const tmsrp_header_t* hdr = tsk_null;
const tsk_list_item_t *item;
tsk_size_t pos = 0;
const tmsrp_header_t* hdr = tsk_null;
const tsk_list_item_t *item;
/* From tmsrp_message_get_headerAt() */
if(!m_pMessage || !name){
return tsk_null;
}
/* From tmsrp_message_get_headerAt() */
if(!m_pMessage || !name) {
return tsk_null;
}
if(tsk_striequals(name, "To-Path")){
if(index == 0){
hdr = (const tmsrp_header_t*)m_pMessage->To;
goto bail;
}else pos++; }
if(tsk_striequals(name, "From-Path")){
if(index == 0){
hdr = (const tmsrp_header_t*)m_pMessage->From;
goto bail;
}else pos++; }
if(tsk_striequals(name, "Message-ID")){
if(index == 0){
hdr = (const tmsrp_header_t*)m_pMessage->MessageID;
goto bail;
}else pos++; }
if(tsk_striequals(name, "Byte-Range")){
if(index == 0){
hdr = (const tmsrp_header_t*)m_pMessage->ByteRange;
goto bail;
}else pos++; }
if(tsk_striequals(name, "Failure-Report")){
if(index == 0){
hdr = (const tmsrp_header_t*)m_pMessage->FailureReport;
goto bail;
}else pos++; }
if(tsk_striequals(name, "Success-Report")){
if(index == 0){
hdr = (const tmsrp_header_t*)m_pMessage->SuccessReport;
goto bail;
}else pos++; }
if(tsk_striequals(name, "Status")){
if(index == 0){
hdr = (const tmsrp_header_t*)m_pMessage->Status;
goto bail;
}else pos++; }
if(tsk_striequals(name, "Content-Type")){
if(index == 0){
hdr = (const tmsrp_header_t*)m_pMessage->ContentType;
goto bail;
}else pos++; }
if(tsk_striequals(name, "To-Path")) {
if(index == 0) {
hdr = (const tmsrp_header_t*)m_pMessage->To;
goto bail;
}
else {
pos++;
}
}
if(tsk_striequals(name, "From-Path")) {
if(index == 0) {
hdr = (const tmsrp_header_t*)m_pMessage->From;
goto bail;
}
else {
pos++;
}
}
if(tsk_striequals(name, "Message-ID")) {
if(index == 0) {
hdr = (const tmsrp_header_t*)m_pMessage->MessageID;
goto bail;
}
else {
pos++;
}
}
if(tsk_striequals(name, "Byte-Range")) {
if(index == 0) {
hdr = (const tmsrp_header_t*)m_pMessage->ByteRange;
goto bail;
}
else {
pos++;
}
}
if(tsk_striequals(name, "Failure-Report")) {
if(index == 0) {
hdr = (const tmsrp_header_t*)m_pMessage->FailureReport;
goto bail;
}
else {
pos++;
}
}
if(tsk_striequals(name, "Success-Report")) {
if(index == 0) {
hdr = (const tmsrp_header_t*)m_pMessage->SuccessReport;
goto bail;
}
else {
pos++;
}
}
if(tsk_striequals(name, "Status")) {
if(index == 0) {
hdr = (const tmsrp_header_t*)m_pMessage->Status;
goto bail;
}
else {
pos++;
}
}
if(tsk_striequals(name, "Content-Type")) {
if(index == 0) {
hdr = (const tmsrp_header_t*)m_pMessage->ContentType;
goto bail;
}
else {
pos++;
}
}
/* All other headers */
tsk_list_foreach(item, m_pMessage->headers){
if(tsk_striequals(tmsrp_header_get_nameex(TMSRP_HEADER(item->data)), name)){
if(pos++ >= index){
hdr = (const tmsrp_header_t*)item->data;
break;
}
}
}
/* All other headers */
tsk_list_foreach(item, m_pMessage->headers) {
if(tsk_striequals(tmsrp_header_get_nameex(TMSRP_HEADER(item->data)), name)) {
if(pos++ >= index) {
hdr = (const tmsrp_header_t*)item->data;
break;
}
}
}
bail:
return hdr;
return hdr;
}
@ -219,41 +251,41 @@ bail:
/* ======================== MsrpEvent ========================*/
MsrpEvent::MsrpEvent(const tmsrp_event_t *_msrpevent)
{
this->_event = _msrpevent;
if(this->_event && this->_event->message){
m_pMessage = new MsrpMessage((tmsrp_message_t *)this->_event->message);
}
else{
m_pMessage = tsk_null;
}
this->_event = _msrpevent;
if(this->_event && this->_event->message) {
m_pMessage = new MsrpMessage((tmsrp_message_t *)this->_event->message);
}
else {
m_pMessage = tsk_null;
}
}
MsrpEvent::~MsrpEvent()
{
if(m_pMessage){
delete m_pMessage;
}
if(m_pMessage) {
delete m_pMessage;
}
}
tmsrp_event_type_t MsrpEvent::getType()
{
if(this->_event){
return this->_event->type;
}
return tmsrp_event_type_none;
if(this->_event) {
return this->_event->type;
}
return tmsrp_event_type_none;
}
const MsrpSession* MsrpEvent::getSipSession()
{
if(this->_event && this->_event->callback_data){
return dyn_cast<const MsrpSession*>((const MsrpSession*)this->_event->callback_data);
}
return tsk_null;
if(this->_event && this->_event->callback_data) {
return dyn_cast<const MsrpSession*>((const MsrpSession*)this->_event->callback_data);
}
return tsk_null;
}
const MsrpMessage* MsrpEvent::getMessage() const
{
return m_pMessage;
return m_pMessage;
}
@ -261,23 +293,23 @@ const MsrpMessage* MsrpEvent::getMessage() const
int twrap_msrp_cb(const tmsrp_event_t* _event)
{
const MsrpSession* session = (const MsrpSession*)_event->callback_data;
MsrpCallback* callback;
int ret = -1;
const MsrpSession* session = (const MsrpSession*)_event->callback_data;
MsrpCallback* callback;
int ret = -1;
if(session){
if((callback = session->getCallback())){
MsrpEvent* e = new MsrpEvent(_event);
ret = callback->OnEvent(e);
delete e;
}
else{
return 0;
}
}
else{
TSK_DEBUG_ERROR("Invalid parameter");
}
if(session) {
if((callback = session->getCallback())) {
MsrpEvent* e = new MsrpEvent(_event);
ret = callback->OnEvent(e);
delete e;
}
else {
return 0;
}
}
else {
TSK_DEBUG_ERROR("Invalid parameter");
}
return ret;
return ret;
}

View File

@ -31,62 +31,66 @@ class MsrpSession;
class TINYWRAP_API MsrpMessage
{
public:
MsrpMessage();
MsrpMessage();
#if !defined(SWIG)
MsrpMessage(tmsrp_message_t *message);
MsrpMessage(tmsrp_message_t *message);
#endif
virtual ~MsrpMessage();
virtual ~MsrpMessage();
bool isRequest();
short getCode();
const char* getPhrase();
tmsrp_request_type_t getRequestType();
bool isRequest();
short getCode();
const char* getPhrase();
tmsrp_request_type_t getRequestType();
#if defined(SWIG)
void getByteRange(int64_t* OUTPUT, int64_t* OUTPUT, int64_t* OUTPUT);
void getByteRange(int64_t* OUTPUT, int64_t* OUTPUT, int64_t* OUTPUT);
#else
void getByteRange(int64_t* start, int64_t* end, int64_t* total);
void getByteRange(int64_t* start, int64_t* end, int64_t* total);
#endif
bool isLastChunck();
bool isFirstChunck();
bool isSuccessReport();
char* getMsrpHeaderValue(const char* name);
char* getMsrpHeaderParamValue(const char* name, const char* param);
unsigned getMsrpContentLength();
unsigned getMsrpContent(void* output, unsigned maxsize);
bool isLastChunck();
bool isFirstChunck();
bool isSuccessReport();
char* getMsrpHeaderValue(const char* name);
char* getMsrpHeaderParamValue(const char* name, const char* param);
unsigned getMsrpContentLength();
unsigned getMsrpContent(void* output, unsigned maxsize);
#if !defined(SWIG)
const tmsrp_message_t* getWrappedMsrpMessage() { return m_pMessage; }
const tmsrp_message_t* getWrappedMsrpMessage() {
return m_pMessage;
}
#endif
private:
const tmsrp_header_t* getMsrpHeader(const char* name, unsigned index = 0);
const tmsrp_header_t* getMsrpHeader(const char* name, unsigned index = 0);
private:
tmsrp_message_t *m_pMessage;
tmsrp_message_t *m_pMessage;
};
class TINYWRAP_API MsrpEvent
{
public:
#if !defined(SWIG)
MsrpEvent(const tmsrp_event_t *_event);
MsrpEvent(const tmsrp_event_t *_event);
#endif
virtual ~MsrpEvent();
virtual ~MsrpEvent();
tmsrp_event_type_t getType();
const MsrpSession* getSipSession();
const MsrpMessage* getMessage() const;
tmsrp_event_type_t getType();
const MsrpSession* getSipSession();
const MsrpMessage* getMessage() const;
protected:
const tmsrp_event_t *_event;
MsrpMessage* m_pMessage;
const tmsrp_event_t *_event;
MsrpMessage* m_pMessage;
};
class TINYWRAP_API MsrpCallback
{
public:
MsrpCallback() { }
virtual ~MsrpCallback() {}
virtual int OnEvent(const MsrpEvent* e) { return -1; }
MsrpCallback() { }
virtual ~MsrpCallback() {}
virtual int OnEvent(const MsrpEvent* e) {
return -1;
}
};

File diff suppressed because it is too large Load Diff

View File

@ -41,20 +41,34 @@ class AudioResampler;
class ProxyAudioConsumerCallback
{
public:
ProxyAudioConsumerCallback() { }
virtual ~ProxyAudioConsumerCallback(){ }
ProxyAudioConsumerCallback() { }
virtual ~ProxyAudioConsumerCallback() { }
virtual int prepare(int ptime, int rate, int channels) { return -1; }
virtual int start() { return -1; }
virtual int pause() { return -1; }
virtual int stop() { return -1; }
virtual int prepare(int ptime, int rate, int channels) {
return -1;
}
virtual int start() {
return -1;
}
virtual int pause() {
return -1;
}
virtual int stop() {
return -1;
}
#if !defined(SWIG)
// whether the audio buffer have to be stored in the JB then pulled using "ProxyAudioConsumer::pull()" or not
virtual bool putInJitterBuffer(){ return true; }
// whether we are using the "telepresence" system (PIVOT audio settings must not be changed)
virtual bool isPivotSettings() { return false; }
// only called if "putInJitterBuffer()" return "true"
virtual int consume(const void* buffer_ptr, tsk_size_t buffer_size, const tsk_object_t* proto_hdr){ return -1; }
// whether the audio buffer have to be stored in the JB then pulled using "ProxyAudioConsumer::pull()" or not
virtual bool putInJitterBuffer() {
return true;
}
// whether we are using the "telepresence" system (PIVOT audio settings must not be changed)
virtual bool isPivotSettings() {
return false;
}
// only called if "putInJitterBuffer()" return "true"
virtual int consume(const void* buffer_ptr, tsk_size_t buffer_size, const tsk_object_t* proto_hdr) {
return -1;
}
#endif
};
@ -63,43 +77,47 @@ class ProxyAudioConsumer : public ProxyPlugin
{
public:
#if !defined(SWIG)
ProxyAudioConsumer(struct twrap_consumer_proxy_audio_s* pConsumer);
ProxyAudioConsumer(struct twrap_consumer_proxy_audio_s* pConsumer);
#endif
virtual ~ProxyAudioConsumer();
bool setActualSndCardPlaybackParams(int nPtime, int nRate, int nChannels);
bool queryForResampler(uint16_t nInFreq, uint16_t nOutFreq, uint16_t nFrameDuration, uint16_t nChannels, uint16_t nResamplerQuality);
bool setPullBuffer(const void* pPullBufferPtr, unsigned nPullBufferSize);
unsigned pull(void* pOutput=tsk_null, unsigned nSize=0);
bool setGain(unsigned nGain);
unsigned getGain();
bool reset();
void setCallback(ProxyAudioConsumerCallback* pCallback) { m_pCallback = pCallback; }
virtual ~ProxyAudioConsumer();
bool setActualSndCardPlaybackParams(int nPtime, int nRate, int nChannels);
bool queryForResampler(uint16_t nInFreq, uint16_t nOutFreq, uint16_t nFrameDuration, uint16_t nChannels, uint16_t nResamplerQuality);
bool setPullBuffer(const void* pPullBufferPtr, unsigned nPullBufferSize);
unsigned pull(void* pOutput=tsk_null, unsigned nSize=0);
bool setGain(unsigned nGain);
unsigned getGain();
bool reset();
void setCallback(ProxyAudioConsumerCallback* pCallback) {
m_pCallback = pCallback;
}
#if !defined(SWIG)
inline ProxyAudioConsumerCallback* getCallback()const { return m_pCallback; }
virtual inline bool isWrapping(tsk_object_t* pWrappedPlugin){
return m_pWrappedPlugin == pWrappedPlugin;
}
inline ProxyAudioConsumerCallback* getCallback()const {
return m_pCallback;
}
virtual inline bool isWrapping(tsk_object_t* pWrappedPlugin) {
return m_pWrappedPlugin == pWrappedPlugin;
}
#endif
virtual inline uint64_t getMediaSessionId(){
return m_pWrappedPlugin ? TMEDIA_CONSUMER(m_pWrappedPlugin)->session_id : 0;
}
virtual inline uint64_t getMediaSessionId() {
return m_pWrappedPlugin ? TMEDIA_CONSUMER(m_pWrappedPlugin)->session_id : 0;
}
public:
static bool registerPlugin();
static bool registerPlugin();
private:
struct twrap_consumer_proxy_audio_s* m_pWrappedPlugin;
ProxyAudioConsumerCallback* m_pCallback;
struct{
const void* pPullBufferPtr;
unsigned nPullBufferSize;
} m_PullBuffer;
struct twrap_consumer_proxy_audio_s* m_pWrappedPlugin;
ProxyAudioConsumerCallback* m_pCallback;
struct {
const void* pPullBufferPtr;
unsigned nPullBufferSize;
} m_PullBuffer;
struct{
void* pInBufferPtr;
unsigned nInBufferSizeInByte;
AudioResampler* pResampler;
} m_Resampler;
struct {
void* pInBufferPtr;
unsigned nInBufferSizeInByte;
AudioResampler* pResampler;
} m_Resampler;
};
class ProxyVideoFrame;
@ -108,16 +126,28 @@ class ProxyVideoFrame;
class ProxyVideoConsumerCallback
{
public:
ProxyVideoConsumerCallback(){}
virtual ~ProxyVideoConsumerCallback() {}
ProxyVideoConsumerCallback() {}
virtual ~ProxyVideoConsumerCallback() {}
virtual int prepare(int nWidth, int nHeight, int nFps) { return -1; }
virtual int consume(const ProxyVideoFrame* frame) { return -1; }
// only called if a buffer is registered using setPullBuffer(). Otherwise, consume() will be called
virtual int bufferCopied(unsigned nCopiedSize, unsigned nAvailableSize) { return -1; }
virtual int start() { return -1; }
virtual int pause() { return -1; }
virtual int stop() { return -1; }
virtual int prepare(int nWidth, int nHeight, int nFps) {
return -1;
}
virtual int consume(const ProxyVideoFrame* frame) {
return -1;
}
// only called if a buffer is registered using setPullBuffer(). Otherwise, consume() will be called
virtual int bufferCopied(unsigned nCopiedSize, unsigned nAvailableSize) {
return -1;
}
virtual int start() {
return -1;
}
virtual int pause() {
return -1;
}
virtual int stop() {
return -1;
}
};
/* ============ ProxyVideoConsumer Class ================= */
@ -125,58 +155,72 @@ class ProxyVideoConsumer : public ProxyPlugin
{
public:
#if !defined(SWIG)
ProxyVideoConsumer(tmedia_chroma_t eChroma, struct twrap_consumer_proxy_video_s* pConsumer);
ProxyVideoConsumer(tmedia_chroma_t eChroma, struct twrap_consumer_proxy_video_s* pConsumer);
#endif
virtual ~ProxyVideoConsumer();
virtual ~ProxyVideoConsumer();
bool setDisplaySize(unsigned nWidth, unsigned nHeight);
unsigned getDisplayWidth();
unsigned getDisplayHeight();
bool setDisplaySize(unsigned nWidth, unsigned nHeight);
unsigned getDisplayWidth();
unsigned getDisplayHeight();
unsigned getDecodedWidth();
unsigned getDecodedHeight();
unsigned getDecodedHeight();
void setCallback(ProxyVideoConsumerCallback* pCallback) { m_pCallback = pCallback; }
bool setAutoResizeDisplay(bool bAutoResizeDisplay);
bool getAutoResizeDisplay()const;
bool setConsumeBuffer(const void* pConsumeBufferPtr, unsigned nConsumeBufferSize);
unsigned pull(void* pOutput, unsigned nSize);
bool reset();
void setCallback(ProxyVideoConsumerCallback* pCallback) {
m_pCallback = pCallback;
}
bool setAutoResizeDisplay(bool bAutoResizeDisplay);
bool getAutoResizeDisplay()const;
bool setConsumeBuffer(const void* pConsumeBufferPtr, unsigned nConsumeBufferSize);
unsigned pull(void* pOutput, unsigned nSize);
bool reset();
#if !defined(SWIG)
bool hasConsumeBuffer()const { return m_ConsumeBuffer.pConsumeBufferPtr && m_ConsumeBuffer.nConsumeBufferSize; }
unsigned copyBuffer(const void* pBuffer, unsigned nSize)const;
inline ProxyVideoConsumerCallback* getCallback()const { return m_pCallback; }
virtual inline bool isWrapping(tsk_object_t* wrapped_plugin){
return m_pWrappedPlugin == wrapped_plugin;
}
bool hasConsumeBuffer()const {
return m_ConsumeBuffer.pConsumeBufferPtr && m_ConsumeBuffer.nConsumeBufferSize;
}
unsigned copyBuffer(const void* pBuffer, unsigned nSize)const;
inline ProxyVideoConsumerCallback* getCallback()const {
return m_pCallback;
}
virtual inline bool isWrapping(tsk_object_t* wrapped_plugin) {
return m_pWrappedPlugin == wrapped_plugin;
}
#endif
virtual inline uint64_t getMediaSessionId(){
return m_pWrappedPlugin ? TMEDIA_CONSUMER(m_pWrappedPlugin)->session_id : 0;
}
virtual inline uint64_t getMediaSessionId() {
return m_pWrappedPlugin ? TMEDIA_CONSUMER(m_pWrappedPlugin)->session_id : 0;
}
public:
static bool registerPlugin();
static void setDefaultChroma(tmedia_chroma_t eChroma){ s_eDefaultChroma = eChroma; }
static void setDefaultAutoResizeDisplay(bool bAutoResizeDisplay){ s_bAutoResizeDisplay = bAutoResizeDisplay;}
static bool registerPlugin();
static void setDefaultChroma(tmedia_chroma_t eChroma) {
s_eDefaultChroma = eChroma;
}
static void setDefaultAutoResizeDisplay(bool bAutoResizeDisplay) {
s_bAutoResizeDisplay = bAutoResizeDisplay;
}
#if !defined(SWIG)
tmedia_chroma_t getChroma()const;
static tmedia_chroma_t getDefaultChroma() { return s_eDefaultChroma; }
static bool getDefaultAutoResizeDisplay() { return s_bAutoResizeDisplay; }
tmedia_chroma_t getChroma()const;
static tmedia_chroma_t getDefaultChroma() {
return s_eDefaultChroma;
}
static bool getDefaultAutoResizeDisplay() {
return s_bAutoResizeDisplay;
}
#endif
private:
struct twrap_consumer_proxy_video_s* m_pWrappedPlugin;
tmedia_chroma_t m_eChroma;
ProxyVideoConsumerCallback* m_pCallback;
struct{
const void* pConsumeBufferPtr;
unsigned nConsumeBufferSize;
} m_ConsumeBuffer;
bool m_bAutoResizeDisplay;
struct twrap_consumer_proxy_video_s* m_pWrappedPlugin;
tmedia_chroma_t m_eChroma;
ProxyVideoConsumerCallback* m_pCallback;
struct {
const void* pConsumeBufferPtr;
unsigned nConsumeBufferSize;
} m_ConsumeBuffer;
bool m_bAutoResizeDisplay;
static tmedia_chroma_t s_eDefaultChroma;
static bool s_bAutoResizeDisplay;
static tmedia_chroma_t s_eDefaultChroma;
static bool s_bAutoResizeDisplay;
};
/* ============ ProxyVideoFrame Class ================= */
@ -184,27 +228,37 @@ class ProxyVideoFrame
{
public:
#if !defined(SWIG)
ProxyVideoFrame(const void* pBufferPtr, unsigned nBufferSize, unsigned nFrameWidth, unsigned nFrameHeight, const tsk_object_t* pProtoHdr);
ProxyVideoFrame(const void* pBufferPtr, unsigned nBufferSize, unsigned nFrameWidth, unsigned nFrameHeight, const tsk_object_t* pProtoHdr);
#endif
virtual ~ProxyVideoFrame();
virtual ~ProxyVideoFrame();
public: /* For Java/C# applications */
unsigned getSize();
unsigned getContent(void* pOutput, unsigned nMaxsize);
inline unsigned getFrameWidth()const{ return m_nFrameWidth; }
inline unsigned getFrameHeight()const{ return m_nFrameHeight; }
unsigned getSize();
unsigned getContent(void* pOutput, unsigned nMaxsize);
inline unsigned getFrameWidth()const {
return m_nFrameWidth;
}
inline unsigned getFrameHeight()const {
return m_nFrameHeight;
}
#if !defined(SWIG) /* For C/C++ applications */
public:
inline unsigned getBufferSize()const{ return m_nBufferSize; }
inline const void* getBufferPtr()const{ return m_pBufferPtr; }
inline const tsk_object_t* getProtoHdr()const{ return m_pProtoHdr; }
inline unsigned getBufferSize()const {
return m_nBufferSize;
}
inline const void* getBufferPtr()const {
return m_pBufferPtr;
}
inline const tsk_object_t* getProtoHdr()const {
return m_pProtoHdr;
}
#endif
private:
const void* m_pBufferPtr;
unsigned m_nBufferSize, m_nFrameWidth, m_nFrameHeight;
const tsk_object_t* m_pProtoHdr;
const void* m_pBufferPtr;
unsigned m_nBufferSize, m_nFrameWidth, m_nFrameHeight;
const tsk_object_t* m_pProtoHdr;
};

View File

@ -27,10 +27,9 @@
//
// "twrap_proxy_plugin_t" Declarations
//
typedef struct twrap_proxy_plugin_s
{
TSK_DECLARE_OBJECT;
ProxyPlugin* plugin;
typedef struct twrap_proxy_plugin_s {
TSK_DECLARE_OBJECT;
ProxyPlugin* plugin;
}
twrap_proxy_plugin_t;
#define TWRAP_PROXY_PLUGIN(self) ((twrap_proxy_plugin_t*)(self))
@ -45,191 +44,191 @@ ProxyPluginMgr* ProxyPluginMgr::instance = tsk_null;
static uint64_t __uniqueId = 0;
ProxyPluginMgr::ProxyPluginMgr(ProxyPluginMgrCallback* _callback)
:callback(_callback)
:callback(_callback)
{
this->plugins = tsk_list_create();
if(!this->callback){
TSK_DEBUG_WARN("Callback function is Null => You will have big problems as we won't check it before call");
}
this->plugins = tsk_list_create();
if(!this->callback) {
TSK_DEBUG_WARN("Callback function is Null => You will have big problems as we won't check it before call");
}
}
ProxyPluginMgr::~ProxyPluginMgr()
{
if(this == ProxyPluginMgr::instance){
ProxyPluginMgr::instance = tsk_null;
}
TSK_OBJECT_SAFE_FREE(this->plugins);
if(this == ProxyPluginMgr::instance) {
ProxyPluginMgr::instance = tsk_null;
}
TSK_OBJECT_SAFE_FREE(this->plugins);
}
ProxyPluginMgr* ProxyPluginMgr::createInstance(ProxyPluginMgrCallback* pCallback)
{
if(!ProxyPluginMgr::instance){
ProxyPluginMgr::instance = new ProxyPluginMgr(pCallback);
}
else{
TSK_DEBUG_WARN("Plugin instance already exist");
ProxyPluginMgr::instance->callback = pCallback;
}
return ProxyPluginMgr::instance;
if(!ProxyPluginMgr::instance) {
ProxyPluginMgr::instance = new ProxyPluginMgr(pCallback);
}
else {
TSK_DEBUG_WARN("Plugin instance already exist");
ProxyPluginMgr::instance->callback = pCallback;
}
return ProxyPluginMgr::instance;
}
void ProxyPluginMgr::destroyInstance(ProxyPluginMgr** ppInstance)
{
if(ppInstance && *ppInstance){
bool bMatch = ProxyPluginMgr::instance && (*ppInstance == ProxyPluginMgr::instance);
delete *ppInstance, *ppInstance = tsk_null;
if(bMatch){
ProxyPluginMgr::instance = tsk_null;
}
}
if(ppInstance && *ppInstance) {
bool bMatch = ProxyPluginMgr::instance && (*ppInstance == ProxyPluginMgr::instance);
delete *ppInstance, *ppInstance = tsk_null;
if(bMatch) {
ProxyPluginMgr::instance = tsk_null;
}
}
}
ProxyPluginMgr* ProxyPluginMgr::getInstance()
{
if(!ProxyPluginMgr::instance){
TSK_DEBUG_ERROR("No instance of the manager could be found");
}
return ProxyPluginMgr::instance;
if(!ProxyPluginMgr::instance) {
TSK_DEBUG_ERROR("No instance of the manager could be found");
}
return ProxyPluginMgr::instance;
}
uint64_t ProxyPluginMgr::getUniqueId()
{
return ++__uniqueId;
return ++__uniqueId;
}
int ProxyPluginMgr::addPlugin(ProxyPlugin** plugin)
{
twrap_proxy_plugin_t* twrap_plugin;
int ret = -1;
twrap_proxy_plugin_t* twrap_plugin;
int ret = -1;
tsk_list_lock(this->plugins);
tsk_list_lock(this->plugins);
if(!plugin || !*plugin){
TSK_DEBUG_ERROR("Invalid parameter");
goto bail;
}
if(!plugin || !*plugin) {
TSK_DEBUG_ERROR("Invalid parameter");
goto bail;
}
if(tsk_list_find_item_by_pred(this->plugins, pred_find_plugin_by_value, *plugin)){
TSK_DEBUG_ERROR("Plugin already exist");
goto bail;
}
if(tsk_list_find_item_by_pred(this->plugins, pred_find_plugin_by_value, *plugin)) {
TSK_DEBUG_ERROR("Plugin already exist");
goto bail;
}
if((twrap_plugin = twrap_proxy_plugin_create(plugin))){
tsk_list_push_back_data(this->plugins, (void**)&twrap_plugin);
ret = 0;
}
else{
TSK_DEBUG_ERROR("Failed to create plugin");
goto bail;
}
if((twrap_plugin = twrap_proxy_plugin_create(plugin))) {
tsk_list_push_back_data(this->plugins, (void**)&twrap_plugin);
ret = 0;
}
else {
TSK_DEBUG_ERROR("Failed to create plugin");
goto bail;
}
bail:
tsk_list_unlock(this->plugins);
tsk_list_unlock(this->plugins);
return ret;
return ret;
}
int ProxyPluginMgr::removePlugin(ProxyPlugin** plugin)
{
if(!plugin || !*plugin){
TSK_DEBUG_ERROR("Invalid parameter");
return -1;
}
return this->removePlugin((*plugin)->getId());
if(!plugin || !*plugin) {
TSK_DEBUG_ERROR("Invalid parameter");
return -1;
}
return this->removePlugin((*plugin)->getId());
}
const ProxyPlugin* ProxyPluginMgr::findPlugin(uint64_t id)
{
ProxyPlugin* ret = tsk_null;
ProxyPlugin* ret = tsk_null;
tsk_list_item_t* item;
tsk_list_item_t* item;
tsk_list_lock(this->plugins);
tsk_list_foreach(item, this->plugins){
if(TWRAP_PROXY_PLUGIN(item->data)->plugin->getId() == id){
ret = TWRAP_PROXY_PLUGIN(item->data)->plugin;
break;
}
}
tsk_list_unlock(this->plugins);
tsk_list_lock(this->plugins);
tsk_list_foreach(item, this->plugins) {
if(TWRAP_PROXY_PLUGIN(item->data)->plugin->getId() == id) {
ret = TWRAP_PROXY_PLUGIN(item->data)->plugin;
break;
}
}
tsk_list_unlock(this->plugins);
return ret;
return ret;
}
const ProxyPlugin* ProxyPluginMgr::findPlugin(tsk_object_t* wrapped_plugin)
{
ProxyPlugin* ret = tsk_null;
ProxyPlugin* ret = tsk_null;
tsk_list_item_t* item;
tsk_list_item_t* item;
if(!wrapped_plugin){
TSK_DEBUG_ERROR("Invalid parameter");
return tsk_null;
}
if(!wrapped_plugin) {
TSK_DEBUG_ERROR("Invalid parameter");
return tsk_null;
}
tsk_list_lock(this->plugins);
tsk_list_foreach(item, this->plugins){
if(TWRAP_PROXY_PLUGIN(item->data)->plugin->isWrapping(wrapped_plugin)){
ret = TWRAP_PROXY_PLUGIN(item->data)->plugin;
break;
}
}
tsk_list_unlock(this->plugins);
tsk_list_lock(this->plugins);
tsk_list_foreach(item, this->plugins) {
if(TWRAP_PROXY_PLUGIN(item->data)->plugin->isWrapping(wrapped_plugin)) {
ret = TWRAP_PROXY_PLUGIN(item->data)->plugin;
break;
}
}
tsk_list_unlock(this->plugins);
return ret;
return ret;
}
int ProxyPluginMgr::removePlugin(uint64_t id)
{
tsk_list_item_t* item;
tsk_list_item_t* item;
tsk_list_lock(this->plugins);
tsk_list_lock(this->plugins);
tsk_list_foreach(item, this->plugins){
if(TWRAP_PROXY_PLUGIN(item->data)->plugin->getId() == id){
tsk_list_remove_item(this->plugins, item);
break;
}
}
tsk_list_foreach(item, this->plugins) {
if(TWRAP_PROXY_PLUGIN(item->data)->plugin->getId() == id) {
tsk_list_remove_item(this->plugins, item);
break;
}
}
tsk_list_unlock(this->plugins);
return 0;
tsk_list_unlock(this->plugins);
return 0;
}
const ProxyAudioConsumer* ProxyPluginMgr::findAudioConsumer(uint64_t id)
{
const ProxyPlugin* audioConsumer = this->findPlugin(id);
if(audioConsumer && audioConsumer->getType() == twrap_proxy_plugin_audio_consumer){
return dyn_cast<const ProxyAudioConsumer*>(audioConsumer);
}
return tsk_null;
const ProxyPlugin* audioConsumer = this->findPlugin(id);
if(audioConsumer && audioConsumer->getType() == twrap_proxy_plugin_audio_consumer) {
return dyn_cast<const ProxyAudioConsumer*>(audioConsumer);
}
return tsk_null;
}
const ProxyVideoConsumer* ProxyPluginMgr::findVideoConsumer(uint64_t id)
{
const ProxyPlugin* videoConsumer = this->findPlugin(id);
if(videoConsumer && videoConsumer->getType() == twrap_proxy_plugin_video_consumer){
return dyn_cast<const ProxyVideoConsumer*>(videoConsumer);
}
return tsk_null;
const ProxyPlugin* videoConsumer = this->findPlugin(id);
if(videoConsumer && videoConsumer->getType() == twrap_proxy_plugin_video_consumer) {
return dyn_cast<const ProxyVideoConsumer*>(videoConsumer);
}
return tsk_null;
}
const ProxyAudioProducer* ProxyPluginMgr::findAudioProducer(uint64_t id)
{
const ProxyPlugin* audioProducer = this->findPlugin(id);
if(audioProducer && audioProducer->getType() == twrap_proxy_plugin_audio_producer){
return dyn_cast<const ProxyAudioProducer*>(audioProducer);
}
return tsk_null;
const ProxyPlugin* audioProducer = this->findPlugin(id);
if(audioProducer && audioProducer->getType() == twrap_proxy_plugin_audio_producer) {
return dyn_cast<const ProxyAudioProducer*>(audioProducer);
}
return tsk_null;
}
const ProxyVideoProducer* ProxyPluginMgr::findVideoProducer(uint64_t id)
{
const ProxyPlugin* videoProducer = this->findPlugin(id);
if(videoProducer && videoProducer->getType() == twrap_proxy_plugin_video_producer){
return dyn_cast<const ProxyVideoProducer*>(videoProducer);
}
return tsk_null;
const ProxyPlugin* videoProducer = this->findPlugin(id);
if(videoProducer && videoProducer->getType() == twrap_proxy_plugin_video_producer) {
return dyn_cast<const ProxyVideoProducer*>(videoProducer);
}
return tsk_null;
}
@ -238,69 +237,72 @@ const ProxyVideoProducer* ProxyPluginMgr::findVideoProducer(uint64_t id)
//
static tsk_object_t* twrap_proxy_plugin_ctor(tsk_object_t * self, va_list * app)
{
twrap_proxy_plugin_t *_self = dyn_cast<twrap_proxy_plugin_t *>(TWRAP_PROXY_PLUGIN(self));
if(_self){
}
return self;
twrap_proxy_plugin_t *_self = dyn_cast<twrap_proxy_plugin_t *>(TWRAP_PROXY_PLUGIN(self));
if(_self) {
}
return self;
}
static tsk_object_t* twrap_proxy_plugin_dtor(tsk_object_t * self)
{
twrap_proxy_plugin_t *_self = dyn_cast<twrap_proxy_plugin_t *>(TWRAP_PROXY_PLUGIN(self));
if(_self){
if(_self->plugin){
delete _self->plugin, _self->plugin = tsk_null;
}
}
twrap_proxy_plugin_t *_self = dyn_cast<twrap_proxy_plugin_t *>(TWRAP_PROXY_PLUGIN(self));
if(_self) {
if(_self->plugin) {
delete _self->plugin, _self->plugin = tsk_null;
}
}
return self;
return self;
}
static int twrap_proxy_plugin_cmp(const tsk_object_t *_c1, const tsk_object_t *_c2)
{
const twrap_proxy_plugin_t *c1 = dyn_cast<const twrap_proxy_plugin_t *>(TWRAP_PROXY_PLUGIN(_c1));
const twrap_proxy_plugin_t *c2 = dyn_cast<const twrap_proxy_plugin_t *>(TWRAP_PROXY_PLUGIN(_c2));
const twrap_proxy_plugin_t *c1 = dyn_cast<const twrap_proxy_plugin_t *>(TWRAP_PROXY_PLUGIN(_c1));
const twrap_proxy_plugin_t *c2 = dyn_cast<const twrap_proxy_plugin_t *>(TWRAP_PROXY_PLUGIN(_c2));
if(c1 && c2){
return (c1->plugin == c2->plugin); // See "ProxyPlugin::operator =="
}
else if(!c1 && !c2) return 0;
else return -1;
if(c1 && c2) {
return (c1->plugin == c2->plugin); // See "ProxyPlugin::operator =="
}
else if(!c1 && !c2) {
return 0;
}
else {
return -1;
}
}
static const tsk_object_def_t twrap_proxy_plugin_def_s =
{
sizeof(twrap_proxy_plugin_t),
twrap_proxy_plugin_ctor,
twrap_proxy_plugin_dtor,
twrap_proxy_plugin_cmp,
static const tsk_object_def_t twrap_proxy_plugin_def_s = {
sizeof(twrap_proxy_plugin_t),
twrap_proxy_plugin_ctor,
twrap_proxy_plugin_dtor,
twrap_proxy_plugin_cmp,
};
const tsk_object_def_t *twrap_proxy_plugin_def_t = &twrap_proxy_plugin_def_s;
static int pred_find_plugin_by_value(const tsk_list_item_t *item, const void *proxyPlugin)
{
if(item && item->data){
const twrap_proxy_plugin_t *twrap_plugin = dyn_cast<const twrap_proxy_plugin_t *>(TWRAP_PROXY_PLUGIN(item->data));
return (twrap_plugin->plugin == dyn_cast<const ProxyPlugin *>((const ProxyPlugin*)proxyPlugin)) ? 0 : -1;
}
return -1;
if(item && item->data) {
const twrap_proxy_plugin_t *twrap_plugin = dyn_cast<const twrap_proxy_plugin_t *>(TWRAP_PROXY_PLUGIN(item->data));
return (twrap_plugin->plugin == dyn_cast<const ProxyPlugin *>((const ProxyPlugin*)proxyPlugin)) ? 0 : -1;
}
return -1;
}
static twrap_proxy_plugin_t* twrap_proxy_plugin_create(ProxyPlugin** plugin)
{
if(!plugin || !*plugin){
TSK_DEBUG_ERROR("Invalid parameter");
return tsk_null;
}
if(!plugin || !*plugin) {
TSK_DEBUG_ERROR("Invalid parameter");
return tsk_null;
}
twrap_proxy_plugin_t* twrap_plugin = (twrap_proxy_plugin_t*)tsk_object_new(twrap_proxy_plugin_def_t);
if(!twrap_plugin){
TSK_DEBUG_ERROR("Failed to create new instance of 'twrap_proxy_plugin_t'");
return tsk_null;
}
twrap_proxy_plugin_t* twrap_plugin = (twrap_proxy_plugin_t*)tsk_object_new(twrap_proxy_plugin_def_t);
if(!twrap_plugin) {
TSK_DEBUG_ERROR("Failed to create new instance of 'twrap_proxy_plugin_t'");
return tsk_null;
}
twrap_plugin->plugin = *plugin,
*plugin = tsk_null;
return twrap_plugin;
twrap_plugin->plugin = *plugin,
*plugin = tsk_null;
return twrap_plugin;
}

View File

@ -33,12 +33,11 @@ class ProxyAudioProducer;
class ProxyVideoProducer;
class ProxyPluginMgrCallback;
typedef enum twrap_proxy_plugin_type_e
{
twrap_proxy_plugin_audio_producer,
twrap_proxy_plugin_video_producer,
twrap_proxy_plugin_audio_consumer,
twrap_proxy_plugin_video_consumer,
typedef enum twrap_proxy_plugin_type_e {
twrap_proxy_plugin_audio_producer,
twrap_proxy_plugin_video_producer,
twrap_proxy_plugin_audio_consumer,
twrap_proxy_plugin_video_consumer,
}
twrap_proxy_plugin_type_t;
@ -49,40 +48,42 @@ typedef tsk_list_t twrap_proxy_plungins_L_t; // contains "twrap_proxy_plungin_t"
class ProxyPluginMgr
{
private:
ProxyPluginMgr(ProxyPluginMgrCallback* callback);
ProxyPluginMgr(ProxyPluginMgrCallback* callback);
public:
virtual ~ProxyPluginMgr();
virtual ~ProxyPluginMgr();
// SWIG %newobject
static ProxyPluginMgr* createInstance(ProxyPluginMgrCallback* pCallback);
// SWIG %newobject
static ProxyPluginMgr* createInstance(ProxyPluginMgrCallback* pCallback);
#if !defined(SWIG)
static void destroyInstance(ProxyPluginMgr** ppInstance);
static void destroyInstance(ProxyPluginMgr** ppInstance);
#endif
static ProxyPluginMgr* getInstance();
static ProxyPluginMgr* getInstance();
#if !defined(SWIG)
static uint64_t getUniqueId();
static uint64_t getUniqueId();
int addPlugin(ProxyPlugin**);
const ProxyPlugin* findPlugin(tsk_object_t* wrapped_plugin);
int removePlugin(uint64_t id);
int removePlugin(ProxyPlugin**);
int addPlugin(ProxyPlugin**);
const ProxyPlugin* findPlugin(tsk_object_t* wrapped_plugin);
int removePlugin(uint64_t id);
int removePlugin(ProxyPlugin**);
inline ProxyPluginMgrCallback* getCallback(){ return this->callback; }
inline ProxyPluginMgrCallback* getCallback() {
return this->callback;
}
#endif
const ProxyPlugin* findPlugin(uint64_t id);
const ProxyPlugin* findPlugin(uint64_t id);
const ProxyAudioConsumer* findAudioConsumer(uint64_t id);
const ProxyVideoConsumer* findVideoConsumer(uint64_t id);
const ProxyAudioProducer* findAudioProducer(uint64_t id);
const ProxyVideoProducer* findVideoProducer(uint64_t id);
const ProxyAudioConsumer* findAudioConsumer(uint64_t id);
const ProxyVideoConsumer* findVideoConsumer(uint64_t id);
const ProxyAudioProducer* findAudioProducer(uint64_t id);
const ProxyVideoProducer* findVideoProducer(uint64_t id);
private:
static ProxyPluginMgr* instance;
ProxyPluginMgrCallback* callback;
static ProxyPluginMgr* instance;
ProxyPluginMgrCallback* callback;
twrap_proxy_plungins_L_t* plugins;
twrap_proxy_plungins_L_t* plugins;
};
@ -90,11 +91,15 @@ private:
class ProxyPluginMgrCallback
{
public:
ProxyPluginMgrCallback() { }
virtual ~ProxyPluginMgrCallback() { }
ProxyPluginMgrCallback() { }
virtual ~ProxyPluginMgrCallback() { }
virtual int OnPluginCreated(uint64_t id, enum twrap_proxy_plugin_type_e type) { return -1; }
virtual int OnPluginDestroyed(uint64_t id, enum twrap_proxy_plugin_type_e type) { return -1; }
virtual int OnPluginCreated(uint64_t id, enum twrap_proxy_plugin_type_e type) {
return -1;
}
virtual int OnPluginDestroyed(uint64_t id, enum twrap_proxy_plugin_type_e type) {
return -1;
}
};
/* ============ ProxyPlugin Class ================= */
@ -102,27 +107,31 @@ class ProxyPlugin
{
public:
#if !defined SWIG
ProxyPlugin(twrap_proxy_plugin_type_t _type) {
this->type=_type;
this->id = ProxyPluginMgr::getUniqueId();
}
ProxyPlugin(twrap_proxy_plugin_type_t _type) {
this->type=_type;
this->id = ProxyPluginMgr::getUniqueId();
}
#endif
virtual ~ProxyPlugin() {}
virtual ~ProxyPlugin() {}
#if !defined(SWIG)
virtual bool operator ==(const ProxyPlugin &plugin)const{
return this->getId() == plugin.getId();
}
virtual inline bool isWrapping(tsk_object_t* wrapped_plugin) = 0;
virtual inline uint64_t getMediaSessionId() = 0;
virtual bool operator ==(const ProxyPlugin &plugin)const {
return this->getId() == plugin.getId();
}
virtual inline bool isWrapping(tsk_object_t* wrapped_plugin) = 0;
virtual inline uint64_t getMediaSessionId() = 0;
#endif
inline twrap_proxy_plugin_type_t getType()const{ return this->type; }
inline uint64_t getId()const{ return this->id; }
inline twrap_proxy_plugin_type_t getType()const {
return this->type;
}
inline uint64_t getId()const {
return this->id;
}
protected:
uint64_t id;
twrap_proxy_plugin_type_t type;
uint64_t id;
twrap_proxy_plugin_type_t type;
};
#endif /* TINYWRAP_PROXY_PLUGIN_MGR_H */

View File

@ -37,83 +37,82 @@
/* ============ Audio Media Producer Interface ================= */
typedef struct twrap_producer_proxy_audio_s
{
TDAV_DECLARE_PRODUCER_AUDIO;
typedef struct twrap_producer_proxy_audio_s {
TDAV_DECLARE_PRODUCER_AUDIO;
uint64_t id;
tsk_bool_t started;
uint64_t id;
tsk_bool_t started;
}
twrap_producer_proxy_audio_t;
#define TWRAP_PRODUCER_PROXY_AUDIO(self) ((twrap_producer_proxy_audio_t*)(self))
static int twrap_producer_proxy_audio_set(tmedia_producer_t* _self, const tmedia_param_t* param)
{
twrap_producer_proxy_audio_t* self = (twrap_producer_proxy_audio_t*)_self;
if(param->plugin_type == tmedia_ppt_producer){
// specific proxy producer
}
return tdav_producer_audio_set(TDAV_PRODUCER_AUDIO(self), param);
twrap_producer_proxy_audio_t* self = (twrap_producer_proxy_audio_t*)_self;
if(param->plugin_type == tmedia_ppt_producer) {
// specific proxy producer
}
return tdav_producer_audio_set(TDAV_PRODUCER_AUDIO(self), param);
}
static int twrap_producer_proxy_audio_prepare(tmedia_producer_t* self, const tmedia_codec_t* codec)
{
ProxyPluginMgr* manager;
int ret = -1;
if(codec && (manager = ProxyPluginMgr::getInstance())){
const ProxyAudioProducer* audioProducer;
if((audioProducer = manager->findAudioProducer(TWRAP_PRODUCER_PROXY_AUDIO(self)->id)) && audioProducer->getCallback()){
self->audio.channels = TMEDIA_CODEC_CHANNELS_AUDIO_ENCODING(codec);
self->audio.rate = TMEDIA_CODEC_RATE_ENCODING(codec);
self->audio.ptime = TMEDIA_CODEC_PTIME_AUDIO_ENCODING(codec);
ret = audioProducer->getCallback()->prepare((int)self->audio.ptime, self->audio.rate, self->audio.channels);
}
}
return ret;
ProxyPluginMgr* manager;
int ret = -1;
if(codec && (manager = ProxyPluginMgr::getInstance())) {
const ProxyAudioProducer* audioProducer;
if((audioProducer = manager->findAudioProducer(TWRAP_PRODUCER_PROXY_AUDIO(self)->id)) && audioProducer->getCallback()) {
self->audio.channels = TMEDIA_CODEC_CHANNELS_AUDIO_ENCODING(codec);
self->audio.rate = TMEDIA_CODEC_RATE_ENCODING(codec);
self->audio.ptime = TMEDIA_CODEC_PTIME_AUDIO_ENCODING(codec);
ret = audioProducer->getCallback()->prepare((int)self->audio.ptime, self->audio.rate, self->audio.channels);
}
}
return ret;
}
static int twrap_producer_proxy_audio_start(tmedia_producer_t* self)
{
ProxyPluginMgr* manager;
int ret = -1;
if((manager = ProxyPluginMgr::getInstance())){
const ProxyAudioProducer* audioProducer;
if((audioProducer = manager->findAudioProducer(TWRAP_PRODUCER_PROXY_AUDIO(self)->id)) && audioProducer->getCallback()){
const_cast<ProxyAudioProducer*>(audioProducer)->startPushCallback();
ret = audioProducer->getCallback()->start();
}
}
ProxyPluginMgr* manager;
int ret = -1;
if((manager = ProxyPluginMgr::getInstance())) {
const ProxyAudioProducer* audioProducer;
if((audioProducer = manager->findAudioProducer(TWRAP_PRODUCER_PROXY_AUDIO(self)->id)) && audioProducer->getCallback()) {
const_cast<ProxyAudioProducer*>(audioProducer)->startPushCallback();
ret = audioProducer->getCallback()->start();
}
}
TWRAP_PRODUCER_PROXY_AUDIO(self)->started = (ret == 0);
return ret;
TWRAP_PRODUCER_PROXY_AUDIO(self)->started = (ret == 0);
return ret;
}
static int twrap_producer_proxy_audio_pause(tmedia_producer_t* self)
{
ProxyPluginMgr* manager;
int ret = -1;
if((manager = ProxyPluginMgr::getInstance())){
const ProxyAudioProducer* audioProducer;
if((audioProducer = manager->findAudioProducer(TWRAP_PRODUCER_PROXY_AUDIO(self)->id)) && audioProducer->getCallback()){
ret = audioProducer->getCallback()->pause();
}
}
return ret;
ProxyPluginMgr* manager;
int ret = -1;
if((manager = ProxyPluginMgr::getInstance())) {
const ProxyAudioProducer* audioProducer;
if((audioProducer = manager->findAudioProducer(TWRAP_PRODUCER_PROXY_AUDIO(self)->id)) && audioProducer->getCallback()) {
ret = audioProducer->getCallback()->pause();
}
}
return ret;
}
static int twrap_producer_proxy_audio_stop(tmedia_producer_t* self)
{
ProxyPluginMgr* manager;
int ret = -1;
if((manager = ProxyPluginMgr::getInstance())){
const ProxyAudioProducer* audioProducer;
if((audioProducer = manager->findAudioProducer(TWRAP_PRODUCER_PROXY_AUDIO(self)->id)) && audioProducer->getCallback()){
const_cast<ProxyAudioProducer*>(audioProducer)->stopPushCallback();
ret = audioProducer->getCallback()->stop();
}
}
TWRAP_PRODUCER_PROXY_AUDIO(self)->started = (ret == 0) ? tsk_false : tsk_true;
return ret;
ProxyPluginMgr* manager;
int ret = -1;
if((manager = ProxyPluginMgr::getInstance())) {
const ProxyAudioProducer* audioProducer;
if((audioProducer = manager->findAudioProducer(TWRAP_PRODUCER_PROXY_AUDIO(self)->id)) && audioProducer->getCallback()) {
const_cast<ProxyAudioProducer*>(audioProducer)->stopPushCallback();
ret = audioProducer->getCallback()->stop();
}
}
TWRAP_PRODUCER_PROXY_AUDIO(self)->started = (ret == 0) ? tsk_false : tsk_true;
return ret;
}
@ -123,69 +122,67 @@ static int twrap_producer_proxy_audio_stop(tmedia_producer_t* self)
/* constructor */
static tsk_object_t* twrap_producer_proxy_audio_ctor(tsk_object_t * self, va_list * app)
{
twrap_producer_proxy_audio_t *producer = (twrap_producer_proxy_audio_t *)self;
if(producer){
/* init base */
tdav_producer_audio_init(TDAV_PRODUCER_AUDIO(producer));
/* init self */
twrap_producer_proxy_audio_t *producer = (twrap_producer_proxy_audio_t *)self;
if(producer) {
/* init base */
tdav_producer_audio_init(TDAV_PRODUCER_AUDIO(producer));
/* init self */
/* Add the plugin to the manager */
ProxyPluginMgr* manager = ProxyPluginMgr::getInstance();
if(manager){
ProxyPlugin* proxyProducer = new ProxyAudioProducer(producer);
uint64_t id = proxyProducer->getId();
manager->addPlugin(&proxyProducer);
manager->getCallback()->OnPluginCreated(id, twrap_proxy_plugin_audio_producer);
}
}
return self;
/* Add the plugin to the manager */
ProxyPluginMgr* manager = ProxyPluginMgr::getInstance();
if(manager) {
ProxyPlugin* proxyProducer = new ProxyAudioProducer(producer);
uint64_t id = proxyProducer->getId();
manager->addPlugin(&proxyProducer);
manager->getCallback()->OnPluginCreated(id, twrap_proxy_plugin_audio_producer);
}
}
return self;
}
/* destructor */
static tsk_object_t* twrap_producer_proxy_audio_dtor(tsk_object_t * self)
{
twrap_producer_proxy_audio_t *producer = (twrap_producer_proxy_audio_t *)self;
if(producer){
twrap_producer_proxy_audio_t *producer = (twrap_producer_proxy_audio_t *)self;
if(producer) {
/* stop */
if(producer->started){
twrap_producer_proxy_audio_stop(TMEDIA_PRODUCER(producer));
}
/* stop */
if(producer->started) {
twrap_producer_proxy_audio_stop(TMEDIA_PRODUCER(producer));
}
/* deinit base */
tdav_producer_audio_deinit(TDAV_PRODUCER_AUDIO(producer));
/* deinit self */
/* deinit base */
tdav_producer_audio_deinit(TDAV_PRODUCER_AUDIO(producer));
/* deinit self */
/* Remove plugin from the manager */
ProxyPluginMgr* manager = ProxyPluginMgr::getInstance();
if(manager){
manager->getCallback()->OnPluginDestroyed(producer->id, twrap_proxy_plugin_audio_producer);
manager->removePlugin(producer->id);
}
}
/* Remove plugin from the manager */
ProxyPluginMgr* manager = ProxyPluginMgr::getInstance();
if(manager) {
manager->getCallback()->OnPluginDestroyed(producer->id, twrap_proxy_plugin_audio_producer);
manager->removePlugin(producer->id);
}
}
return self;
return self;
}
/* object definition */
static const tsk_object_def_t twrap_producer_proxy_audio_def_s =
{
sizeof(twrap_producer_proxy_audio_t),
twrap_producer_proxy_audio_ctor,
twrap_producer_proxy_audio_dtor,
tdav_producer_audio_cmp,
static const tsk_object_def_t twrap_producer_proxy_audio_def_s = {
sizeof(twrap_producer_proxy_audio_t),
twrap_producer_proxy_audio_ctor,
twrap_producer_proxy_audio_dtor,
tdav_producer_audio_cmp,
};
/* plugin definition*/
static const tmedia_producer_plugin_def_t twrap_producer_proxy_audio_plugin_def_s =
{
&twrap_producer_proxy_audio_def_s,
static const tmedia_producer_plugin_def_t twrap_producer_proxy_audio_plugin_def_s = {
&twrap_producer_proxy_audio_def_s,
tmedia_audio,
"Audio Proxy Producer",
tmedia_audio,
"Audio Proxy Producer",
twrap_producer_proxy_audio_set,
twrap_producer_proxy_audio_prepare,
twrap_producer_proxy_audio_start,
twrap_producer_proxy_audio_pause,
twrap_producer_proxy_audio_stop
twrap_producer_proxy_audio_set,
twrap_producer_proxy_audio_prepare,
twrap_producer_proxy_audio_start,
twrap_producer_proxy_audio_pause,
twrap_producer_proxy_audio_stop
};
/*TINYWRAP_GEXTERN*/ const tmedia_producer_plugin_def_t *twrap_producer_proxy_audio_plugin_def_t = &twrap_producer_proxy_audio_plugin_def_s;
@ -194,141 +191,141 @@ static const tmedia_producer_plugin_def_t twrap_producer_proxy_audio_plugin_def_
/* ============ ProxyAudioProducer Class ================= */
ProxyAudioProducer::ProxyAudioProducer(twrap_producer_proxy_audio_t* pProducer)
:m_pCallback(tsk_null), m_pWrappedPlugin(pProducer), m_bUsePushCallback(false), m_hPushTimerMgr(tsk_null), ProxyPlugin(twrap_proxy_plugin_audio_producer)
:m_pCallback(tsk_null), m_pWrappedPlugin(pProducer), m_bUsePushCallback(false), m_hPushTimerMgr(tsk_null), ProxyPlugin(twrap_proxy_plugin_audio_producer)
{
m_pWrappedPlugin->id = this->getId();
m_PushBuffer.pPushBufferPtr = tsk_null;
m_PushBuffer.nPushBufferSize = 0;
m_pWrappedPlugin->id = this->getId();
m_PushBuffer.pPushBufferPtr = tsk_null;
m_PushBuffer.nPushBufferSize = 0;
}
ProxyAudioProducer::~ProxyAudioProducer()
{
stopPushCallback();
stopPushCallback();
}
// Use this function to request resampling when your sound card can't honor negotaited record parameters
bool ProxyAudioProducer::setActualSndCardRecordParams(int nPtime, int nRate, int nChannels)
{
if(m_pWrappedPlugin){
TSK_DEBUG_INFO("setActualSndCardRecordParams(ptime=%d, rate=%d, channels=%d)", nPtime, nRate, nChannels);
TMEDIA_PRODUCER(m_pWrappedPlugin)->audio.ptime = nPtime;
TMEDIA_PRODUCER(m_pWrappedPlugin)->audio.rate = nRate;
TMEDIA_PRODUCER(m_pWrappedPlugin)->audio.channels = nChannels;
return true;
}
else{
TSK_DEBUG_ERROR("Invalid state");
return false;
}
if(m_pWrappedPlugin) {
TSK_DEBUG_INFO("setActualSndCardRecordParams(ptime=%d, rate=%d, channels=%d)", nPtime, nRate, nChannels);
TMEDIA_PRODUCER(m_pWrappedPlugin)->audio.ptime = nPtime;
TMEDIA_PRODUCER(m_pWrappedPlugin)->audio.rate = nRate;
TMEDIA_PRODUCER(m_pWrappedPlugin)->audio.channels = nChannels;
return true;
}
else {
TSK_DEBUG_ERROR("Invalid state");
return false;
}
}
bool ProxyAudioProducer::setPushBuffer(const void* pPushBufferPtr, unsigned nPushBufferSize, bool bUsePushCallback/*=false*/)
{
m_PushBuffer.pPushBufferPtr = pPushBufferPtr;
m_PushBuffer.nPushBufferSize = nPushBufferSize;
m_bUsePushCallback = bUsePushCallback;
m_PushBuffer.pPushBufferPtr = pPushBufferPtr;
m_PushBuffer.nPushBufferSize = nPushBufferSize;
m_bUsePushCallback = bUsePushCallback;
if(!pPushBufferPtr || !nPushBufferSize || !bUsePushCallback){
return stopPushCallback();
}
else if(m_bUsePushCallback && m_pWrappedPlugin && m_pWrappedPlugin->started){
return startPushCallback();
}
return true;
if(!pPushBufferPtr || !nPushBufferSize || !bUsePushCallback) {
return stopPushCallback();
}
else if(m_bUsePushCallback && m_pWrappedPlugin && m_pWrappedPlugin->started) {
return startPushCallback();
}
return true;
}
int ProxyAudioProducer::push(const void* _pBuffer/*=tsk_null*/, unsigned _nSize/*=0*/)
{
if(m_pWrappedPlugin && TMEDIA_PRODUCER(m_pWrappedPlugin)->enc_cb.callback){
const void* pBuffer;
unsigned nSize;
if(_pBuffer && _nSize){
pBuffer = _pBuffer, nSize = _nSize;
}
else{
pBuffer = m_PushBuffer.pPushBufferPtr, nSize = m_PushBuffer.nPushBufferSize;
}
return TMEDIA_PRODUCER(m_pWrappedPlugin)->enc_cb.callback(TMEDIA_PRODUCER(m_pWrappedPlugin)->enc_cb.callback_data, pBuffer, nSize);
}
return 0;
if(m_pWrappedPlugin && TMEDIA_PRODUCER(m_pWrappedPlugin)->enc_cb.callback) {
const void* pBuffer;
unsigned nSize;
if(_pBuffer && _nSize) {
pBuffer = _pBuffer, nSize = _nSize;
}
else {
pBuffer = m_PushBuffer.pPushBufferPtr, nSize = m_PushBuffer.nPushBufferSize;
}
return TMEDIA_PRODUCER(m_pWrappedPlugin)->enc_cb.callback(TMEDIA_PRODUCER(m_pWrappedPlugin)->enc_cb.callback_data, pBuffer, nSize);
}
return 0;
}
bool ProxyAudioProducer::setGain(unsigned nGain)
{
if(m_pWrappedPlugin){
// see also: MediaSessionMgr.producerSetInt32(org.doubango.tinyWRAP.twrap_media_type_t.twrap_media_audio, "gain", nGain);
TMEDIA_PRODUCER(m_pWrappedPlugin)->audio.gain = TSK_MIN(nGain,14);
return true;
}
return false;
if(m_pWrappedPlugin) {
// see also: MediaSessionMgr.producerSetInt32(org.doubango.tinyWRAP.twrap_media_type_t.twrap_media_audio, "gain", nGain);
TMEDIA_PRODUCER(m_pWrappedPlugin)->audio.gain = TSK_MIN(nGain,14);
return true;
}
return false;
}
unsigned ProxyAudioProducer::getGain()
{
if(m_pWrappedPlugin){
return TMEDIA_PRODUCER(m_pWrappedPlugin)->audio.gain;
}
return 0;
if(m_pWrappedPlugin) {
return TMEDIA_PRODUCER(m_pWrappedPlugin)->audio.gain;
}
return 0;
}
bool ProxyAudioProducer::startPushCallback()
{
if(!m_bUsePushCallback){
return true;
}
if(!m_bUsePushCallback) {
return true;
}
if(!m_pWrappedPlugin){
TSK_DEBUG_ERROR("Not wrapping plugin");
return false;
}
if(!m_pWrappedPlugin) {
TSK_DEBUG_ERROR("Not wrapping plugin");
return false;
}
if(!m_hPushTimerMgr){
if(!(m_hPushTimerMgr = tsk_timer_manager_create())){
TSK_DEBUG_ERROR("Failed to create timer manager");
return false;
}
}
if(!m_hPushTimerMgr) {
if(!(m_hPushTimerMgr = tsk_timer_manager_create())) {
TSK_DEBUG_ERROR("Failed to create timer manager");
return false;
}
}
if(!TSK_RUNNABLE(m_hPushTimerMgr)->started){
if((tsk_timer_manager_start(m_hPushTimerMgr)) == 0){
m_uPushTimer = tsk_timer_manager_schedule(m_hPushTimerMgr, TMEDIA_PRODUCER(m_pWrappedPlugin)->audio.ptime, &ProxyAudioProducer::pushTimerCallback, this);
}
else{
TSK_DEBUG_ERROR("Failed to start timer");
return false;
}
}
return true;
if(!TSK_RUNNABLE(m_hPushTimerMgr)->started) {
if((tsk_timer_manager_start(m_hPushTimerMgr)) == 0) {
m_uPushTimer = tsk_timer_manager_schedule(m_hPushTimerMgr, TMEDIA_PRODUCER(m_pWrappedPlugin)->audio.ptime, &ProxyAudioProducer::pushTimerCallback, this);
}
else {
TSK_DEBUG_ERROR("Failed to start timer");
return false;
}
}
return true;
}
bool ProxyAudioProducer::stopPushCallback()
{
if(m_hPushTimerMgr){
tsk_timer_manager_destroy(&m_hPushTimerMgr);
}
return true;
if(m_hPushTimerMgr) {
tsk_timer_manager_destroy(&m_hPushTimerMgr);
}
return true;
}
int ProxyAudioProducer::pushTimerCallback(const void* arg, tsk_timer_id_t timer_id)
{
ProxyAudioProducer* This = (ProxyAudioProducer*)arg;
ProxyAudioProducer* This = (ProxyAudioProducer*)arg;
This->m_uPushTimer = tsk_timer_manager_schedule(This->m_hPushTimerMgr, TMEDIA_PRODUCER(This->m_pWrappedPlugin)->audio.ptime, &ProxyAudioProducer::pushTimerCallback, This);
This->m_uPushTimer = tsk_timer_manager_schedule(This->m_hPushTimerMgr, TMEDIA_PRODUCER(This->m_pWrappedPlugin)->audio.ptime, &ProxyAudioProducer::pushTimerCallback, This);
if(This->m_pCallback){
if(This->m_pCallback->fillPushBuffer() == 0){
return This->push();
}
}
return 0;
if(This->m_pCallback) {
if(This->m_pCallback->fillPushBuffer() == 0) {
return This->push();
}
}
return 0;
}
bool ProxyAudioProducer::registerPlugin()
{
/* HACK: Unregister all other audio plugins */
tmedia_producer_plugin_unregister_by_type(tmedia_audio);
/* Register our proxy plugin */
return (tmedia_producer_plugin_register(twrap_producer_proxy_audio_plugin_def_t) == 0);
/* HACK: Unregister all other audio plugins */
tmedia_producer_plugin_unregister_by_type(tmedia_audio);
/* Register our proxy plugin */
return (tmedia_producer_plugin_register(twrap_producer_proxy_audio_plugin_def_t) == 0);
}
@ -354,18 +351,17 @@ bool ProxyAudioProducer::registerPlugin()
/* ============ Video Media Producer Interface ================= */
typedef struct twrap_producer_proxy_video_s
{
TMEDIA_DECLARE_PRODUCER;
typedef struct twrap_producer_proxy_video_s {
TMEDIA_DECLARE_PRODUCER;
int rotation;
uint64_t id;
tsk_bool_t started;
int rotation;
uint64_t id;
tsk_bool_t started;
#if 0
// https://code.google.com/p/doubango/issues/detail?id=416
// The lock on the producer is useless because all tinyDAV proxied functions (push(), stop(), prepare()...) are already thread safe.
// Locking the push method while tinDAV locks the stop() function produce a deadlock on Android devices with slow video producer implementations (e.g. Hovis Box v1)
TSK_DECLARE_SAFEOBJ;
// https://code.google.com/p/doubango/issues/detail?id=416
// The lock on the producer is useless because all tinyDAV proxied functions (push(), stop(), prepare()...) are already thread safe.
// Locking the push method while tinDAV locks the stop() function produce a deadlock on Android devices with slow video producer implementations (e.g. Hovis Box v1)
TSK_DECLARE_SAFEOBJ;
#endif
}
twrap_producer_proxy_video_t;
@ -373,67 +369,67 @@ twrap_producer_proxy_video_t;
int twrap_producer_proxy_video_set(tmedia_producer_t* self, const tmedia_param_t* params)
{
return 0;
return 0;
}
int twrap_producer_proxy_video_prepare(tmedia_producer_t* self, const tmedia_codec_t* codec)
{
ProxyPluginMgr* manager;
int ret = -1;
if(codec && (manager = ProxyPluginMgr::getInstance())){
const ProxyVideoProducer* videoProducer;
if((videoProducer = manager->findVideoProducer(TWRAP_PRODUCER_PROXY_VIDEO(self)->id)) && videoProducer->getCallback()){
self->video.chroma = videoProducer->getChroma();
self->video.rotation = videoProducer->getRotation();
ret = videoProducer->getCallback()->prepare(TMEDIA_CODEC_VIDEO(codec)->out.width, TMEDIA_CODEC_VIDEO(codec)->out.height, TMEDIA_CODEC_VIDEO(codec)->out.fps);
}
}
ProxyPluginMgr* manager;
int ret = -1;
if(codec && (manager = ProxyPluginMgr::getInstance())) {
const ProxyVideoProducer* videoProducer;
if((videoProducer = manager->findVideoProducer(TWRAP_PRODUCER_PROXY_VIDEO(self)->id)) && videoProducer->getCallback()) {
self->video.chroma = videoProducer->getChroma();
self->video.rotation = videoProducer->getRotation();
ret = videoProducer->getCallback()->prepare(TMEDIA_CODEC_VIDEO(codec)->out.width, TMEDIA_CODEC_VIDEO(codec)->out.height, TMEDIA_CODEC_VIDEO(codec)->out.fps);
}
}
return ret;
return ret;
}
int twrap_producer_proxy_video_start(tmedia_producer_t* self)
{
ProxyPluginMgr* manager;
int ret = -1;
if((manager = ProxyPluginMgr::getInstance())){
const ProxyVideoProducer* videoProducer;
if((videoProducer = manager->findVideoProducer(TWRAP_PRODUCER_PROXY_VIDEO(self)->id)) && videoProducer->getCallback()){
ret = videoProducer->getCallback()->start();
TWRAP_PRODUCER_PROXY_VIDEO(self)->started = (ret == 0);
}
}
ProxyPluginMgr* manager;
int ret = -1;
if((manager = ProxyPluginMgr::getInstance())) {
const ProxyVideoProducer* videoProducer;
if((videoProducer = manager->findVideoProducer(TWRAP_PRODUCER_PROXY_VIDEO(self)->id)) && videoProducer->getCallback()) {
ret = videoProducer->getCallback()->start();
TWRAP_PRODUCER_PROXY_VIDEO(self)->started = (ret == 0);
}
}
return ret;
return ret;
}
int twrap_producer_proxy_video_pause(tmedia_producer_t* self)
{
ProxyPluginMgr* manager;
int ret = -1;
if((manager = ProxyPluginMgr::getInstance())){
const ProxyVideoProducer* videoProducer;
if((videoProducer = manager->findVideoProducer(TWRAP_PRODUCER_PROXY_VIDEO(self)->id)) && videoProducer->getCallback()){
ret = videoProducer->getCallback()->pause();
}
}
ProxyPluginMgr* manager;
int ret = -1;
if((manager = ProxyPluginMgr::getInstance())) {
const ProxyVideoProducer* videoProducer;
if((videoProducer = manager->findVideoProducer(TWRAP_PRODUCER_PROXY_VIDEO(self)->id)) && videoProducer->getCallback()) {
ret = videoProducer->getCallback()->pause();
}
}
return ret;
return ret;
}
int twrap_producer_proxy_video_stop(tmedia_producer_t* self)
{
ProxyPluginMgr* manager;
int ret = -1;
if((manager = ProxyPluginMgr::getInstance())){
const ProxyVideoProducer* videoProducer;
if((videoProducer = manager->findVideoProducer(TWRAP_PRODUCER_PROXY_VIDEO(self)->id)) && videoProducer->getCallback()){
ret = videoProducer->getCallback()->stop();
TWRAP_PRODUCER_PROXY_VIDEO(self)->started = ((ret == 0) ? tsk_false : tsk_true);
}
}
ProxyPluginMgr* manager;
int ret = -1;
if((manager = ProxyPluginMgr::getInstance())) {
const ProxyVideoProducer* videoProducer;
if((videoProducer = manager->findVideoProducer(TWRAP_PRODUCER_PROXY_VIDEO(self)->id)) && videoProducer->getCallback()) {
ret = videoProducer->getCallback()->stop();
TWRAP_PRODUCER_PROXY_VIDEO(self)->started = ((ret == 0) ? tsk_false : tsk_true);
}
}
return ret;
return ret;
}
@ -443,69 +439,67 @@ int twrap_producer_proxy_video_stop(tmedia_producer_t* self)
/* constructor */
static tsk_object_t* twrap_producer_proxy_video_ctor(tsk_object_t * self, va_list * app)
{
twrap_producer_proxy_video_t *producer = (twrap_producer_proxy_video_t *)self;
if(producer){
/* init base */
tmedia_producer_init(TMEDIA_PRODUCER(producer));
/* init self */
twrap_producer_proxy_video_t *producer = (twrap_producer_proxy_video_t *)self;
if(producer) {
/* init base */
tmedia_producer_init(TMEDIA_PRODUCER(producer));
/* init self */
/* Add the plugin to the manager */
ProxyPluginMgr* manager = ProxyPluginMgr::getInstance();
if(manager){
ProxyPlugin* proxyProducer = new ProxyVideoProducer(ProxyVideoProducer::getDefaultChroma(), producer);
uint64_t id = proxyProducer->getId();
manager->addPlugin(&proxyProducer);
manager->getCallback()->OnPluginCreated(id, twrap_proxy_plugin_video_producer);
}
}
return self;
/* Add the plugin to the manager */
ProxyPluginMgr* manager = ProxyPluginMgr::getInstance();
if(manager) {
ProxyPlugin* proxyProducer = new ProxyVideoProducer(ProxyVideoProducer::getDefaultChroma(), producer);
uint64_t id = proxyProducer->getId();
manager->addPlugin(&proxyProducer);
manager->getCallback()->OnPluginCreated(id, twrap_proxy_plugin_video_producer);
}
}
return self;
}
/* destructor */
static tsk_object_t* twrap_producer_proxy_video_dtor(tsk_object_t * self)
{
twrap_producer_proxy_video_t *producer = (twrap_producer_proxy_video_t *)self;
if(producer){
TSK_DEBUG_INFO("twrap_producer_proxy_video_dtor()");
/* stop */
if(producer->started){
twrap_producer_proxy_video_stop(TMEDIA_PRODUCER(producer));
}
twrap_producer_proxy_video_t *producer = (twrap_producer_proxy_video_t *)self;
if(producer) {
TSK_DEBUG_INFO("twrap_producer_proxy_video_dtor()");
/* stop */
if(producer->started) {
twrap_producer_proxy_video_stop(TMEDIA_PRODUCER(producer));
}
/* deinit base */
tmedia_producer_deinit(TMEDIA_PRODUCER(producer));
/* deinit self */
/* deinit base */
tmedia_producer_deinit(TMEDIA_PRODUCER(producer));
/* deinit self */
/* Remove plugin from the manager */
ProxyPluginMgr* manager = ProxyPluginMgr::getInstance();
if(manager){
manager->getCallback()->OnPluginDestroyed(producer->id, twrap_proxy_plugin_video_producer);
manager->removePlugin(producer->id);
}
}
/* Remove plugin from the manager */
ProxyPluginMgr* manager = ProxyPluginMgr::getInstance();
if(manager) {
manager->getCallback()->OnPluginDestroyed(producer->id, twrap_proxy_plugin_video_producer);
manager->removePlugin(producer->id);
}
}
return self;
return self;
}
/* object definition */
static const tsk_object_def_t twrap_producer_proxy_video_def_s =
{
sizeof(twrap_producer_proxy_video_t),
twrap_producer_proxy_video_ctor,
twrap_producer_proxy_video_dtor,
tsk_null,
static const tsk_object_def_t twrap_producer_proxy_video_def_s = {
sizeof(twrap_producer_proxy_video_t),
twrap_producer_proxy_video_ctor,
twrap_producer_proxy_video_dtor,
tsk_null,
};
/* plugin definition*/
static const tmedia_producer_plugin_def_t twrap_producer_proxy_video_plugin_def_s =
{
&twrap_producer_proxy_video_def_s,
static const tmedia_producer_plugin_def_t twrap_producer_proxy_video_plugin_def_s = {
&twrap_producer_proxy_video_def_s,
tmedia_video,
"Video Proxy Producer",
tmedia_video,
"Video Proxy Producer",
twrap_producer_proxy_video_set,
twrap_producer_proxy_video_prepare,
twrap_producer_proxy_video_start,
twrap_producer_proxy_video_pause,
twrap_producer_proxy_video_stop
twrap_producer_proxy_video_set,
twrap_producer_proxy_video_prepare,
twrap_producer_proxy_video_start,
twrap_producer_proxy_video_pause,
twrap_producer_proxy_video_stop
};
/*TINYWRAP_GEXTERN*/ const tmedia_producer_plugin_def_t *twrap_producer_proxy_video_plugin_def_t = &twrap_producer_proxy_video_plugin_def_s;
@ -516,111 +510,111 @@ static const tmedia_producer_plugin_def_t twrap_producer_proxy_video_plugin_def_
tmedia_chroma_t ProxyVideoProducer::s_eDefaultChroma = tmedia_chroma_nv21;
ProxyVideoProducer::ProxyVideoProducer(tmedia_chroma_t eChroma, struct twrap_producer_proxy_video_s* pProducer)
:m_pCallback(tsk_null), m_eChroma(eChroma), m_nRotation(0), m_bMirror(false), m_pWrappedPlugin(pProducer), ProxyPlugin(twrap_proxy_plugin_video_producer)
:m_pCallback(tsk_null), m_eChroma(eChroma), m_nRotation(0), m_bMirror(false), m_pWrappedPlugin(pProducer), ProxyPlugin(twrap_proxy_plugin_video_producer)
{
if(m_pWrappedPlugin){
m_pWrappedPlugin->id = this->getId();
}
if(m_pWrappedPlugin) {
m_pWrappedPlugin->id = this->getId();
}
}
ProxyVideoProducer::~ProxyVideoProducer()
{
TSK_DEBUG_INFO("~ProxyVideoProducer");
TSK_DEBUG_INFO("~ProxyVideoProducer");
}
int ProxyVideoProducer::getRotation()const
{
return m_nRotation;
return m_nRotation;
}
bool ProxyVideoProducer::setRotation(int nRot)
{
m_nRotation = nRot;
if (m_pWrappedPlugin) {
TMEDIA_PRODUCER(m_pWrappedPlugin)->video.rotation = m_nRotation;
return true;
}
return false;
m_nRotation = nRot;
if (m_pWrappedPlugin) {
TMEDIA_PRODUCER(m_pWrappedPlugin)->video.rotation = m_nRotation;
return true;
}
return false;
}
bool ProxyVideoProducer::getMirror()const
{
return m_bMirror;
return m_bMirror;
}
bool ProxyVideoProducer::setMirror(bool bMirror)
{
m_bMirror = bMirror;
if (m_pWrappedPlugin) {
TMEDIA_PRODUCER(m_pWrappedPlugin)->video.mirror = m_bMirror ? tsk_true : tsk_false;
return true;
}
return false;
m_bMirror = bMirror;
if (m_pWrappedPlugin) {
TMEDIA_PRODUCER(m_pWrappedPlugin)->video.mirror = m_bMirror ? tsk_true : tsk_false;
return true;
}
return false;
}
// alert the encoder which size your camera is using because it's very hard to retrieve it from send(buffer, size) function
// this function is only needed if the actual size (output from your camera) is different than the negociated one
bool ProxyVideoProducer::setActualCameraOutputSize(unsigned nWidth, unsigned nHeight)
{
if(m_pWrappedPlugin){
TMEDIA_PRODUCER(m_pWrappedPlugin)->video.width = nWidth;
TMEDIA_PRODUCER(m_pWrappedPlugin)->video.height = nHeight;
return true;
}
return false;
if(m_pWrappedPlugin) {
TMEDIA_PRODUCER(m_pWrappedPlugin)->video.width = nWidth;
TMEDIA_PRODUCER(m_pWrappedPlugin)->video.height = nHeight;
return true;
}
return false;
}
// encode() then send()
int ProxyVideoProducer::push(const void* pBuffer, unsigned nSize)
{
if (m_pWrappedPlugin && TMEDIA_PRODUCER(m_pWrappedPlugin)->enc_cb.callback) {
int ret = -1;
if (m_pWrappedPlugin->started) {
ret = TMEDIA_PRODUCER(m_pWrappedPlugin)->enc_cb.callback(TMEDIA_PRODUCER(m_pWrappedPlugin)->enc_cb.callback_data, pBuffer, nSize);
}
return ret;
}
return 0;
if (m_pWrappedPlugin && TMEDIA_PRODUCER(m_pWrappedPlugin)->enc_cb.callback) {
int ret = -1;
if (m_pWrappedPlugin->started) {
ret = TMEDIA_PRODUCER(m_pWrappedPlugin)->enc_cb.callback(TMEDIA_PRODUCER(m_pWrappedPlugin)->enc_cb.callback_data, pBuffer, nSize);
}
return ret;
}
return 0;
}
// send() "as is"
// only used by telepresence system with a H.264 SVC hardaware encoder
int ProxyVideoProducer::sendRaw(const void* pBuffer, unsigned nSize, unsigned nDuration, bool bMarker)
{
if(m_pWrappedPlugin && TMEDIA_PRODUCER(m_pWrappedPlugin)->raw_cb.callback){
//tmedia_video_encode_result_reset(&TMEDIA_PRODUCER(m_pWrappedPlugin)->raw_cb.chunck_curr);
if(m_pWrappedPlugin && TMEDIA_PRODUCER(m_pWrappedPlugin)->raw_cb.callback) {
//tmedia_video_encode_result_reset(&TMEDIA_PRODUCER(m_pWrappedPlugin)->raw_cb.chunck_curr);
TMEDIA_PRODUCER(m_pWrappedPlugin)->raw_cb.chunck_curr.buffer.ptr = pBuffer;
TMEDIA_PRODUCER(m_pWrappedPlugin)->raw_cb.chunck_curr.buffer.size = nSize;
TMEDIA_PRODUCER(m_pWrappedPlugin)->raw_cb.chunck_curr.duration = nDuration;
TMEDIA_PRODUCER(m_pWrappedPlugin)->raw_cb.chunck_curr.last_chunck = (bMarker == true);
return TMEDIA_PRODUCER(m_pWrappedPlugin)->raw_cb.callback(&TMEDIA_PRODUCER(m_pWrappedPlugin)->raw_cb.chunck_curr);
}
return 0;
TMEDIA_PRODUCER(m_pWrappedPlugin)->raw_cb.chunck_curr.buffer.ptr = pBuffer;
TMEDIA_PRODUCER(m_pWrappedPlugin)->raw_cb.chunck_curr.buffer.size = nSize;
TMEDIA_PRODUCER(m_pWrappedPlugin)->raw_cb.chunck_curr.duration = nDuration;
TMEDIA_PRODUCER(m_pWrappedPlugin)->raw_cb.chunck_curr.last_chunck = (bMarker == true);
return TMEDIA_PRODUCER(m_pWrappedPlugin)->raw_cb.callback(&TMEDIA_PRODUCER(m_pWrappedPlugin)->raw_cb.chunck_curr);
}
return 0;
}
int ProxyVideoProducer::sendRaw(const void* pBuffer, unsigned nSize, const void* proto_hdr)
{
if(m_pWrappedPlugin && TMEDIA_PRODUCER(m_pWrappedPlugin)->raw_cb.callback){
//tmedia_video_encode_result_reset(&TMEDIA_PRODUCER(m_pWrappedPlugin)->raw_cb.chunck_curr);
if(m_pWrappedPlugin && TMEDIA_PRODUCER(m_pWrappedPlugin)->raw_cb.callback) {
//tmedia_video_encode_result_reset(&TMEDIA_PRODUCER(m_pWrappedPlugin)->raw_cb.chunck_curr);
TMEDIA_PRODUCER(m_pWrappedPlugin)->raw_cb.chunck_curr.buffer.ptr = pBuffer;
TMEDIA_PRODUCER(m_pWrappedPlugin)->raw_cb.chunck_curr.buffer.size = nSize;
TMEDIA_PRODUCER(m_pWrappedPlugin)->raw_cb.chunck_curr.proto_hdr = proto_hdr;
return TMEDIA_PRODUCER(m_pWrappedPlugin)->raw_cb.callback(&TMEDIA_PRODUCER(m_pWrappedPlugin)->raw_cb.chunck_curr);
}
return 0;
TMEDIA_PRODUCER(m_pWrappedPlugin)->raw_cb.chunck_curr.buffer.ptr = pBuffer;
TMEDIA_PRODUCER(m_pWrappedPlugin)->raw_cb.chunck_curr.buffer.size = nSize;
TMEDIA_PRODUCER(m_pWrappedPlugin)->raw_cb.chunck_curr.proto_hdr = proto_hdr;
return TMEDIA_PRODUCER(m_pWrappedPlugin)->raw_cb.callback(&TMEDIA_PRODUCER(m_pWrappedPlugin)->raw_cb.chunck_curr);
}
return 0;
}
tmedia_chroma_t ProxyVideoProducer::getChroma()const
{
return m_eChroma;
return m_eChroma;
}
bool ProxyVideoProducer::registerPlugin()
{
/* HACK: Unregister all other video plugins */
tmedia_producer_plugin_unregister_by_type(tmedia_video);
/* Register our proxy plugin */
return (tmedia_producer_plugin_register(twrap_producer_proxy_video_plugin_def_t) == 0);
/* HACK: Unregister all other video plugins */
tmedia_producer_plugin_unregister_by_type(tmedia_video);
/* Register our proxy plugin */
return (tmedia_producer_plugin_register(twrap_producer_proxy_video_plugin_def_t) == 0);
}

View File

@ -41,15 +41,25 @@
class ProxyAudioProducerCallback
{
public:
ProxyAudioProducerCallback() { }
virtual ~ProxyAudioProducerCallback(){ }
ProxyAudioProducerCallback() { }
virtual ~ProxyAudioProducerCallback() { }
virtual int prepare(int ptime, int rate, int channels) { return -1; }
virtual int start() { return -1; }
virtual int pause() { return -1; }
virtual int stop() { return -1; }
// this function is called to signal that it's time to copy push data
virtual int fillPushBuffer(){ return -1; }
virtual int prepare(int ptime, int rate, int channels) {
return -1;
}
virtual int start() {
return -1;
}
virtual int pause() {
return -1;
}
virtual int stop() {
return -1;
}
// this function is called to signal that it's time to copy push data
virtual int fillPushBuffer() {
return -1;
}
};
@ -58,61 +68,75 @@ class ProxyAudioProducer : public ProxyPlugin
{
public:
#if !defined(SWIG)
ProxyAudioProducer(struct twrap_producer_proxy_audio_s* pProducer);
ProxyAudioProducer(struct twrap_producer_proxy_audio_s* pProducer);
#endif
virtual ~ProxyAudioProducer();
virtual ~ProxyAudioProducer();
bool setActualSndCardRecordParams(int nPtime, int nRate, int nChannels);
bool setPushBuffer(const void* pPushBufferPtr, unsigned nPushBufferSize, bool bUsePushCallback=false);
int push(const void* pBuffer=tsk_null, unsigned nSize=0);
bool setGain(unsigned nGain);
unsigned getGain();
void setCallback(ProxyAudioProducerCallback* pCallback) { m_pCallback = pCallback; }
bool setActualSndCardRecordParams(int nPtime, int nRate, int nChannels);
bool setPushBuffer(const void* pPushBufferPtr, unsigned nPushBufferSize, bool bUsePushCallback=false);
int push(const void* pBuffer=tsk_null, unsigned nSize=0);
bool setGain(unsigned nGain);
unsigned getGain();
void setCallback(ProxyAudioProducerCallback* pCallback) {
m_pCallback = pCallback;
}
#if !defined(SWIG)
inline bool usePushCallback(){ return m_bUsePushCallback; }
inline ProxyAudioProducerCallback* getCallback()const { return m_pCallback; }
virtual inline bool isWrapping(tsk_object_t* pWrappedPlugin){
return m_pWrappedPlugin == pWrappedPlugin;
}
inline bool usePushCallback() {
return m_bUsePushCallback;
}
inline ProxyAudioProducerCallback* getCallback()const {
return m_pCallback;
}
virtual inline bool isWrapping(tsk_object_t* pWrappedPlugin) {
return m_pWrappedPlugin == pWrappedPlugin;
}
#endif
virtual inline uint64_t getMediaSessionId(){
return m_pWrappedPlugin ? TMEDIA_PRODUCER(m_pWrappedPlugin)->session_id : 0;
}
virtual inline uint64_t getMediaSessionId() {
return m_pWrappedPlugin ? TMEDIA_PRODUCER(m_pWrappedPlugin)->session_id : 0;
}
#if !defined(SWIG)
public:
bool startPushCallback();
bool stopPushCallback();
bool startPushCallback();
bool stopPushCallback();
private:
static int pushTimerCallback(const void* arg, tsk_timer_id_t timer_id);
static int pushTimerCallback(const void* arg, tsk_timer_id_t timer_id);
#endif
public:
static bool registerPlugin();
static bool registerPlugin();
private:
struct twrap_producer_proxy_audio_s* m_pWrappedPlugin;
ProxyAudioProducerCallback* m_pCallback;
struct{
const void* pPushBufferPtr;
unsigned nPushBufferSize;
} m_PushBuffer;
bool m_bUsePushCallback;
void* m_hPushTimerMgr;
uint64_t m_uPushTimer;
struct twrap_producer_proxy_audio_s* m_pWrappedPlugin;
ProxyAudioProducerCallback* m_pCallback;
struct {
const void* pPushBufferPtr;
unsigned nPushBufferSize;
} m_PushBuffer;
bool m_bUsePushCallback;
void* m_hPushTimerMgr;
uint64_t m_uPushTimer;
};
/* ============ ProxyVideoProducerCallback Class ================= */
class ProxyVideoProducerCallback
{
public:
ProxyVideoProducerCallback() { }
virtual ~ProxyVideoProducerCallback(){ }
ProxyVideoProducerCallback() { }
virtual ~ProxyVideoProducerCallback() { }
virtual int prepare(int width, int height, int fps) { return -1; }
virtual int start() { return -1; }
virtual int pause() { return -1; }
virtual int stop() { return -1; }
virtual int prepare(int width, int height, int fps) {
return -1;
}
virtual int start() {
return -1;
}
virtual int pause() {
return -1;
}
virtual int stop() {
return -1;
}
};
/* ============ ProxyVideoProducer Class ================= */
@ -120,49 +144,57 @@ class ProxyVideoProducer : public ProxyPlugin
{
public:
#if !defined(SWIG)
ProxyVideoProducer(tmedia_chroma_t eChroma, struct twrap_producer_proxy_video_s* pProducer);
ProxyVideoProducer(tmedia_chroma_t eChroma, struct twrap_producer_proxy_video_s* pProducer);
#endif
virtual ~ProxyVideoProducer();
virtual ~ProxyVideoProducer();
int getRotation()const;
bool setRotation(int nRot);
bool getMirror()const;
bool setMirror(bool bMirror);
bool setActualCameraOutputSize(unsigned nWidth, unsigned nHeight);
int push(const void* pBuffer, unsigned nSize);
void setCallback(ProxyVideoProducerCallback* pCallback) { m_pCallback = pCallback; }
int getRotation()const;
bool setRotation(int nRot);
bool getMirror()const;
bool setMirror(bool bMirror);
bool setActualCameraOutputSize(unsigned nWidth, unsigned nHeight);
int push(const void* pBuffer, unsigned nSize);
void setCallback(ProxyVideoProducerCallback* pCallback) {
m_pCallback = pCallback;
}
#if !defined(SWIG)
int sendRaw(const void* pBuffer, unsigned nSize, unsigned nDuration, bool bMarker);
int sendRaw(const void* pBuffer, unsigned nSize, const void* proto_hdr);
inline ProxyVideoProducerCallback* getCallback()const { return m_pCallback; }
virtual inline bool isWrapping(tsk_object_t* wrapped_plugin){
return m_pWrappedPlugin == wrapped_plugin;
}
virtual inline const tmedia_producer_t* getWrappedPlugin()const{
return (tmedia_producer_t*)m_pWrappedPlugin;
}
int sendRaw(const void* pBuffer, unsigned nSize, unsigned nDuration, bool bMarker);
int sendRaw(const void* pBuffer, unsigned nSize, const void* proto_hdr);
inline ProxyVideoProducerCallback* getCallback()const {
return m_pCallback;
}
virtual inline bool isWrapping(tsk_object_t* wrapped_plugin) {
return m_pWrappedPlugin == wrapped_plugin;
}
virtual inline const tmedia_producer_t* getWrappedPlugin()const {
return (tmedia_producer_t*)m_pWrappedPlugin;
}
#endif
virtual inline uint64_t getMediaSessionId(){
return m_pWrappedPlugin ? TMEDIA_PRODUCER(m_pWrappedPlugin)->session_id : 0;
}
virtual inline uint64_t getMediaSessionId() {
return m_pWrappedPlugin ? TMEDIA_PRODUCER(m_pWrappedPlugin)->session_id : 0;
}
public:
static bool registerPlugin();
static void setDefaultChroma(tmedia_chroma_t eChroma){ s_eDefaultChroma = eChroma; }
static bool registerPlugin();
static void setDefaultChroma(tmedia_chroma_t eChroma) {
s_eDefaultChroma = eChroma;
}
#if !defined(SWIG)
tmedia_chroma_t getChroma()const;
static tmedia_chroma_t getDefaultChroma() { return s_eDefaultChroma; }
tmedia_chroma_t getChroma()const;
static tmedia_chroma_t getDefaultChroma() {
return s_eDefaultChroma;
}
#endif
private:
struct twrap_producer_proxy_video_s* m_pWrappedPlugin;
ProxyVideoProducerCallback* m_pCallback;
tmedia_chroma_t m_eChroma;
int m_nRotation;
bool m_bMirror;
struct twrap_producer_proxy_video_s* m_pWrappedPlugin;
ProxyVideoProducerCallback* m_pCallback;
tmedia_chroma_t m_eChroma;
int m_nRotation;
bool m_bMirror;
static tmedia_chroma_t s_eDefaultChroma;
static tmedia_chroma_t s_eDefaultChroma;
};
#endif /* TINYWRAP_PRODUCER_PROXY_H */

View File

@ -26,351 +26,346 @@
RPMessage::RPMessage(twrap_rpmessage_type_t _type, tsms_rpdu_message_t* _rp_message)
{
this->rp_message = (tsms_rpdu_message_t*)tsk_object_ref(_rp_message);
this->type = _type;
this->tmpBuffer = tsk_null;
this->rp_message = (tsms_rpdu_message_t*)tsk_object_ref(_rp_message);
this->type = _type;
this->tmpBuffer = tsk_null;
}
RPMessage::RPMessage() :
rp_message(tsk_null),
type(twrap_rpmessage_type_sms_none),
tmpBuffer(tsk_null)
rp_message(tsk_null),
type(twrap_rpmessage_type_sms_none),
tmpBuffer(tsk_null)
{
}
twrap_rpmessage_type_t RPMessage::getType()
{
return this->type;
return this->type;
}
unsigned RPMessage::getPayloadLength()
{
if(!this->tmpBuffer){
if((this->tmpBuffer = tsk_buffer_create_null())){
tsms_rpdu_data_serialize(this->rp_message, this->tmpBuffer);
}
}
return this->tmpBuffer ? this->tmpBuffer->size : 0;
if(!this->tmpBuffer) {
if((this->tmpBuffer = tsk_buffer_create_null())) {
tsms_rpdu_data_serialize(this->rp_message, this->tmpBuffer);
}
}
return this->tmpBuffer ? this->tmpBuffer->size : 0;
}
unsigned RPMessage::getPayload(void* output, unsigned maxsize)
{
unsigned retsize = 0;
unsigned retsize = 0;
if(!this->tmpBuffer){
if((this->tmpBuffer = tsk_buffer_create_null())){
tsms_rpdu_message_serialize(this->rp_message, this->tmpBuffer);
}
}
if(!this->tmpBuffer) {
if((this->tmpBuffer = tsk_buffer_create_null())) {
tsms_rpdu_message_serialize(this->rp_message, this->tmpBuffer);
}
}
if(output && maxsize && this->tmpBuffer && this->tmpBuffer->data){
retsize = (this->tmpBuffer->size > maxsize) ? maxsize : this->tmpBuffer->size;
memcpy(output, this->tmpBuffer->data, retsize);
}
return retsize;
if(output && maxsize && this->tmpBuffer && this->tmpBuffer->data) {
retsize = (this->tmpBuffer->size > maxsize) ? maxsize : this->tmpBuffer->size;
memcpy(output, this->tmpBuffer->data, retsize);
}
return retsize;
}
RPMessage::~RPMessage()
{
TSK_OBJECT_SAFE_FREE(this->rp_message);
TSK_OBJECT_SAFE_FREE(this->tmpBuffer);
TSK_OBJECT_SAFE_FREE(this->rp_message);
TSK_OBJECT_SAFE_FREE(this->tmpBuffer);
}
SMSData::SMSData(twrap_sms_type_t _type, int _mr, const void* _ascii, tsk_size_t _size): oa(tsk_null), da(tsk_null)
{
this->type = _type;
this->mr = _mr;
if((this->size = _size)){
if((this->ascii = tsk_calloc(size+1, 1))){
memcpy(this->ascii, _ascii, _size);
}
}
else{
this->ascii = tsk_null;
}
this->type = _type;
this->mr = _mr;
if((this->size = _size)) {
if((this->ascii = tsk_calloc(size+1, 1))) {
memcpy(this->ascii, _ascii, _size);
}
}
else {
this->ascii = tsk_null;
}
}
SMSData::SMSData(): oa(tsk_null), da(tsk_null)
{
this->type = twrap_sms_type_none;
this->mr = 0;
this->size = 0;
this->ascii = tsk_null;
this->type = twrap_sms_type_none;
this->mr = 0;
this->size = 0;
this->ascii = tsk_null;
}
SMSData::~SMSData()
{
TSK_FREE(this->ascii);
TSK_FREE(this->oa);
TSK_FREE(this->da);
TSK_FREE(this->ascii);
TSK_FREE(this->oa);
TSK_FREE(this->da);
}
twrap_sms_type_t SMSData::getType()
{
return this->type;
return this->type;
}
int SMSData::getMR()
{
return this->mr;
return this->mr;
}
unsigned SMSData::getPayloadLength()
{
return this->size;
return this->size;
}
unsigned SMSData::getPayload(void* output, unsigned maxsize)
{
unsigned retsize = 0;
unsigned retsize = 0;
if(output && maxsize && this->ascii){
retsize = (this->size > maxsize) ? maxsize : this->size;
memcpy(output, this->ascii, retsize);
}
return retsize;
if(output && maxsize && this->ascii) {
retsize = (this->size > maxsize) ? maxsize : this->size;
memcpy(output, this->ascii, retsize);
}
return retsize;
}
const char* SMSData::getOA()
{
return this->oa;
return this->oa;
}
const char* SMSData::getDA()
{
return this->da;
return this->da;
}
void SMSData::setOA(const char* _oa)
{
TSK_FREE(this->oa);
this->oa = tsk_strdup(_oa);
TSK_FREE(this->oa);
this->oa = tsk_strdup(_oa);
}
void SMSData::setDA(const char* _da)
{
TSK_FREE(this->da);
this->da = tsk_strdup(_da);
TSK_FREE(this->da);
this->da = tsk_strdup(_da);
}
// More information about RP-DATA: http://www.doubango.org/API/tinySMS/group__tsms__rpdu__group.html#tsms_rpdu_group_DATA
RPMessage* SMSEncoder::encodeSubmit(int mr, const char *smsc, const char *destination, const char *ascii)
{
int ret;
tsk_buffer_t* buffer = tsk_null;
tsms_tpdu_submit_t* sms_submit = tsk_null;
tsms_rpdu_data_t* rp_data = tsk_null;
int ret;
tsk_buffer_t* buffer = tsk_null;
tsms_tpdu_submit_t* sms_submit = tsk_null;
tsms_rpdu_data_t* rp_data = tsk_null;
RPMessage* encodedData = tsk_null;
RPMessage* encodedData = tsk_null;
if(!smsc || ! destination || !ascii){
TSK_DEBUG_ERROR("Invalid parameter");
return tsk_null;
}
if(!smsc || ! destination || !ascii) {
TSK_DEBUG_ERROR("Invalid parameter");
return tsk_null;
}
if(mr<0 || mr>0xFF){
TSK_DEBUG_WARN("Invalid Message Reference");
mr &= 0xFF;
}
if(mr<0 || mr>0xFF) {
TSK_DEBUG_WARN("Invalid Message Reference");
mr &= 0xFF;
}
// create SMS-SUBMIT message
if(!(sms_submit = tsms_tpdu_submit_create(mr, (const uint8_t*)smsc, (const uint8_t*)destination))){
TSK_DEBUG_ERROR("Failed to create the TPDU SMS-SUBMIT message");
goto bail;
}
// Set content for SMS-SUBMIT
if((buffer = tsms_pack_to_7bit(ascii))){
ret = tsms_tpdu_submit_set_userdata(sms_submit, buffer, tsms_alpha_7bit);
TSK_OBJECT_SAFE_FREE(buffer);
}
else{
TSK_DEBUG_ERROR("Failed to encode the TPDU SMS-SUBMIT message");
goto bail;
}
// create SMS-SUBMIT message
if(!(sms_submit = tsms_tpdu_submit_create(mr, (const uint8_t*)smsc, (const uint8_t*)destination))) {
TSK_DEBUG_ERROR("Failed to create the TPDU SMS-SUBMIT message");
goto bail;
}
// Set content for SMS-SUBMIT
if((buffer = tsms_pack_to_7bit(ascii))) {
ret = tsms_tpdu_submit_set_userdata(sms_submit, buffer, tsms_alpha_7bit);
TSK_OBJECT_SAFE_FREE(buffer);
}
else {
TSK_DEBUG_ERROR("Failed to encode the TPDU SMS-SUBMIT message");
goto bail;
}
// create RP-DATA(SMS-SUBMIT)
if((rp_data = tsms_rpdu_data_create_mo(mr, (const uint8_t*)smsc, TSMS_TPDU_MESSAGE(sms_submit)))){
encodedData = new RPMessage(twrap_rpmessage_type_sms_submit, TSMS_RPDU_MESSAGE(rp_data));
}
else{
TSK_DEBUG_ERROR("Failed to create the RP-DATA(SMS-SUBMIT) message");
goto bail;
}
// create RP-DATA(SMS-SUBMIT)
if((rp_data = tsms_rpdu_data_create_mo(mr, (const uint8_t*)smsc, TSMS_TPDU_MESSAGE(sms_submit)))) {
encodedData = new RPMessage(twrap_rpmessage_type_sms_submit, TSMS_RPDU_MESSAGE(rp_data));
}
else {
TSK_DEBUG_ERROR("Failed to create the RP-DATA(SMS-SUBMIT) message");
goto bail;
}
bail:
TSK_OBJECT_SAFE_FREE(buffer);
TSK_OBJECT_SAFE_FREE(sms_submit);
TSK_OBJECT_SAFE_FREE(rp_data);
TSK_OBJECT_SAFE_FREE(buffer);
TSK_OBJECT_SAFE_FREE(sms_submit);
TSK_OBJECT_SAFE_FREE(rp_data);
return encodedData;
return encodedData;
}
// More information about RP-DATA: http://www.doubango.org/API/tinySMS/group__tsms__rpdu__group.html#tsms_rpdu_group_DATA
RPMessage* SMSEncoder::encodeDeliver(int mr, const char* smsc, const char* originator, const char* ascii)
{
int ret;
tsk_buffer_t* buffer = tsk_null;
tsms_tpdu_deliver_t* sms_deliver = tsk_null;
tsms_rpdu_data_t* rp_data = tsk_null;
int ret;
tsk_buffer_t* buffer = tsk_null;
tsms_tpdu_deliver_t* sms_deliver = tsk_null;
tsms_rpdu_data_t* rp_data = tsk_null;
RPMessage* encodedData = tsk_null;
RPMessage* encodedData = tsk_null;
if(!smsc || ! originator || !ascii){
TSK_DEBUG_ERROR("Invalid parameter");
return tsk_null;
}
if(!smsc || ! originator || !ascii) {
TSK_DEBUG_ERROR("Invalid parameter");
return tsk_null;
}
if(mr<0 || mr>0xFF){
TSK_DEBUG_WARN("Invalid Message Reference");
mr &= 0xFF;
}
if(mr<0 || mr>0xFF) {
TSK_DEBUG_WARN("Invalid Message Reference");
mr &= 0xFF;
}
// create SMS-DELIVER message
sms_deliver = tsms_tpdu_deliver_create((const uint8_t*)smsc, (const uint8_t*)originator);
// Set content for SMS-DELIVER
if((buffer = tsms_pack_to_7bit(ascii))){
ret = tsms_tpdu_deliver_set_userdata(sms_deliver, buffer, tsms_alpha_7bit);
TSK_OBJECT_SAFE_FREE(buffer);
}
// create RP-DATA message
if((rp_data = tsms_rpdu_data_create_mt(mr, (const uint8_t*)smsc, TSMS_TPDU_MESSAGE(sms_deliver)))){
encodedData = new RPMessage(twrap_rpmessage_type_sms_deliver, TSMS_RPDU_MESSAGE(rp_data));
}
else{
TSK_DEBUG_ERROR("Failed to create the RP-DATA(SMS-DELIVER) message");
goto bail;
}
// create SMS-DELIVER message
sms_deliver = tsms_tpdu_deliver_create((const uint8_t*)smsc, (const uint8_t*)originator);
// Set content for SMS-DELIVER
if((buffer = tsms_pack_to_7bit(ascii))) {
ret = tsms_tpdu_deliver_set_userdata(sms_deliver, buffer, tsms_alpha_7bit);
TSK_OBJECT_SAFE_FREE(buffer);
}
// create RP-DATA message
if((rp_data = tsms_rpdu_data_create_mt(mr, (const uint8_t*)smsc, TSMS_TPDU_MESSAGE(sms_deliver)))) {
encodedData = new RPMessage(twrap_rpmessage_type_sms_deliver, TSMS_RPDU_MESSAGE(rp_data));
}
else {
TSK_DEBUG_ERROR("Failed to create the RP-DATA(SMS-DELIVER) message");
goto bail;
}
bail:
TSK_OBJECT_SAFE_FREE(buffer);
TSK_OBJECT_SAFE_FREE(sms_deliver);
TSK_OBJECT_SAFE_FREE(rp_data);
TSK_OBJECT_SAFE_FREE(buffer);
TSK_OBJECT_SAFE_FREE(sms_deliver);
TSK_OBJECT_SAFE_FREE(rp_data);
return encodedData;
return encodedData;
}
RPMessage* SMSEncoder::encodeACK(int mr, const char* smsc, const char* destination, bool forSUBMIT)
{
tsms_tpdu_report_t* sms_report = tsk_null;
tsms_rpdu_ack_t* rp_ack = tsk_null;
tsk_bool_t isSUBMIT = forSUBMIT ? tsk_true : tsk_false;
tsk_bool_t isERROR = tsk_false;
tsms_tpdu_report_t* sms_report = tsk_null;
tsms_rpdu_ack_t* rp_ack = tsk_null;
tsk_bool_t isSUBMIT = forSUBMIT ? tsk_true : tsk_false;
tsk_bool_t isERROR = tsk_false;
RPMessage* encodedData = tsk_null;
RPMessage* encodedData = tsk_null;
// create SMS-DELIVER(or SUBMIT)-REPORT message
sms_report = tsms_tpdu_report_create((const uint8_t*)smsc, isSUBMIT, isERROR);
// create RP-ACK message (From MS to SC)
if((rp_ack = tsms_rpdu_ack_create_mo(mr, TSMS_TPDU_MESSAGE(sms_report)))){
encodedData = new RPMessage(twrap_rpmessage_type_sms_ack, TSMS_RPDU_MESSAGE(rp_ack));
}
// create SMS-DELIVER(or SUBMIT)-REPORT message
sms_report = tsms_tpdu_report_create((const uint8_t*)smsc, isSUBMIT, isERROR);
// create RP-ACK message (From MS to SC)
if((rp_ack = tsms_rpdu_ack_create_mo(mr, TSMS_TPDU_MESSAGE(sms_report)))) {
encodedData = new RPMessage(twrap_rpmessage_type_sms_ack, TSMS_RPDU_MESSAGE(rp_ack));
}
TSK_OBJECT_SAFE_FREE(sms_report);
TSK_OBJECT_SAFE_FREE(rp_ack);
TSK_OBJECT_SAFE_FREE(sms_report);
TSK_OBJECT_SAFE_FREE(rp_ack);
return encodedData;
return encodedData;
}
RPMessage* SMSEncoder::encodeError(int mr, const char* smsc, const char* destination, bool forSUBMIT)
{
tsms_tpdu_report_t* sms_report = tsk_null;
tsms_rpdu_error_t* rp_error= tsk_null;
tsk_bool_t isSUBMIT = forSUBMIT ? tsk_true : tsk_false;
tsk_bool_t isERROR = tsk_true;
tsms_tpdu_report_t* sms_report = tsk_null;
tsms_rpdu_error_t* rp_error= tsk_null;
tsk_bool_t isSUBMIT = forSUBMIT ? tsk_true : tsk_false;
tsk_bool_t isERROR = tsk_true;
RPMessage* encodedData = tsk_null;
RPMessage* encodedData = tsk_null;
// create SMS-DELIVER-REPORT message
sms_report = tsms_tpdu_report_create((const uint8_t*)smsc, isSUBMIT, isERROR);
// create RP-ERROR message
if((rp_error = tsms_rpdu_error_create_mo(mr, TSMS_TPDU_MESSAGE(sms_report), 0x0A/*call barred*/))){
encodedData = new RPMessage(twrap_rpmessage_type_sms_error, TSMS_RPDU_MESSAGE(rp_error));
}
// create SMS-DELIVER-REPORT message
sms_report = tsms_tpdu_report_create((const uint8_t*)smsc, isSUBMIT, isERROR);
// create RP-ERROR message
if((rp_error = tsms_rpdu_error_create_mo(mr, TSMS_TPDU_MESSAGE(sms_report), 0x0A/*call barred*/))) {
encodedData = new RPMessage(twrap_rpmessage_type_sms_error, TSMS_RPDU_MESSAGE(rp_error));
}
TSK_OBJECT_SAFE_FREE(sms_report);
TSK_OBJECT_SAFE_FREE(rp_error);
TSK_OBJECT_SAFE_FREE(sms_report);
TSK_OBJECT_SAFE_FREE(rp_error);
return encodedData;
return encodedData;
}
SMSData* SMSEncoder::decode(const void* data, unsigned size, bool MobOrig)
{
tsms_rpdu_message_t* rp_message = tsk_null;
tsms_tpdu_message_t* tpdu = tsk_null;
tsms_rpdu_message_t* rp_message = tsk_null;
tsms_tpdu_message_t* tpdu = tsk_null;
SMSData* decodedData = tsk_null;
SMSData* decodedData = tsk_null;
if(!(rp_message = tsms_rpdu_message_deserialize(data, size))){
TSK_DEBUG_ERROR("Failed to deserialize the RP-MESSAGE");
goto bail;
}
if(!(rp_message = tsms_rpdu_message_deserialize(data, size))) {
TSK_DEBUG_ERROR("Failed to deserialize the RP-MESSAGE");
goto bail;
}
switch(rp_message->mti){
case tsms_rpdu_type_data_mo:
case tsms_rpdu_type_data_mt:
{
char* ascii = tsk_null;
tsms_rpdu_data_t* rp_data = TSMS_RPDU_DATA(rp_message);
if((tpdu = tsms_tpdu_message_deserialize(rp_data->udata->data, rp_data->udata->size, MobOrig))){
if(tpdu->mti == tsms_tpdu_mti_deliver_mt || tpdu->mti == tsms_tpdu_mti_submit_mo){ /* SMS-SUBMIT or SMS-DELIVER? */
ascii = tsms_tpdu_message_get_payload(tpdu);
decodedData = new SMSData(twrap_sms_type_rpdata, rp_message->mr, ascii, (tsk_size_t)tsk_strlen(ascii));
switch(rp_message->mti) {
case tsms_rpdu_type_data_mo:
case tsms_rpdu_type_data_mt: {
char* ascii = tsk_null;
tsms_rpdu_data_t* rp_data = TSMS_RPDU_DATA(rp_message);
if((tpdu = tsms_tpdu_message_deserialize(rp_data->udata->data, rp_data->udata->size, MobOrig))) {
if(tpdu->mti == tsms_tpdu_mti_deliver_mt || tpdu->mti == tsms_tpdu_mti_submit_mo) { /* SMS-SUBMIT or SMS-DELIVER? */
ascii = tsms_tpdu_message_get_payload(tpdu);
decodedData = new SMSData(twrap_sms_type_rpdata, rp_message->mr, ascii, (tsk_size_t)tsk_strlen(ascii));
if(tpdu->mti == tsms_tpdu_mti_deliver_mt){
tsms_tpdu_deliver_t* tpdu_deliver = (tsms_tpdu_deliver_t*)tpdu;
decodedData->setOA(tpdu_deliver->oa ? tpdu_deliver->oa->digits : tsk_null);
}
/* IMPORTANT: to not uncomment
else if(TSK_OBJECT_DEF(tpdu) == tsms_tpdu_submit_def_t){
tsms_tpdu_submit_t* tpdu_submit = (tsms_tpdu_submit_t*)tpdu;
decodedData->setDA(tpdu_submit->da ? tpdu_submit->da->digits : tsk_null);
}*/
TSK_FREE(ascii);
}
}
break;
}
case tsms_rpdu_type_ack_mo:
case tsms_rpdu_type_ack_mt:
{
tsms_rpdu_ack_t* rp_ack = TSMS_RPDU_ACK(rp_message);
// ...do whatever you want
if(rp_ack->udata && (tpdu = tsms_tpdu_message_deserialize(rp_ack->udata->data, rp_ack->udata->size, MobOrig))){
// ...do whatever you want
}
decodedData = new SMSData(twrap_sms_type_ack, rp_message->mr, tsk_null, 0);
break;
}
case tsms_rpdu_type_error_mo:
case tsms_rpdu_type_error_mt:
{
tsms_rpdu_error_t* rp_error = TSMS_RPDU_ERROR(rp_message);
// ...do whatever you want
if(rp_error->udata && (tpdu = tsms_tpdu_message_deserialize(rp_error->udata->data, rp_error->udata->size, MobOrig))){
// ...do whatever you want
}
decodedData = new SMSData(twrap_sms_type_error, rp_message->mr, tsk_null, 0);
break;
}
case tsms_rpdu_type_smma_mo:
{
// tsms_rpdu_smma_t* rp_smma = TSMS_RPDU_SMMA(rp_message);
// ...do whatever you want
decodedData = new SMSData(twrap_sms_type_smma, rp_message->mr, tsk_null, 0);
break;
}
default:
{
TSK_DEBUG_INFO("Unknown RP-Message type (%u).", rp_message->mti);
break;
}
}
if(tpdu->mti == tsms_tpdu_mti_deliver_mt) {
tsms_tpdu_deliver_t* tpdu_deliver = (tsms_tpdu_deliver_t*)tpdu;
decodedData->setOA(tpdu_deliver->oa ? tpdu_deliver->oa->digits : tsk_null);
}
/* IMPORTANT: to not uncomment
else if(TSK_OBJECT_DEF(tpdu) == tsms_tpdu_submit_def_t){
tsms_tpdu_submit_t* tpdu_submit = (tsms_tpdu_submit_t*)tpdu;
decodedData->setDA(tpdu_submit->da ? tpdu_submit->da->digits : tsk_null);
}*/
TSK_FREE(ascii);
}
}
break;
}
case tsms_rpdu_type_ack_mo:
case tsms_rpdu_type_ack_mt: {
tsms_rpdu_ack_t* rp_ack = TSMS_RPDU_ACK(rp_message);
// ...do whatever you want
if(rp_ack->udata && (tpdu = tsms_tpdu_message_deserialize(rp_ack->udata->data, rp_ack->udata->size, MobOrig))) {
// ...do whatever you want
}
decodedData = new SMSData(twrap_sms_type_ack, rp_message->mr, tsk_null, 0);
break;
}
case tsms_rpdu_type_error_mo:
case tsms_rpdu_type_error_mt: {
tsms_rpdu_error_t* rp_error = TSMS_RPDU_ERROR(rp_message);
// ...do whatever you want
if(rp_error->udata && (tpdu = tsms_tpdu_message_deserialize(rp_error->udata->data, rp_error->udata->size, MobOrig))) {
// ...do whatever you want
}
decodedData = new SMSData(twrap_sms_type_error, rp_message->mr, tsk_null, 0);
break;
}
case tsms_rpdu_type_smma_mo: {
// tsms_rpdu_smma_t* rp_smma = TSMS_RPDU_SMMA(rp_message);
// ...do whatever you want
decodedData = new SMSData(twrap_sms_type_smma, rp_message->mr, tsk_null, 0);
break;
}
default: {
TSK_DEBUG_INFO("Unknown RP-Message type (%u).", rp_message->mti);
break;
}
}
bail:
TSK_OBJECT_SAFE_FREE(rp_message);
TSK_OBJECT_SAFE_FREE(tpdu);
TSK_OBJECT_SAFE_FREE(rp_message);
TSK_OBJECT_SAFE_FREE(tpdu);
return decodedData;
return decodedData;
}

View File

@ -27,23 +27,21 @@
#include "tinysip.h" /* SIP/IMS */
#include "tinysms.h" /* Binary SMS API*/
typedef enum twrap_rpmessage_type_e
{
twrap_rpmessage_type_sms_none,
twrap_rpmessage_type_sms_submit,
twrap_rpmessage_type_sms_deliver,
twrap_rpmessage_type_sms_ack,
twrap_rpmessage_type_sms_error,
typedef enum twrap_rpmessage_type_e {
twrap_rpmessage_type_sms_none,
twrap_rpmessage_type_sms_submit,
twrap_rpmessage_type_sms_deliver,
twrap_rpmessage_type_sms_ack,
twrap_rpmessage_type_sms_error,
}
twrap_rpmessage_type_t;
typedef enum twrap_sms_type_e
{
twrap_sms_type_none,
twrap_sms_type_rpdata,
twrap_sms_type_smma,
twrap_sms_type_ack,
twrap_sms_type_error,
typedef enum twrap_sms_type_e {
twrap_sms_type_none,
twrap_sms_type_rpdata,
twrap_sms_type_smma,
twrap_sms_type_ack,
twrap_sms_type_error,
}
twrap_sms_type_t;
@ -51,65 +49,65 @@ class RPMessage
{
public:
#if !defined(SWIG)
RPMessage(twrap_rpmessage_type_t type, tsms_rpdu_message_t* rp_message);
RPMessage(twrap_rpmessage_type_t type, tsms_rpdu_message_t* rp_message);
#endif
RPMessage();
RPMessage();
virtual ~RPMessage();
virtual ~RPMessage();
public:
/* Public API functions */
twrap_rpmessage_type_t getType();
unsigned getPayloadLength();
unsigned getPayload(void* output, unsigned maxsize);
/* Public API functions */
twrap_rpmessage_type_t getType();
unsigned getPayloadLength();
unsigned getPayload(void* output, unsigned maxsize);
private:
twrap_rpmessage_type_t type;
tsms_rpdu_message_t* rp_message;
twrap_rpmessage_type_t type;
tsms_rpdu_message_t* rp_message;
tsk_buffer_t* tmpBuffer;
tsk_buffer_t* tmpBuffer;
};
class SMSData
{
public:
#if !defined(SWIG)
SMSData(twrap_sms_type_t type, int mr, const void* ascii, tsk_size_t size);
SMSData(twrap_sms_type_t type, int mr, const void* ascii, tsk_size_t size);
#endif
SMSData();
SMSData();
virtual ~SMSData();
virtual ~SMSData();
public:
/* Public API functions */
twrap_sms_type_t getType();
int getMR();
unsigned getPayloadLength();
unsigned getPayload(void* output, unsigned maxsize);
const char* getOA();
const char* getDA();
/* Public API functions */
twrap_sms_type_t getType();
int getMR();
unsigned getPayloadLength();
unsigned getPayload(void* output, unsigned maxsize);
const char* getOA();
const char* getDA();
#if !defined(SWIG)
void setOA(const char* oa);
void setDA(const char* da);
void setOA(const char* oa);
void setDA(const char* da);
#endif
private:
twrap_sms_type_t type;
int mr;
void* ascii;
char* oa;
char* da;
tsk_size_t size;
twrap_sms_type_t type;
int mr;
void* ascii;
char* oa;
char* da;
tsk_size_t size;
};
class SMSEncoder
{
public:
static RPMessage* encodeSubmit(int mr, const char* smsc, const char* destination, const char* ascii);
static RPMessage* encodeDeliver(int mr, const char* smsc, const char* originator, const char* ascii);
static RPMessage* encodeACK(int mr, const char* smsc, const char* destination, bool forSUBMIT);
static RPMessage* encodeError(int mr, const char* smsc, const char* destination, bool forSUBMIT);
static SMSData* decode(const void* data, unsigned size, bool MobOrig);
static RPMessage* encodeSubmit(int mr, const char* smsc, const char* destination, const char* ascii);
static RPMessage* encodeDeliver(int mr, const char* smsc, const char* originator, const char* ascii);
static RPMessage* encodeACK(int mr, const char* smsc, const char* destination, bool forSUBMIT);
static RPMessage* encodeError(int mr, const char* smsc, const char* destination, bool forSUBMIT);
static SMSData* decode(const void* data, unsigned size, bool MobOrig);
};
#endif /* TINYWRAP_SMSENCODER_H */

View File

@ -23,20 +23,20 @@
SafeObject::SafeObject()
{
this->mutex = tsk_mutex_create();
this->mutex = tsk_mutex_create();
}
int SafeObject::Lock()const
{
return tsk_mutex_lock(this->mutex);
return tsk_mutex_lock(this->mutex);
}
int SafeObject::UnLock()const
{
return tsk_mutex_unlock(this->mutex);
return tsk_mutex_unlock(this->mutex);
}
SafeObject::~SafeObject()
{
tsk_mutex_destroy(&this->mutex);
tsk_mutex_destroy(&this->mutex);
}

View File

@ -29,15 +29,15 @@
class TINYWRAP_API SafeObject
{
public:
SafeObject();
virtual ~SafeObject();
SafeObject();
virtual ~SafeObject();
/* protected: */
int Lock()const;
int UnLock()const;
/* protected: */
int Lock()const;
int UnLock()const;
private:
tsk_mutex_handle_t *mutex;
tsk_mutex_handle_t *mutex;
};
#endif /* TINYWRAP_SAFEOBJECT_H */

View File

@ -36,18 +36,36 @@ class SubscriptionEvent;
class SipCallback
{
public:
SipCallback() { }
virtual ~SipCallback() {}
virtual int OnDialogEvent(const DialogEvent* e) { return -1; }
virtual int OnStackEvent(const StackEvent* e) { return -1; }
SipCallback() { }
virtual ~SipCallback() {}
virtual int OnDialogEvent(const DialogEvent* e) {
return -1;
}
virtual int OnStackEvent(const StackEvent* e) {
return -1;
}
virtual int OnInviteEvent(const InviteEvent* e) { return -1; }
virtual int OnMessagingEvent(const MessagingEvent* e) { return -1; }
virtual int OnInfoEvent(const InfoEvent* e) { return -1; }
virtual int OnOptionsEvent(const OptionsEvent* e) { return -1; }
virtual int OnPublicationEvent(const PublicationEvent* e) { return -1; }
virtual int OnRegistrationEvent(const RegistrationEvent* e) { return -1; }
virtual int OnSubscriptionEvent(const SubscriptionEvent* e) { return -1; }
virtual int OnInviteEvent(const InviteEvent* e) {
return -1;
}
virtual int OnMessagingEvent(const MessagingEvent* e) {
return -1;
}
virtual int OnInfoEvent(const InfoEvent* e) {
return -1;
}
virtual int OnOptionsEvent(const OptionsEvent* e) {
return -1;
}
virtual int OnPublicationEvent(const PublicationEvent* e) {
return -1;
}
virtual int OnRegistrationEvent(const RegistrationEvent* e) {
return -1;
}
virtual int OnSubscriptionEvent(const SubscriptionEvent* e) {
return -1;
}
private:

View File

@ -42,74 +42,74 @@ name##Session* cls##Event::take##session##Ownership() const \
/* ======================== SipEvent ========================*/
SipEvent::SipEvent(const tsip_event_t *_sipevent)
{
this->sipevent = _sipevent;
if(_sipevent){
this->sipmessage = new SipMessage(_sipevent->sipmessage);
}
else{
this->sipmessage = tsk_null;
}
this->sipevent = _sipevent;
if(_sipevent) {
this->sipmessage = new SipMessage(_sipevent->sipmessage);
}
else {
this->sipmessage = tsk_null;
}
}
SipEvent::~SipEvent()
{
if(this->sipmessage){
delete this->sipmessage;
}
if(this->sipmessage) {
delete this->sipmessage;
}
}
short SipEvent::getCode() const
{
return this->sipevent->code;
return this->sipevent->code;
}
const char* SipEvent::getPhrase() const
{
return this->sipevent->phrase;
return this->sipevent->phrase;
}
const SipSession* SipEvent::getBaseSession() const
{
const void* userdata = tsip_ssession_get_userdata(this->sipevent->ss);
if(userdata){
return dyn_cast<const SipSession*>((const SipSession*)userdata);
}
return tsk_null;
const void* userdata = tsip_ssession_get_userdata(this->sipevent->ss);
if(userdata) {
return dyn_cast<const SipSession*>((const SipSession*)userdata);
}
return tsk_null;
}
const SipMessage* SipEvent::getSipMessage() const
{
return this->sipmessage;
return this->sipmessage;
}
SipStack* SipEvent::getStack()const
{
const tsip_stack_handle_t* stack_handle = tsip_ssession_get_stack(sipevent->ss);
const void* userdata;
if(stack_handle && (userdata = tsip_stack_get_userdata(stack_handle))){
return dyn_cast<SipStack*>((SipStack*)userdata);
}
return tsk_null;
const tsip_stack_handle_t* stack_handle = tsip_ssession_get_stack(sipevent->ss);
const void* userdata;
if(stack_handle && (userdata = tsip_stack_get_userdata(stack_handle))) {
return dyn_cast<SipStack*>((SipStack*)userdata);
}
return tsk_null;
}
/* ======================== DialogEvent ========================*/
DialogEvent::DialogEvent(const tsip_event_t *_sipevent)
:SipEvent(_sipevent){ }
:SipEvent(_sipevent) { }
DialogEvent::~DialogEvent(){ }
DialogEvent::~DialogEvent() { }
/* ======================== DialogEvent ========================*/
StackEvent::StackEvent(const tsip_event_t *_sipevent)
:SipEvent(_sipevent){ }
:SipEvent(_sipevent) { }
StackEvent::~StackEvent(){ }
StackEvent::~StackEvent() { }
/* ======================== InviteEvent ========================*/
InviteEvent::InviteEvent(const tsip_event_t *_sipevent)
:SipEvent(_sipevent)
:SipEvent(_sipevent)
{
}
@ -119,27 +119,27 @@ InviteEvent::~InviteEvent()
tsip_invite_event_type_t InviteEvent::getType() const
{
return TSIP_INVITE_EVENT(this->sipevent)->type;
return TSIP_INVITE_EVENT(this->sipevent)->type;
}
twrap_media_type_t InviteEvent::getMediaType() const
{
// Ignore Mixed session (both audio/video and MSRP) as specified by GSMA RCS.
if (this->sipevent && this->sipevent->ss) {
tmedia_type_t type = tsip_ssession_get_mediatype(this->sipevent->ss);
if ((type & tmedia_msrp) == tmedia_msrp) {
return twrap_media_msrp;
}
else {
return twrap_get_wrapped_media_type(type);
}
}
return twrap_media_none;
// Ignore Mixed session (both audio/video and MSRP) as specified by GSMA RCS.
if (this->sipevent && this->sipevent->ss) {
tmedia_type_t type = tsip_ssession_get_mediatype(this->sipevent->ss);
if ((type & tmedia_msrp) == tmedia_msrp) {
return twrap_media_msrp;
}
else {
return twrap_get_wrapped_media_type(type);
}
}
return twrap_media_none;
}
const InviteSession* InviteEvent::getSession() const
{
return dyn_cast<const InviteSession*>(this->getBaseSession());
return dyn_cast<const InviteSession*>(this->getBaseSession());
}
takeOwnership_Implement(Invite, Call, CallSession);
@ -147,7 +147,7 @@ takeOwnership_Implement(Invite, Msrp, MsrpSession);
/* ======================== MessagingEvent ========================*/
MessagingEvent::MessagingEvent(const tsip_event_t *_sipevent)
:SipEvent(_sipevent)
:SipEvent(_sipevent)
{
}
@ -157,12 +157,12 @@ MessagingEvent::~MessagingEvent()
tsip_message_event_type_t MessagingEvent::getType() const
{
return TSIP_MESSAGE_EVENT(this->sipevent)->type;
return TSIP_MESSAGE_EVENT(this->sipevent)->type;
}
const MessagingSession* MessagingEvent::getSession() const
{
return dyn_cast<const MessagingSession*>(this->getBaseSession());
return dyn_cast<const MessagingSession*>(this->getBaseSession());
}
takeOwnership_Implement(Messaging, Messaging, Session);
@ -170,7 +170,7 @@ takeOwnership_Implement(Messaging, Messaging, Session);
/* ======================== InfoEvent ========================*/
InfoEvent::InfoEvent(const tsip_event_t *_sipevent)
:SipEvent(_sipevent)
:SipEvent(_sipevent)
{
}
@ -180,12 +180,12 @@ InfoEvent::~InfoEvent()
tsip_info_event_type_t InfoEvent::getType() const
{
return TSIP_INFO_EVENT(this->sipevent)->type;
return TSIP_INFO_EVENT(this->sipevent)->type;
}
const InfoSession* InfoEvent::getSession() const
{
return dyn_cast<const InfoSession*>(this->getBaseSession());
return dyn_cast<const InfoSession*>(this->getBaseSession());
}
takeOwnership_Implement(Info, Info, Session);
@ -194,7 +194,7 @@ takeOwnership_Implement(Info, Info, Session);
/* ======================== OptionsEvent ========================*/
OptionsEvent::OptionsEvent(const tsip_event_t *_sipevent)
:SipEvent(_sipevent)
:SipEvent(_sipevent)
{
}
@ -204,12 +204,12 @@ OptionsEvent::~OptionsEvent()
tsip_options_event_type_t OptionsEvent::getType() const
{
return TSIP_OPTIONS_EVENT(this->sipevent)->type;
return TSIP_OPTIONS_EVENT(this->sipevent)->type;
}
const OptionsSession* OptionsEvent::getSession() const
{
return dyn_cast<const OptionsSession*>(this->getBaseSession());
return dyn_cast<const OptionsSession*>(this->getBaseSession());
}
takeOwnership_Implement(Options, Options, Session);
@ -217,7 +217,7 @@ takeOwnership_Implement(Options, Options, Session);
/* ======================== PublicationEvent ========================*/
PublicationEvent::PublicationEvent(const tsip_event_t *_sipevent)
:SipEvent(_sipevent)
:SipEvent(_sipevent)
{
}
@ -227,12 +227,12 @@ PublicationEvent::~PublicationEvent()
tsip_publish_event_type_t PublicationEvent::getType() const
{
return TSIP_PUBLISH_EVENT(this->sipevent)->type;
return TSIP_PUBLISH_EVENT(this->sipevent)->type;
}
const PublicationSession* PublicationEvent::getSession() const
{
return dyn_cast<const PublicationSession*>(this->getBaseSession());
return dyn_cast<const PublicationSession*>(this->getBaseSession());
}
takeOwnership_Implement(Publication, Publication, Session);
@ -240,7 +240,7 @@ takeOwnership_Implement(Publication, Publication, Session);
/* ======================== RegistrationEvent ========================*/
RegistrationEvent::RegistrationEvent(const tsip_event_t *_sipevent)
:SipEvent(_sipevent)
:SipEvent(_sipevent)
{
}
@ -250,12 +250,12 @@ RegistrationEvent::~RegistrationEvent()
tsip_register_event_type_t RegistrationEvent::getType() const
{
return TSIP_REGISTER_EVENT(this->sipevent)->type;
return TSIP_REGISTER_EVENT(this->sipevent)->type;
}
const RegistrationSession* RegistrationEvent::getSession() const
{
return dyn_cast<const RegistrationSession*>(this->getBaseSession());
return dyn_cast<const RegistrationSession*>(this->getBaseSession());
}
takeOwnership_Implement(Registration, Registration, Session);
@ -263,7 +263,7 @@ takeOwnership_Implement(Registration, Registration, Session);
/* ======================== SubscriptionEvent ========================*/
SubscriptionEvent::SubscriptionEvent(const tsip_event_t *sipevent)
:SipEvent(sipevent)
:SipEvent(sipevent)
{
}
@ -273,12 +273,12 @@ SubscriptionEvent::~SubscriptionEvent()
tsip_subscribe_event_type_t SubscriptionEvent::getType() const
{
return TSIP_SUBSCRIBE_EVENT(this->sipevent)->type;
return TSIP_SUBSCRIBE_EVENT(this->sipevent)->type;
}
const SubscriptionSession* SubscriptionEvent::getSession() const
{
return dyn_cast<const SubscriptionSession*>(this->getBaseSession());
return dyn_cast<const SubscriptionSession*>(this->getBaseSession());
}
takeOwnership_Implement(Subscription, Subscription, Session);

View File

@ -48,25 +48,27 @@ class TINYWRAP_API SipEvent
{
public:
#if !defined(SWIG)
SipEvent(const tsip_event_t *sipevent);
SipEvent(const tsip_event_t *sipevent);
#endif
virtual ~SipEvent();
virtual ~SipEvent();
public:
short getCode() const;
const char* getPhrase() const;
const SipSession* getBaseSession() const;
const SipMessage* getSipMessage() const;
short getCode() const;
const char* getPhrase() const;
const SipSession* getBaseSession() const;
const SipMessage* getSipMessage() const;
#if !defined(SWIG)
const tsip_event_t * getWrappedEvent(){ return sipevent; }
const tsip_event_t * getWrappedEvent() {
return sipevent;
}
#endif
#if !defined(SWIG)
SipStack* getStack()const;
SipStack* getStack()const;
#endif
protected:
const tsip_event_t *sipevent;
SipMessage* sipmessage;
const tsip_event_t *sipevent;
SipMessage* sipmessage;
};
@ -75,9 +77,9 @@ class TINYWRAP_API DialogEvent: public SipEvent
{
public:
#if !defined(SWIG)
DialogEvent(const tsip_event_t *sipevent);
DialogEvent(const tsip_event_t *sipevent);
#endif
virtual ~DialogEvent();
virtual ~DialogEvent();
public: /* Public API functions */
};
@ -87,9 +89,9 @@ class TINYWRAP_API StackEvent: public SipEvent
{
public:
#if !defined(SWIG)
StackEvent(const tsip_event_t *sipevent);
StackEvent(const tsip_event_t *sipevent);
#endif
virtual ~StackEvent();
virtual ~StackEvent();
public: /* Public API functions */
};
@ -101,16 +103,16 @@ class TINYWRAP_API InviteEvent: public SipEvent
{
public:
#if !defined(SWIG)
InviteEvent(const tsip_event_t *sipevent);
InviteEvent(const tsip_event_t *sipevent);
#endif
virtual ~InviteEvent();
virtual ~InviteEvent();
public: /* Public API functions */
tsip_invite_event_type_t getType() const;
twrap_media_type_t getMediaType() const;
const InviteSession* getSession() const;
CallSession* takeCallSessionOwnership() const;
MsrpSession* takeMsrpSessionOwnership() const;
tsip_invite_event_type_t getType() const;
twrap_media_type_t getMediaType() const;
const InviteSession* getSession() const;
CallSession* takeCallSessionOwnership() const;
MsrpSession* takeMsrpSessionOwnership() const;
};
@ -120,14 +122,14 @@ class TINYWRAP_API MessagingEvent: public SipEvent
{
public:
#if !defined(SWIG)
MessagingEvent(const tsip_event_t *sipevent);
MessagingEvent(const tsip_event_t *sipevent);
#endif
virtual ~MessagingEvent();
virtual ~MessagingEvent();
public: /* Public API functions */
tsip_message_event_type_t getType() const;
const MessagingSession* getSession() const;
MessagingSession* takeSessionOwnership() const;
tsip_message_event_type_t getType() const;
const MessagingSession* getSession() const;
MessagingSession* takeSessionOwnership() const;
};
/* ======================== InfoEvent ========================*/
@ -135,14 +137,14 @@ class TINYWRAP_API InfoEvent: public SipEvent
{
public:
#if !defined(SWIG)
InfoEvent(const tsip_event_t *sipevent);
InfoEvent(const tsip_event_t *sipevent);
#endif
virtual ~InfoEvent();
virtual ~InfoEvent();
public: /* Public API functions */
tsip_info_event_type_t getType() const;
const InfoSession* getSession() const;
InfoSession* takeSessionOwnership() const;
tsip_info_event_type_t getType() const;
const InfoSession* getSession() const;
InfoSession* takeSessionOwnership() const;
};
@ -152,14 +154,14 @@ class TINYWRAP_API OptionsEvent: public SipEvent
{
public:
#if !defined(SWIG)
OptionsEvent(const tsip_event_t *sipevent);
OptionsEvent(const tsip_event_t *sipevent);
#endif
virtual ~OptionsEvent();
virtual ~OptionsEvent();
public: /* Public API functions */
tsip_options_event_type_t getType() const;
const OptionsSession* getSession() const;
OptionsSession* takeSessionOwnership() const;
tsip_options_event_type_t getType() const;
const OptionsSession* getSession() const;
OptionsSession* takeSessionOwnership() const;
};
@ -169,14 +171,14 @@ class TINYWRAP_API PublicationEvent: public SipEvent
{
public:
#if !defined(SWIG)
PublicationEvent(const tsip_event_t *sipevent);
PublicationEvent(const tsip_event_t *sipevent);
#endif
virtual ~PublicationEvent();
virtual ~PublicationEvent();
public: /* Public API functions */
tsip_publish_event_type_t getType() const;
const PublicationSession* getSession() const;
PublicationSession* takeSessionOwnership() const;
tsip_publish_event_type_t getType() const;
const PublicationSession* getSession() const;
PublicationSession* takeSessionOwnership() const;
};
@ -186,14 +188,14 @@ class TINYWRAP_API RegistrationEvent: public SipEvent
{
public:
#if !defined(SWIG)
RegistrationEvent(const tsip_event_t *sipevent);
RegistrationEvent(const tsip_event_t *sipevent);
#endif
virtual ~RegistrationEvent();
virtual ~RegistrationEvent();
public: /* Public API functions */
tsip_register_event_type_t getType() const;
const RegistrationSession* getSession() const;
RegistrationSession* takeSessionOwnership() const;
tsip_register_event_type_t getType() const;
const RegistrationSession* getSession() const;
RegistrationSession* takeSessionOwnership() const;
};
@ -203,14 +205,14 @@ class TINYWRAP_API SubscriptionEvent: public SipEvent
{
public:
#if !defined(SWIG)
SubscriptionEvent(const tsip_event_t *sipevent);
SubscriptionEvent(const tsip_event_t *sipevent);
#endif
virtual ~SubscriptionEvent();
virtual ~SubscriptionEvent();
public: /* Public API functions */
tsip_subscribe_event_type_t getType() const;
const SubscriptionSession* getSession() const;
SubscriptionSession* takeSessionOwnership() const;
tsip_subscribe_event_type_t getType() const;
const SubscriptionSession* getSession() const;
SubscriptionSession* takeSessionOwnership() const;
};
#endif /* TINYWRAP_SIPEVENT_H */

View File

@ -23,231 +23,297 @@
SdpMessage::SdpMessage()
:m_pSdpMessage(tsk_null)
:m_pSdpMessage(tsk_null)
{
}
SdpMessage::SdpMessage(tsdp_message_t *_sdpmessage)
{
m_pSdpMessage = (tsdp_message_t *)tsk_object_ref(_sdpmessage);
m_pSdpMessage = (tsdp_message_t *)tsk_object_ref(_sdpmessage);
}
SdpMessage::~SdpMessage()
{
TSK_OBJECT_SAFE_FREE(m_pSdpMessage);
TSK_OBJECT_SAFE_FREE(m_pSdpMessage);
}
char* SdpMessage::getSdpHeaderValue(const char* media, char name, unsigned index /*= 0*/)
{
const tsdp_header_M_t* M;
const tsdp_header_M_t* M;
if((M = (const tsdp_header_M_t*)tsdp_message_get_header(m_pSdpMessage, tsdp_htype_M))){
tsdp_header_type_t type = tsdp_htype_Dummy;
const tsdp_header_t* header;
switch(name){
case 'a': type = tsdp_htype_A; break;
case 'b': type = tsdp_htype_B; break;
case 'c': type = tsdp_htype_C; break;
case 'e': type = tsdp_htype_E; break;
case 'i': type = tsdp_htype_I; break;
case 'k': type = tsdp_htype_K; break;
case 'm': type = tsdp_htype_M; break;
case 'o': type = tsdp_htype_O; break;
if((M = (const tsdp_header_M_t*)tsdp_message_get_header(m_pSdpMessage, tsdp_htype_M))) {
tsdp_header_type_t type = tsdp_htype_Dummy;
const tsdp_header_t* header;
switch(name) {
case 'a':
type = tsdp_htype_A;
break;
case 'b':
type = tsdp_htype_B;
break;
case 'c':
type = tsdp_htype_C;
break;
case 'e':
type = tsdp_htype_E;
break;
case 'i':
type = tsdp_htype_I;
break;
case 'k':
type = tsdp_htype_K;
break;
case 'm':
type = tsdp_htype_M;
break;
case 'o':
type = tsdp_htype_O;
break;
case 'p': type = tsdp_htype_P; break;
case 'r': type = tsdp_htype_R; break;
case 's': type = tsdp_htype_S; break;
case 't': type = tsdp_htype_T; break;
case 'u': type = tsdp_htype_U; break;
case 'v': type = tsdp_htype_V; break;
case 'z': type = tsdp_htype_Z; break;
}
case 'p':
type = tsdp_htype_P;
break;
case 'r':
type = tsdp_htype_R;
break;
case 's':
type = tsdp_htype_S;
break;
case 't':
type = tsdp_htype_T;
break;
case 'u':
type = tsdp_htype_U;
break;
case 'v':
type = tsdp_htype_V;
break;
case 'z':
type = tsdp_htype_Z;
break;
}
if((header = tsdp_message_get_headerAt(m_pSdpMessage, type, index))){
return tsdp_header_tostring(header);
}
}
if((header = tsdp_message_get_headerAt(m_pSdpMessage, type, index))) {
return tsdp_header_tostring(header);
}
}
return tsk_null;
return tsk_null;
}
char* SdpMessage::getSdpHeaderAValue(const char* media, const char* attributeName)
{
const tsdp_header_M_t* M;
tsk_size_t i;
const tsdp_header_M_t* M;
tsk_size_t i;
for(i = 0; (M = (const tsdp_header_M_t*)tsdp_message_get_headerAt(m_pSdpMessage, tsdp_htype_M, i)); i++){
if(tsk_striequals(M->media, media)){
const tsdp_header_A_t* A;
if((A = tsdp_header_M_findA(M, attributeName))){
return tsk_strdup(A->value);
}
}
}
for(i = 0; (M = (const tsdp_header_M_t*)tsdp_message_get_headerAt(m_pSdpMessage, tsdp_htype_M, i)); i++) {
if(tsk_striequals(M->media, media)) {
const tsdp_header_A_t* A;
if((A = tsdp_header_M_findA(M, attributeName))) {
return tsk_strdup(A->value);
}
}
}
return tsk_null;
return tsk_null;
}
SipMessage::SipMessage()
:m_pSipMessage(tsk_null), m_pSdpMessage(tsk_null)
:m_pSipMessage(tsk_null), m_pSdpMessage(tsk_null)
{
}
SipMessage::SipMessage(tsip_message_t *_sipmessage)
: m_pSdpMessage(tsk_null)
: m_pSdpMessage(tsk_null)
{
m_pSipMessage = (tsip_message_t *)tsk_object_ref(_sipmessage);
m_pSipMessage = (tsip_message_t *)tsk_object_ref(_sipmessage);
}
SipMessage::~SipMessage()
{
TSK_OBJECT_SAFE_FREE(m_pSipMessage);
if(m_pSdpMessage){
delete m_pSdpMessage;
}
TSK_OBJECT_SAFE_FREE(m_pSipMessage);
if(m_pSdpMessage) {
delete m_pSdpMessage;
}
}
bool SipMessage::isResponse()
{
return TSIP_MESSAGE_IS_RESPONSE(m_pSipMessage);
return TSIP_MESSAGE_IS_RESPONSE(m_pSipMessage);
}
tsip_request_type_t SipMessage::getRequestType()
{
if(TSIP_MESSAGE_IS_REQUEST(m_pSipMessage)){
return (m_pSipMessage)->line.request.request_type;
}
return tsip_NONE;
if(TSIP_MESSAGE_IS_REQUEST(m_pSipMessage)) {
return (m_pSipMessage)->line.request.request_type;
}
return tsip_NONE;
}
short SipMessage::getResponseCode()
{
return TSIP_RESPONSE_CODE(m_pSipMessage);
return TSIP_RESPONSE_CODE(m_pSipMessage);
}
const char* SipMessage::getResponsePhrase()
{
return TSIP_RESPONSE_PHRASE(m_pSipMessage);
return TSIP_RESPONSE_PHRASE(m_pSipMessage);
}
const tsip_header_t* SipMessage::getSipHeader(const char* name, unsigned index /* =0 */)
{
/* Do not worry about calling tsk_striequals() several times because the function
* is fully optimized.
*/
/* Code below comes from tsip_message_get_headerAt() */
tsk_size_t pos = 0;
const tsk_list_item_t *item;
const tsip_header_t* hdr = tsk_null;
if(!m_pSipMessage || !name){
return tsk_null;
}
/* Do not worry about calling tsk_striequals() several times because the function
* is fully optimized.
*/
/* Code below comes from tsip_message_get_headerAt() */
tsk_size_t pos = 0;
const tsk_list_item_t *item;
const tsip_header_t* hdr = tsk_null;
if(!m_pSipMessage || !name) {
return tsk_null;
}
if(tsk_striequals(name, "v") || tsk_striequals(name, "via")){
if(index == 0){
hdr = (const tsip_header_t*)m_pSipMessage->firstVia;
goto bail;
}else pos++; }
if(tsk_striequals(name, "f") || tsk_striequals(name, "from")){
if(index == 0){
hdr = (const tsip_header_t*)m_pSipMessage->From;
goto bail;
}else pos++; }
if(tsk_striequals(name, "t") || tsk_striequals(name, "to")){
if(index == 0){
hdr = (const tsip_header_t*)m_pSipMessage->To;
goto bail;
}else pos++; }
if(tsk_striequals(name, "m") || tsk_striequals(name, "contact")){
if(index == 0){
hdr = (const tsip_header_t*)m_pSipMessage->Contact;
goto bail;
}else pos++; }
if(tsk_striequals(name, "i") || tsk_striequals(name, "call-id")){
if(index == 0){
hdr = (const tsip_header_t*)m_pSipMessage->Call_ID;
goto bail;
}else pos++; }
if(tsk_striequals(name, "cseq")){
if(index == 0){
hdr = (const tsip_header_t*)m_pSipMessage->CSeq;
goto bail;
}else pos++; }
if(tsk_striequals(name, "expires")){
if(index == 0){
hdr = (const tsip_header_t*)m_pSipMessage->Expires;
goto bail;
}else pos++; }
if(tsk_striequals(name, "c") || tsk_striequals(name, "content-type")){
if(index == 0){
hdr = (const tsip_header_t*)m_pSipMessage->Content_Type;
goto bail;
}else pos++; }
if(tsk_striequals(name, "l") || tsk_striequals(name, "content-length")){
if(index == 0){
hdr = (const tsip_header_t*)m_pSipMessage->Content_Length;
goto bail;
}else pos++; }
if(tsk_striequals(name, "v") || tsk_striequals(name, "via")) {
if(index == 0) {
hdr = (const tsip_header_t*)m_pSipMessage->firstVia;
goto bail;
}
else {
pos++;
}
}
if(tsk_striequals(name, "f") || tsk_striequals(name, "from")) {
if(index == 0) {
hdr = (const tsip_header_t*)m_pSipMessage->From;
goto bail;
}
else {
pos++;
}
}
if(tsk_striequals(name, "t") || tsk_striequals(name, "to")) {
if(index == 0) {
hdr = (const tsip_header_t*)m_pSipMessage->To;
goto bail;
}
else {
pos++;
}
}
if(tsk_striequals(name, "m") || tsk_striequals(name, "contact")) {
if(index == 0) {
hdr = (const tsip_header_t*)m_pSipMessage->Contact;
goto bail;
}
else {
pos++;
}
}
if(tsk_striequals(name, "i") || tsk_striequals(name, "call-id")) {
if(index == 0) {
hdr = (const tsip_header_t*)m_pSipMessage->Call_ID;
goto bail;
}
else {
pos++;
}
}
if(tsk_striequals(name, "cseq")) {
if(index == 0) {
hdr = (const tsip_header_t*)m_pSipMessage->CSeq;
goto bail;
}
else {
pos++;
}
}
if(tsk_striequals(name, "expires")) {
if(index == 0) {
hdr = (const tsip_header_t*)m_pSipMessage->Expires;
goto bail;
}
else {
pos++;
}
}
if(tsk_striequals(name, "c") || tsk_striequals(name, "content-type")) {
if(index == 0) {
hdr = (const tsip_header_t*)m_pSipMessage->Content_Type;
goto bail;
}
else {
pos++;
}
}
if(tsk_striequals(name, "l") || tsk_striequals(name, "content-length")) {
if(index == 0) {
hdr = (const tsip_header_t*)m_pSipMessage->Content_Length;
goto bail;
}
else {
pos++;
}
}
tsk_list_foreach(item, m_pSipMessage->headers){
if(tsk_striequals(tsip_header_get_name_2(TSIP_HEADER(item->data)), name)){
if(pos++ >= index){
hdr = (const tsip_header_t*)item->data;
break;
}
}
}
tsk_list_foreach(item, m_pSipMessage->headers) {
if(tsk_striequals(tsip_header_get_name_2(TSIP_HEADER(item->data)), name)) {
if(pos++ >= index) {
hdr = (const tsip_header_t*)item->data;
break;
}
}
}
bail:
return hdr;
return hdr;
}
// e.g. getHeaderParamValue("content-type");
char* SipMessage::getSipHeaderValue(const char* name, unsigned index /* = 0*/)
{
const tsip_header_t* header;
if((header = this->getSipHeader(name, index))){
const tsip_header_t* header;
if((header = this->getSipHeader(name, index))) {
switch(header->type){
case tsip_htype_From:
return tsip_uri_tostring(((const tsip_header_From_t*)header)->uri, tsk_false, tsk_false);
case tsip_htype_To:
return tsip_uri_tostring(((const tsip_header_To_t*)header)->uri, tsk_false, tsk_false);
break;
case tsip_htype_P_Asserted_Identity:
return tsip_uri_tostring(((const tsip_header_P_Asserted_Identity_t*)header)->uri, tsk_false, tsk_false);
break;
switch(header->type) {
case tsip_htype_From:
return tsip_uri_tostring(((const tsip_header_From_t*)header)->uri, tsk_false, tsk_false);
case tsip_htype_To:
return tsip_uri_tostring(((const tsip_header_To_t*)header)->uri, tsk_false, tsk_false);
break;
case tsip_htype_P_Asserted_Identity:
return tsip_uri_tostring(((const tsip_header_P_Asserted_Identity_t*)header)->uri, tsk_false, tsk_false);
break;
default:
return tsip_header_value_tostring(header);
}
}
// SWIG: %newobject getHeaderValueAt;
return tsk_null;
default:
return tsip_header_value_tostring(header);
}
}
// SWIG: %newobject getHeaderValueAt;
return tsk_null;
}
// e.g. getHeaderParamValue("content-type", "charset");
char* SipMessage::getSipHeaderParamValue(const char* name, const char* param, unsigned index /*=0*/)
{
const tsip_header_t* header;
const tsip_header_t* header;
if((header = this->getSipHeader(name, index))){
return tsip_header_get_param_value(header, param);
}
if((header = this->getSipHeader(name, index))) {
return tsip_header_get_param_value(header, param);
}
// SWIG: %newobject getSipHeaderParamValue;
return tsk_null;
// SWIG: %newobject getSipHeaderParamValue;
return tsk_null;
}
/** Returns the content length.
*/
unsigned SipMessage::getSipContentLength()
{
return TSIP_MESSAGE_CONTENT_DATA_LENGTH(m_pSipMessage);
return TSIP_MESSAGE_CONTENT_DATA_LENGTH(m_pSipMessage);
}
/** Gets the message content
@ -259,31 +325,31 @@ unsigned SipMessage::getSipContentLength()
*/
unsigned SipMessage::getSipContent(void* output, unsigned maxsize)
{
unsigned retsize = 0;
if(output && maxsize && TSIP_MESSAGE_HAS_CONTENT(m_pSipMessage)){
retsize = (m_pSipMessage->Content->size > maxsize) ? maxsize : m_pSipMessage->Content->size;
memcpy(output, m_pSipMessage->Content->data, retsize);
}
return retsize;
unsigned retsize = 0;
if(output && maxsize && TSIP_MESSAGE_HAS_CONTENT(m_pSipMessage)) {
retsize = (m_pSipMessage->Content->size > maxsize) ? maxsize : m_pSipMessage->Content->size;
memcpy(output, m_pSipMessage->Content->data, retsize);
}
return retsize;
}
const void* SipMessage::getSipContentPtr()
{
if(m_pSipMessage && m_pSipMessage->Content){
return m_pSipMessage->Content->data;
}
return tsk_null;
if(m_pSipMessage && m_pSipMessage->Content) {
return m_pSipMessage->Content->data;
}
return tsk_null;
}
const SdpMessage* SipMessage::getSdpMessage()
{
if(!m_pSdpMessage && TSIP_MESSAGE_HAS_CONTENT(m_pSipMessage)){
tsdp_message_t* sdp = tsdp_message_parse(m_pSipMessage->Content->data, m_pSipMessage->Content->size);
if(sdp){
m_pSdpMessage = new SdpMessage(sdp);
TSK_OBJECT_SAFE_FREE(sdp);
}
}
if(!m_pSdpMessage && TSIP_MESSAGE_HAS_CONTENT(m_pSipMessage)) {
tsdp_message_t* sdp = tsdp_message_parse(m_pSipMessage->Content->data, m_pSipMessage->Content->size);
if(sdp) {
m_pSdpMessage = new SdpMessage(sdp);
TSK_OBJECT_SAFE_FREE(sdp);
}
}
return m_pSdpMessage;
return m_pSdpMessage;
}

View File

@ -28,51 +28,55 @@
class TINYWRAP_API SdpMessage
{
public:
SdpMessage();
SdpMessage();
#if !defined(SWIG)
SdpMessage(tsdp_message_t *sdpmessage);
SdpMessage(tsdp_message_t *sdpmessage);
#endif
virtual ~SdpMessage();
virtual ~SdpMessage();
char* getSdpHeaderValue(const char* media, char name, unsigned index = 0);
char* getSdpHeaderAValue(const char* media, const char* attributeName);
char* getSdpHeaderValue(const char* media, char name, unsigned index = 0);
char* getSdpHeaderAValue(const char* media, const char* attributeName);
#if !defined(SWIG)
const tsdp_message_t * getWrappedSdpMessage(){ return m_pSdpMessage; }
const tsdp_message_t * getWrappedSdpMessage() {
return m_pSdpMessage;
}
#endif
private:
tsdp_message_t *m_pSdpMessage;
tsdp_message_t *m_pSdpMessage;
};
class TINYWRAP_API SipMessage
{
public:
SipMessage();
SipMessage();
#if !defined(SWIG)
SipMessage(tsip_message_t *sipmessage);
SipMessage(tsip_message_t *sipmessage);
#endif
virtual ~SipMessage();
virtual ~SipMessage();
bool isResponse();
tsip_request_type_t getRequestType();
short getResponseCode();
const char* getResponsePhrase();
char* getSipHeaderValue(const char* name, unsigned index = 0);
char* getSipHeaderParamValue(const char* name, const char* param, unsigned index = 0);
unsigned getSipContentLength();
unsigned getSipContent(void* output, unsigned maxsize);
bool isResponse();
tsip_request_type_t getRequestType();
short getResponseCode();
const char* getResponsePhrase();
char* getSipHeaderValue(const char* name, unsigned index = 0);
char* getSipHeaderParamValue(const char* name, const char* param, unsigned index = 0);
unsigned getSipContentLength();
unsigned getSipContent(void* output, unsigned maxsize);
#if !defined(SWIG)
const void* getSipContentPtr();
const tsip_message_t* getWrappedSipMessage()const{ return m_pSipMessage; }
const void* getSipContentPtr();
const tsip_message_t* getWrappedSipMessage()const {
return m_pSipMessage;
}
#endif
const SdpMessage* getSdpMessage();
const SdpMessage* getSdpMessage();
private:
const tsip_header_t* getSipHeader(const char* name, unsigned index = 0);
const tsip_header_t* getSipHeader(const char* name, unsigned index = 0);
private:
tsip_message_t *m_pSipMessage;
SdpMessage *m_pSdpMessage;
tsip_message_t *m_pSipMessage;
SdpMessage *m_pSdpMessage;
};
#endif /* TINYWRAP_SIPMESSAGE_H */

File diff suppressed because it is too large Load Diff

View File

@ -34,63 +34,77 @@ class MsrpCallback;
class MediaSessionMgr;
/* ======================== T140Callback ========================*/
class TINYWRAP_API T140CallbackData{
public:
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;
}
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(){}
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;
}
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;
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; }
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 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; }
RtcpCallback() {}
virtual ~RtcpCallback() {}
virtual int onevent(const RtcpCallbackData* e) {
return 0;
}
};
#endif /* #if !defined(SWIG) */
@ -100,65 +114,67 @@ public:
class TINYWRAP_API SipSession
{
public:
SipSession(SipStack* stack);
SipSession(SipStack* stack);
#if !defined(SWIG)
SipSession(SipStack* stack, tsip_ssession_handle_t* pHandle);
SipSession(SipStack* stack, tsip_ssession_handle_t* pHandle);
#endif
virtual ~SipSession();
virtual ~SipSession();
public:
bool haveOwnership();
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();
bool haveOwnership();
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);
bool setAuth(const char* authHa1, const char* authIMPI);
#endif
unsigned getId()const;
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; }
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);
void init(SipStack* stack, tsip_ssession_handle_t* pHandle=tsk_null);
protected:
tsip_ssession_handle_t* m_pHandle;
const SipStack* m_pStack;
tsip_ssession_handle_t* m_pHandle;
const SipStack* m_pStack;
};
/* ======================== InviteSession ========================*/
class TINYWRAP_API InviteSession : public SipSession
{
public: /* ctor() and dtor() */
InviteSession(SipStack* Stack);
InviteSession(SipStack* Stack);
#if !defined(SWIG)
InviteSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
InviteSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
#endif
virtual ~InviteSession();
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();
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;
MediaSessionMgr* m_pMediaMgr;
};
@ -166,92 +182,92 @@ private:
class TINYWRAP_API CallSession : public InviteSession
{
public: /* ctor() and dtor() */
CallSession(SipStack* pStack);
CallSession(SipStack* pStack);
#if !defined(SWIG)
CallSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
CallSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
#endif
virtual ~CallSession();
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 */
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 */
bool call(const char* remoteUriString, twrap_media_type_t media, ActionConfig* config=tsk_null);
bool call(const SipUri* remoteUri, twrap_media_type_t media, ActionConfig* config=tsk_null);
bool call(const char* remoteUriString, twrap_media_type_t media, ActionConfig* config=tsk_null);
bool call(const SipUri* remoteUri, twrap_media_type_t media, ActionConfig* config=tsk_null);
#if !defined(SWIG)
bool setSupportedCodecs(int32_t codecs);
int32_t getNegotiatedCodecs();
bool setMediaSSRC(twrap_media_type_t media, uint32_t ssrc);
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 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);
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 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);
#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);
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);
#endif /* #if !defined(SWIG) */
private:
const T140Callback* m_pT140Callback;
const RtcpCallback* m_pRtcpCallback;
const T140Callback* m_pT140Callback;
const RtcpCallback* m_pRtcpCallback;
};
/* ======================== MsrpSession ========================*/
class TINYWRAP_API MsrpSession : public InviteSession
{
public: /* ctor() and dtor() */
MsrpSession(SipStack* pStack, MsrpCallback* pCallback);
MsrpSession(SipStack* pStack, MsrpCallback* pCallback);
#if !defined(SWIG)
MsrpSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
MsrpSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
#endif
virtual ~MsrpSession();
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);
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 */
public: /* Public helper function */
#if !defined(SWIG)
inline MsrpCallback* getCallback()const{
return m_pCallback;
}
inline MsrpCallback* getCallback()const {
return m_pCallback;
}
#endif
private:
MsrpCallback* m_pCallback;
MsrpCallback* m_pCallback;
};
@ -260,48 +276,48 @@ private:
class TINYWRAP_API MessagingSession : public SipSession
{
public: /* ctor() and dtor() */
MessagingSession(SipStack* pStack);
MessagingSession(SipStack* pStack);
#if !defined(SWIG)
MessagingSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
MessagingSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
#endif
virtual ~MessagingSession();
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);
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);
InfoSession(SipStack* pStack);
#if !defined(SWIG)
InfoSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
InfoSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
#endif
virtual ~InfoSession();
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);
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);
OptionsSession(SipStack* pStack);
#if !defined(SWIG)
OptionsSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
OptionsSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
#endif
virtual ~OptionsSession();
virtual ~OptionsSession();
public: /* Public functions */
bool send(ActionConfig* config=tsk_null);
bool accept(ActionConfig* config=tsk_null);
bool reject(ActionConfig* config=tsk_null);
bool send(ActionConfig* config=tsk_null);
bool accept(ActionConfig* config=tsk_null);
bool reject(ActionConfig* config=tsk_null);
};
@ -310,15 +326,15 @@ public: /* Public functions */
class TINYWRAP_API PublicationSession : public SipSession
{
public: /* ctor() and dtor() */
PublicationSession(SipStack* pStack);
PublicationSession(SipStack* pStack);
#if !defined(SWIG)
PublicationSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
PublicationSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
#endif
virtual ~PublicationSession();
virtual ~PublicationSession();
public: /* Public functions */
bool publish(const void* payload, unsigned len, ActionConfig* config=tsk_null);
bool unPublish(ActionConfig* config=tsk_null);
bool publish(const void* payload, unsigned len, ActionConfig* config=tsk_null);
bool unPublish(ActionConfig* config=tsk_null);
};
@ -326,17 +342,17 @@ public: /* Public functions */
class TINYWRAP_API RegistrationSession : public SipSession
{
public: /* ctor() and dtor() */
RegistrationSession(SipStack* pStack);
RegistrationSession(SipStack* pStack);
#if !defined(SWIG)
RegistrationSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
RegistrationSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
#endif
virtual ~RegistrationSession();
virtual ~RegistrationSession();
public: /* Public functions */
bool register_(ActionConfig* config=tsk_null);
bool unRegister(ActionConfig* config=tsk_null);
bool accept(ActionConfig* config=tsk_null);
bool reject(ActionConfig* config=tsk_null);
bool register_(ActionConfig* config=tsk_null);
bool unRegister(ActionConfig* config=tsk_null);
bool accept(ActionConfig* config=tsk_null);
bool reject(ActionConfig* config=tsk_null);
};
@ -344,15 +360,15 @@ public: /* Public functions */
class TINYWRAP_API SubscriptionSession : public SipSession
{
public: /* ctor() and dtor() */
SubscriptionSession(SipStack* pStack);
SubscriptionSession(SipStack* pStack);
#if !defined(SWIG)
SubscriptionSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
SubscriptionSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
#endif
virtual ~SubscriptionSession();
virtual ~SubscriptionSession();
public: /* Public functions */
bool subscribe();
bool unSubscribe();
bool subscribe();
bool unSubscribe();
};
#endif /* TINYWRAP_SIPSESSION_H */

View File

@ -36,585 +36,586 @@ static int stack_callback(const tsip_event_t *sipevent);
static int session_handle_event(const tsip_event_t *sipevent);
SipStack::SipStack(SipCallback* pCallback, const char* realm_uri, const char* impi_uri, const char* impu_uri)
:SafeObject()
:SafeObject()
{
m_pDebugCallback = tsk_null;
m_pCallback = pCallback;
m_pDebugCallback = tsk_null;
m_pCallback = pCallback;
/* Initialize network and media layers */
if(!SipStack::initialize()){
return;// isValid() will be false
}
/* Initialize network and media layers */
if(!SipStack::initialize()) {
return;// isValid() will be false
}
/* Creates stack handle */
m_pHandle = tsip_stack_create(stack_callback, realm_uri, impi_uri, impu_uri,
TSIP_STACK_SET_USERDATA(this), /* used as context (useful for server-initiated requests) */
TSIP_STACK_SET_NULL());
/* Creates stack handle */
m_pHandle = tsip_stack_create(stack_callback, realm_uri, impi_uri, impu_uri,
TSIP_STACK_SET_USERDATA(this), /* used as context (useful for server-initiated requests) */
TSIP_STACK_SET_NULL());
}
SipStack::~SipStack()
{
this->stop();
this->stop();
/* Destroy stack handle */
TSK_OBJECT_SAFE_FREE(m_pHandle);
/* Destroy stack handle */
TSK_OBJECT_SAFE_FREE(m_pHandle);
}
bool SipStack::start()
{
bool ret = (tsip_stack_start(m_pHandle) == 0);
return ret;
bool ret = (tsip_stack_start(m_pHandle) == 0);
return ret;
}
bool SipStack::setDebugCallback(DDebugCallback* pCallback)
{
if(this && pCallback){
m_pDebugCallback = pCallback;
tsk_debug_set_arg_data(this);
tsk_debug_set_info_cb(DDebugCallback::debug_info_cb);
tsk_debug_set_warn_cb(DDebugCallback::debug_warn_cb);
tsk_debug_set_error_cb(DDebugCallback::debug_error_cb);
tsk_debug_set_fatal_cb(DDebugCallback::debug_fatal_cb);
}
else if(this){
m_pDebugCallback = tsk_null;
tsk_debug_set_arg_data(tsk_null);
tsk_debug_set_info_cb(tsk_null);
tsk_debug_set_warn_cb(tsk_null);
tsk_debug_set_error_cb(tsk_null);
tsk_debug_set_fatal_cb(tsk_null);
}
if(this && pCallback) {
m_pDebugCallback = pCallback;
tsk_debug_set_arg_data(this);
tsk_debug_set_info_cb(DDebugCallback::debug_info_cb);
tsk_debug_set_warn_cb(DDebugCallback::debug_warn_cb);
tsk_debug_set_error_cb(DDebugCallback::debug_error_cb);
tsk_debug_set_fatal_cb(DDebugCallback::debug_fatal_cb);
}
else if(this) {
m_pDebugCallback = tsk_null;
tsk_debug_set_arg_data(tsk_null);
tsk_debug_set_info_cb(tsk_null);
tsk_debug_set_warn_cb(tsk_null);
tsk_debug_set_error_cb(tsk_null);
tsk_debug_set_fatal_cb(tsk_null);
}
return true;
return true;
}
bool SipStack::setDisplayName(const char* display_name)
{
int ret = tsip_stack_set(m_pHandle,
TSIP_STACK_SET_DISPLAY_NAME(display_name),
TSIP_STACK_SET_NULL());
return (ret == 0);
int ret = tsip_stack_set(m_pHandle,
TSIP_STACK_SET_DISPLAY_NAME(display_name),
TSIP_STACK_SET_NULL());
return (ret == 0);
}
bool SipStack::setRealm(const char* realm_uri)
{
int ret = tsip_stack_set(m_pHandle,
TSIP_STACK_SET_REALM(realm_uri),
TSIP_STACK_SET_NULL());
return (ret == 0);
int ret = tsip_stack_set(m_pHandle,
TSIP_STACK_SET_REALM(realm_uri),
TSIP_STACK_SET_NULL());
return (ret == 0);
}
bool SipStack::setIMPI(const char* impi)
{
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_IMPI(impi),
TSIP_STACK_SET_NULL()) == 0);
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_IMPI(impi),
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::setIMPU(const char* impu_uri)
{
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_IMPU(impu_uri),
TSIP_STACK_SET_NULL()) == 0);
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_IMPU(impu_uri),
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::setPassword(const char* password)
{
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_PASSWORD(password),
TSIP_STACK_SET_NULL()) == 0);
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_PASSWORD(password),
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::setAMF(const char* amf)
{
uint16_t _amf = (uint16_t)tsk_atox(amf);
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_IMS_AKA_AMF(_amf),
TSIP_STACK_SET_NULL()) == 0);
uint16_t _amf = (uint16_t)tsk_atox(amf);
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_IMS_AKA_AMF(_amf),
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::setOperatorId(const char* opid)
{
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_IMS_AKA_OPERATOR_ID(opid),
TSIP_STACK_SET_NULL()) == 0);
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_IMS_AKA_OPERATOR_ID(opid),
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::setProxyCSCF(const char* fqdn, unsigned short port, const char* transport, const char* ipversion)
{
unsigned _port = port;//promote
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_PROXY_CSCF(fqdn, _port, transport, ipversion),
TSIP_STACK_SET_NULL()) == 0);
unsigned _port = port;//promote
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_PROXY_CSCF(fqdn, _port, transport, ipversion),
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::setLocalIP(const char* ip, const char* transport/*=tsk_null*/)
{
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_LOCAL_IP_2(transport, ip),
TSIP_STACK_SET_NULL()) == 0);
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_LOCAL_IP_2(transport, ip),
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::setLocalPort(unsigned short port, const char* transport/*=tsk_null*/)
{
unsigned _port = port;//promote
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_LOCAL_PORT_2(transport, _port),
TSIP_STACK_SET_NULL()) == 0);
unsigned _port = port;//promote
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_LOCAL_PORT_2(transport, _port),
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::setEarlyIMS(bool enabled){
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_EARLY_IMS(enabled? tsk_true : tsk_false),
TSIP_STACK_SET_NULL()) == 0);
bool SipStack::setEarlyIMS(bool enabled)
{
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_EARLY_IMS(enabled? tsk_true : tsk_false),
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::addHeader(const char* name, const char* value)
{
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_HEADER(name, value),
TSIP_STACK_SET_NULL()) == 0);
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_HEADER(name, value),
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::removeHeader(const char* name)
{
return (tsip_stack_set(m_pHandle,
TSIP_STACK_UNSET_HEADER(name),
TSIP_STACK_SET_NULL()) == 0);
return (tsip_stack_set(m_pHandle,
TSIP_STACK_UNSET_HEADER(name),
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::addDnsServer(const char* ip)
{
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_DNS_SERVER(ip),
TSIP_STACK_SET_NULL()) == 0);
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_DNS_SERVER(ip),
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::setDnsDiscovery(bool enabled)
{
tsk_bool_t _enabled = enabled;// 32bit/64bit workaround
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_DISCOVERY_NAPTR(_enabled),
TSIP_STACK_SET_NULL()) == 0);
tsk_bool_t _enabled = enabled;// 32bit/64bit workaround
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_DISCOVERY_NAPTR(_enabled),
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::setAoR(const char* ip, int port)
{
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_AOR(ip, port),
TSIP_STACK_SET_NULL()) == 0);
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_AOR(ip, port),
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::setMode(enum tsip_stack_mode_e mode)
{
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_MODE(mode),
TSIP_STACK_SET_NULL()) == 0);
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_MODE(mode),
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::setSigCompParams(unsigned dms, unsigned sms, unsigned cpb, bool enablePresDict)
{
tsk_bool_t _enablePresDict= enablePresDict;// 32bit/64bit workaround
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_SIGCOMP(dms, sms, cpb, _enablePresDict),
TSIP_STACK_SET_NULL()) == 0);
tsk_bool_t _enablePresDict= enablePresDict;// 32bit/64bit workaround
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_SIGCOMP(dms, sms, cpb, _enablePresDict),
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::addSigCompCompartment(const char* compId)
{
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_SIGCOMP_NEW_COMPARTMENT(compId),
TSIP_STACK_SET_NULL()) == 0);
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_SIGCOMP_NEW_COMPARTMENT(compId),
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::removeSigCompCompartment(const char* compId)
{
return (tsip_stack_set(m_pHandle,
TSIP_STACK_UNSET_SIGCOMP_COMPARTMENT(compId),
TSIP_STACK_SET_NULL()) == 0);
return (tsip_stack_set(m_pHandle,
TSIP_STACK_UNSET_SIGCOMP_COMPARTMENT(compId),
TSIP_STACK_SET_NULL()) == 0);
}
// @deprecated
// @deprecated
bool SipStack::setSTUNEnabledForICE(bool enabled)
{
#if 0
tsk_bool_t _enabled = enabled ? tsk_true : tsk_false;
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_ICE_STUN_ENABLED(_enabled),
TSIP_STACK_SET_NULL()) == 0);
tsk_bool_t _enabled = enabled ? tsk_true : tsk_false;
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_ICE_STUN_ENABLED(_enabled),
TSIP_STACK_SET_NULL()) == 0);
#else
// set global value
return (tmedia_defaults_set_icestun_enabled(enabled ? tsk_true : tsk_false) == 0);
// to set the value per session, use "CallSession::setICEStun()"
// set global value
return (tmedia_defaults_set_icestun_enabled(enabled ? tsk_true : tsk_false) == 0);
// to set the value per session, use "CallSession::setICEStun()"
#endif
}
// @deprecated
// @deprecated
bool SipStack::setSTUNServer(const char* hostname, unsigned short port)
{
#if 0
unsigned _port = port;//promote
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_STUN_SERVER(hostname, _port),
TSIP_STACK_SET_NULL()) == 0);
unsigned _port = port;//promote
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_STUN_SERVER(hostname, _port),
TSIP_STACK_SET_NULL()) == 0);
#else
// set global value
return (tmedia_defaults_set_stun_server(hostname, port) == 0);
// to set the value per session, use "CallSession::setSTUNServer()"
// set global value
return (tmedia_defaults_set_stun_server(hostname, port) == 0);
// to set the value per session, use "CallSession::setSTUNServer()"
#endif
}
// @deprecated
// @deprecated
bool SipStack::setSTUNCred(const char* login, const char* password)
{
#if 0
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_STUN_CRED(login, password),
TSIP_STACK_SET_NULL()) == 0);
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_STUN_CRED(login, password),
TSIP_STACK_SET_NULL()) == 0);
#else
// set global value
return (tmedia_defaults_set_stun_cred(login, password) == 0);
// to set the value per session, use "CallSession::setSTUNCred()"
// set global value
return (tmedia_defaults_set_stun_cred(login, password) == 0);
// to set the value per session, use "CallSession::setSTUNCred()"
#endif
}
bool SipStack::setSTUNEnabled(bool enabled)
{
tsk_bool_t _enabled = enabled ? tsk_true : tsk_false;
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_STUN_ENABLED(_enabled),
TSIP_STACK_SET_NULL()) == 0);
tsk_bool_t _enabled = enabled ? tsk_true : tsk_false;
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_STUN_ENABLED(_enabled),
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::setTLSSecAgree(bool enabled)
{
tsk_bool_t _enable = enabled ? tsk_true : tsk_false;
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_SECAGREE_TLS(_enable),
TSIP_STACK_SET_NULL()) == 0);
tsk_bool_t _enable = enabled ? tsk_true : tsk_false;
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_SECAGREE_TLS(_enable),
TSIP_STACK_SET_NULL()) == 0);
}
/*@deprecated: typo */
bool SipStack::setSSLCretificates(const char* privKey, const char* pubKey, const char* caKey, bool verify/* = false*/)
{
return setSSLCertificates(privKey, pubKey, caKey, verify);
return setSSLCertificates(privKey, pubKey, caKey, verify);
}
bool SipStack::setSSLCertificates(const char* privKey, const char* pubKey, const char* caKey, bool verify/* = false*/)
{
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_TLS_CERTS_2(caKey, pubKey, privKey, (verify ? tsk_true : tsk_false)),
TSIP_STACK_SET_NULL()) == 0);
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_TLS_CERTS_2(caKey, pubKey, privKey, (verify ? tsk_true : tsk_false)),
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::setIPSecSecAgree(bool enabled)
{
tsk_bool_t _enable = enabled;
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_SECAGREE_IPSEC(_enable),
TSIP_STACK_SET_NULL()) == 0);
tsk_bool_t _enable = enabled;
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_SECAGREE_IPSEC(_enable),
TSIP_STACK_SET_NULL()) == 0);
}
bool SipStack::setIPSecParameters(const char* algo, const char* ealgo, const char* mode, const char* proto)
{
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_IPSEC_PARAMS(algo, ealgo, mode, proto),
TSIP_STACK_SET_NULL()) == 0);
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_IPSEC_PARAMS(algo, ealgo, mode, proto),
TSIP_STACK_SET_NULL()) == 0);
}
char* SipStack::dnsENUM(const char* service, const char* e164num, const char* domain)
{
tnet_dns_ctx_t* dnsctx = tsip_stack_get_dnsctx(m_pHandle);
char* uri = tsk_null;
tnet_dns_ctx_t* dnsctx = tsip_stack_get_dnsctx(m_pHandle);
char* uri = tsk_null;
if(dnsctx){
if(!(uri = tnet_dns_enum_2(dnsctx, service, e164num, domain))){
TSK_DEBUG_ERROR("ENUM(%s) failed", e164num);
}
tsk_object_unref(dnsctx);
return uri;
}
else{
TSK_DEBUG_ERROR("No DNS Context could be found");
return tsk_null;
}
if(dnsctx) {
if(!(uri = tnet_dns_enum_2(dnsctx, service, e164num, domain))) {
TSK_DEBUG_ERROR("ENUM(%s) failed", e164num);
}
tsk_object_unref(dnsctx);
return uri;
}
else {
TSK_DEBUG_ERROR("No DNS Context could be found");
return tsk_null;
}
}
char* SipStack::dnsNaptrSrv(const char* domain, const char* service, unsigned short *OUTPUT)
{
tnet_dns_ctx_t* dnsctx = tsip_stack_get_dnsctx(m_pHandle);
char* ip = tsk_null;
tnet_port_t port;
*OUTPUT = 0;
tnet_dns_ctx_t* dnsctx = tsip_stack_get_dnsctx(m_pHandle);
char* ip = tsk_null;
tnet_port_t port;
*OUTPUT = 0;
if(dnsctx){
if(!tnet_dns_query_naptr_srv(dnsctx, domain, service, &ip, &port)){
*OUTPUT = port;
}
tsk_object_unref(dnsctx);
return ip;
}
else{
TSK_DEBUG_ERROR("No DNS Context could be found");
return tsk_null;
}
if(dnsctx) {
if(!tnet_dns_query_naptr_srv(dnsctx, domain, service, &ip, &port)) {
*OUTPUT = port;
}
tsk_object_unref(dnsctx);
return ip;
}
else {
TSK_DEBUG_ERROR("No DNS Context could be found");
return tsk_null;
}
}
char* SipStack::dnsSrv(const char* service, unsigned short* OUTPUT)
{
tnet_dns_ctx_t* dnsctx = tsip_stack_get_dnsctx(m_pHandle);
char* ip = tsk_null;
tnet_port_t port = 0;
*OUTPUT = 0;
tnet_dns_ctx_t* dnsctx = tsip_stack_get_dnsctx(m_pHandle);
char* ip = tsk_null;
tnet_port_t port = 0;
*OUTPUT = 0;
if(dnsctx){
if(!tnet_dns_query_srv(dnsctx, service, &ip, &port)){
*OUTPUT = port;
}
tsk_object_unref(dnsctx);
return ip;
}
else{
TSK_DEBUG_ERROR("No DNS Context could be found");
return tsk_null;
}
if(dnsctx) {
if(!tnet_dns_query_srv(dnsctx, service, &ip, &port)) {
*OUTPUT = port;
}
tsk_object_unref(dnsctx);
return ip;
}
else {
TSK_DEBUG_ERROR("No DNS Context could be found");
return tsk_null;
}
}
bool SipStack::setMaxFDs(unsigned max_fds)
{
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_MAX_FDS(max_fds),
TSIP_STACK_SET_NULL()) == 0);
return (tsip_stack_set(m_pHandle,
TSIP_STACK_SET_MAX_FDS(max_fds),
TSIP_STACK_SET_NULL()) == 0);
}
char* SipStack::getLocalIPnPort(const char* protocol, unsigned short* OUTPUT)
{
tnet_ip_t ip;
tnet_port_t port;
int ret;
tnet_ip_t ip;
tnet_port_t port;
int ret;
if(!OUTPUT || !protocol){
TSK_DEBUG_ERROR("invalid parameter");
return tsk_null;
}
if(!OUTPUT || !protocol) {
TSK_DEBUG_ERROR("invalid parameter");
return tsk_null;
}
if((ret = tsip_stack_get_local_ip_n_port(m_pHandle, protocol, &port, &ip))){
TSK_DEBUG_ERROR("Failed to get local ip and port with error code=%d", ret);
return tsk_null;
}
if((ret = tsip_stack_get_local_ip_n_port(m_pHandle, protocol, &port, &ip))) {
TSK_DEBUG_ERROR("Failed to get local ip and port with error code=%d", ret);
return tsk_null;
}
*OUTPUT = port;
return tsk_strdup(ip); // See Swig %newobject
*OUTPUT = port;
return tsk_strdup(ip); // See Swig %newobject
}
char* SipStack::getPreferredIdentity()
{
tsip_uri_t* ppid = tsip_stack_get_preferred_id(m_pHandle);
char* str_ppid = tsk_null;
if(ppid){
str_ppid = tsip_uri_tostring(ppid, tsk_false, tsk_false);
TSK_OBJECT_SAFE_FREE(ppid);
}
return str_ppid;
tsip_uri_t* ppid = tsip_stack_get_preferred_id(m_pHandle);
char* str_ppid = tsk_null;
if(ppid) {
str_ppid = tsip_uri_tostring(ppid, tsk_false, tsk_false);
TSK_OBJECT_SAFE_FREE(ppid);
}
return str_ppid;
}
bool SipStack::isValid()
{
return (m_pHandle != tsk_null);
return (m_pHandle != tsk_null);
}
bool SipStack::stop()
{
int ret = tsip_stack_stop(m_pHandle);
return (ret == 0);
int ret = tsip_stack_stop(m_pHandle);
return (ret == 0);
}
bool SipStack::initialize()
{
if (!g_bInitialized) {
int ret;
if (!g_bInitialized) {
int ret;
if((ret = tnet_startup())){
TSK_DEBUG_ERROR("tnet_startup failed with error code=%d", ret);
return false;
}
if((ret = thttp_startup())){
TSK_DEBUG_ERROR("thttp_startup failed with error code=%d", ret);
return false;
}
if((ret = tdav_init())){
TSK_DEBUG_ERROR("tdav_init failed with error code=%d", ret);
return false;
}
g_bInitialized = true;
}
return true;
if((ret = tnet_startup())) {
TSK_DEBUG_ERROR("tnet_startup failed with error code=%d", ret);
return false;
}
if((ret = thttp_startup())) {
TSK_DEBUG_ERROR("thttp_startup failed with error code=%d", ret);
return false;
}
if((ret = tdav_init())) {
TSK_DEBUG_ERROR("tdav_init failed with error code=%d", ret);
return false;
}
g_bInitialized = true;
}
return true;
}
bool SipStack::deInitialize()
{
if (SipStack::g_bInitialized) {
tdav_deinit();
thttp_cleanup();
tnet_cleanup();
SipStack::g_bInitialized = false;
}
return false;
if (SipStack::g_bInitialized) {
tdav_deinit();
thttp_cleanup();
tnet_cleanup();
SipStack::g_bInitialized = false;
}
return false;
}
void SipStack::setCodecs(tdav_codec_id_t codecs)
{
tdav_set_codecs(codecs);
tdav_set_codecs(codecs);
}
void SipStack::setCodecs_2(int64_t codecs) // For stupid languages
{
SipStack::setCodecs((tdav_codec_id_t)codecs);
SipStack::setCodecs((tdav_codec_id_t)codecs);
}
bool SipStack::setCodecPriority(tdav_codec_id_t codec_id, int priority)
{
return tdav_codec_set_priority(codec_id, priority) == 0;
return tdav_codec_set_priority(codec_id, priority) == 0;
}
bool SipStack::setCodecPriority_2(int codec_id, int priority)// For stupid languages
{
return SipStack::setCodecPriority((tdav_codec_id_t)codec_id, priority);
return SipStack::setCodecPriority((tdav_codec_id_t)codec_id, priority);
}
bool SipStack::isCodecSupported(tdav_codec_id_t codec_id)
{
return tdav_codec_is_supported(codec_id) ? true : false;
return tdav_codec_is_supported(codec_id) ? true : false;
}
bool SipStack::isIPSecSupported()
{
return tdav_ipsec_is_supported() ? true : false;
return tdav_ipsec_is_supported() ? true : false;
}
static int stack_callback(const tsip_event_t *sipevent)
{
int ret = 0;
const SipStack* sipStack = tsk_null;
SipEvent* e = tsk_null;
int ret = 0;
const SipStack* sipStack = tsk_null;
SipEvent* e = tsk_null;
if(!sipevent){ /* should never happen ...but who know? */
TSK_DEBUG_WARN("Null SIP event.");
return -1;
}
else {
if(sipevent->type == tsip_event_stack && sipevent->userdata){
/* sessionless event */
sipStack = dyn_cast<const SipStack*>((const SipStack*)sipevent->userdata);
}
else {
const void* userdata;
/* gets the stack from the session */
const tsip_stack_handle_t* stack_handle = tsip_ssession_get_stack(sipevent->ss);
if(stack_handle && (userdata = tsip_stack_get_userdata(stack_handle))){
sipStack = dyn_cast<const SipStack*>((const SipStack*)userdata);
}
}
}
if(!sipevent) { /* should never happen ...but who know? */
TSK_DEBUG_WARN("Null SIP event.");
return -1;
}
else {
if(sipevent->type == tsip_event_stack && sipevent->userdata) {
/* sessionless event */
sipStack = dyn_cast<const SipStack*>((const SipStack*)sipevent->userdata);
}
else {
const void* userdata;
/* gets the stack from the session */
const tsip_stack_handle_t* stack_handle = tsip_ssession_get_stack(sipevent->ss);
if(stack_handle && (userdata = tsip_stack_get_userdata(stack_handle))) {
sipStack = dyn_cast<const SipStack*>((const SipStack*)userdata);
}
}
}
if(!sipStack){
TSK_DEBUG_WARN("Invalid SIP event (Stack is Null).");
return -2;
}
if(!sipStack) {
TSK_DEBUG_WARN("Invalid SIP event (Stack is Null).");
return -2;
}
sipStack->Lock();
sipStack->Lock();
switch(sipevent->type){
case tsip_event_register:
{ /* REGISTER */
if(sipStack->getCallback()){
e = new RegistrationEvent(sipevent);
sipStack->getCallback()->OnRegistrationEvent((const RegistrationEvent*)e);
}
break;
}
case tsip_event_invite:
{ /* INVITE */
if(sipStack->getCallback()){
e = new InviteEvent(sipevent);
sipStack->getCallback()->OnInviteEvent((const InviteEvent*)e);
}
break;
}
case tsip_event_message:
{ /* MESSAGE */
if(sipStack->getCallback()){
e = new MessagingEvent(sipevent);
sipStack->getCallback()->OnMessagingEvent((const MessagingEvent*)e);
}
break;
}
case tsip_event_info:
{ /* INFO */
if(sipStack->getCallback()){
e = new InfoEvent(sipevent);
sipStack->getCallback()->OnInfoEvent((const InfoEvent*)e);
}
break;
}
case tsip_event_options:
{ /* OPTIONS */
if(sipStack->getCallback()){
e = new OptionsEvent(sipevent);
sipStack->getCallback()->OnOptionsEvent((const OptionsEvent*)e);
}
break;
}
case tsip_event_publish:
{ /* PUBLISH */
if(sipStack->getCallback()){
e = new PublicationEvent(sipevent);
sipStack->getCallback()->OnPublicationEvent((const PublicationEvent*)e);
}
break;
}
case tsip_event_subscribe:
{ /* SUBSCRIBE */
if(sipStack->getCallback()){
e = new SubscriptionEvent(sipevent);
sipStack->getCallback()->OnSubscriptionEvent((const SubscriptionEvent*)e);
}
break;
}
switch(sipevent->type) {
case tsip_event_register: {
/* REGISTER */
if(sipStack->getCallback()) {
e = new RegistrationEvent(sipevent);
sipStack->getCallback()->OnRegistrationEvent((const RegistrationEvent*)e);
}
break;
}
case tsip_event_invite: {
/* INVITE */
if(sipStack->getCallback()) {
e = new InviteEvent(sipevent);
sipStack->getCallback()->OnInviteEvent((const InviteEvent*)e);
}
break;
}
case tsip_event_message: {
/* MESSAGE */
if(sipStack->getCallback()) {
e = new MessagingEvent(sipevent);
sipStack->getCallback()->OnMessagingEvent((const MessagingEvent*)e);
}
break;
}
case tsip_event_info: {
/* INFO */
if(sipStack->getCallback()) {
e = new InfoEvent(sipevent);
sipStack->getCallback()->OnInfoEvent((const InfoEvent*)e);
}
break;
}
case tsip_event_options: {
/* OPTIONS */
if(sipStack->getCallback()) {
e = new OptionsEvent(sipevent);
sipStack->getCallback()->OnOptionsEvent((const OptionsEvent*)e);
}
break;
}
case tsip_event_publish: {
/* PUBLISH */
if(sipStack->getCallback()) {
e = new PublicationEvent(sipevent);
sipStack->getCallback()->OnPublicationEvent((const PublicationEvent*)e);
}
break;
}
case tsip_event_subscribe: {
/* SUBSCRIBE */
if(sipStack->getCallback()) {
e = new SubscriptionEvent(sipevent);
sipStack->getCallback()->OnSubscriptionEvent((const SubscriptionEvent*)e);
}
break;
}
case tsip_event_dialog:
{ /* Common to all dialogs */
if(sipStack->getCallback()){
e = new DialogEvent(sipevent);
sipStack->getCallback()->OnDialogEvent((const DialogEvent*)e);
}
break;
}
case tsip_event_dialog: {
/* Common to all dialogs */
if(sipStack->getCallback()) {
e = new DialogEvent(sipevent);
sipStack->getCallback()->OnDialogEvent((const DialogEvent*)e);
}
break;
}
case tsip_event_stack:
{ /* Stack event */
if(sipStack->getCallback()){
e = new StackEvent(sipevent);
sipStack->getCallback()->OnStackEvent((const StackEvent*)e);
}
break;
}
case tsip_event_stack: {
/* Stack event */
if(sipStack->getCallback()) {
e = new StackEvent(sipevent);
sipStack->getCallback()->OnStackEvent((const StackEvent*)e);
}
break;
}
default:
{ /* Unsupported */
TSK_DEBUG_WARN("%d not supported as SIP event.", sipevent->type);
ret = -3;
break;
}
}
default: {
/* Unsupported */
TSK_DEBUG_WARN("%d not supported as SIP event.", sipevent->type);
ret = -3;
break;
}
}
sipStack->UnLock();
sipStack->UnLock();
if(e){
delete e;
}
if(e) {
delete e;
}
return ret;
return ret;
}

View File

@ -36,88 +36,88 @@ class DDebugCallback;
class TINYWRAP_API SipStack: public SafeObject
{
public: /* ctor() and dtor() */
SipStack(SipCallback* pCallback, const char* realm_uri, const char* impi_uri, const char* impu_uri);
SipStack(SipCallback* pCallback, const char* realm_uri, const char* impi_uri, const char* impu_uri);
~SipStack();
public: /* API functions */
bool start();
bool setDebugCallback(DDebugCallback* pCallback);
bool setDisplayName(const char* display_name);
bool setRealm(const char* realm_uri);
bool setIMPI(const char* impi);
bool setIMPU(const char* impu_uri);
bool setPassword(const char* password);
bool setAMF(const char* amf);
bool setOperatorId(const char* opid);
bool setProxyCSCF(const char* fqdn, unsigned short port, const char* transport, const char* ipversion);
bool setLocalIP(const char* ip, const char* transport=tsk_null);
bool setLocalPort(unsigned short port, const char* transport=tsk_null);
bool setEarlyIMS(bool enabled);
bool addHeader(const char* name, const char* value);
bool removeHeader(const char* name);
bool addDnsServer(const char* ip);
bool setDnsDiscovery(bool enabled);
bool setAoR(const char* ip, int port);
bool start();
bool setDebugCallback(DDebugCallback* pCallback);
bool setDisplayName(const char* display_name);
bool setRealm(const char* realm_uri);
bool setIMPI(const char* impi);
bool setIMPU(const char* impu_uri);
bool setPassword(const char* password);
bool setAMF(const char* amf);
bool setOperatorId(const char* opid);
bool setProxyCSCF(const char* fqdn, unsigned short port, const char* transport, const char* ipversion);
bool setLocalIP(const char* ip, const char* transport=tsk_null);
bool setLocalPort(unsigned short port, const char* transport=tsk_null);
bool setEarlyIMS(bool enabled);
bool addHeader(const char* name, const char* value);
bool removeHeader(const char* name);
bool addDnsServer(const char* ip);
bool setDnsDiscovery(bool enabled);
bool setAoR(const char* ip, int port);
#if !defined(SWIG)
bool setMode(enum tsip_stack_mode_e mode);
bool setMode(enum tsip_stack_mode_e mode);
#endif
bool setSigCompParams(unsigned dms, unsigned sms, unsigned cpb, bool enablePresDict);
bool addSigCompCompartment(const char* compId);
bool removeSigCompCompartment(const char* compId);
bool setSigCompParams(unsigned dms, unsigned sms, unsigned cpb, bool enablePresDict);
bool addSigCompCompartment(const char* compId);
bool removeSigCompCompartment(const char* compId);
bool setSTUNEnabledForICE(bool enabled); // @deprecated
bool setSTUNServer(const char* hostname, unsigned short port); // @deprecated
bool setSTUNCred(const char* login, const char* password); // @deprecated
bool setSTUNEnabled(bool enabled);
bool setSTUNEnabledForICE(bool enabled); // @deprecated
bool setSTUNServer(const char* hostname, unsigned short port); // @deprecated
bool setSTUNCred(const char* login, const char* password); // @deprecated
bool setSTUNEnabled(bool enabled);
bool setTLSSecAgree(bool enabled);
bool setSSLCertificates(const char* privKey, const char* pubKey, const char* caKey, bool verify = false);
bool setSSLCretificates(const char* privKey, const char* pubKey, const char* caKey, bool verify = false); /*@deprecated: typo */
bool setIPSecSecAgree(bool enabled);
bool setIPSecParameters(const char* algo, const char* ealgo, const char* mode, const char* proto);
bool setTLSSecAgree(bool enabled);
bool setSSLCertificates(const char* privKey, const char* pubKey, const char* caKey, bool verify = false);
bool setSSLCretificates(const char* privKey, const char* pubKey, const char* caKey, bool verify = false); /*@deprecated: typo */
bool setIPSecSecAgree(bool enabled);
bool setIPSecParameters(const char* algo, const char* ealgo, const char* mode, const char* proto);
char* dnsENUM(const char* service, const char* e164num, const char* domain);
char* dnsNaptrSrv(const char* domain, const char* service, unsigned short *OUTPUT);
char* dnsSrv(const char* service, unsigned short* OUTPUT);
char* dnsENUM(const char* service, const char* e164num, const char* domain);
char* dnsNaptrSrv(const char* domain, const char* service, unsigned short *OUTPUT);
char* dnsSrv(const char* service, unsigned short* OUTPUT);
bool setMaxFDs(unsigned max_fds);
bool setMaxFDs(unsigned max_fds);
char* getLocalIPnPort(const char* protocol, unsigned short* OUTPUT);
char* getLocalIPnPort(const char* protocol, unsigned short* OUTPUT);
char* getPreferredIdentity();
char* getPreferredIdentity();
bool isValid();
bool stop();
bool isValid();
bool stop();
static bool initialize();
static bool deInitialize();
static void setCodecs(tdav_codec_id_t codecs);
static void setCodecs_2(int64_t codecs); // For stupid languages
static bool setCodecPriority(tdav_codec_id_t codec_id, int priority);
static bool setCodecPriority_2(int codec, int priority);// For stupid languages
static bool isCodecSupported(tdav_codec_id_t codec_id);
static bool isIPSecSupported();
static bool initialize();
static bool deInitialize();
static void setCodecs(tdav_codec_id_t codecs);
static void setCodecs_2(int64_t codecs); // For stupid languages
static bool setCodecPriority(tdav_codec_id_t codec_id, int priority);
static bool setCodecPriority_2(int codec, int priority);// For stupid languages
static bool isCodecSupported(tdav_codec_id_t codec_id);
static bool isIPSecSupported();
public: /* Public helper function */
#if !defined(SWIG)
inline tsip_stack_handle_t* getHandle()const{
return m_pHandle;
}
inline SipCallback* getCallback()const{
return m_pCallback;
}
inline DDebugCallback* getDebugCallback() const{
return m_pDebugCallback;
}
inline tsip_stack_handle_t* getHandle()const {
return m_pHandle;
}
inline SipCallback* getCallback()const {
return m_pCallback;
}
inline DDebugCallback* getDebugCallback() const {
return m_pDebugCallback;
}
#endif
private:
SipCallback* m_pCallback;
DDebugCallback* m_pDebugCallback;
tsip_stack_handle_t* m_pHandle;
SipCallback* m_pCallback;
DDebugCallback* m_pDebugCallback;
tsip_stack_handle_t* m_pHandle;
static bool g_bInitialized;
static bool g_bInitialized;
};
#endif /* TINYWRAP_SIPSTACK_H */

View File

@ -23,80 +23,80 @@
SipUri::SipUri(const char* uriString, const char* displayName/*=tsk_null*/)
{
if((m_pUri = tsip_uri_parse(uriString, (tsk_size_t)tsk_strlen(uriString))) && displayName){
m_pUri->display_name = tsk_strdup(displayName);
}
if((m_pUri = tsip_uri_parse(uriString, (tsk_size_t)tsk_strlen(uriString))) && displayName) {
m_pUri->display_name = tsk_strdup(displayName);
}
}
SipUri::~SipUri()
{
TSK_OBJECT_SAFE_FREE(m_pUri);
TSK_OBJECT_SAFE_FREE(m_pUri);
}
bool SipUri::isValid(const char* uriString)
{
tsip_uri_t* uri;
bool ret = false;
tsip_uri_t* uri;
bool ret = false;
if((uri = tsip_uri_parse(uriString, (tsk_size_t)tsk_strlen(uriString)))){
ret = (uri->type != uri_unknown)
&& (!tsk_strnullORempty(uri->host));
TSK_OBJECT_SAFE_FREE(uri);
}
return ret;
if((uri = tsip_uri_parse(uriString, (tsk_size_t)tsk_strlen(uriString)))) {
ret = (uri->type != uri_unknown)
&& (!tsk_strnullORempty(uri->host));
TSK_OBJECT_SAFE_FREE(uri);
}
return ret;
}
bool SipUri::isValid()
{
return (m_pUri != tsk_null);
return (m_pUri != tsk_null);
}
const char* SipUri::getScheme()
{
if(m_pUri){
return m_pUri->scheme;
}
return tsk_null;
if(m_pUri) {
return m_pUri->scheme;
}
return tsk_null;
}
const char* SipUri::getHost()
{
return m_pUri ? m_pUri->host : tsk_null;
return m_pUri ? m_pUri->host : tsk_null;
}
unsigned short SipUri::getPort()
{
return m_pUri ? m_pUri->port : 0;
return m_pUri ? m_pUri->port : 0;
}
const char* SipUri::getUserName()
{
return m_pUri ? m_pUri->user_name : tsk_null;
return m_pUri ? m_pUri->user_name : tsk_null;
}
const char* SipUri::getPassword()
{
return m_pUri ? m_pUri->password : tsk_null;
return m_pUri ? m_pUri->password : tsk_null;
}
const char* SipUri::getDisplayName()
{
return m_pUri ? m_pUri->display_name : tsk_null;
return m_pUri ? m_pUri->display_name : tsk_null;
}
void SipUri::setDisplayName(const char* displayName)
{
if(m_pUri){
tsk_strupdate(&m_pUri->display_name, displayName);
}
if(m_pUri) {
tsk_strupdate(&m_pUri->display_name, displayName);
}
}
const char* SipUri::getParamValue(const char* pname)
{
if(m_pUri && m_pUri->params){
const char* pvalue = tsk_params_get_param_value(m_pUri->params, pname);
return pvalue;
}
return tsk_null;
if(m_pUri && m_pUri->params) {
const char* pvalue = tsk_params_get_param_value(m_pUri->params, pname);
return pvalue;
}
return tsk_null;
}

View File

@ -29,29 +29,29 @@
class TINYWRAP_API SipUri
{
public:
SipUri(const char* uriString, const char* displayName=tsk_null);
~SipUri();
SipUri(const char* uriString, const char* displayName=tsk_null);
~SipUri();
public:
static bool isValid(const char*);
static bool isValid(const char*);
bool isValid();
const char* getScheme();
const char* getHost();
unsigned short getPort();
const char* getUserName();
const char* getPassword();
const char* getDisplayName();
const char* getParamValue(const char* pname);
void setDisplayName(const char* displayName);
bool isValid();
const char* getScheme();
const char* getHost();
unsigned short getPort();
const char* getUserName();
const char* getPassword();
const char* getDisplayName();
const char* getParamValue(const char* pname);
void setDisplayName(const char* displayName);
#if !defined(SWIG)
inline const tsip_uri_t* getWrappedUri()const{
return m_pUri;
}
inline const tsip_uri_t* getWrappedUri()const {
return m_pUri;
}
#endif
private:
tsip_uri_t* m_pUri;
tsip_uri_t* m_pUri;
};
#endif /* TINYWRAP_SIPURI_H */

View File

@ -29,241 +29,239 @@ unsigned XcapStack::count = 0;
static int stack_callback(const thttp_event_t *httpevent);
/* =================================== XCAP Event ==================================== */
typedef enum twrap_xcap_step_type_e
{
txst_name,
txst_pos,
txst_att,
txst_pos_n_att,
txst_ns
typedef enum twrap_xcap_step_type_e {
txst_name,
txst_pos,
txst_att,
txst_pos_n_att,
txst_ns
}
twrap_xcap_step_type_t;
typedef struct twrap_xcap_step_s
{
TSK_DECLARE_OBJECT;
typedef struct twrap_xcap_step_s {
TSK_DECLARE_OBJECT;
twrap_xcap_step_type_t type;
char* qname;
char* att_qname;
char* att_value;
unsigned pos;
struct{
char* prefix;
char* value;
} ns;
twrap_xcap_step_type_t type;
char* qname;
char* att_qname;
char* att_value;
unsigned pos;
struct {
char* prefix;
char* value;
} ns;
}
twrap_xcap_step_t;
static tsk_object_t* twrap_xcap_step_ctor(tsk_object_t * self, va_list * app)
{
twrap_xcap_step_t *step = (twrap_xcap_step_t *)self;
if(step){
}
return self;
twrap_xcap_step_t *step = (twrap_xcap_step_t *)self;
if(step) {
}
return self;
}
static tsk_object_t* twrap_xcap_step_dtor(tsk_object_t * self)
{
twrap_xcap_step_t *step = (twrap_xcap_step_t *)self;
if(step){
TSK_FREE(step->qname);
TSK_FREE(step->att_qname);
TSK_FREE(step->att_value);
TSK_FREE(step->ns.prefix);
TSK_FREE(step->ns.value);
}
twrap_xcap_step_t *step = (twrap_xcap_step_t *)self;
if(step) {
TSK_FREE(step->qname);
TSK_FREE(step->att_qname);
TSK_FREE(step->att_value);
TSK_FREE(step->ns.prefix);
TSK_FREE(step->ns.value);
}
return self;
return self;
}
static const tsk_object_def_t twrap_xcap_step_def_s =
{
sizeof(twrap_xcap_step_t),
twrap_xcap_step_ctor,
twrap_xcap_step_dtor,
tsk_null,
static const tsk_object_def_t twrap_xcap_step_def_s = {
sizeof(twrap_xcap_step_t),
twrap_xcap_step_ctor,
twrap_xcap_step_dtor,
tsk_null,
};
const tsk_object_def_t *twrap_xcap_step_def_t = &twrap_xcap_step_def_s;
twrap_xcap_step_t* twrap_xcap_step_create(twrap_xcap_step_type_t type){
twrap_xcap_step_t* step;
if((step = (twrap_xcap_step_t*)tsk_object_new(twrap_xcap_step_def_t))){
step->type = type;
}
return step;
twrap_xcap_step_t* twrap_xcap_step_create(twrap_xcap_step_type_t type)
{
twrap_xcap_step_t* step;
if((step = (twrap_xcap_step_t*)tsk_object_new(twrap_xcap_step_def_t))) {
step->type = type;
}
return step;
}
XcapSelector::XcapSelector(XcapStack* stack)
: auid(tsk_null)
: auid(tsk_null)
{
if(stack){
this->stack_handle = tsk_object_ref(stack->getHandle());
}
this->steps = tsk_list_create();
if(stack) {
this->stack_handle = tsk_object_ref(stack->getHandle());
}
this->steps = tsk_list_create();
}
XcapSelector* XcapSelector::setAUID(const char* auid)
{
tsk_strupdate(&this->auid, auid);
return this;
tsk_strupdate(&this->auid, auid);
return this;
}
XcapSelector* XcapSelector::setName(const char* qname)
{
twrap_xcap_step_t* step;
if((step = twrap_xcap_step_create(txst_name))){
step->qname = tsk_strdup(qname);
tsk_list_push_back_data(this->steps, (void**)&step);
}
return this;
twrap_xcap_step_t* step;
if((step = twrap_xcap_step_create(txst_name))) {
step->qname = tsk_strdup(qname);
tsk_list_push_back_data(this->steps, (void**)&step);
}
return this;
}
XcapSelector* XcapSelector::setAttribute(const char* qname, const char* att_qname, const char* att_value)
{
twrap_xcap_step_t* step;
if((step = twrap_xcap_step_create(txst_att))){
step->qname = tsk_strdup(qname);
step->att_qname = tsk_strdup(att_qname);
step->att_value = tsk_strdup(att_value);
tsk_list_push_back_data(this->steps, (void**)&step);
}
return this;
twrap_xcap_step_t* step;
if((step = twrap_xcap_step_create(txst_att))) {
step->qname = tsk_strdup(qname);
step->att_qname = tsk_strdup(att_qname);
step->att_value = tsk_strdup(att_value);
tsk_list_push_back_data(this->steps, (void**)&step);
}
return this;
}
XcapSelector* XcapSelector::setPos(const char* qname, unsigned pos)
{
twrap_xcap_step_t* step;
if((step = twrap_xcap_step_create(txst_pos))){
step->qname = tsk_strdup(qname);
step->pos = pos;
tsk_list_push_back_data(this->steps, (void**)&step);
}
return this;
twrap_xcap_step_t* step;
if((step = twrap_xcap_step_create(txst_pos))) {
step->qname = tsk_strdup(qname);
step->pos = pos;
tsk_list_push_back_data(this->steps, (void**)&step);
}
return this;
}
XcapSelector* XcapSelector::setPosAttribute(const char* qname, unsigned pos, const char* att_qname, const char* att_value)
{
twrap_xcap_step_t* step;
if((step = twrap_xcap_step_create(txst_pos))){
step->qname = tsk_strdup(qname);
step->pos = pos;
step->att_qname = tsk_strdup(att_qname);
step->att_value = tsk_strdup(att_value);
tsk_list_push_back_data(this->steps, (void**)&step);
}
return this;
twrap_xcap_step_t* step;
if((step = twrap_xcap_step_create(txst_pos))) {
step->qname = tsk_strdup(qname);
step->pos = pos;
step->att_qname = tsk_strdup(att_qname);
step->att_value = tsk_strdup(att_value);
tsk_list_push_back_data(this->steps, (void**)&step);
}
return this;
}
XcapSelector* XcapSelector::setNamespace(const char* prefix, const char* value)
{
twrap_xcap_step_t* step;
if((step = twrap_xcap_step_create(txst_ns))){
step->ns.prefix = tsk_strdup(prefix);
step->ns.value = tsk_strdup(value);
tsk_list_push_back_data(this->steps, (void**)&step);
}
return this;
twrap_xcap_step_t* step;
if((step = twrap_xcap_step_create(txst_ns))) {
step->ns.prefix = tsk_strdup(prefix);
step->ns.value = tsk_strdup(value);
tsk_list_push_back_data(this->steps, (void**)&step);
}
return this;
}
/* From tinyXCAP::txcap_selector_get_node_2() */
char* XcapSelector::getString()
{
char* node = tsk_null;
char* temp = tsk_null;
char* _namespace = tsk_null;
tsk_buffer_t* buffer = tsk_buffer_create_null();
const tsk_list_item_t* item;
const twrap_xcap_step_t* step;
char* node = tsk_null;
char* temp = tsk_null;
char* _namespace = tsk_null;
tsk_buffer_t* buffer = tsk_buffer_create_null();
const tsk_list_item_t* item;
const twrap_xcap_step_t* step;
/* Node */
tsk_list_foreach(item, this->steps){
step = (twrap_xcap_step_t*)item->data;
switch(step->type){
case txst_name:
if(tsk_buffer_append_2(buffer, "/%s", step->qname)){
goto bail;
}
break;
/* Node */
tsk_list_foreach(item, this->steps) {
step = (twrap_xcap_step_t*)item->data;
switch(step->type) {
case txst_name:
if(tsk_buffer_append_2(buffer, "/%s", step->qname)) {
goto bail;
}
break;
case txst_pos:
tsk_buffer_append_2(buffer, "/%s%%5B%u%%5D",
step->att_qname, step->pos);
break;
case txst_pos:
tsk_buffer_append_2(buffer, "/%s%%5B%u%%5D",
step->att_qname, step->pos);
break;
case txst_att:
tsk_buffer_append_2(buffer, "/%s%%5B@%s=%%22%s%%22%%5D",
step->qname, step->att_qname, step->att_value);
break;
case txst_att:
tsk_buffer_append_2(buffer, "/%s%%5B@%s=%%22%s%%22%%5D",
step->qname, step->att_qname, step->att_value);
break;
case txst_pos_n_att:
tsk_buffer_append_2(buffer, "/%s%%5B%u%%5D%%5B@%s=%%22%s%%22%%5D",
step->qname, step->pos, step->att_qname, step->att_value);
break;
case txst_pos_n_att:
tsk_buffer_append_2(buffer, "/%s%%5B%u%%5D%%5B@%s=%%22%s%%22%%5D",
step->qname, step->pos, step->att_qname, step->att_value);
break;
case txst_ns:
tsk_sprintf(&temp, "%sxmlns(%s=%%22%s%%22)",
_namespace?"":"%3F", step->ns.prefix, step->ns.value);
tsk_strcat(&_namespace, temp);
TSK_FREE(temp);
break;
case txst_ns:
tsk_sprintf(&temp, "%sxmlns(%s=%%22%s%%22)",
_namespace?"":"%3F", step->ns.prefix, step->ns.value);
tsk_strcat(&_namespace, temp);
TSK_FREE(temp);
break;
} /* switch */
} /* for */
} /* switch */
} /* for */
/* append the namespace */
if(_namespace){
tsk_buffer_append(buffer, _namespace, (tsk_size_t)tsk_strlen(_namespace));
TSK_FREE(_namespace);
}
/* append the namespace */
if(_namespace) {
tsk_buffer_append(buffer, _namespace, (tsk_size_t)tsk_strlen(_namespace));
TSK_FREE(_namespace);
}
bail:
if(TSK_BUFFER_DATA(buffer) && TSK_BUFFER_SIZE(buffer)){
node = tsk_strndup((const char*)TSK_BUFFER_DATA(buffer), TSK_BUFFER_SIZE(buffer));
}
TSK_OBJECT_SAFE_FREE(buffer);
if(TSK_BUFFER_DATA(buffer) && TSK_BUFFER_SIZE(buffer)) {
node = tsk_strndup((const char*)TSK_BUFFER_DATA(buffer), TSK_BUFFER_SIZE(buffer));
}
TSK_OBJECT_SAFE_FREE(buffer);
/* Document */
if(this->auid){
char* document;
if((document = txcap_selector_get_document(this->stack_handle, this->auid))){
if(node){
tsk_strcat_2(&document, "/~~/%s%s", this->auid, node);
TSK_FREE(node);
}
return document;
}
}
/* Document */
if(this->auid) {
char* document;
if((document = txcap_selector_get_document(this->stack_handle, this->auid))) {
if(node) {
tsk_strcat_2(&document, "/~~/%s%s", this->auid, node);
TSK_FREE(node);
}
return document;
}
}
return node;
return node;
}
void XcapSelector::reset()
{
TSK_FREE(this->auid);
tsk_list_clear_items(this->steps);
TSK_FREE(this->auid);
tsk_list_clear_items(this->steps);
}
XcapSelector::~XcapSelector()
{
this->reset();
TSK_OBJECT_SAFE_FREE(this->steps);
this->reset();
TSK_OBJECT_SAFE_FREE(this->steps);
tsk_object_unref(this->stack_handle);
tsk_object_unref(this->stack_handle);
}
/* =================================== XCAP Message ==================================== */
XcapMessage::XcapMessage() :
httpmessage(tsk_null)
httpmessage(tsk_null)
{
}
XcapMessage::XcapMessage(const thttp_message_t *_httpmessage)
{
this->httpmessage = _httpmessage;
this->httpmessage = _httpmessage;
}
XcapMessage::~XcapMessage()
@ -272,87 +270,87 @@ XcapMessage::~XcapMessage()
short XcapMessage::getCode() const
{
if(this->httpmessage){
return this->httpmessage->line.response.status_code;
}
return 0;
if(this->httpmessage) {
return this->httpmessage->line.response.status_code;
}
return 0;
}
const char* XcapMessage::getPhrase() const
{
if(this->httpmessage){
return this->httpmessage->line.response.reason_phrase;
}
return tsk_null;
if(this->httpmessage) {
return this->httpmessage->line.response.reason_phrase;
}
return tsk_null;
}
char* XcapMessage::getXcapHeaderValue(const char* name, unsigned index /*= 0*/)
{
const thttp_header_t* header;
if((header = thttp_message_get_headerByName(this->httpmessage, name))){
return thttp_header_value_tostring(header);
}
return tsk_null;
const thttp_header_t* header;
if((header = thttp_message_get_headerByName(this->httpmessage, name))) {
return thttp_header_value_tostring(header);
}
return tsk_null;
}
char* XcapMessage::getXcapHeaderParamValue(const char* name, const char* pname, unsigned index /*= 0*/)
{
const thttp_header_t* header;
if((header = thttp_message_get_headerByName(this->httpmessage, name))){
const tsk_param_t* param;
if((param = tsk_params_get_param_by_name(header->params, pname))){
return tsk_strdup(param->value);
}
}
return tsk_null;
const thttp_header_t* header;
if((header = thttp_message_get_headerByName(this->httpmessage, name))) {
const tsk_param_t* param;
if((param = tsk_params_get_param_by_name(header->params, pname))) {
return tsk_strdup(param->value);
}
}
return tsk_null;
}
unsigned XcapMessage::getXcapContentLength()
{
if(this->httpmessage && this->httpmessage->Content){
return this->httpmessage->Content->size;
}
return 0;
if(this->httpmessage && this->httpmessage->Content) {
return this->httpmessage->Content->size;
}
return 0;
}
unsigned XcapMessage::getXcapContent(void* output, unsigned maxsize)
{
unsigned retsize = 0;
if(output && maxsize && this->httpmessage->Content){
retsize = (this->httpmessage->Content->size > maxsize) ? maxsize : this->httpmessage->Content->size;
memcpy(output, this->httpmessage->Content->data, retsize);
}
return retsize;
unsigned retsize = 0;
if(output && maxsize && this->httpmessage->Content) {
retsize = (this->httpmessage->Content->size > maxsize) ? maxsize : this->httpmessage->Content->size;
memcpy(output, this->httpmessage->Content->data, retsize);
}
return retsize;
}
/* =================================== XCAP Event ==================================== */
XcapEvent::XcapEvent(const thttp_event_t *_httpevent)
{
this->httpevent = _httpevent;
if(_httpevent){
this->httpmessage = new XcapMessage(_httpevent->message);
}
else{
this->httpmessage = tsk_null;
}
this->httpevent = _httpevent;
if(_httpevent) {
this->httpmessage = new XcapMessage(_httpevent->message);
}
else {
this->httpmessage = tsk_null;
}
}
XcapEvent::~XcapEvent()
{
if(this->httpmessage){
delete this->httpmessage;
}
if(this->httpmessage) {
delete this->httpmessage;
}
}
thttp_event_type_t XcapEvent::getType()
{
return this->httpevent->type;
return this->httpevent->type;
}
const XcapMessage* XcapEvent::getXcapMessage() const
{
return this->httpmessage;
return this->httpmessage;
}
@ -374,189 +372,189 @@ XcapCallback::~XcapCallback()
/* =================================== XCAP Stack ==================================== */
XcapStack::XcapStack(XcapCallback* _callback, const char* xui, const char* password, const char* xcap_root)
{
/* Initialize network layer */
if(XcapStack::count == 0){
tnet_startup();
}
/* Initialize network layer */
if(XcapStack::count == 0) {
tnet_startup();
}
this->callback = _callback;
this->handle = txcap_stack_create(stack_callback, xui, password, xcap_root,
TXCAP_STACK_SET_USERDATA(this),
TXCAP_STACK_SET_NULL());
this->callback = _callback;
this->handle = txcap_stack_create(stack_callback, xui, password, xcap_root,
TXCAP_STACK_SET_USERDATA(this),
TXCAP_STACK_SET_NULL());
}
XcapStack::~XcapStack()
{
TSK_OBJECT_SAFE_FREE(this->handle);
TSK_OBJECT_SAFE_FREE(this->handle);
/* DeInitialize the network layer (only if last stack) */
if(--XcapStack::count == 0){
tnet_cleanup();
}
/* DeInitialize the network layer (only if last stack) */
if(--XcapStack::count == 0) {
tnet_cleanup();
}
}
bool XcapStack::registerAUID(const char* id, const char* mime_type, const char* ns, const char* document_name, bool is_global)
{
txcap_stack_t* stack = (txcap_stack_t*)this->handle;
if(stack){
tsk_bool_t _global = is_global?tsk_true:tsk_false; // 32bit <-> 64bit workaround
return (txcap_auid_register(stack->auids, id, mime_type, ns, document_name, _global) == 0);
}
return false;
txcap_stack_t* stack = (txcap_stack_t*)this->handle;
if(stack) {
tsk_bool_t _global = is_global?tsk_true:tsk_false; // 32bit <-> 64bit workaround
return (txcap_auid_register(stack->auids, id, mime_type, ns, document_name, _global) == 0);
}
return false;
}
bool XcapStack::start()
{
return (txcap_stack_start(this->handle) == 0);
return (txcap_stack_start(this->handle) == 0);
}
bool XcapStack::setCredentials(const char* xui, const char* password)
{
return txcap_stack_set(this->handle,
TXCAP_STACK_SET_XUI(xui),
TXCAP_STACK_SET_PASSWORD(password),
TXCAP_STACK_SET_NULL()) == 0;
return txcap_stack_set(this->handle,
TXCAP_STACK_SET_XUI(xui),
TXCAP_STACK_SET_PASSWORD(password),
TXCAP_STACK_SET_NULL()) == 0;
}
bool XcapStack::setXcapRoot(const char* xcap_root)
{
return txcap_stack_set(this->handle,
TXCAP_STACK_SET_ROOT(xcap_root),
TXCAP_STACK_SET_NULL()) == 0;
return txcap_stack_set(this->handle,
TXCAP_STACK_SET_ROOT(xcap_root),
TXCAP_STACK_SET_NULL()) == 0;
}
bool XcapStack::setLocalIP(const char* ip)
{
return txcap_stack_set(this->handle,
TXCAP_STACK_SET_LOCAL_IP(ip),
TXCAP_STACK_SET_NULL()) == 0;
return txcap_stack_set(this->handle,
TXCAP_STACK_SET_LOCAL_IP(ip),
TXCAP_STACK_SET_NULL()) == 0;
}
bool XcapStack::setLocalPort(unsigned port)
{
tsk_istr_t port_str;
tsk_itoa(port, &port_str);
return txcap_stack_set(this->handle,
TXCAP_STACK_SET_LOCAL_PORT(port_str),
TXCAP_STACK_SET_NULL()) == 0;
tsk_istr_t port_str;
tsk_itoa(port, &port_str);
return txcap_stack_set(this->handle,
TXCAP_STACK_SET_LOCAL_PORT(port_str),
TXCAP_STACK_SET_NULL()) == 0;
}
bool XcapStack::addHeader(const char* name, const char* value)
{
return txcap_stack_set(this->handle,
TXCAP_STACK_SET_HEADER(name, value),
TXCAP_STACK_SET_NULL()) == 0;
return txcap_stack_set(this->handle,
TXCAP_STACK_SET_HEADER(name, value),
TXCAP_STACK_SET_NULL()) == 0;
}
bool XcapStack::removeHeader(const char* name)
{
return txcap_stack_set(this->handle,
TXCAP_STACK_UNSET_HEADER(name),
TXCAP_STACK_SET_NULL()) == 0;
return txcap_stack_set(this->handle,
TXCAP_STACK_UNSET_HEADER(name),
TXCAP_STACK_SET_NULL()) == 0;
}
bool XcapStack::setTimeout(unsigned timeout)
{
tsk_istr_t timeout_str;
tsk_itoa(timeout, &timeout_str);
return txcap_stack_set(this->handle,
TXCAP_STACK_SET_TIMEOUT(timeout_str),
TXCAP_STACK_SET_NULL()) == 0;
tsk_istr_t timeout_str;
tsk_itoa(timeout, &timeout_str);
return txcap_stack_set(this->handle,
TXCAP_STACK_SET_TIMEOUT(timeout_str),
TXCAP_STACK_SET_NULL()) == 0;
}
bool XcapStack::getDocument(const char* url)
{
return txcap_action_fetch_document(this->handle,
TXCAP_ACTION_SET_REQUEST_URI(url),
TXCAP_ACTION_SET_NULL()) == 0;
return txcap_action_fetch_document(this->handle,
TXCAP_ACTION_SET_REQUEST_URI(url),
TXCAP_ACTION_SET_NULL()) == 0;
}
bool XcapStack::getElement(const char* url)
{
return txcap_action_fetch_element(this->handle,
TXCAP_ACTION_SET_REQUEST_URI(url),
TXCAP_ACTION_SET_NULL()) == 0;
return txcap_action_fetch_element(this->handle,
TXCAP_ACTION_SET_REQUEST_URI(url),
TXCAP_ACTION_SET_NULL()) == 0;
}
bool XcapStack::getAttribute(const char* url)
{
return txcap_action_fetch_attribute(this->handle,
TXCAP_ACTION_SET_REQUEST_URI(url),
TXCAP_ACTION_SET_NULL()) == 0;
return txcap_action_fetch_attribute(this->handle,
TXCAP_ACTION_SET_REQUEST_URI(url),
TXCAP_ACTION_SET_NULL()) == 0;
}
bool XcapStack::deleteDocument(const char* url)
{
return txcap_action_delete_document(this->handle,
TXCAP_ACTION_SET_REQUEST_URI(url),
TXCAP_ACTION_SET_NULL()) == 0;
return txcap_action_delete_document(this->handle,
TXCAP_ACTION_SET_REQUEST_URI(url),
TXCAP_ACTION_SET_NULL()) == 0;
}
bool XcapStack::deleteElement(const char* url)
{
return txcap_action_delete_element(this->handle,
TXCAP_ACTION_SET_REQUEST_URI(url),
TXCAP_ACTION_SET_NULL()) == 0;
return txcap_action_delete_element(this->handle,
TXCAP_ACTION_SET_REQUEST_URI(url),
TXCAP_ACTION_SET_NULL()) == 0;
}
bool XcapStack::deleteAttribute(const char* url)
{
return txcap_action_delete_attribute(this->handle,
TXCAP_ACTION_SET_REQUEST_URI(url),
TXCAP_ACTION_SET_NULL()) == 0;
return txcap_action_delete_attribute(this->handle,
TXCAP_ACTION_SET_REQUEST_URI(url),
TXCAP_ACTION_SET_NULL()) == 0;
}
bool XcapStack::putDocument(const char* url, const void* payload, unsigned len, const char* contentType)
{
return txcap_action_create_document(this->handle,
TXCAP_ACTION_SET_REQUEST_URI(url),
TXCAP_ACTION_SET_PAYLOAD(payload, len),
TXCAP_ACTION_SET_HEADER("Content-Type", contentType),
TXCAP_ACTION_SET_NULL()) == 0;
return txcap_action_create_document(this->handle,
TXCAP_ACTION_SET_REQUEST_URI(url),
TXCAP_ACTION_SET_PAYLOAD(payload, len),
TXCAP_ACTION_SET_HEADER("Content-Type", contentType),
TXCAP_ACTION_SET_NULL()) == 0;
}
bool XcapStack::putElement(const char* url, const void* payload, unsigned len)
{
return txcap_action_create_element(this->handle,
TXCAP_ACTION_SET_REQUEST_URI(url),
TXCAP_ACTION_SET_PAYLOAD(payload, len),
TXCAP_ACTION_SET_NULL()) == 0;
return txcap_action_create_element(this->handle,
TXCAP_ACTION_SET_REQUEST_URI(url),
TXCAP_ACTION_SET_PAYLOAD(payload, len),
TXCAP_ACTION_SET_NULL()) == 0;
}
bool XcapStack::putAttribute(const char* url, const void* payload, unsigned len)
{
return txcap_action_create_attribute(this->handle,
TXCAP_ACTION_SET_REQUEST_URI(url),
TXCAP_ACTION_SET_PAYLOAD(payload, len),
TXCAP_ACTION_SET_NULL()) == 0;
return txcap_action_create_attribute(this->handle,
TXCAP_ACTION_SET_REQUEST_URI(url),
TXCAP_ACTION_SET_PAYLOAD(payload, len),
TXCAP_ACTION_SET_NULL()) == 0;
}
bool XcapStack::stop()
{
return (txcap_stack_stop(this->handle) == 0);
return (txcap_stack_stop(this->handle) == 0);
}
int stack_callback(const thttp_event_t *httpevent)
{
const XcapStack* stack = tsk_null;
XcapEvent* e = tsk_null;
const XcapStack* stack = tsk_null;
XcapEvent* e = tsk_null;
const txcap_stack_handle_t* stack_handle = thttp_session_get_userdata(httpevent->session);
if(!stack_handle || !(stack = dyn_cast<const XcapStack*>((const XcapStack*)stack_handle))){
TSK_DEBUG_ERROR("Invalid user data");
return -1;
}
const txcap_stack_handle_t* stack_handle = thttp_session_get_userdata(httpevent->session);
if(!stack_handle || !(stack = dyn_cast<const XcapStack*>((const XcapStack*)stack_handle))) {
TSK_DEBUG_ERROR("Invalid user data");
return -1;
}
if(stack->getCallback()){
if((e = new XcapEvent(httpevent))){
stack->getCallback()->onEvent(e);
delete e;
}
}
return 0;
if(stack->getCallback()) {
if((e = new XcapEvent(httpevent))) {
stack->getCallback()->onEvent(e);
delete e;
}
}
return 0;
}

View File

@ -34,24 +34,24 @@ typedef tsk_list_t twrap_xcap_steps_L_t;
class XcapSelector
{
public:
XcapSelector(XcapStack* stack);
virtual ~XcapSelector();
XcapSelector(XcapStack* stack);
virtual ~XcapSelector();
public: /* API functions */
XcapSelector* setAUID(const char* auid);
XcapSelector* setName(const char* qname);
XcapSelector* setAttribute(const char* qname, const char* att_qname, const char* att_value);
XcapSelector* setPos(const char* qname, unsigned pos);
XcapSelector* setPosAttribute(const char* qname, unsigned pos, const char* att_qname, const char* att_value);
XcapSelector* setNamespace(const char* prefix, const char* value);
XcapSelector* setAUID(const char* auid);
XcapSelector* setName(const char* qname);
XcapSelector* setAttribute(const char* qname, const char* att_qname, const char* att_value);
XcapSelector* setPos(const char* qname, unsigned pos);
XcapSelector* setPosAttribute(const char* qname, unsigned pos, const char* att_qname, const char* att_value);
XcapSelector* setNamespace(const char* prefix, const char* value);
char* getString();// %newobject
void reset();
char* getString();// %newobject
void reset();
private:
txcap_stack_handle_t* stack_handle;
char* auid;
twrap_xcap_steps_L_t* steps;
txcap_stack_handle_t* stack_handle;
char* auid;
twrap_xcap_steps_L_t* steps;
};
//
@ -60,22 +60,22 @@ private:
class XcapMessage
{
public:
XcapMessage();
XcapMessage();
#if !defined(SWIG)
XcapMessage(const thttp_message_t *httpmessage);
XcapMessage(const thttp_message_t *httpmessage);
#endif
virtual ~XcapMessage();
virtual ~XcapMessage();
short getCode() const;
const char* getPhrase() const;
short getCode() const;
const char* getPhrase() const;
char* getXcapHeaderValue(const char* name, unsigned index = 0);
char* getXcapHeaderParamValue(const char* name, const char* param, unsigned index = 0);
unsigned getXcapContentLength();
unsigned getXcapContent(void* output, unsigned maxsize);
char* getXcapHeaderValue(const char* name, unsigned index = 0);
char* getXcapHeaderParamValue(const char* name, const char* param, unsigned index = 0);
unsigned getXcapContentLength();
unsigned getXcapContent(void* output, unsigned maxsize);
private:
const thttp_message_t *httpmessage;
const thttp_message_t *httpmessage;
};
//
@ -85,15 +85,15 @@ class XcapEvent
{
public:
#if !defined(SWIG)
XcapEvent(const thttp_event_t *httpevent);
XcapEvent(const thttp_event_t *httpevent);
#endif
virtual ~XcapEvent();
thttp_event_type_t getType();
const XcapMessage* getXcapMessage() const;
virtual ~XcapEvent();
thttp_event_type_t getType();
const XcapMessage* getXcapMessage() const;
private:
const thttp_event_t *httpevent;
const XcapMessage* httpmessage;
const thttp_event_t *httpevent;
const XcapMessage* httpmessage;
};
@ -103,10 +103,12 @@ private:
class XcapCallback
{
public:
XcapCallback();
virtual ~XcapCallback();
XcapCallback();
virtual ~XcapCallback();
virtual int onEvent(const XcapEvent* e)const { return -1; }
virtual int onEvent(const XcapEvent* e)const {
return -1;
}
};
@ -116,49 +118,49 @@ public:
class XcapStack
{
public:
XcapStack(XcapCallback* callback, const char* xui, const char* password, const char* xcap_root);
virtual ~XcapStack();
XcapStack(XcapCallback* callback, const char* xui, const char* password, const char* xcap_root);
virtual ~XcapStack();
public: /* API functions */
bool registerAUID(const char* id, const char* mime_type, const char* ns, const char* document_name, bool is_global);
bool start();
bool setCredentials(const char* xui, const char* password);
bool setXcapRoot(const char* xcap_root);
bool setLocalIP(const char* ip);
bool setLocalPort(unsigned port);
bool addHeader(const char* name, const char* value);
bool removeHeader(const char* name);
bool setTimeout(unsigned timeout);
bool registerAUID(const char* id, const char* mime_type, const char* ns, const char* document_name, bool is_global);
bool start();
bool setCredentials(const char* xui, const char* password);
bool setXcapRoot(const char* xcap_root);
bool setLocalIP(const char* ip);
bool setLocalPort(unsigned port);
bool addHeader(const char* name, const char* value);
bool removeHeader(const char* name);
bool setTimeout(unsigned timeout);
bool getDocument(const char* url);
bool getElement(const char* url);
bool getAttribute(const char* url);
bool getDocument(const char* url);
bool getElement(const char* url);
bool getAttribute(const char* url);
bool deleteDocument(const char* url);
bool deleteElement(const char* url);
bool deleteAttribute(const char* url);
bool deleteDocument(const char* url);
bool deleteElement(const char* url);
bool deleteAttribute(const char* url);
bool putDocument(const char* url, const void* payload, unsigned len, const char* contentType);
bool putElement(const char* url, const void* payload, unsigned len);
bool putAttribute(const char* url, const void* payload, unsigned len);
bool putDocument(const char* url, const void* payload, unsigned len, const char* contentType);
bool putElement(const char* url, const void* payload, unsigned len);
bool putAttribute(const char* url, const void* payload, unsigned len);
bool stop();
bool stop();
public: /* Public helper function */
#if !defined(SWIG)
txcap_stack_handle_t* getHandle(){
return this->handle;
}
XcapCallback* getCallback()const{
return this->callback;
}
txcap_stack_handle_t* getHandle() {
return this->handle;
}
XcapCallback* getCallback()const {
return this->callback;
}
#endif
private:
txcap_stack_handle_t* handle;
XcapCallback* callback;
txcap_stack_handle_t* handle;
XcapCallback* callback;
static unsigned count;
static unsigned count;
};

View File

@ -33,6 +33,7 @@
%newobject SipStack::getPreferredIdentity;
%newobject SipStack::getLocalIPnPort;
%newobject MediaSessionMgr::producerGetCodec;
%newobject MediaSessionMgr::sessionGetQoS;
%newobject MessagingEvent::takeSessionOwnership;
%newobject InviteEvent::takeCallSessionOwnership;

View File

@ -66,7 +66,7 @@
#if HAVE_CONFIG_H
#include "../config.h"
#include "../config.h"
#endif
#endif // TINYWRAP_CONFIG_H

View File

@ -51,6 +51,12 @@ public class MediaSessionMgr : IDisposable {
return ret;
}
public QoS sessionGetQoS(twrap_media_type_t media) {
IntPtr cPtr = tinyWRAPPINVOKE.MediaSessionMgr_sessionGetQoS(swigCPtr, (int)media);
QoS ret = (cPtr == IntPtr.Zero) ? null : new QoS(cPtr, true);
return ret;
}
public bool consumerSetInt32(twrap_media_type_t media, string key, int value) {
bool ret = tinyWRAPPINVOKE.MediaSessionMgr_consumerSetInt32(swigCPtr, (int)media, key, value);
return ret;
@ -149,6 +155,16 @@ public class MediaSessionMgr : IDisposable {
return ret;
}
public static bool defaultsSetPrefVideoSizeOutRange(tmedia_pref_video_size_t min, tmedia_pref_video_size_t max) {
bool ret = tinyWRAPPINVOKE.MediaSessionMgr_defaultsSetPrefVideoSizeOutRange((int)min, (int)max);
return ret;
}
public static bool defaultsSetAdaptativeVideoSizeOutEnabled(bool enabled) {
bool ret = tinyWRAPPINVOKE.MediaSessionMgr_defaultsSetAdaptativeVideoSizeOutEnabled(enabled);
return ret;
}
public static bool defaultsSetJbMargin(uint jb_margin_ms) {
bool ret = tinyWRAPPINVOKE.MediaSessionMgr_defaultsSetJbMargin(jb_margin_ms);
return ret;

121
bindings/csharp/QoS.cs Normal file
View File

@ -0,0 +1,121 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
* Version 2.0.9
*
* Do not make changes to this file unless you know what you are doing--modify
* the SWIG interface file instead.
* ----------------------------------------------------------------------------- */
namespace org.doubango.tinyWRAP {
using System;
using System.Runtime.InteropServices;
public class QoS : IDisposable {
private HandleRef swigCPtr;
protected bool swigCMemOwn;
internal QoS(IntPtr cPtr, bool cMemoryOwn) {
swigCMemOwn = cMemoryOwn;
swigCPtr = new HandleRef(this, cPtr);
}
internal static HandleRef getCPtr(QoS obj) {
return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr;
}
~QoS() {
Dispose();
}
public virtual void Dispose() {
lock(this) {
if (swigCPtr.Handle != IntPtr.Zero) {
if (swigCMemOwn) {
swigCMemOwn = false;
tinyWRAPPINVOKE.delete_QoS(swigCPtr);
}
swigCPtr = new HandleRef(null, IntPtr.Zero);
}
GC.SuppressFinalize(this);
}
}
public float getQavg() {
float ret = tinyWRAPPINVOKE.QoS_getQavg(swigCPtr);
return ret;
}
public float getQ1() {
float ret = tinyWRAPPINVOKE.QoS_getQ1(swigCPtr);
return ret;
}
public float getQ2() {
float ret = tinyWRAPPINVOKE.QoS_getQ2(swigCPtr);
return ret;
}
public float getQ3() {
float ret = tinyWRAPPINVOKE.QoS_getQ3(swigCPtr);
return ret;
}
public float getQ4() {
float ret = tinyWRAPPINVOKE.QoS_getQ4(swigCPtr);
return ret;
}
public float getQ5() {
float ret = tinyWRAPPINVOKE.QoS_getQ5(swigCPtr);
return ret;
}
public uint getVideoInWidth() {
uint ret = tinyWRAPPINVOKE.QoS_getVideoInWidth(swigCPtr);
return ret;
}
public uint getVideoOutWidth() {
uint ret = tinyWRAPPINVOKE.QoS_getVideoOutWidth(swigCPtr);
return ret;
}
public uint getVideoInHeight() {
uint ret = tinyWRAPPINVOKE.QoS_getVideoInHeight(swigCPtr);
return ret;
}
public uint getVideoOutHeight() {
uint ret = tinyWRAPPINVOKE.QoS_getVideoOutHeight(swigCPtr);
return ret;
}
public uint getBandwidthDownKbps() {
uint ret = tinyWRAPPINVOKE.QoS_getBandwidthDownKbps(swigCPtr);
return ret;
}
public uint getBandwidthUpKbps() {
uint ret = tinyWRAPPINVOKE.QoS_getBandwidthUpKbps(swigCPtr);
return ret;
}
public uint getVideoInAvgFps() {
uint ret = tinyWRAPPINVOKE.QoS_getVideoInAvgFps(swigCPtr);
return ret;
}
public uint getVideoDecAvgTime() {
uint ret = tinyWRAPPINVOKE.QoS_getVideoDecAvgTime(swigCPtr);
return ret;
}
public uint getVideoEncAvgTime() {
uint ret = tinyWRAPPINVOKE.QoS_getVideoEncAvgTime(swigCPtr);
return ret;
}
}
}

View File

@ -264,6 +264,54 @@ class tinyWRAPPINVOKE {
[DllImport("tinyWRAP", EntryPoint="CSharp_ActionConfig_setMediaInt")]
public static extern IntPtr ActionConfig_setMediaInt(HandleRef jarg1, int jarg2, string jarg3, int jarg4);
[DllImport("tinyWRAP", EntryPoint="CSharp_delete_QoS")]
public static extern void delete_QoS(HandleRef jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_QoS_getQavg")]
public static extern float QoS_getQavg(HandleRef jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_QoS_getQ1")]
public static extern float QoS_getQ1(HandleRef jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_QoS_getQ2")]
public static extern float QoS_getQ2(HandleRef jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_QoS_getQ3")]
public static extern float QoS_getQ3(HandleRef jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_QoS_getQ4")]
public static extern float QoS_getQ4(HandleRef jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_QoS_getQ5")]
public static extern float QoS_getQ5(HandleRef jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_QoS_getVideoInWidth")]
public static extern uint QoS_getVideoInWidth(HandleRef jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_QoS_getVideoOutWidth")]
public static extern uint QoS_getVideoOutWidth(HandleRef jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_QoS_getVideoInHeight")]
public static extern uint QoS_getVideoInHeight(HandleRef jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_QoS_getVideoOutHeight")]
public static extern uint QoS_getVideoOutHeight(HandleRef jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_QoS_getBandwidthDownKbps")]
public static extern uint QoS_getBandwidthDownKbps(HandleRef jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_QoS_getBandwidthUpKbps")]
public static extern uint QoS_getBandwidthUpKbps(HandleRef jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_QoS_getVideoInAvgFps")]
public static extern uint QoS_getVideoInAvgFps(HandleRef jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_QoS_getVideoDecAvgTime")]
public static extern uint QoS_getVideoDecAvgTime(HandleRef jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_QoS_getVideoEncAvgTime")]
public static extern uint QoS_getVideoEncAvgTime(HandleRef jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_delete_Codec")]
public static extern void delete_Codec(HandleRef jarg1);
@ -297,6 +345,9 @@ class tinyWRAPPINVOKE {
[DllImport("tinyWRAP", EntryPoint="CSharp_MediaSessionMgr_sessionGetInt32")]
public static extern int MediaSessionMgr_sessionGetInt32(HandleRef jarg1, int jarg2, string jarg3);
[DllImport("tinyWRAP", EntryPoint="CSharp_MediaSessionMgr_sessionGetQoS")]
public static extern IntPtr MediaSessionMgr_sessionGetQoS(HandleRef jarg1, int jarg2);
[DllImport("tinyWRAP", EntryPoint="CSharp_MediaSessionMgr_consumerSetInt32")]
public static extern bool MediaSessionMgr_consumerSetInt32(HandleRef jarg1, int jarg2, string jarg3, int jarg4);
@ -354,6 +405,12 @@ class tinyWRAPPINVOKE {
[DllImport("tinyWRAP", EntryPoint="CSharp_MediaSessionMgr_defaultsSetPrefVideoSize")]
public static extern bool MediaSessionMgr_defaultsSetPrefVideoSize(int jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_MediaSessionMgr_defaultsSetPrefVideoSizeOutRange")]
public static extern bool MediaSessionMgr_defaultsSetPrefVideoSizeOutRange(int jarg1, int jarg2);
[DllImport("tinyWRAP", EntryPoint="CSharp_MediaSessionMgr_defaultsSetAdaptativeVideoSizeOutEnabled")]
public static extern bool MediaSessionMgr_defaultsSetAdaptativeVideoSizeOutEnabled(bool jarg1);
[DllImport("tinyWRAP", EntryPoint="CSharp_MediaSessionMgr_defaultsSetJbMargin")]
public static extern bool MediaSessionMgr_defaultsSetJbMargin(uint jarg1);

View File

@ -1488,6 +1488,194 @@ SWIGEXPORT void * SWIGSTDCALL CSharp_ActionConfig_setMediaInt(void * jarg1, int
}
SWIGEXPORT void SWIGSTDCALL CSharp_delete_QoS(void * jarg1) {
QoS *arg1 = (QoS *) 0 ;
arg1 = (QoS *)jarg1;
delete arg1;
}
SWIGEXPORT float SWIGSTDCALL CSharp_QoS_getQavg(void * jarg1) {
float jresult ;
QoS *arg1 = (QoS *) 0 ;
float result;
arg1 = (QoS *)jarg1;
result = (float)(arg1)->getQavg();
jresult = result;
return jresult;
}
SWIGEXPORT float SWIGSTDCALL CSharp_QoS_getQ1(void * jarg1) {
float jresult ;
QoS *arg1 = (QoS *) 0 ;
float result;
arg1 = (QoS *)jarg1;
result = (float)(arg1)->getQ1();
jresult = result;
return jresult;
}
SWIGEXPORT float SWIGSTDCALL CSharp_QoS_getQ2(void * jarg1) {
float jresult ;
QoS *arg1 = (QoS *) 0 ;
float result;
arg1 = (QoS *)jarg1;
result = (float)(arg1)->getQ2();
jresult = result;
return jresult;
}
SWIGEXPORT float SWIGSTDCALL CSharp_QoS_getQ3(void * jarg1) {
float jresult ;
QoS *arg1 = (QoS *) 0 ;
float result;
arg1 = (QoS *)jarg1;
result = (float)(arg1)->getQ3();
jresult = result;
return jresult;
}
SWIGEXPORT float SWIGSTDCALL CSharp_QoS_getQ4(void * jarg1) {
float jresult ;
QoS *arg1 = (QoS *) 0 ;
float result;
arg1 = (QoS *)jarg1;
result = (float)(arg1)->getQ4();
jresult = result;
return jresult;
}
SWIGEXPORT float SWIGSTDCALL CSharp_QoS_getQ5(void * jarg1) {
float jresult ;
QoS *arg1 = (QoS *) 0 ;
float result;
arg1 = (QoS *)jarg1;
result = (float)(arg1)->getQ5();
jresult = result;
return jresult;
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_QoS_getVideoInWidth(void * jarg1) {
unsigned int jresult ;
QoS *arg1 = (QoS *) 0 ;
unsigned int result;
arg1 = (QoS *)jarg1;
result = (unsigned int)(arg1)->getVideoInWidth();
jresult = result;
return jresult;
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_QoS_getVideoOutWidth(void * jarg1) {
unsigned int jresult ;
QoS *arg1 = (QoS *) 0 ;
unsigned int result;
arg1 = (QoS *)jarg1;
result = (unsigned int)(arg1)->getVideoOutWidth();
jresult = result;
return jresult;
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_QoS_getVideoInHeight(void * jarg1) {
unsigned int jresult ;
QoS *arg1 = (QoS *) 0 ;
unsigned int result;
arg1 = (QoS *)jarg1;
result = (unsigned int)(arg1)->getVideoInHeight();
jresult = result;
return jresult;
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_QoS_getVideoOutHeight(void * jarg1) {
unsigned int jresult ;
QoS *arg1 = (QoS *) 0 ;
unsigned int result;
arg1 = (QoS *)jarg1;
result = (unsigned int)(arg1)->getVideoOutHeight();
jresult = result;
return jresult;
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_QoS_getBandwidthDownKbps(void * jarg1) {
unsigned int jresult ;
QoS *arg1 = (QoS *) 0 ;
unsigned int result;
arg1 = (QoS *)jarg1;
result = (unsigned int)(arg1)->getBandwidthDownKbps();
jresult = result;
return jresult;
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_QoS_getBandwidthUpKbps(void * jarg1) {
unsigned int jresult ;
QoS *arg1 = (QoS *) 0 ;
unsigned int result;
arg1 = (QoS *)jarg1;
result = (unsigned int)(arg1)->getBandwidthUpKbps();
jresult = result;
return jresult;
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_QoS_getVideoInAvgFps(void * jarg1) {
unsigned int jresult ;
QoS *arg1 = (QoS *) 0 ;
unsigned int result;
arg1 = (QoS *)jarg1;
result = (unsigned int)(arg1)->getVideoInAvgFps();
jresult = result;
return jresult;
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_QoS_getVideoDecAvgTime(void * jarg1) {
unsigned int jresult ;
QoS *arg1 = (QoS *) 0 ;
unsigned int result;
arg1 = (QoS *)jarg1;
result = (unsigned int)(arg1)->getVideoDecAvgTime();
jresult = result;
return jresult;
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_QoS_getVideoEncAvgTime(void * jarg1) {
unsigned int jresult ;
QoS *arg1 = (QoS *) 0 ;
unsigned int result;
arg1 = (QoS *)jarg1;
result = (unsigned int)(arg1)->getVideoEncAvgTime();
jresult = result;
return jresult;
}
SWIGEXPORT void SWIGSTDCALL CSharp_delete_Codec(void * jarg1) {
Codec *arg1 = (Codec *) 0 ;
@ -1622,6 +1810,20 @@ SWIGEXPORT int SWIGSTDCALL CSharp_MediaSessionMgr_sessionGetInt32(void * jarg1,
}
SWIGEXPORT void * SWIGSTDCALL CSharp_MediaSessionMgr_sessionGetQoS(void * jarg1, int jarg2) {
void * jresult ;
MediaSessionMgr *arg1 = (MediaSessionMgr *) 0 ;
twrap_media_type_t arg2 ;
QoS *result = 0 ;
arg1 = (MediaSessionMgr *)jarg1;
arg2 = (twrap_media_type_t)jarg2;
result = (QoS *)(arg1)->sessionGetQoS(arg2);
jresult = (void *)result;
return jresult;
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_MediaSessionMgr_consumerSetInt32(void * jarg1, int jarg2, char * jarg3, int jarg4) {
unsigned int jresult ;
MediaSessionMgr *arg1 = (MediaSessionMgr *) 0 ;
@ -1878,6 +2080,32 @@ SWIGEXPORT unsigned int SWIGSTDCALL CSharp_MediaSessionMgr_defaultsSetPrefVideoS
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_MediaSessionMgr_defaultsSetPrefVideoSizeOutRange(int jarg1, int jarg2) {
unsigned int jresult ;
tmedia_pref_video_size_t arg1 ;
tmedia_pref_video_size_t arg2 ;
bool result;
arg1 = (tmedia_pref_video_size_t)jarg1;
arg2 = (tmedia_pref_video_size_t)jarg2;
result = (bool)MediaSessionMgr::defaultsSetPrefVideoSizeOutRange(arg1,arg2);
jresult = result;
return jresult;
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_MediaSessionMgr_defaultsSetAdaptativeVideoSizeOutEnabled(unsigned int jarg1) {
unsigned int jresult ;
bool arg1 ;
bool result;
arg1 = jarg1 ? true : false;
result = (bool)MediaSessionMgr::defaultsSetAdaptativeVideoSizeOutEnabled(arg1);
jresult = result;
return jresult;
}
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_MediaSessionMgr_defaultsSetJbMargin(unsigned int jarg1) {
unsigned int jresult ;
uint32_t arg1 ;

View File

@ -43,6 +43,11 @@ public class MediaSessionMgr {
return tinyWRAPJNI.MediaSessionMgr_sessionGetInt32(swigCPtr, this, media.swigValue(), key);
}
public QoS sessionGetQoS(twrap_media_type_t media) {
long cPtr = tinyWRAPJNI.MediaSessionMgr_sessionGetQoS(swigCPtr, this, media.swigValue());
return (cPtr == 0) ? null : new QoS(cPtr, true);
}
public boolean consumerSetInt32(twrap_media_type_t media, String key, int value) {
return tinyWRAPJNI.MediaSessionMgr_consumerSetInt32(swigCPtr, this, media.swigValue(), key, value);
}
@ -122,6 +127,14 @@ public class MediaSessionMgr {
return tinyWRAPJNI.MediaSessionMgr_defaultsSetPrefVideoSize(pref_video_size.swigValue());
}
public static boolean defaultsSetPrefVideoSizeOutRange(tmedia_pref_video_size_t min, tmedia_pref_video_size_t max) {
return tinyWRAPJNI.MediaSessionMgr_defaultsSetPrefVideoSizeOutRange(min.swigValue(), max.swigValue());
}
public static boolean defaultsSetAdaptativeVideoSizeOutEnabled(boolean enabled) {
return tinyWRAPJNI.MediaSessionMgr_defaultsSetAdaptativeVideoSizeOutEnabled(enabled);
}
public static boolean defaultsSetJbMargin(long jb_margin_ms) {
return tinyWRAPJNI.MediaSessionMgr_defaultsSetJbMargin(jb_margin_ms);
}

98
bindings/java/QoS.java Normal file
View File

@ -0,0 +1,98 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
* Version 2.0.9
*
* Do not make changes to this file unless you know what you are doing--modify
* the SWIG interface file instead.
* ----------------------------------------------------------------------------- */
package org.doubango.tinyWRAP;
public class QoS {
private long swigCPtr;
protected boolean swigCMemOwn;
protected QoS(long cPtr, boolean cMemoryOwn) {
swigCMemOwn = cMemoryOwn;
swigCPtr = cPtr;
}
protected static long getCPtr(QoS obj) {
return (obj == null) ? 0 : obj.swigCPtr;
}
protected void finalize() {
delete();
}
public synchronized void delete() {
if (swigCPtr != 0) {
if (swigCMemOwn) {
swigCMemOwn = false;
tinyWRAPJNI.delete_QoS(swigCPtr);
}
swigCPtr = 0;
}
}
public float getQavg() {
return tinyWRAPJNI.QoS_getQavg(swigCPtr, this);
}
public float getQ1() {
return tinyWRAPJNI.QoS_getQ1(swigCPtr, this);
}
public float getQ2() {
return tinyWRAPJNI.QoS_getQ2(swigCPtr, this);
}
public float getQ3() {
return tinyWRAPJNI.QoS_getQ3(swigCPtr, this);
}
public float getQ4() {
return tinyWRAPJNI.QoS_getQ4(swigCPtr, this);
}
public float getQ5() {
return tinyWRAPJNI.QoS_getQ5(swigCPtr, this);
}
public long getVideoInWidth() {
return tinyWRAPJNI.QoS_getVideoInWidth(swigCPtr, this);
}
public long getVideoOutWidth() {
return tinyWRAPJNI.QoS_getVideoOutWidth(swigCPtr, this);
}
public long getVideoInHeight() {
return tinyWRAPJNI.QoS_getVideoInHeight(swigCPtr, this);
}
public long getVideoOutHeight() {
return tinyWRAPJNI.QoS_getVideoOutHeight(swigCPtr, this);
}
public long getBandwidthDownKbps() {
return tinyWRAPJNI.QoS_getBandwidthDownKbps(swigCPtr, this);
}
public long getBandwidthUpKbps() {
return tinyWRAPJNI.QoS_getBandwidthUpKbps(swigCPtr, this);
}
public long getVideoInAvgFps() {
return tinyWRAPJNI.QoS_getVideoInAvgFps(swigCPtr, this);
}
public long getVideoDecAvgTime() {
return tinyWRAPJNI.QoS_getVideoDecAvgTime(swigCPtr, this);
}
public long getVideoEncAvgTime() {
return tinyWRAPJNI.QoS_getVideoEncAvgTime(swigCPtr, this);
}
}

View File

@ -43,6 +43,11 @@ public class MediaSessionMgr {
return tinyWRAPJNI.MediaSessionMgr_sessionGetInt32(swigCPtr, this, media.swigValue(), key);
}
public QoS sessionGetQoS(twrap_media_type_t media) {
long cPtr = tinyWRAPJNI.MediaSessionMgr_sessionGetQoS(swigCPtr, this, media.swigValue());
return (cPtr == 0) ? null : new QoS(cPtr, true);
}
public boolean consumerSetInt32(twrap_media_type_t media, String key, int value) {
return tinyWRAPJNI.MediaSessionMgr_consumerSetInt32(swigCPtr, this, media.swigValue(), key, value);
}
@ -122,6 +127,14 @@ public class MediaSessionMgr {
return tinyWRAPJNI.MediaSessionMgr_defaultsSetPrefVideoSize(pref_video_size.swigValue());
}
public static boolean defaultsSetPrefVideoSizeOutRange(tmedia_pref_video_size_t min, tmedia_pref_video_size_t max) {
return tinyWRAPJNI.MediaSessionMgr_defaultsSetPrefVideoSizeOutRange(min.swigValue(), max.swigValue());
}
public static boolean defaultsSetAdaptativeVideoSizeOutEnabled(boolean enabled) {
return tinyWRAPJNI.MediaSessionMgr_defaultsSetAdaptativeVideoSizeOutEnabled(enabled);
}
public static boolean defaultsSetJbMargin(long jb_margin_ms) {
return tinyWRAPJNI.MediaSessionMgr_defaultsSetJbMargin(jb_margin_ms);
}

View File

@ -0,0 +1,98 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
* Version 2.0.9
*
* Do not make changes to this file unless you know what you are doing--modify
* the SWIG interface file instead.
* ----------------------------------------------------------------------------- */
package org.doubango.tinyWRAP;
public class QoS {
private long swigCPtr;
protected boolean swigCMemOwn;
protected QoS(long cPtr, boolean cMemoryOwn) {
swigCMemOwn = cMemoryOwn;
swigCPtr = cPtr;
}
protected static long getCPtr(QoS obj) {
return (obj == null) ? 0 : obj.swigCPtr;
}
protected void finalize() {
delete();
}
public synchronized void delete() {
if (swigCPtr != 0) {
if (swigCMemOwn) {
swigCMemOwn = false;
tinyWRAPJNI.delete_QoS(swigCPtr);
}
swigCPtr = 0;
}
}
public float getQavg() {
return tinyWRAPJNI.QoS_getQavg(swigCPtr, this);
}
public float getQ1() {
return tinyWRAPJNI.QoS_getQ1(swigCPtr, this);
}
public float getQ2() {
return tinyWRAPJNI.QoS_getQ2(swigCPtr, this);
}
public float getQ3() {
return tinyWRAPJNI.QoS_getQ3(swigCPtr, this);
}
public float getQ4() {
return tinyWRAPJNI.QoS_getQ4(swigCPtr, this);
}
public float getQ5() {
return tinyWRAPJNI.QoS_getQ5(swigCPtr, this);
}
public long getVideoInWidth() {
return tinyWRAPJNI.QoS_getVideoInWidth(swigCPtr, this);
}
public long getVideoOutWidth() {
return tinyWRAPJNI.QoS_getVideoOutWidth(swigCPtr, this);
}
public long getVideoInHeight() {
return tinyWRAPJNI.QoS_getVideoInHeight(swigCPtr, this);
}
public long getVideoOutHeight() {
return tinyWRAPJNI.QoS_getVideoOutHeight(swigCPtr, this);
}
public long getBandwidthDownKbps() {
return tinyWRAPJNI.QoS_getBandwidthDownKbps(swigCPtr, this);
}
public long getBandwidthUpKbps() {
return tinyWRAPJNI.QoS_getBandwidthUpKbps(swigCPtr, this);
}
public long getVideoInAvgFps() {
return tinyWRAPJNI.QoS_getVideoInAvgFps(swigCPtr, this);
}
public long getVideoDecAvgTime() {
return tinyWRAPJNI.QoS_getVideoDecAvgTime(swigCPtr, this);
}
public long getVideoEncAvgTime() {
return tinyWRAPJNI.QoS_getVideoEncAvgTime(swigCPtr, this);
}
}

View File

@ -35,6 +35,22 @@ public class tinyWRAPJNI {
public final static native long ActionConfig_setResponseLine(long jarg1, ActionConfig jarg1_, short jarg2, String jarg3);
public final static native long ActionConfig_setMediaString(long jarg1, ActionConfig jarg1_, int jarg2, String jarg3, String jarg4);
public final static native long ActionConfig_setMediaInt(long jarg1, ActionConfig jarg1_, int jarg2, String jarg3, int jarg4);
public final static native void delete_QoS(long jarg1);
public final static native float QoS_getQavg(long jarg1, QoS jarg1_);
public final static native float QoS_getQ1(long jarg1, QoS jarg1_);
public final static native float QoS_getQ2(long jarg1, QoS jarg1_);
public final static native float QoS_getQ3(long jarg1, QoS jarg1_);
public final static native float QoS_getQ4(long jarg1, QoS jarg1_);
public final static native float QoS_getQ5(long jarg1, QoS jarg1_);
public final static native long QoS_getVideoInWidth(long jarg1, QoS jarg1_);
public final static native long QoS_getVideoOutWidth(long jarg1, QoS jarg1_);
public final static native long QoS_getVideoInHeight(long jarg1, QoS jarg1_);
public final static native long QoS_getVideoOutHeight(long jarg1, QoS jarg1_);
public final static native long QoS_getBandwidthDownKbps(long jarg1, QoS jarg1_);
public final static native long QoS_getBandwidthUpKbps(long jarg1, QoS jarg1_);
public final static native long QoS_getVideoInAvgFps(long jarg1, QoS jarg1_);
public final static native long QoS_getVideoDecAvgTime(long jarg1, QoS jarg1_);
public final static native long QoS_getVideoEncAvgTime(long jarg1, QoS jarg1_);
public final static native void delete_Codec(long jarg1);
public final static native int Codec_getMediaType(long jarg1, Codec jarg1_);
public final static native String Codec_getName(long jarg1, Codec jarg1_);
@ -46,6 +62,7 @@ public class tinyWRAPJNI {
public final static native void delete_MediaSessionMgr(long jarg1);
public final static native boolean MediaSessionMgr_sessionSetInt32(long jarg1, MediaSessionMgr jarg1_, int jarg2, String jarg3, int jarg4);
public final static native int MediaSessionMgr_sessionGetInt32(long jarg1, MediaSessionMgr jarg1_, int jarg2, String jarg3);
public final static native long MediaSessionMgr_sessionGetQoS(long jarg1, MediaSessionMgr jarg1_, int jarg2);
public final static native boolean MediaSessionMgr_consumerSetInt32(long jarg1, MediaSessionMgr jarg1_, int jarg2, String jarg3, int jarg4);
public final static native boolean MediaSessionMgr_consumerSetInt64(long jarg1, MediaSessionMgr jarg1_, int jarg2, String jarg3, long jarg4);
public final static native boolean MediaSessionMgr_producerSetInt32(long jarg1, MediaSessionMgr jarg1_, int jarg2, String jarg3, int jarg4);
@ -65,6 +82,8 @@ public class tinyWRAPJNI {
public final static native boolean MediaSessionMgr_defaultsSetBandwidthVideoUploadMax(int jarg1);
public final static native boolean MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax(int jarg1);
public final static native boolean MediaSessionMgr_defaultsSetPrefVideoSize(int jarg1);
public final static native boolean MediaSessionMgr_defaultsSetPrefVideoSizeOutRange(int jarg1, int jarg2);
public final static native boolean MediaSessionMgr_defaultsSetAdaptativeVideoSizeOutEnabled(boolean jarg1);
public final static native boolean MediaSessionMgr_defaultsSetJbMargin(long jarg1);
public final static native boolean MediaSessionMgr_defaultsSetJbMaxLateRate(long jarg1);
public final static native boolean MediaSessionMgr_defaultsSetEchoTail(long jarg1);

View File

@ -2407,6 +2407,241 @@ SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_ActionConfig_1se
}
SWIGEXPORT void JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_delete_1QoS(JNIEnv *jenv, jclass jcls, jlong jarg1) {
QoS *arg1 = (QoS *) 0 ;
(void)jenv;
(void)jcls;
arg1 = *(QoS **)&jarg1;
delete arg1;
}
SWIGEXPORT jfloat JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_QoS_1getQavg(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jfloat jresult = 0 ;
QoS *arg1 = (QoS *) 0 ;
float result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(QoS **)&jarg1;
result = (float)(arg1)->getQavg();
jresult = (jfloat)result;
return jresult;
}
SWIGEXPORT jfloat JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_QoS_1getQ1(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jfloat jresult = 0 ;
QoS *arg1 = (QoS *) 0 ;
float result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(QoS **)&jarg1;
result = (float)(arg1)->getQ1();
jresult = (jfloat)result;
return jresult;
}
SWIGEXPORT jfloat JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_QoS_1getQ2(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jfloat jresult = 0 ;
QoS *arg1 = (QoS *) 0 ;
float result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(QoS **)&jarg1;
result = (float)(arg1)->getQ2();
jresult = (jfloat)result;
return jresult;
}
SWIGEXPORT jfloat JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_QoS_1getQ3(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jfloat jresult = 0 ;
QoS *arg1 = (QoS *) 0 ;
float result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(QoS **)&jarg1;
result = (float)(arg1)->getQ3();
jresult = (jfloat)result;
return jresult;
}
SWIGEXPORT jfloat JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_QoS_1getQ4(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jfloat jresult = 0 ;
QoS *arg1 = (QoS *) 0 ;
float result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(QoS **)&jarg1;
result = (float)(arg1)->getQ4();
jresult = (jfloat)result;
return jresult;
}
SWIGEXPORT jfloat JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_QoS_1getQ5(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jfloat jresult = 0 ;
QoS *arg1 = (QoS *) 0 ;
float result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(QoS **)&jarg1;
result = (float)(arg1)->getQ5();
jresult = (jfloat)result;
return jresult;
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_QoS_1getVideoInWidth(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jlong jresult = 0 ;
QoS *arg1 = (QoS *) 0 ;
unsigned int result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(QoS **)&jarg1;
result = (unsigned int)(arg1)->getVideoInWidth();
jresult = (jlong)result;
return jresult;
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_QoS_1getVideoOutWidth(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jlong jresult = 0 ;
QoS *arg1 = (QoS *) 0 ;
unsigned int result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(QoS **)&jarg1;
result = (unsigned int)(arg1)->getVideoOutWidth();
jresult = (jlong)result;
return jresult;
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_QoS_1getVideoInHeight(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jlong jresult = 0 ;
QoS *arg1 = (QoS *) 0 ;
unsigned int result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(QoS **)&jarg1;
result = (unsigned int)(arg1)->getVideoInHeight();
jresult = (jlong)result;
return jresult;
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_QoS_1getVideoOutHeight(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jlong jresult = 0 ;
QoS *arg1 = (QoS *) 0 ;
unsigned int result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(QoS **)&jarg1;
result = (unsigned int)(arg1)->getVideoOutHeight();
jresult = (jlong)result;
return jresult;
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_QoS_1getBandwidthDownKbps(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jlong jresult = 0 ;
QoS *arg1 = (QoS *) 0 ;
unsigned int result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(QoS **)&jarg1;
result = (unsigned int)(arg1)->getBandwidthDownKbps();
jresult = (jlong)result;
return jresult;
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_QoS_1getBandwidthUpKbps(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jlong jresult = 0 ;
QoS *arg1 = (QoS *) 0 ;
unsigned int result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(QoS **)&jarg1;
result = (unsigned int)(arg1)->getBandwidthUpKbps();
jresult = (jlong)result;
return jresult;
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_QoS_1getVideoInAvgFps(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jlong jresult = 0 ;
QoS *arg1 = (QoS *) 0 ;
unsigned int result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(QoS **)&jarg1;
result = (unsigned int)(arg1)->getVideoInAvgFps();
jresult = (jlong)result;
return jresult;
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_QoS_1getVideoDecAvgTime(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jlong jresult = 0 ;
QoS *arg1 = (QoS *) 0 ;
unsigned int result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(QoS **)&jarg1;
result = (unsigned int)(arg1)->getVideoDecAvgTime();
jresult = (jlong)result;
return jresult;
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_QoS_1getVideoEncAvgTime(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jlong jresult = 0 ;
QoS *arg1 = (QoS *) 0 ;
unsigned int result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(QoS **)&jarg1;
result = (unsigned int)(arg1)->getVideoEncAvgTime();
jresult = (jlong)result;
return jresult;
}
SWIGEXPORT void JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_delete_1Codec(JNIEnv *jenv, jclass jcls, jlong jarg1) {
Codec *arg1 = (Codec *) 0 ;
@ -2582,6 +2817,23 @@ SWIGEXPORT jint JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionMgr_1
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionMgr_1sessionGetQoS(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) {
jlong jresult = 0 ;
MediaSessionMgr *arg1 = (MediaSessionMgr *) 0 ;
twrap_media_type_t arg2 ;
QoS *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(MediaSessionMgr **)&jarg1;
arg2 = (twrap_media_type_t)jarg2;
result = (QoS *)(arg1)->sessionGetQoS(arg2);
*(QoS **)&jresult = result;
return jresult;
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionMgr_1consumerSetInt32(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2, jstring jarg3, jint jarg4) {
jboolean jresult = 0 ;
MediaSessionMgr *arg1 = (MediaSessionMgr *) 0 ;
@ -2925,6 +3177,36 @@ SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionM
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionMgr_1defaultsSetPrefVideoSizeOutRange(JNIEnv *jenv, jclass jcls, jint jarg1, jint jarg2) {
jboolean jresult = 0 ;
tmedia_pref_video_size_t arg1 ;
tmedia_pref_video_size_t arg2 ;
bool result;
(void)jenv;
(void)jcls;
arg1 = (tmedia_pref_video_size_t)jarg1;
arg2 = (tmedia_pref_video_size_t)jarg2;
result = (bool)MediaSessionMgr::defaultsSetPrefVideoSizeOutRange(arg1,arg2);
jresult = (jboolean)result;
return jresult;
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionMgr_1defaultsSetAdaptativeVideoSizeOutEnabled(JNIEnv *jenv, jclass jcls, jboolean jarg1) {
jboolean jresult = 0 ;
bool arg1 ;
bool result;
(void)jenv;
(void)jcls;
arg1 = jarg1 ? true : false;
result = (bool)MediaSessionMgr::defaultsSetAdaptativeVideoSizeOutEnabled(arg1);
jresult = (jboolean)result;
return jresult;
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionMgr_1defaultsSetJbMargin(JNIEnv *jenv, jclass jcls, jlong jarg1) {
jboolean jresult = 0 ;
uint32_t arg1 ;

View File

@ -35,6 +35,22 @@ public class tinyWRAPJNI {
public final static native long ActionConfig_setResponseLine(long jarg1, ActionConfig jarg1_, short jarg2, String jarg3);
public final static native long ActionConfig_setMediaString(long jarg1, ActionConfig jarg1_, int jarg2, String jarg3, String jarg4);
public final static native long ActionConfig_setMediaInt(long jarg1, ActionConfig jarg1_, int jarg2, String jarg3, int jarg4);
public final static native void delete_QoS(long jarg1);
public final static native float QoS_getQavg(long jarg1, QoS jarg1_);
public final static native float QoS_getQ1(long jarg1, QoS jarg1_);
public final static native float QoS_getQ2(long jarg1, QoS jarg1_);
public final static native float QoS_getQ3(long jarg1, QoS jarg1_);
public final static native float QoS_getQ4(long jarg1, QoS jarg1_);
public final static native float QoS_getQ5(long jarg1, QoS jarg1_);
public final static native long QoS_getVideoInWidth(long jarg1, QoS jarg1_);
public final static native long QoS_getVideoOutWidth(long jarg1, QoS jarg1_);
public final static native long QoS_getVideoInHeight(long jarg1, QoS jarg1_);
public final static native long QoS_getVideoOutHeight(long jarg1, QoS jarg1_);
public final static native long QoS_getBandwidthDownKbps(long jarg1, QoS jarg1_);
public final static native long QoS_getBandwidthUpKbps(long jarg1, QoS jarg1_);
public final static native long QoS_getVideoInAvgFps(long jarg1, QoS jarg1_);
public final static native long QoS_getVideoDecAvgTime(long jarg1, QoS jarg1_);
public final static native long QoS_getVideoEncAvgTime(long jarg1, QoS jarg1_);
public final static native void delete_Codec(long jarg1);
public final static native int Codec_getMediaType(long jarg1, Codec jarg1_);
public final static native String Codec_getName(long jarg1, Codec jarg1_);
@ -46,6 +62,7 @@ public class tinyWRAPJNI {
public final static native void delete_MediaSessionMgr(long jarg1);
public final static native boolean MediaSessionMgr_sessionSetInt32(long jarg1, MediaSessionMgr jarg1_, int jarg2, String jarg3, int jarg4);
public final static native int MediaSessionMgr_sessionGetInt32(long jarg1, MediaSessionMgr jarg1_, int jarg2, String jarg3);
public final static native long MediaSessionMgr_sessionGetQoS(long jarg1, MediaSessionMgr jarg1_, int jarg2);
public final static native boolean MediaSessionMgr_consumerSetInt32(long jarg1, MediaSessionMgr jarg1_, int jarg2, String jarg3, int jarg4);
public final static native boolean MediaSessionMgr_consumerSetInt64(long jarg1, MediaSessionMgr jarg1_, int jarg2, String jarg3, long jarg4);
public final static native boolean MediaSessionMgr_producerSetInt32(long jarg1, MediaSessionMgr jarg1_, int jarg2, String jarg3, int jarg4);
@ -65,6 +82,8 @@ public class tinyWRAPJNI {
public final static native boolean MediaSessionMgr_defaultsSetBandwidthVideoUploadMax(int jarg1);
public final static native boolean MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax(int jarg1);
public final static native boolean MediaSessionMgr_defaultsSetPrefVideoSize(int jarg1);
public final static native boolean MediaSessionMgr_defaultsSetPrefVideoSizeOutRange(int jarg1, int jarg2);
public final static native boolean MediaSessionMgr_defaultsSetAdaptativeVideoSizeOutEnabled(boolean jarg1);
public final static native boolean MediaSessionMgr_defaultsSetJbMargin(long jarg1);
public final static native boolean MediaSessionMgr_defaultsSetJbMaxLateRate(long jarg1);
public final static native boolean MediaSessionMgr_defaultsSetEchoTail(long jarg1);

View File

@ -2407,6 +2407,241 @@ SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_ActionConfig_1se
}
SWIGEXPORT void JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_delete_1QoS(JNIEnv *jenv, jclass jcls, jlong jarg1) {
QoS *arg1 = (QoS *) 0 ;
(void)jenv;
(void)jcls;
arg1 = *(QoS **)&jarg1;
delete arg1;
}
SWIGEXPORT jfloat JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_QoS_1getQavg(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jfloat jresult = 0 ;
QoS *arg1 = (QoS *) 0 ;
float result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(QoS **)&jarg1;
result = (float)(arg1)->getQavg();
jresult = (jfloat)result;
return jresult;
}
SWIGEXPORT jfloat JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_QoS_1getQ1(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jfloat jresult = 0 ;
QoS *arg1 = (QoS *) 0 ;
float result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(QoS **)&jarg1;
result = (float)(arg1)->getQ1();
jresult = (jfloat)result;
return jresult;
}
SWIGEXPORT jfloat JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_QoS_1getQ2(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jfloat jresult = 0 ;
QoS *arg1 = (QoS *) 0 ;
float result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(QoS **)&jarg1;
result = (float)(arg1)->getQ2();
jresult = (jfloat)result;
return jresult;
}
SWIGEXPORT jfloat JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_QoS_1getQ3(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jfloat jresult = 0 ;
QoS *arg1 = (QoS *) 0 ;
float result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(QoS **)&jarg1;
result = (float)(arg1)->getQ3();
jresult = (jfloat)result;
return jresult;
}
SWIGEXPORT jfloat JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_QoS_1getQ4(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jfloat jresult = 0 ;
QoS *arg1 = (QoS *) 0 ;
float result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(QoS **)&jarg1;
result = (float)(arg1)->getQ4();
jresult = (jfloat)result;
return jresult;
}
SWIGEXPORT jfloat JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_QoS_1getQ5(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jfloat jresult = 0 ;
QoS *arg1 = (QoS *) 0 ;
float result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(QoS **)&jarg1;
result = (float)(arg1)->getQ5();
jresult = (jfloat)result;
return jresult;
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_QoS_1getVideoInWidth(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jlong jresult = 0 ;
QoS *arg1 = (QoS *) 0 ;
unsigned int result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(QoS **)&jarg1;
result = (unsigned int)(arg1)->getVideoInWidth();
jresult = (jlong)result;
return jresult;
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_QoS_1getVideoOutWidth(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jlong jresult = 0 ;
QoS *arg1 = (QoS *) 0 ;
unsigned int result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(QoS **)&jarg1;
result = (unsigned int)(arg1)->getVideoOutWidth();
jresult = (jlong)result;
return jresult;
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_QoS_1getVideoInHeight(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jlong jresult = 0 ;
QoS *arg1 = (QoS *) 0 ;
unsigned int result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(QoS **)&jarg1;
result = (unsigned int)(arg1)->getVideoInHeight();
jresult = (jlong)result;
return jresult;
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_QoS_1getVideoOutHeight(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jlong jresult = 0 ;
QoS *arg1 = (QoS *) 0 ;
unsigned int result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(QoS **)&jarg1;
result = (unsigned int)(arg1)->getVideoOutHeight();
jresult = (jlong)result;
return jresult;
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_QoS_1getBandwidthDownKbps(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jlong jresult = 0 ;
QoS *arg1 = (QoS *) 0 ;
unsigned int result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(QoS **)&jarg1;
result = (unsigned int)(arg1)->getBandwidthDownKbps();
jresult = (jlong)result;
return jresult;
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_QoS_1getBandwidthUpKbps(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jlong jresult = 0 ;
QoS *arg1 = (QoS *) 0 ;
unsigned int result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(QoS **)&jarg1;
result = (unsigned int)(arg1)->getBandwidthUpKbps();
jresult = (jlong)result;
return jresult;
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_QoS_1getVideoInAvgFps(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jlong jresult = 0 ;
QoS *arg1 = (QoS *) 0 ;
unsigned int result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(QoS **)&jarg1;
result = (unsigned int)(arg1)->getVideoInAvgFps();
jresult = (jlong)result;
return jresult;
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_QoS_1getVideoDecAvgTime(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jlong jresult = 0 ;
QoS *arg1 = (QoS *) 0 ;
unsigned int result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(QoS **)&jarg1;
result = (unsigned int)(arg1)->getVideoDecAvgTime();
jresult = (jlong)result;
return jresult;
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_QoS_1getVideoEncAvgTime(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
jlong jresult = 0 ;
QoS *arg1 = (QoS *) 0 ;
unsigned int result;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(QoS **)&jarg1;
result = (unsigned int)(arg1)->getVideoEncAvgTime();
jresult = (jlong)result;
return jresult;
}
SWIGEXPORT void JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_delete_1Codec(JNIEnv *jenv, jclass jcls, jlong jarg1) {
Codec *arg1 = (Codec *) 0 ;
@ -2582,6 +2817,23 @@ SWIGEXPORT jint JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionMgr_1
}
SWIGEXPORT jlong JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionMgr_1sessionGetQoS(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) {
jlong jresult = 0 ;
MediaSessionMgr *arg1 = (MediaSessionMgr *) 0 ;
twrap_media_type_t arg2 ;
QoS *result = 0 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(MediaSessionMgr **)&jarg1;
arg2 = (twrap_media_type_t)jarg2;
result = (QoS *)(arg1)->sessionGetQoS(arg2);
*(QoS **)&jresult = result;
return jresult;
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionMgr_1consumerSetInt32(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2, jstring jarg3, jint jarg4) {
jboolean jresult = 0 ;
MediaSessionMgr *arg1 = (MediaSessionMgr *) 0 ;
@ -2925,6 +3177,36 @@ SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionM
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionMgr_1defaultsSetPrefVideoSizeOutRange(JNIEnv *jenv, jclass jcls, jint jarg1, jint jarg2) {
jboolean jresult = 0 ;
tmedia_pref_video_size_t arg1 ;
tmedia_pref_video_size_t arg2 ;
bool result;
(void)jenv;
(void)jcls;
arg1 = (tmedia_pref_video_size_t)jarg1;
arg2 = (tmedia_pref_video_size_t)jarg2;
result = (bool)MediaSessionMgr::defaultsSetPrefVideoSizeOutRange(arg1,arg2);
jresult = (jboolean)result;
return jresult;
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionMgr_1defaultsSetAdaptativeVideoSizeOutEnabled(JNIEnv *jenv, jclass jcls, jboolean jarg1) {
jboolean jresult = 0 ;
bool arg1 ;
bool result;
(void)jenv;
(void)jcls;
arg1 = jarg1 ? true : false;
result = (bool)MediaSessionMgr::defaultsSetAdaptativeVideoSizeOutEnabled(arg1);
jresult = (jboolean)result;
return jresult;
}
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionMgr_1defaultsSetJbMargin(JNIEnv *jenv, jclass jcls, jlong jarg1) {
jboolean jresult = 0 ;
uint32_t arg1 ;

View File

@ -175,6 +175,52 @@ sub ACQUIRE {
}
############# Class : tinyWRAP::QoS ##############
package tinyWRAP::QoS;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( tinyWRAP );
%OWNER = ();
%ITERATORS = ();
sub DESTROY {
return unless $_[0]->isa('HASH');
my $self = tied(%{$_[0]});
return unless defined $self;
delete $ITERATORS{$self};
if (exists $OWNER{$self}) {
tinyWRAPc::delete_QoS($self);
delete $OWNER{$self};
}
}
*getQavg = *tinyWRAPc::QoS_getQavg;
*getQ1 = *tinyWRAPc::QoS_getQ1;
*getQ2 = *tinyWRAPc::QoS_getQ2;
*getQ3 = *tinyWRAPc::QoS_getQ3;
*getQ4 = *tinyWRAPc::QoS_getQ4;
*getQ5 = *tinyWRAPc::QoS_getQ5;
*getVideoInWidth = *tinyWRAPc::QoS_getVideoInWidth;
*getVideoOutWidth = *tinyWRAPc::QoS_getVideoOutWidth;
*getVideoInHeight = *tinyWRAPc::QoS_getVideoInHeight;
*getVideoOutHeight = *tinyWRAPc::QoS_getVideoOutHeight;
*getBandwidthDownKbps = *tinyWRAPc::QoS_getBandwidthDownKbps;
*getBandwidthUpKbps = *tinyWRAPc::QoS_getBandwidthUpKbps;
*getVideoInAvgFps = *tinyWRAPc::QoS_getVideoInAvgFps;
*getVideoDecAvgTime = *tinyWRAPc::QoS_getVideoDecAvgTime;
*getVideoEncAvgTime = *tinyWRAPc::QoS_getVideoEncAvgTime;
sub DISOWN {
my $self = shift;
my $ptr = tied(%$self);
delete $OWNER{$ptr};
}
sub ACQUIRE {
my $self = shift;
my $ptr = tied(%$self);
$OWNER{$ptr} = 1;
}
############# Class : tinyWRAP::Codec ##############
package tinyWRAP::Codec;
@ -233,6 +279,7 @@ sub DESTROY {
*sessionSetInt32 = *tinyWRAPc::MediaSessionMgr_sessionSetInt32;
*sessionGetInt32 = *tinyWRAPc::MediaSessionMgr_sessionGetInt32;
*sessionGetQoS = *tinyWRAPc::MediaSessionMgr_sessionGetQoS;
*consumerSetInt32 = *tinyWRAPc::MediaSessionMgr_consumerSetInt32;
*consumerSetInt64 = *tinyWRAPc::MediaSessionMgr_consumerSetInt64;
*producerSetInt32 = *tinyWRAPc::MediaSessionMgr_producerSetInt32;
@ -252,6 +299,8 @@ sub DESTROY {
*defaultsSetBandwidthVideoUploadMax = *tinyWRAPc::MediaSessionMgr_defaultsSetBandwidthVideoUploadMax;
*defaultsSetBandwidthVideoDownloadMax = *tinyWRAPc::MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax;
*defaultsSetPrefVideoSize = *tinyWRAPc::MediaSessionMgr_defaultsSetPrefVideoSize;
*defaultsSetPrefVideoSizeOutRange = *tinyWRAPc::MediaSessionMgr_defaultsSetPrefVideoSizeOutRange;
*defaultsSetAdaptativeVideoSizeOutEnabled = *tinyWRAPc::MediaSessionMgr_defaultsSetAdaptativeVideoSizeOutEnabled;
*defaultsSetJbMargin = *tinyWRAPc::MediaSessionMgr_defaultsSetJbMargin;
*defaultsSetJbMaxLateRate = *tinyWRAPc::MediaSessionMgr_defaultsSetJbMaxLateRate;
*defaultsSetEchoTail = *tinyWRAPc::MediaSessionMgr_defaultsSetEchoTail;

View File

@ -1549,70 +1549,71 @@ SWIG_Perl_SetModule(swig_module_info *module) {
#define SWIGTYPE_p_ProxyVideoProducerCallback swig_types[32]
#define SWIGTYPE_p_PublicationEvent swig_types[33]
#define SWIGTYPE_p_PublicationSession swig_types[34]
#define SWIGTYPE_p_RPMessage swig_types[35]
#define SWIGTYPE_p_RegistrationEvent swig_types[36]
#define SWIGTYPE_p_RegistrationSession swig_types[37]
#define SWIGTYPE_p_SMSData swig_types[38]
#define SWIGTYPE_p_SMSEncoder swig_types[39]
#define SWIGTYPE_p_SafeObject swig_types[40]
#define SWIGTYPE_p_SdpMessage swig_types[41]
#define SWIGTYPE_p_SipCallback swig_types[42]
#define SWIGTYPE_p_SipEvent swig_types[43]
#define SWIGTYPE_p_SipMessage swig_types[44]
#define SWIGTYPE_p_SipSession swig_types[45]
#define SWIGTYPE_p_SipStack swig_types[46]
#define SWIGTYPE_p_SipUri swig_types[47]
#define SWIGTYPE_p_StackEvent swig_types[48]
#define SWIGTYPE_p_SubscriptionEvent swig_types[49]
#define SWIGTYPE_p_SubscriptionSession swig_types[50]
#define SWIGTYPE_p_T140Callback swig_types[51]
#define SWIGTYPE_p_T140CallbackData swig_types[52]
#define SWIGTYPE_p_XcapCallback swig_types[53]
#define SWIGTYPE_p_XcapEvent swig_types[54]
#define SWIGTYPE_p_XcapMessage swig_types[55]
#define SWIGTYPE_p_XcapSelector swig_types[56]
#define SWIGTYPE_p_XcapStack swig_types[57]
#define SWIGTYPE_p_char swig_types[58]
#define SWIGTYPE_p_int swig_types[59]
#define SWIGTYPE_p_long_long swig_types[60]
#define SWIGTYPE_p_short swig_types[61]
#define SWIGTYPE_p_signed_char swig_types[62]
#define SWIGTYPE_p_tdav_codec_id_e swig_types[63]
#define SWIGTYPE_p_thttp_event_type_e swig_types[64]
#define SWIGTYPE_p_tmedia_bandwidth_level_e swig_types[65]
#define SWIGTYPE_p_tmedia_chroma_e swig_types[66]
#define SWIGTYPE_p_tmedia_codec_id_e swig_types[67]
#define SWIGTYPE_p_tmedia_mode_e swig_types[68]
#define SWIGTYPE_p_tmedia_pref_video_size_s swig_types[69]
#define SWIGTYPE_p_tmedia_profile_e swig_types[70]
#define SWIGTYPE_p_tmedia_qos_strength_e swig_types[71]
#define SWIGTYPE_p_tmedia_qos_stype_e swig_types[72]
#define SWIGTYPE_p_tmedia_srtp_mode_e swig_types[73]
#define SWIGTYPE_p_tmedia_srtp_type_e swig_types[74]
#define SWIGTYPE_p_tmedia_t140_data_type_e swig_types[75]
#define SWIGTYPE_p_tmsrp_event_type_e swig_types[76]
#define SWIGTYPE_p_tmsrp_request_type_e swig_types[77]
#define SWIGTYPE_p_tsip_event_type_e swig_types[78]
#define SWIGTYPE_p_tsip_info_event_type_e swig_types[79]
#define SWIGTYPE_p_tsip_invite_event_type_e swig_types[80]
#define SWIGTYPE_p_tsip_message_event_type_e swig_types[81]
#define SWIGTYPE_p_tsip_options_event_type_e swig_types[82]
#define SWIGTYPE_p_tsip_publish_event_type_e swig_types[83]
#define SWIGTYPE_p_tsip_register_event_type_e swig_types[84]
#define SWIGTYPE_p_tsip_request_type_e swig_types[85]
#define SWIGTYPE_p_tsip_stack_mode_e swig_types[86]
#define SWIGTYPE_p_tsip_subscribe_event_type_e swig_types[87]
#define SWIGTYPE_p_tsk_list_t swig_types[88]
#define SWIGTYPE_p_twrap_media_type_e swig_types[89]
#define SWIGTYPE_p_twrap_proxy_plugin_type_e swig_types[90]
#define SWIGTYPE_p_twrap_rpmessage_type_e swig_types[91]
#define SWIGTYPE_p_twrap_sms_type_e swig_types[92]
#define SWIGTYPE_p_unsigned_char swig_types[93]
#define SWIGTYPE_p_unsigned_int swig_types[94]
#define SWIGTYPE_p_unsigned_long_long swig_types[95]
#define SWIGTYPE_p_unsigned_short swig_types[96]
static swig_type_info *swig_types[98];
static swig_module_info swig_module = {swig_types, 97, 0, 0, 0, 0};
#define SWIGTYPE_p_QoS swig_types[35]
#define SWIGTYPE_p_RPMessage swig_types[36]
#define SWIGTYPE_p_RegistrationEvent swig_types[37]
#define SWIGTYPE_p_RegistrationSession swig_types[38]
#define SWIGTYPE_p_SMSData swig_types[39]
#define SWIGTYPE_p_SMSEncoder swig_types[40]
#define SWIGTYPE_p_SafeObject swig_types[41]
#define SWIGTYPE_p_SdpMessage swig_types[42]
#define SWIGTYPE_p_SipCallback swig_types[43]
#define SWIGTYPE_p_SipEvent swig_types[44]
#define SWIGTYPE_p_SipMessage swig_types[45]
#define SWIGTYPE_p_SipSession swig_types[46]
#define SWIGTYPE_p_SipStack swig_types[47]
#define SWIGTYPE_p_SipUri swig_types[48]
#define SWIGTYPE_p_StackEvent swig_types[49]
#define SWIGTYPE_p_SubscriptionEvent swig_types[50]
#define SWIGTYPE_p_SubscriptionSession swig_types[51]
#define SWIGTYPE_p_T140Callback swig_types[52]
#define SWIGTYPE_p_T140CallbackData swig_types[53]
#define SWIGTYPE_p_XcapCallback swig_types[54]
#define SWIGTYPE_p_XcapEvent swig_types[55]
#define SWIGTYPE_p_XcapMessage swig_types[56]
#define SWIGTYPE_p_XcapSelector swig_types[57]
#define SWIGTYPE_p_XcapStack swig_types[58]
#define SWIGTYPE_p_char swig_types[59]
#define SWIGTYPE_p_int swig_types[60]
#define SWIGTYPE_p_long_long swig_types[61]
#define SWIGTYPE_p_short swig_types[62]
#define SWIGTYPE_p_signed_char swig_types[63]
#define SWIGTYPE_p_tdav_codec_id_e swig_types[64]
#define SWIGTYPE_p_thttp_event_type_e swig_types[65]
#define SWIGTYPE_p_tmedia_bandwidth_level_e swig_types[66]
#define SWIGTYPE_p_tmedia_chroma_e swig_types[67]
#define SWIGTYPE_p_tmedia_codec_id_e swig_types[68]
#define SWIGTYPE_p_tmedia_mode_e swig_types[69]
#define SWIGTYPE_p_tmedia_pref_video_size_s swig_types[70]
#define SWIGTYPE_p_tmedia_profile_e swig_types[71]
#define SWIGTYPE_p_tmedia_qos_strength_e swig_types[72]
#define SWIGTYPE_p_tmedia_qos_stype_e swig_types[73]
#define SWIGTYPE_p_tmedia_srtp_mode_e swig_types[74]
#define SWIGTYPE_p_tmedia_srtp_type_e swig_types[75]
#define SWIGTYPE_p_tmedia_t140_data_type_e swig_types[76]
#define SWIGTYPE_p_tmsrp_event_type_e swig_types[77]
#define SWIGTYPE_p_tmsrp_request_type_e swig_types[78]
#define SWIGTYPE_p_tsip_event_type_e swig_types[79]
#define SWIGTYPE_p_tsip_info_event_type_e swig_types[80]
#define SWIGTYPE_p_tsip_invite_event_type_e swig_types[81]
#define SWIGTYPE_p_tsip_message_event_type_e swig_types[82]
#define SWIGTYPE_p_tsip_options_event_type_e swig_types[83]
#define SWIGTYPE_p_tsip_publish_event_type_e swig_types[84]
#define SWIGTYPE_p_tsip_register_event_type_e swig_types[85]
#define SWIGTYPE_p_tsip_request_type_e swig_types[86]
#define SWIGTYPE_p_tsip_stack_mode_e swig_types[87]
#define SWIGTYPE_p_tsip_subscribe_event_type_e swig_types[88]
#define SWIGTYPE_p_tsk_list_t swig_types[89]
#define SWIGTYPE_p_twrap_media_type_e swig_types[90]
#define SWIGTYPE_p_twrap_proxy_plugin_type_e swig_types[91]
#define SWIGTYPE_p_twrap_rpmessage_type_e swig_types[92]
#define SWIGTYPE_p_twrap_sms_type_e swig_types[93]
#define SWIGTYPE_p_unsigned_char swig_types[94]
#define SWIGTYPE_p_unsigned_int swig_types[95]
#define SWIGTYPE_p_unsigned_long_long swig_types[96]
#define SWIGTYPE_p_unsigned_short swig_types[97]
static swig_type_info *swig_types[99];
static swig_module_info swig_module = {swig_types, 98, 0, 0, 0, 0};
#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
@ -1995,6 +1996,20 @@ SWIG_AsVal_short SWIG_PERL_DECL_ARGS_2(SV * obj, short *val)
}
SWIGINTERNINLINE SV *
SWIG_From_double SWIG_PERL_DECL_ARGS_1(double value)
{
return sv_2mortal(newSVnv(value));
}
SWIGINTERNINLINE SV *
SWIG_From_float SWIG_PERL_DECL_ARGS_1(float value)
{
return SWIG_From_double SWIG_PERL_CALL_ARGS_1(value);
}
SWIGINTERNINLINE SV *
SWIG_FromCharPtrAndSize(const char* carray, size_t size)
{
@ -2149,20 +2164,6 @@ SWIG_AsVal_float SWIG_PERL_DECL_ARGS_2(SV * obj, float *val)
}
SWIGINTERNINLINE SV *
SWIG_From_double SWIG_PERL_DECL_ARGS_1(double value)
{
return sv_2mortal(newSVnv(value));
}
SWIGINTERNINLINE SV *
SWIG_From_float SWIG_PERL_DECL_ARGS_1(float value)
{
return SWIG_From_double SWIG_PERL_CALL_ARGS_1(value);
}
SWIGINTERN int
SWIG_AsVal_unsigned_SS_short SWIG_PERL_DECL_ARGS_2(SV * obj, unsigned short *val)
{
@ -3110,6 +3111,453 @@ XS(_wrap_ActionConfig_setMediaInt) {
}
XS(_wrap_delete_QoS) {
{
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
dXSARGS;
if ((items < 1) || (items > 1)) {
SWIG_croak("Usage: delete_QoS(self);");
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_QoS, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_QoS" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
delete arg1;
ST(argvi) = sv_newmortal();
XSRETURN(argvi);
fail:
SWIG_croak_null();
}
}
XS(_wrap_QoS_getQavg) {
{
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
float result;
dXSARGS;
if ((items < 1) || (items > 1)) {
SWIG_croak("Usage: QoS_getQavg(self);");
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_QoS, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "QoS_getQavg" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
result = (float)(arg1)->getQavg();
ST(argvi) = SWIG_From_float SWIG_PERL_CALL_ARGS_1(static_cast< float >(result)); argvi++ ;
XSRETURN(argvi);
fail:
SWIG_croak_null();
}
}
XS(_wrap_QoS_getQ1) {
{
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
float result;
dXSARGS;
if ((items < 1) || (items > 1)) {
SWIG_croak("Usage: QoS_getQ1(self);");
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_QoS, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "QoS_getQ1" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
result = (float)(arg1)->getQ1();
ST(argvi) = SWIG_From_float SWIG_PERL_CALL_ARGS_1(static_cast< float >(result)); argvi++ ;
XSRETURN(argvi);
fail:
SWIG_croak_null();
}
}
XS(_wrap_QoS_getQ2) {
{
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
float result;
dXSARGS;
if ((items < 1) || (items > 1)) {
SWIG_croak("Usage: QoS_getQ2(self);");
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_QoS, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "QoS_getQ2" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
result = (float)(arg1)->getQ2();
ST(argvi) = SWIG_From_float SWIG_PERL_CALL_ARGS_1(static_cast< float >(result)); argvi++ ;
XSRETURN(argvi);
fail:
SWIG_croak_null();
}
}
XS(_wrap_QoS_getQ3) {
{
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
float result;
dXSARGS;
if ((items < 1) || (items > 1)) {
SWIG_croak("Usage: QoS_getQ3(self);");
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_QoS, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "QoS_getQ3" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
result = (float)(arg1)->getQ3();
ST(argvi) = SWIG_From_float SWIG_PERL_CALL_ARGS_1(static_cast< float >(result)); argvi++ ;
XSRETURN(argvi);
fail:
SWIG_croak_null();
}
}
XS(_wrap_QoS_getQ4) {
{
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
float result;
dXSARGS;
if ((items < 1) || (items > 1)) {
SWIG_croak("Usage: QoS_getQ4(self);");
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_QoS, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "QoS_getQ4" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
result = (float)(arg1)->getQ4();
ST(argvi) = SWIG_From_float SWIG_PERL_CALL_ARGS_1(static_cast< float >(result)); argvi++ ;
XSRETURN(argvi);
fail:
SWIG_croak_null();
}
}
XS(_wrap_QoS_getQ5) {
{
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
float result;
dXSARGS;
if ((items < 1) || (items > 1)) {
SWIG_croak("Usage: QoS_getQ5(self);");
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_QoS, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "QoS_getQ5" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
result = (float)(arg1)->getQ5();
ST(argvi) = SWIG_From_float SWIG_PERL_CALL_ARGS_1(static_cast< float >(result)); argvi++ ;
XSRETURN(argvi);
fail:
SWIG_croak_null();
}
}
XS(_wrap_QoS_getVideoInWidth) {
{
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
unsigned int result;
dXSARGS;
if ((items < 1) || (items > 1)) {
SWIG_croak("Usage: QoS_getVideoInWidth(self);");
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_QoS, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "QoS_getVideoInWidth" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
result = (unsigned int)(arg1)->getVideoInWidth();
ST(argvi) = SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1(static_cast< unsigned int >(result)); argvi++ ;
XSRETURN(argvi);
fail:
SWIG_croak_null();
}
}
XS(_wrap_QoS_getVideoOutWidth) {
{
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
unsigned int result;
dXSARGS;
if ((items < 1) || (items > 1)) {
SWIG_croak("Usage: QoS_getVideoOutWidth(self);");
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_QoS, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "QoS_getVideoOutWidth" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
result = (unsigned int)(arg1)->getVideoOutWidth();
ST(argvi) = SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1(static_cast< unsigned int >(result)); argvi++ ;
XSRETURN(argvi);
fail:
SWIG_croak_null();
}
}
XS(_wrap_QoS_getVideoInHeight) {
{
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
unsigned int result;
dXSARGS;
if ((items < 1) || (items > 1)) {
SWIG_croak("Usage: QoS_getVideoInHeight(self);");
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_QoS, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "QoS_getVideoInHeight" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
result = (unsigned int)(arg1)->getVideoInHeight();
ST(argvi) = SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1(static_cast< unsigned int >(result)); argvi++ ;
XSRETURN(argvi);
fail:
SWIG_croak_null();
}
}
XS(_wrap_QoS_getVideoOutHeight) {
{
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
unsigned int result;
dXSARGS;
if ((items < 1) || (items > 1)) {
SWIG_croak("Usage: QoS_getVideoOutHeight(self);");
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_QoS, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "QoS_getVideoOutHeight" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
result = (unsigned int)(arg1)->getVideoOutHeight();
ST(argvi) = SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1(static_cast< unsigned int >(result)); argvi++ ;
XSRETURN(argvi);
fail:
SWIG_croak_null();
}
}
XS(_wrap_QoS_getBandwidthDownKbps) {
{
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
unsigned int result;
dXSARGS;
if ((items < 1) || (items > 1)) {
SWIG_croak("Usage: QoS_getBandwidthDownKbps(self);");
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_QoS, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "QoS_getBandwidthDownKbps" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
result = (unsigned int)(arg1)->getBandwidthDownKbps();
ST(argvi) = SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1(static_cast< unsigned int >(result)); argvi++ ;
XSRETURN(argvi);
fail:
SWIG_croak_null();
}
}
XS(_wrap_QoS_getBandwidthUpKbps) {
{
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
unsigned int result;
dXSARGS;
if ((items < 1) || (items > 1)) {
SWIG_croak("Usage: QoS_getBandwidthUpKbps(self);");
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_QoS, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "QoS_getBandwidthUpKbps" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
result = (unsigned int)(arg1)->getBandwidthUpKbps();
ST(argvi) = SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1(static_cast< unsigned int >(result)); argvi++ ;
XSRETURN(argvi);
fail:
SWIG_croak_null();
}
}
XS(_wrap_QoS_getVideoInAvgFps) {
{
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
unsigned int result;
dXSARGS;
if ((items < 1) || (items > 1)) {
SWIG_croak("Usage: QoS_getVideoInAvgFps(self);");
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_QoS, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "QoS_getVideoInAvgFps" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
result = (unsigned int)(arg1)->getVideoInAvgFps();
ST(argvi) = SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1(static_cast< unsigned int >(result)); argvi++ ;
XSRETURN(argvi);
fail:
SWIG_croak_null();
}
}
XS(_wrap_QoS_getVideoDecAvgTime) {
{
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
unsigned int result;
dXSARGS;
if ((items < 1) || (items > 1)) {
SWIG_croak("Usage: QoS_getVideoDecAvgTime(self);");
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_QoS, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "QoS_getVideoDecAvgTime" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
result = (unsigned int)(arg1)->getVideoDecAvgTime();
ST(argvi) = SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1(static_cast< unsigned int >(result)); argvi++ ;
XSRETURN(argvi);
fail:
SWIG_croak_null();
}
}
XS(_wrap_QoS_getVideoEncAvgTime) {
{
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
unsigned int result;
dXSARGS;
if ((items < 1) || (items > 1)) {
SWIG_croak("Usage: QoS_getVideoEncAvgTime(self);");
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_QoS, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "QoS_getVideoEncAvgTime" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
result = (unsigned int)(arg1)->getVideoEncAvgTime();
ST(argvi) = SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1(static_cast< unsigned int >(result)); argvi++ ;
XSRETURN(argvi);
fail:
SWIG_croak_null();
}
}
XS(_wrap_delete_Codec) {
{
Codec *arg1 = (Codec *) 0 ;
@ -3468,6 +3916,44 @@ XS(_wrap_MediaSessionMgr_sessionGetInt32) {
}
XS(_wrap_MediaSessionMgr_sessionGetQoS) {
{
MediaSessionMgr *arg1 = (MediaSessionMgr *) 0 ;
twrap_media_type_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
int val2 ;
int ecode2 = 0 ;
int argvi = 0;
QoS *result = 0 ;
dXSARGS;
if ((items < 2) || (items > 2)) {
SWIG_croak("Usage: MediaSessionMgr_sessionGetQoS(self,media);");
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_MediaSessionMgr, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MediaSessionMgr_sessionGetQoS" "', argument " "1"" of type '" "MediaSessionMgr *""'");
}
arg1 = reinterpret_cast< MediaSessionMgr * >(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MediaSessionMgr_sessionGetQoS" "', argument " "2"" of type '" "twrap_media_type_t""'");
}
arg2 = static_cast< twrap_media_type_t >(val2);
result = (QoS *)(arg1)->sessionGetQoS(arg2);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_QoS, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
XSRETURN(argvi);
fail:
SWIG_croak_null();
}
}
XS(_wrap_MediaSessionMgr_consumerSetInt32) {
{
MediaSessionMgr *arg1 = (MediaSessionMgr *) 0 ;
@ -4145,6 +4631,72 @@ XS(_wrap_MediaSessionMgr_defaultsSetPrefVideoSize) {
}
XS(_wrap_MediaSessionMgr_defaultsSetPrefVideoSizeOutRange) {
{
tmedia_pref_video_size_t arg1 ;
tmedia_pref_video_size_t arg2 ;
int val1 ;
int ecode1 = 0 ;
int val2 ;
int ecode2 = 0 ;
int argvi = 0;
bool result;
dXSARGS;
if ((items < 2) || (items > 2)) {
SWIG_croak("Usage: MediaSessionMgr_defaultsSetPrefVideoSizeOutRange(min,max);");
}
ecode1 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(0), &val1);
if (!SWIG_IsOK(ecode1)) {
SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "MediaSessionMgr_defaultsSetPrefVideoSizeOutRange" "', argument " "1"" of type '" "tmedia_pref_video_size_t""'");
}
arg1 = static_cast< tmedia_pref_video_size_t >(val1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MediaSessionMgr_defaultsSetPrefVideoSizeOutRange" "', argument " "2"" of type '" "tmedia_pref_video_size_t""'");
}
arg2 = static_cast< tmedia_pref_video_size_t >(val2);
result = (bool)MediaSessionMgr::defaultsSetPrefVideoSizeOutRange(arg1,arg2);
ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1(static_cast< bool >(result)); argvi++ ;
XSRETURN(argvi);
fail:
SWIG_croak_null();
}
}
XS(_wrap_MediaSessionMgr_defaultsSetAdaptativeVideoSizeOutEnabled) {
{
bool arg1 ;
bool val1 ;
int ecode1 = 0 ;
int argvi = 0;
bool result;
dXSARGS;
if ((items < 1) || (items > 1)) {
SWIG_croak("Usage: MediaSessionMgr_defaultsSetAdaptativeVideoSizeOutEnabled(enabled);");
}
ecode1 = SWIG_AsVal_bool SWIG_PERL_CALL_ARGS_2(ST(0), &val1);
if (!SWIG_IsOK(ecode1)) {
SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "MediaSessionMgr_defaultsSetAdaptativeVideoSizeOutEnabled" "', argument " "1"" of type '" "bool""'");
}
arg1 = static_cast< bool >(val1);
result = (bool)MediaSessionMgr::defaultsSetAdaptativeVideoSizeOutEnabled(arg1);
ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1(static_cast< bool >(result)); argvi++ ;
XSRETURN(argvi);
fail:
SWIG_croak_null();
}
}
XS(_wrap_MediaSessionMgr_defaultsSetJbMargin) {
{
uint32_t arg1 ;
@ -27523,6 +28075,7 @@ static swig_type_info _swigt__p_ProxyVideoProducer = {"_p_ProxyVideoProducer", "
static swig_type_info _swigt__p_ProxyVideoProducerCallback = {"_p_ProxyVideoProducerCallback", "ProxyVideoProducerCallback *", 0, 0, (void*)"tinyWRAP::ProxyVideoProducerCallback", 0};
static swig_type_info _swigt__p_PublicationEvent = {"_p_PublicationEvent", "PublicationEvent *", 0, 0, (void*)"tinyWRAP::PublicationEvent", 0};
static swig_type_info _swigt__p_PublicationSession = {"_p_PublicationSession", "PublicationSession *", 0, 0, (void*)"tinyWRAP::PublicationSession", 0};
static swig_type_info _swigt__p_QoS = {"_p_QoS", "QoS *", 0, 0, (void*)"tinyWRAP::QoS", 0};
static swig_type_info _swigt__p_RPMessage = {"_p_RPMessage", "RPMessage *", 0, 0, (void*)"tinyWRAP::RPMessage", 0};
static swig_type_info _swigt__p_RegistrationEvent = {"_p_RegistrationEvent", "RegistrationEvent *", 0, 0, (void*)"tinyWRAP::RegistrationEvent", 0};
static swig_type_info _swigt__p_RegistrationSession = {"_p_RegistrationSession", "RegistrationSession *", 0, 0, (void*)"tinyWRAP::RegistrationSession", 0};
@ -27622,6 +28175,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_ProxyVideoProducerCallback,
&_swigt__p_PublicationEvent,
&_swigt__p_PublicationSession,
&_swigt__p_QoS,
&_swigt__p_RPMessage,
&_swigt__p_RegistrationEvent,
&_swigt__p_RegistrationSession,
@ -27721,6 +28275,7 @@ static swig_cast_info _swigc__p_ProxyVideoProducer[] = { {&_swigt__p_ProxyVideo
static swig_cast_info _swigc__p_ProxyVideoProducerCallback[] = { {&_swigt__p_ProxyVideoProducerCallback, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_PublicationEvent[] = { {&_swigt__p_PublicationEvent, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_PublicationSession[] = { {&_swigt__p_PublicationSession, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_QoS[] = { {&_swigt__p_QoS, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_RPMessage[] = { {&_swigt__p_RPMessage, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_RegistrationEvent[] = { {&_swigt__p_RegistrationEvent, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_RegistrationSession[] = { {&_swigt__p_RegistrationSession, 0, 0, 0},{0, 0, 0, 0}};
@ -27820,6 +28375,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_ProxyVideoProducerCallback,
_swigc__p_PublicationEvent,
_swigc__p_PublicationSession,
_swigc__p_QoS,
_swigc__p_RPMessage,
_swigc__p_RegistrationEvent,
_swigc__p_RegistrationSession,
@ -27917,6 +28473,22 @@ static swig_command_info swig_commands[] = {
{"tinyWRAPc::ActionConfig_setResponseLine", _wrap_ActionConfig_setResponseLine},
{"tinyWRAPc::ActionConfig_setMediaString", _wrap_ActionConfig_setMediaString},
{"tinyWRAPc::ActionConfig_setMediaInt", _wrap_ActionConfig_setMediaInt},
{"tinyWRAPc::delete_QoS", _wrap_delete_QoS},
{"tinyWRAPc::QoS_getQavg", _wrap_QoS_getQavg},
{"tinyWRAPc::QoS_getQ1", _wrap_QoS_getQ1},
{"tinyWRAPc::QoS_getQ2", _wrap_QoS_getQ2},
{"tinyWRAPc::QoS_getQ3", _wrap_QoS_getQ3},
{"tinyWRAPc::QoS_getQ4", _wrap_QoS_getQ4},
{"tinyWRAPc::QoS_getQ5", _wrap_QoS_getQ5},
{"tinyWRAPc::QoS_getVideoInWidth", _wrap_QoS_getVideoInWidth},
{"tinyWRAPc::QoS_getVideoOutWidth", _wrap_QoS_getVideoOutWidth},
{"tinyWRAPc::QoS_getVideoInHeight", _wrap_QoS_getVideoInHeight},
{"tinyWRAPc::QoS_getVideoOutHeight", _wrap_QoS_getVideoOutHeight},
{"tinyWRAPc::QoS_getBandwidthDownKbps", _wrap_QoS_getBandwidthDownKbps},
{"tinyWRAPc::QoS_getBandwidthUpKbps", _wrap_QoS_getBandwidthUpKbps},
{"tinyWRAPc::QoS_getVideoInAvgFps", _wrap_QoS_getVideoInAvgFps},
{"tinyWRAPc::QoS_getVideoDecAvgTime", _wrap_QoS_getVideoDecAvgTime},
{"tinyWRAPc::QoS_getVideoEncAvgTime", _wrap_QoS_getVideoEncAvgTime},
{"tinyWRAPc::delete_Codec", _wrap_delete_Codec},
{"tinyWRAPc::Codec_getMediaType", _wrap_Codec_getMediaType},
{"tinyWRAPc::Codec_getName", _wrap_Codec_getName},
@ -27928,6 +28500,7 @@ static swig_command_info swig_commands[] = {
{"tinyWRAPc::delete_MediaSessionMgr", _wrap_delete_MediaSessionMgr},
{"tinyWRAPc::MediaSessionMgr_sessionSetInt32", _wrap_MediaSessionMgr_sessionSetInt32},
{"tinyWRAPc::MediaSessionMgr_sessionGetInt32", _wrap_MediaSessionMgr_sessionGetInt32},
{"tinyWRAPc::MediaSessionMgr_sessionGetQoS", _wrap_MediaSessionMgr_sessionGetQoS},
{"tinyWRAPc::MediaSessionMgr_consumerSetInt32", _wrap_MediaSessionMgr_consumerSetInt32},
{"tinyWRAPc::MediaSessionMgr_consumerSetInt64", _wrap_MediaSessionMgr_consumerSetInt64},
{"tinyWRAPc::MediaSessionMgr_producerSetInt32", _wrap_MediaSessionMgr_producerSetInt32},
@ -27947,6 +28520,8 @@ static swig_command_info swig_commands[] = {
{"tinyWRAPc::MediaSessionMgr_defaultsSetBandwidthVideoUploadMax", _wrap_MediaSessionMgr_defaultsSetBandwidthVideoUploadMax},
{"tinyWRAPc::MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax", _wrap_MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax},
{"tinyWRAPc::MediaSessionMgr_defaultsSetPrefVideoSize", _wrap_MediaSessionMgr_defaultsSetPrefVideoSize},
{"tinyWRAPc::MediaSessionMgr_defaultsSetPrefVideoSizeOutRange", _wrap_MediaSessionMgr_defaultsSetPrefVideoSizeOutRange},
{"tinyWRAPc::MediaSessionMgr_defaultsSetAdaptativeVideoSizeOutEnabled", _wrap_MediaSessionMgr_defaultsSetAdaptativeVideoSizeOutEnabled},
{"tinyWRAPc::MediaSessionMgr_defaultsSetJbMargin", _wrap_MediaSessionMgr_defaultsSetJbMargin},
{"tinyWRAPc::MediaSessionMgr_defaultsSetJbMaxLateRate", _wrap_MediaSessionMgr_defaultsSetJbMaxLateRate},
{"tinyWRAPc::MediaSessionMgr_defaultsSetEchoTail", _wrap_MediaSessionMgr_defaultsSetEchoTail},
@ -28765,6 +29340,7 @@ XS(SWIG_init) {
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
SWIG_TypeClientData(SWIGTYPE_p_ActionConfig, (void*) "tinyWRAP::ActionConfig");
SWIG_TypeClientData(SWIGTYPE_p_QoS, (void*) "tinyWRAP::QoS");
SWIG_TypeClientData(SWIGTYPE_p_Codec, (void*) "tinyWRAP::Codec");
SWIG_TypeClientData(SWIGTYPE_p_MediaSessionMgr, (void*) "tinyWRAP::MediaSessionMgr");
SWIG_TypeClientData(SWIGTYPE_p_MediaContent, (void*) "tinyWRAP::MediaContent");

View File

@ -151,6 +151,33 @@ class ActionConfig(_object):
ActionConfig_swigregister = _tinyWRAP.ActionConfig_swigregister
ActionConfig_swigregister(ActionConfig)
class QoS(_object):
__swig_setmethods__ = {}
__setattr__ = lambda self, name, value: _swig_setattr(self, QoS, name, value)
__swig_getmethods__ = {}
__getattr__ = lambda self, name: _swig_getattr(self, QoS, name)
def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
__repr__ = _swig_repr
__swig_destroy__ = _tinyWRAP.delete_QoS
__del__ = lambda self : None;
def getQavg(self): return _tinyWRAP.QoS_getQavg(self)
def getQ1(self): return _tinyWRAP.QoS_getQ1(self)
def getQ2(self): return _tinyWRAP.QoS_getQ2(self)
def getQ3(self): return _tinyWRAP.QoS_getQ3(self)
def getQ4(self): return _tinyWRAP.QoS_getQ4(self)
def getQ5(self): return _tinyWRAP.QoS_getQ5(self)
def getVideoInWidth(self): return _tinyWRAP.QoS_getVideoInWidth(self)
def getVideoOutWidth(self): return _tinyWRAP.QoS_getVideoOutWidth(self)
def getVideoInHeight(self): return _tinyWRAP.QoS_getVideoInHeight(self)
def getVideoOutHeight(self): return _tinyWRAP.QoS_getVideoOutHeight(self)
def getBandwidthDownKbps(self): return _tinyWRAP.QoS_getBandwidthDownKbps(self)
def getBandwidthUpKbps(self): return _tinyWRAP.QoS_getBandwidthUpKbps(self)
def getVideoInAvgFps(self): return _tinyWRAP.QoS_getVideoInAvgFps(self)
def getVideoDecAvgTime(self): return _tinyWRAP.QoS_getVideoDecAvgTime(self)
def getVideoEncAvgTime(self): return _tinyWRAP.QoS_getVideoEncAvgTime(self)
QoS_swigregister = _tinyWRAP.QoS_swigregister
QoS_swigregister(QoS)
class Codec(_object):
__swig_setmethods__ = {}
__setattr__ = lambda self, name, value: _swig_setattr(self, Codec, name, value)
@ -181,6 +208,7 @@ class MediaSessionMgr(_object):
__del__ = lambda self : None;
def sessionSetInt32(self, *args): return _tinyWRAP.MediaSessionMgr_sessionSetInt32(self, *args)
def sessionGetInt32(self, *args): return _tinyWRAP.MediaSessionMgr_sessionGetInt32(self, *args)
def sessionGetQoS(self, *args): return _tinyWRAP.MediaSessionMgr_sessionGetQoS(self, *args)
def consumerSetInt32(self, *args): return _tinyWRAP.MediaSessionMgr_consumerSetInt32(self, *args)
def consumerSetInt64(self, *args): return _tinyWRAP.MediaSessionMgr_consumerSetInt64(self, *args)
def producerSetInt32(self, *args): return _tinyWRAP.MediaSessionMgr_producerSetInt32(self, *args)
@ -211,6 +239,10 @@ class MediaSessionMgr(_object):
if _newclass:defaultsSetBandwidthVideoDownloadMax = staticmethod(_tinyWRAP.MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax)
__swig_getmethods__["defaultsSetPrefVideoSize"] = lambda x: _tinyWRAP.MediaSessionMgr_defaultsSetPrefVideoSize
if _newclass:defaultsSetPrefVideoSize = staticmethod(_tinyWRAP.MediaSessionMgr_defaultsSetPrefVideoSize)
__swig_getmethods__["defaultsSetPrefVideoSizeOutRange"] = lambda x: _tinyWRAP.MediaSessionMgr_defaultsSetPrefVideoSizeOutRange
if _newclass:defaultsSetPrefVideoSizeOutRange = staticmethod(_tinyWRAP.MediaSessionMgr_defaultsSetPrefVideoSizeOutRange)
__swig_getmethods__["defaultsSetAdaptativeVideoSizeOutEnabled"] = lambda x: _tinyWRAP.MediaSessionMgr_defaultsSetAdaptativeVideoSizeOutEnabled
if _newclass:defaultsSetAdaptativeVideoSizeOutEnabled = staticmethod(_tinyWRAP.MediaSessionMgr_defaultsSetAdaptativeVideoSizeOutEnabled)
__swig_getmethods__["defaultsSetJbMargin"] = lambda x: _tinyWRAP.MediaSessionMgr_defaultsSetJbMargin
if _newclass:defaultsSetJbMargin = staticmethod(_tinyWRAP.MediaSessionMgr_defaultsSetJbMargin)
__swig_getmethods__["defaultsSetJbMaxLateRate"] = lambda x: _tinyWRAP.MediaSessionMgr_defaultsSetJbMaxLateRate
@ -374,6 +406,14 @@ def MediaSessionMgr_defaultsSetPrefVideoSize(*args):
return _tinyWRAP.MediaSessionMgr_defaultsSetPrefVideoSize(*args)
MediaSessionMgr_defaultsSetPrefVideoSize = _tinyWRAP.MediaSessionMgr_defaultsSetPrefVideoSize
def MediaSessionMgr_defaultsSetPrefVideoSizeOutRange(*args):
return _tinyWRAP.MediaSessionMgr_defaultsSetPrefVideoSizeOutRange(*args)
MediaSessionMgr_defaultsSetPrefVideoSizeOutRange = _tinyWRAP.MediaSessionMgr_defaultsSetPrefVideoSizeOutRange
def MediaSessionMgr_defaultsSetAdaptativeVideoSizeOutEnabled(*args):
return _tinyWRAP.MediaSessionMgr_defaultsSetAdaptativeVideoSizeOutEnabled(*args)
MediaSessionMgr_defaultsSetAdaptativeVideoSizeOutEnabled = _tinyWRAP.MediaSessionMgr_defaultsSetAdaptativeVideoSizeOutEnabled
def MediaSessionMgr_defaultsSetJbMargin(*args):
return _tinyWRAP.MediaSessionMgr_defaultsSetJbMargin(*args)
MediaSessionMgr_defaultsSetJbMargin = _tinyWRAP.MediaSessionMgr_defaultsSetJbMargin

View File

@ -3480,70 +3480,71 @@ namespace Swig {
#define SWIGTYPE_p_ProxyVideoProducerCallback swig_types[32]
#define SWIGTYPE_p_PublicationEvent swig_types[33]
#define SWIGTYPE_p_PublicationSession swig_types[34]
#define SWIGTYPE_p_RPMessage swig_types[35]
#define SWIGTYPE_p_RegistrationEvent swig_types[36]
#define SWIGTYPE_p_RegistrationSession swig_types[37]
#define SWIGTYPE_p_SMSData swig_types[38]
#define SWIGTYPE_p_SMSEncoder swig_types[39]
#define SWIGTYPE_p_SafeObject swig_types[40]
#define SWIGTYPE_p_SdpMessage swig_types[41]
#define SWIGTYPE_p_SipCallback swig_types[42]
#define SWIGTYPE_p_SipEvent swig_types[43]
#define SWIGTYPE_p_SipMessage swig_types[44]
#define SWIGTYPE_p_SipSession swig_types[45]
#define SWIGTYPE_p_SipStack swig_types[46]
#define SWIGTYPE_p_SipUri swig_types[47]
#define SWIGTYPE_p_StackEvent swig_types[48]
#define SWIGTYPE_p_SubscriptionEvent swig_types[49]
#define SWIGTYPE_p_SubscriptionSession swig_types[50]
#define SWIGTYPE_p_T140Callback swig_types[51]
#define SWIGTYPE_p_T140CallbackData swig_types[52]
#define SWIGTYPE_p_XcapCallback swig_types[53]
#define SWIGTYPE_p_XcapEvent swig_types[54]
#define SWIGTYPE_p_XcapMessage swig_types[55]
#define SWIGTYPE_p_XcapSelector swig_types[56]
#define SWIGTYPE_p_XcapStack swig_types[57]
#define SWIGTYPE_p_char swig_types[58]
#define SWIGTYPE_p_int swig_types[59]
#define SWIGTYPE_p_long_long swig_types[60]
#define SWIGTYPE_p_short swig_types[61]
#define SWIGTYPE_p_signed_char swig_types[62]
#define SWIGTYPE_p_tdav_codec_id_e swig_types[63]
#define SWIGTYPE_p_thttp_event_type_e swig_types[64]
#define SWIGTYPE_p_tmedia_bandwidth_level_e swig_types[65]
#define SWIGTYPE_p_tmedia_chroma_e swig_types[66]
#define SWIGTYPE_p_tmedia_codec_id_e swig_types[67]
#define SWIGTYPE_p_tmedia_mode_e swig_types[68]
#define SWIGTYPE_p_tmedia_pref_video_size_s swig_types[69]
#define SWIGTYPE_p_tmedia_profile_e swig_types[70]
#define SWIGTYPE_p_tmedia_qos_strength_e swig_types[71]
#define SWIGTYPE_p_tmedia_qos_stype_e swig_types[72]
#define SWIGTYPE_p_tmedia_srtp_mode_e swig_types[73]
#define SWIGTYPE_p_tmedia_srtp_type_e swig_types[74]
#define SWIGTYPE_p_tmedia_t140_data_type_e swig_types[75]
#define SWIGTYPE_p_tmsrp_event_type_e swig_types[76]
#define SWIGTYPE_p_tmsrp_request_type_e swig_types[77]
#define SWIGTYPE_p_tsip_event_type_e swig_types[78]
#define SWIGTYPE_p_tsip_info_event_type_e swig_types[79]
#define SWIGTYPE_p_tsip_invite_event_type_e swig_types[80]
#define SWIGTYPE_p_tsip_message_event_type_e swig_types[81]
#define SWIGTYPE_p_tsip_options_event_type_e swig_types[82]
#define SWIGTYPE_p_tsip_publish_event_type_e swig_types[83]
#define SWIGTYPE_p_tsip_register_event_type_e swig_types[84]
#define SWIGTYPE_p_tsip_request_type_e swig_types[85]
#define SWIGTYPE_p_tsip_stack_mode_e swig_types[86]
#define SWIGTYPE_p_tsip_subscribe_event_type_e swig_types[87]
#define SWIGTYPE_p_tsk_list_t swig_types[88]
#define SWIGTYPE_p_twrap_media_type_e swig_types[89]
#define SWIGTYPE_p_twrap_proxy_plugin_type_e swig_types[90]
#define SWIGTYPE_p_twrap_rpmessage_type_e swig_types[91]
#define SWIGTYPE_p_twrap_sms_type_e swig_types[92]
#define SWIGTYPE_p_unsigned_char swig_types[93]
#define SWIGTYPE_p_unsigned_int swig_types[94]
#define SWIGTYPE_p_unsigned_long_long swig_types[95]
#define SWIGTYPE_p_unsigned_short swig_types[96]
static swig_type_info *swig_types[98];
static swig_module_info swig_module = {swig_types, 97, 0, 0, 0, 0};
#define SWIGTYPE_p_QoS swig_types[35]
#define SWIGTYPE_p_RPMessage swig_types[36]
#define SWIGTYPE_p_RegistrationEvent swig_types[37]
#define SWIGTYPE_p_RegistrationSession swig_types[38]
#define SWIGTYPE_p_SMSData swig_types[39]
#define SWIGTYPE_p_SMSEncoder swig_types[40]
#define SWIGTYPE_p_SafeObject swig_types[41]
#define SWIGTYPE_p_SdpMessage swig_types[42]
#define SWIGTYPE_p_SipCallback swig_types[43]
#define SWIGTYPE_p_SipEvent swig_types[44]
#define SWIGTYPE_p_SipMessage swig_types[45]
#define SWIGTYPE_p_SipSession swig_types[46]
#define SWIGTYPE_p_SipStack swig_types[47]
#define SWIGTYPE_p_SipUri swig_types[48]
#define SWIGTYPE_p_StackEvent swig_types[49]
#define SWIGTYPE_p_SubscriptionEvent swig_types[50]
#define SWIGTYPE_p_SubscriptionSession swig_types[51]
#define SWIGTYPE_p_T140Callback swig_types[52]
#define SWIGTYPE_p_T140CallbackData swig_types[53]
#define SWIGTYPE_p_XcapCallback swig_types[54]
#define SWIGTYPE_p_XcapEvent swig_types[55]
#define SWIGTYPE_p_XcapMessage swig_types[56]
#define SWIGTYPE_p_XcapSelector swig_types[57]
#define SWIGTYPE_p_XcapStack swig_types[58]
#define SWIGTYPE_p_char swig_types[59]
#define SWIGTYPE_p_int swig_types[60]
#define SWIGTYPE_p_long_long swig_types[61]
#define SWIGTYPE_p_short swig_types[62]
#define SWIGTYPE_p_signed_char swig_types[63]
#define SWIGTYPE_p_tdav_codec_id_e swig_types[64]
#define SWIGTYPE_p_thttp_event_type_e swig_types[65]
#define SWIGTYPE_p_tmedia_bandwidth_level_e swig_types[66]
#define SWIGTYPE_p_tmedia_chroma_e swig_types[67]
#define SWIGTYPE_p_tmedia_codec_id_e swig_types[68]
#define SWIGTYPE_p_tmedia_mode_e swig_types[69]
#define SWIGTYPE_p_tmedia_pref_video_size_s swig_types[70]
#define SWIGTYPE_p_tmedia_profile_e swig_types[71]
#define SWIGTYPE_p_tmedia_qos_strength_e swig_types[72]
#define SWIGTYPE_p_tmedia_qos_stype_e swig_types[73]
#define SWIGTYPE_p_tmedia_srtp_mode_e swig_types[74]
#define SWIGTYPE_p_tmedia_srtp_type_e swig_types[75]
#define SWIGTYPE_p_tmedia_t140_data_type_e swig_types[76]
#define SWIGTYPE_p_tmsrp_event_type_e swig_types[77]
#define SWIGTYPE_p_tmsrp_request_type_e swig_types[78]
#define SWIGTYPE_p_tsip_event_type_e swig_types[79]
#define SWIGTYPE_p_tsip_info_event_type_e swig_types[80]
#define SWIGTYPE_p_tsip_invite_event_type_e swig_types[81]
#define SWIGTYPE_p_tsip_message_event_type_e swig_types[82]
#define SWIGTYPE_p_tsip_options_event_type_e swig_types[83]
#define SWIGTYPE_p_tsip_publish_event_type_e swig_types[84]
#define SWIGTYPE_p_tsip_register_event_type_e swig_types[85]
#define SWIGTYPE_p_tsip_request_type_e swig_types[86]
#define SWIGTYPE_p_tsip_stack_mode_e swig_types[87]
#define SWIGTYPE_p_tsip_subscribe_event_type_e swig_types[88]
#define SWIGTYPE_p_tsk_list_t swig_types[89]
#define SWIGTYPE_p_twrap_media_type_e swig_types[90]
#define SWIGTYPE_p_twrap_proxy_plugin_type_e swig_types[91]
#define SWIGTYPE_p_twrap_rpmessage_type_e swig_types[92]
#define SWIGTYPE_p_twrap_sms_type_e swig_types[93]
#define SWIGTYPE_p_unsigned_char swig_types[94]
#define SWIGTYPE_p_unsigned_int swig_types[95]
#define SWIGTYPE_p_unsigned_long_long swig_types[96]
#define SWIGTYPE_p_unsigned_short swig_types[97]
static swig_type_info *swig_types[99];
static swig_module_info swig_module = {swig_types, 98, 0, 0, 0, 0};
#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
@ -4030,6 +4031,16 @@ SWIG_AsVal_short (PyObject * obj, short *val)
}
#define SWIG_From_double PyFloat_FromDouble
SWIGINTERNINLINE PyObject *
SWIG_From_float (float value)
{
return SWIG_From_double (value);
}
SWIGINTERN int
SWIG_AsVal_long_SS_long (PyObject *obj, long long *val)
{
@ -4113,16 +4124,6 @@ SWIG_AsVal_float (PyObject * obj, float *val)
}
#define SWIG_From_double PyFloat_FromDouble
SWIGINTERNINLINE PyObject *
SWIG_From_float (float value)
{
return SWIG_From_double (value);
}
SWIGINTERN int
SWIG_AsVal_unsigned_SS_short (PyObject * obj, unsigned short *val)
{
@ -6273,6 +6274,364 @@ SWIGINTERN PyObject *ActionConfig_swigregister(PyObject *SWIGUNUSEDPARM(self), P
return SWIG_Py_Void();
}
SWIGINTERN PyObject *_wrap_delete_QoS(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_QoS",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_QoS, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_QoS" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
delete arg1;
resultobj = SWIG_Py_Void();
return resultobj;
fail:
return NULL;
}
SWIGINTERN PyObject *_wrap_QoS_getQavg(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
PyObject * obj0 = 0 ;
float result;
if (!PyArg_ParseTuple(args,(char *)"O:QoS_getQavg",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_QoS, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "QoS_getQavg" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
result = (float)(arg1)->getQavg();
resultobj = SWIG_From_float(static_cast< float >(result));
return resultobj;
fail:
return NULL;
}
SWIGINTERN PyObject *_wrap_QoS_getQ1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
PyObject * obj0 = 0 ;
float result;
if (!PyArg_ParseTuple(args,(char *)"O:QoS_getQ1",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_QoS, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "QoS_getQ1" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
result = (float)(arg1)->getQ1();
resultobj = SWIG_From_float(static_cast< float >(result));
return resultobj;
fail:
return NULL;
}
SWIGINTERN PyObject *_wrap_QoS_getQ2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
PyObject * obj0 = 0 ;
float result;
if (!PyArg_ParseTuple(args,(char *)"O:QoS_getQ2",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_QoS, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "QoS_getQ2" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
result = (float)(arg1)->getQ2();
resultobj = SWIG_From_float(static_cast< float >(result));
return resultobj;
fail:
return NULL;
}
SWIGINTERN PyObject *_wrap_QoS_getQ3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
PyObject * obj0 = 0 ;
float result;
if (!PyArg_ParseTuple(args,(char *)"O:QoS_getQ3",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_QoS, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "QoS_getQ3" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
result = (float)(arg1)->getQ3();
resultobj = SWIG_From_float(static_cast< float >(result));
return resultobj;
fail:
return NULL;
}
SWIGINTERN PyObject *_wrap_QoS_getQ4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
PyObject * obj0 = 0 ;
float result;
if (!PyArg_ParseTuple(args,(char *)"O:QoS_getQ4",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_QoS, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "QoS_getQ4" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
result = (float)(arg1)->getQ4();
resultobj = SWIG_From_float(static_cast< float >(result));
return resultobj;
fail:
return NULL;
}
SWIGINTERN PyObject *_wrap_QoS_getQ5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
PyObject * obj0 = 0 ;
float result;
if (!PyArg_ParseTuple(args,(char *)"O:QoS_getQ5",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_QoS, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "QoS_getQ5" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
result = (float)(arg1)->getQ5();
resultobj = SWIG_From_float(static_cast< float >(result));
return resultobj;
fail:
return NULL;
}
SWIGINTERN PyObject *_wrap_QoS_getVideoInWidth(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
PyObject * obj0 = 0 ;
unsigned int result;
if (!PyArg_ParseTuple(args,(char *)"O:QoS_getVideoInWidth",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_QoS, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "QoS_getVideoInWidth" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
result = (unsigned int)(arg1)->getVideoInWidth();
resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
return resultobj;
fail:
return NULL;
}
SWIGINTERN PyObject *_wrap_QoS_getVideoOutWidth(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
PyObject * obj0 = 0 ;
unsigned int result;
if (!PyArg_ParseTuple(args,(char *)"O:QoS_getVideoOutWidth",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_QoS, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "QoS_getVideoOutWidth" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
result = (unsigned int)(arg1)->getVideoOutWidth();
resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
return resultobj;
fail:
return NULL;
}
SWIGINTERN PyObject *_wrap_QoS_getVideoInHeight(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
PyObject * obj0 = 0 ;
unsigned int result;
if (!PyArg_ParseTuple(args,(char *)"O:QoS_getVideoInHeight",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_QoS, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "QoS_getVideoInHeight" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
result = (unsigned int)(arg1)->getVideoInHeight();
resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
return resultobj;
fail:
return NULL;
}
SWIGINTERN PyObject *_wrap_QoS_getVideoOutHeight(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
PyObject * obj0 = 0 ;
unsigned int result;
if (!PyArg_ParseTuple(args,(char *)"O:QoS_getVideoOutHeight",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_QoS, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "QoS_getVideoOutHeight" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
result = (unsigned int)(arg1)->getVideoOutHeight();
resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
return resultobj;
fail:
return NULL;
}
SWIGINTERN PyObject *_wrap_QoS_getBandwidthDownKbps(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
PyObject * obj0 = 0 ;
unsigned int result;
if (!PyArg_ParseTuple(args,(char *)"O:QoS_getBandwidthDownKbps",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_QoS, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "QoS_getBandwidthDownKbps" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
result = (unsigned int)(arg1)->getBandwidthDownKbps();
resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
return resultobj;
fail:
return NULL;
}
SWIGINTERN PyObject *_wrap_QoS_getBandwidthUpKbps(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
PyObject * obj0 = 0 ;
unsigned int result;
if (!PyArg_ParseTuple(args,(char *)"O:QoS_getBandwidthUpKbps",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_QoS, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "QoS_getBandwidthUpKbps" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
result = (unsigned int)(arg1)->getBandwidthUpKbps();
resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
return resultobj;
fail:
return NULL;
}
SWIGINTERN PyObject *_wrap_QoS_getVideoInAvgFps(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
PyObject * obj0 = 0 ;
unsigned int result;
if (!PyArg_ParseTuple(args,(char *)"O:QoS_getVideoInAvgFps",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_QoS, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "QoS_getVideoInAvgFps" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
result = (unsigned int)(arg1)->getVideoInAvgFps();
resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
return resultobj;
fail:
return NULL;
}
SWIGINTERN PyObject *_wrap_QoS_getVideoDecAvgTime(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
PyObject * obj0 = 0 ;
unsigned int result;
if (!PyArg_ParseTuple(args,(char *)"O:QoS_getVideoDecAvgTime",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_QoS, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "QoS_getVideoDecAvgTime" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
result = (unsigned int)(arg1)->getVideoDecAvgTime();
resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
return resultobj;
fail:
return NULL;
}
SWIGINTERN PyObject *_wrap_QoS_getVideoEncAvgTime(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
QoS *arg1 = (QoS *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
PyObject * obj0 = 0 ;
unsigned int result;
if (!PyArg_ParseTuple(args,(char *)"O:QoS_getVideoEncAvgTime",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_QoS, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "QoS_getVideoEncAvgTime" "', argument " "1"" of type '" "QoS *""'");
}
arg1 = reinterpret_cast< QoS * >(argp1);
result = (unsigned int)(arg1)->getVideoEncAvgTime();
resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
return resultobj;
fail:
return NULL;
}
SWIGINTERN PyObject *QoS_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *obj;
if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
SWIG_TypeNewClientData(SWIGTYPE_p_QoS, SWIG_NewClientData(obj));
return SWIG_Py_Void();
}
SWIGINTERN PyObject *_wrap_delete_Codec(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
Codec *arg1 = (Codec *) 0 ;
@ -6571,6 +6930,37 @@ fail:
}
SWIGINTERN PyObject *_wrap_MediaSessionMgr_sessionGetQoS(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
MediaSessionMgr *arg1 = (MediaSessionMgr *) 0 ;
twrap_media_type_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
int val2 ;
int ecode2 = 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
QoS *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:MediaSessionMgr_sessionGetQoS",&obj0,&obj1)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MediaSessionMgr, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MediaSessionMgr_sessionGetQoS" "', argument " "1"" of type '" "MediaSessionMgr *""'");
}
arg1 = reinterpret_cast< MediaSessionMgr * >(argp1);
ecode2 = SWIG_AsVal_int(obj1, &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MediaSessionMgr_sessionGetQoS" "', argument " "2"" of type '" "twrap_media_type_t""'");
}
arg2 = static_cast< twrap_media_type_t >(val2);
result = (QoS *)(arg1)->sessionGetQoS(arg2);
resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_QoS, SWIG_POINTER_OWN | 0 );
return resultobj;
fail:
return NULL;
}
SWIGINTERN PyObject *_wrap_MediaSessionMgr_consumerSetInt32(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
MediaSessionMgr *arg1 = (MediaSessionMgr *) 0 ;
@ -7130,6 +7520,59 @@ fail:
}
SWIGINTERN PyObject *_wrap_MediaSessionMgr_defaultsSetPrefVideoSizeOutRange(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
tmedia_pref_video_size_t arg1 ;
tmedia_pref_video_size_t arg2 ;
int val1 ;
int ecode1 = 0 ;
int val2 ;
int ecode2 = 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
bool result;
if (!PyArg_ParseTuple(args,(char *)"OO:MediaSessionMgr_defaultsSetPrefVideoSizeOutRange",&obj0,&obj1)) SWIG_fail;
ecode1 = SWIG_AsVal_int(obj0, &val1);
if (!SWIG_IsOK(ecode1)) {
SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "MediaSessionMgr_defaultsSetPrefVideoSizeOutRange" "', argument " "1"" of type '" "tmedia_pref_video_size_t""'");
}
arg1 = static_cast< tmedia_pref_video_size_t >(val1);
ecode2 = SWIG_AsVal_int(obj1, &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MediaSessionMgr_defaultsSetPrefVideoSizeOutRange" "', argument " "2"" of type '" "tmedia_pref_video_size_t""'");
}
arg2 = static_cast< tmedia_pref_video_size_t >(val2);
result = (bool)MediaSessionMgr::defaultsSetPrefVideoSizeOutRange(arg1,arg2);
resultobj = SWIG_From_bool(static_cast< bool >(result));
return resultobj;
fail:
return NULL;
}
SWIGINTERN PyObject *_wrap_MediaSessionMgr_defaultsSetAdaptativeVideoSizeOutEnabled(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
bool arg1 ;
bool val1 ;
int ecode1 = 0 ;
PyObject * obj0 = 0 ;
bool result;
if (!PyArg_ParseTuple(args,(char *)"O:MediaSessionMgr_defaultsSetAdaptativeVideoSizeOutEnabled",&obj0)) SWIG_fail;
ecode1 = SWIG_AsVal_bool(obj0, &val1);
if (!SWIG_IsOK(ecode1)) {
SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "MediaSessionMgr_defaultsSetAdaptativeVideoSizeOutEnabled" "', argument " "1"" of type '" "bool""'");
}
arg1 = static_cast< bool >(val1);
result = (bool)MediaSessionMgr::defaultsSetAdaptativeVideoSizeOutEnabled(arg1);
resultobj = SWIG_From_bool(static_cast< bool >(result));
return resultobj;
fail:
return NULL;
}
SWIGINTERN PyObject *_wrap_MediaSessionMgr_defaultsSetJbMargin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
uint32_t arg1 ;
@ -26276,6 +26719,23 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"ActionConfig_setMediaString", _wrap_ActionConfig_setMediaString, METH_VARARGS, NULL},
{ (char *)"ActionConfig_setMediaInt", _wrap_ActionConfig_setMediaInt, METH_VARARGS, NULL},
{ (char *)"ActionConfig_swigregister", ActionConfig_swigregister, METH_VARARGS, NULL},
{ (char *)"delete_QoS", _wrap_delete_QoS, METH_VARARGS, NULL},
{ (char *)"QoS_getQavg", _wrap_QoS_getQavg, METH_VARARGS, NULL},
{ (char *)"QoS_getQ1", _wrap_QoS_getQ1, METH_VARARGS, NULL},
{ (char *)"QoS_getQ2", _wrap_QoS_getQ2, METH_VARARGS, NULL},
{ (char *)"QoS_getQ3", _wrap_QoS_getQ3, METH_VARARGS, NULL},
{ (char *)"QoS_getQ4", _wrap_QoS_getQ4, METH_VARARGS, NULL},
{ (char *)"QoS_getQ5", _wrap_QoS_getQ5, METH_VARARGS, NULL},
{ (char *)"QoS_getVideoInWidth", _wrap_QoS_getVideoInWidth, METH_VARARGS, NULL},
{ (char *)"QoS_getVideoOutWidth", _wrap_QoS_getVideoOutWidth, METH_VARARGS, NULL},
{ (char *)"QoS_getVideoInHeight", _wrap_QoS_getVideoInHeight, METH_VARARGS, NULL},
{ (char *)"QoS_getVideoOutHeight", _wrap_QoS_getVideoOutHeight, METH_VARARGS, NULL},
{ (char *)"QoS_getBandwidthDownKbps", _wrap_QoS_getBandwidthDownKbps, METH_VARARGS, NULL},
{ (char *)"QoS_getBandwidthUpKbps", _wrap_QoS_getBandwidthUpKbps, METH_VARARGS, NULL},
{ (char *)"QoS_getVideoInAvgFps", _wrap_QoS_getVideoInAvgFps, METH_VARARGS, NULL},
{ (char *)"QoS_getVideoDecAvgTime", _wrap_QoS_getVideoDecAvgTime, METH_VARARGS, NULL},
{ (char *)"QoS_getVideoEncAvgTime", _wrap_QoS_getVideoEncAvgTime, METH_VARARGS, NULL},
{ (char *)"QoS_swigregister", QoS_swigregister, METH_VARARGS, NULL},
{ (char *)"delete_Codec", _wrap_delete_Codec, METH_VARARGS, NULL},
{ (char *)"Codec_getMediaType", _wrap_Codec_getMediaType, METH_VARARGS, NULL},
{ (char *)"Codec_getName", _wrap_Codec_getName, METH_VARARGS, NULL},
@ -26288,6 +26748,7 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"delete_MediaSessionMgr", _wrap_delete_MediaSessionMgr, METH_VARARGS, NULL},
{ (char *)"MediaSessionMgr_sessionSetInt32", _wrap_MediaSessionMgr_sessionSetInt32, METH_VARARGS, NULL},
{ (char *)"MediaSessionMgr_sessionGetInt32", _wrap_MediaSessionMgr_sessionGetInt32, METH_VARARGS, NULL},
{ (char *)"MediaSessionMgr_sessionGetQoS", _wrap_MediaSessionMgr_sessionGetQoS, METH_VARARGS, NULL},
{ (char *)"MediaSessionMgr_consumerSetInt32", _wrap_MediaSessionMgr_consumerSetInt32, METH_VARARGS, NULL},
{ (char *)"MediaSessionMgr_consumerSetInt64", _wrap_MediaSessionMgr_consumerSetInt64, METH_VARARGS, NULL},
{ (char *)"MediaSessionMgr_producerSetInt32", _wrap_MediaSessionMgr_producerSetInt32, METH_VARARGS, NULL},
@ -26307,6 +26768,8 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"MediaSessionMgr_defaultsSetBandwidthVideoUploadMax", _wrap_MediaSessionMgr_defaultsSetBandwidthVideoUploadMax, METH_VARARGS, NULL},
{ (char *)"MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax", _wrap_MediaSessionMgr_defaultsSetBandwidthVideoDownloadMax, METH_VARARGS, NULL},
{ (char *)"MediaSessionMgr_defaultsSetPrefVideoSize", _wrap_MediaSessionMgr_defaultsSetPrefVideoSize, METH_VARARGS, NULL},
{ (char *)"MediaSessionMgr_defaultsSetPrefVideoSizeOutRange", _wrap_MediaSessionMgr_defaultsSetPrefVideoSizeOutRange, METH_VARARGS, NULL},
{ (char *)"MediaSessionMgr_defaultsSetAdaptativeVideoSizeOutEnabled", _wrap_MediaSessionMgr_defaultsSetAdaptativeVideoSizeOutEnabled, METH_VARARGS, NULL},
{ (char *)"MediaSessionMgr_defaultsSetJbMargin", _wrap_MediaSessionMgr_defaultsSetJbMargin, METH_VARARGS, NULL},
{ (char *)"MediaSessionMgr_defaultsSetJbMaxLateRate", _wrap_MediaSessionMgr_defaultsSetJbMaxLateRate, METH_VARARGS, NULL},
{ (char *)"MediaSessionMgr_defaultsSetEchoTail", _wrap_MediaSessionMgr_defaultsSetEchoTail, METH_VARARGS, NULL},
@ -26957,6 +27420,7 @@ static swig_type_info _swigt__p_ProxyVideoProducer = {"_p_ProxyVideoProducer", "
static swig_type_info _swigt__p_ProxyVideoProducerCallback = {"_p_ProxyVideoProducerCallback", "ProxyVideoProducerCallback *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_PublicationEvent = {"_p_PublicationEvent", "PublicationEvent *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_PublicationSession = {"_p_PublicationSession", "PublicationSession *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_QoS = {"_p_QoS", "QoS *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_RPMessage = {"_p_RPMessage", "RPMessage *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_RegistrationEvent = {"_p_RegistrationEvent", "RegistrationEvent *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_RegistrationSession = {"_p_RegistrationSession", "RegistrationSession *", 0, 0, (void*)0, 0};
@ -27056,6 +27520,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_ProxyVideoProducerCallback,
&_swigt__p_PublicationEvent,
&_swigt__p_PublicationSession,
&_swigt__p_QoS,
&_swigt__p_RPMessage,
&_swigt__p_RegistrationEvent,
&_swigt__p_RegistrationSession,
@ -27155,6 +27620,7 @@ static swig_cast_info _swigc__p_ProxyVideoProducer[] = { {&_swigt__p_ProxyVideo
static swig_cast_info _swigc__p_ProxyVideoProducerCallback[] = { {&_swigt__p_ProxyVideoProducerCallback, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_PublicationEvent[] = { {&_swigt__p_PublicationEvent, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_PublicationSession[] = { {&_swigt__p_PublicationSession, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_QoS[] = { {&_swigt__p_QoS, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_RPMessage[] = { {&_swigt__p_RPMessage, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_RegistrationEvent[] = { {&_swigt__p_RegistrationEvent, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_RegistrationSession[] = { {&_swigt__p_RegistrationSession, 0, 0, 0},{0, 0, 0, 0}};
@ -27254,6 +27720,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_ProxyVideoProducerCallback,
_swigc__p_PublicationEvent,
_swigc__p_PublicationSession,
_swigc__p_QoS,
_swigc__p_RPMessage,
_swigc__p_RegistrationEvent,
_swigc__p_RegistrationSession,

File diff suppressed because it is too large Load Diff

View File

@ -11,12 +11,14 @@
#ifndef SWIG_TinyWRAP_WRAP_H_
#define SWIG_TinyWRAP_WRAP_H_
namespace Swig {
class Director;
namespace Swig
{
class Director;
}
class SwigDirector_SipCallback : public SipCallback, public Swig::Director {
class SwigDirector_SipCallback : public SipCallback, public Swig::Director
{
public:
SwigDirector_SipCallback(VALUE self);

View File

@ -23,31 +23,33 @@ class ActionConfig;
namespace doubango_rt
{
namespace BackEnd
{
public ref class rtActionConfig sealed
{
public:
rtActionConfig();
virtual ~rtActionConfig();
namespace BackEnd
{
public ref class rtActionConfig sealed
{
public:
rtActionConfig();
virtual ~rtActionConfig();
bool addHeader(Platform::String^ name, Platform::String^ value);
bool addHeader(Platform::String^ name, Platform::String^ value);
#if COM_VISIBLE
bool addPayload(Platform::String^ payload);
bool addPayload(Platform::String^ payload);
#else
bool addPayload(Platform::IntPtr payload, unsigned len);
bool addPayload(Platform::IntPtr payload, unsigned len);
#endif
bool setActiveMedia(rt_twrap_media_type_t type);
bool setActiveMedia(rt_twrap_media_type_t type);
rtActionConfig^ setResponseLine(short code, Platform::String^ phrase);
rtActionConfig^ setMediaString(rt_twrap_media_type_t type, Platform::String^ key, Platform::String^ value);
rtActionConfig^ setMediaInt(rt_twrap_media_type_t type, Platform::String^ key, int value);
rtActionConfig^ setResponseLine(short code, Platform::String^ phrase);
rtActionConfig^ setMediaString(rt_twrap_media_type_t type, Platform::String^ key, Platform::String^ value);
rtActionConfig^ setMediaInt(rt_twrap_media_type_t type, Platform::String^ key, int value);
internal:
ActionConfig* getWrappedActionConfig(){ return m_pActionConfig; }
internal:
ActionConfig* getWrappedActionConfig() {
return m_pActionConfig;
}
private:
ActionConfig* m_pActionConfig;
};
}
private:
ActionConfig* m_pActionConfig;
};
}
}

View File

@ -28,4 +28,3 @@
# define VISIBLE_VOID_PTR Platform::IntPtr
# define VISIBLE_VOID_PTR_2_VOID_PTR(ptr) (void*)((ptr))
#endif

View File

@ -24,30 +24,30 @@ class DDebugCallbackProxy;
namespace doubango_rt
{
namespace BackEnd
{
public interface class rtIDDebugCallback
{
virtual int OnDebugInfo(Platform::String^ message);
virtual int OnDebugWarn(Platform::String^ message);
virtual int OnDebugError(Platform::String^ message);
virtual int OnDebugFatal(Platform::String^ message);
};
namespace BackEnd
{
public interface class rtIDDebugCallback
{
virtual int OnDebugInfo(Platform::String^ message);
virtual int OnDebugWarn(Platform::String^ message);
virtual int OnDebugError(Platform::String^ message);
virtual int OnDebugFatal(Platform::String^ message);
};
public ref class rtDDebugCallback sealed
{
internal:
rtDDebugCallback(rtIDDebugCallback^ pI);
public:
virtual ~rtDDebugCallback();
friend class DDebugCallbackProxy;
public ref class rtDDebugCallback sealed
{
internal:
rtDDebugCallback(rtIDDebugCallback^ pI);
public:
virtual ~rtDDebugCallback();
friend class DDebugCallbackProxy;
internal:
const DDebugCallback* getWrappedCallback();
internal:
const DDebugCallback* getWrappedCallback();
private:
rtIDDebugCallback^ m_pI;
DDebugCallbackProxy* m_pCallback;
};
}
private:
rtIDDebugCallback^ m_pI;
DDebugCallbackProxy* m_pCallback;
};
}
}

View File

@ -27,307 +27,308 @@
namespace doubango_rt
{
namespace BackEnd
{
public enum class rtConstants
{
rt_tsip_event_code_dialog_transport_error = tsip_event_code_dialog_transport_error,
rt_tsip_event_code_dialog_global_error = tsip_event_code_dialog_global_error,
rt_tsip_event_code_dialog_message_error = tsip_event_code_dialog_message_error,
namespace BackEnd
{
public enum class rtConstants
{
rt_tsip_event_code_dialog_transport_error = tsip_event_code_dialog_transport_error,
rt_tsip_event_code_dialog_global_error = tsip_event_code_dialog_global_error,
rt_tsip_event_code_dialog_message_error = tsip_event_code_dialog_message_error,
// 8xx ==> success
rt_tsip_event_code_dialog_request_incoming = tsip_event_code_dialog_request_incoming,
rt_tsip_event_code_dialog_request_outgoing = tsip_event_code_dialog_request_outgoing,
rt_tsip_event_code_dialog_request_cancelled = tsip_event_code_dialog_request_cancelled,
rt_tsip_event_code_dialog_request_sent = tsip_event_code_dialog_request_sent,
// 8xx ==> success
rt_tsip_event_code_dialog_request_incoming = tsip_event_code_dialog_request_incoming,
rt_tsip_event_code_dialog_request_outgoing = tsip_event_code_dialog_request_outgoing,
rt_tsip_event_code_dialog_request_cancelled = tsip_event_code_dialog_request_cancelled,
rt_tsip_event_code_dialog_request_sent = tsip_event_code_dialog_request_sent,
// 9xx ==> Informational
rt_tsip_event_code_dialog_connecting = tsip_event_code_dialog_connecting,
rt_tsip_event_code_dialog_connected = tsip_event_code_dialog_connected,
rt_tsip_event_code_dialog_terminating = tsip_event_code_dialog_terminating,
rt_tsip_event_code_dialog_terminated = tsip_event_code_dialog_terminated,
rt_tsip_event_code_stack_starting = tsip_event_code_stack_starting,
rt_tsip_event_code_stack_started = tsip_event_code_stack_started,
rt_tsip_event_code_stack_stopping = tsip_event_code_stack_stopping,
rt_tsip_event_code_stack_stopped = tsip_event_code_stack_stopped,
rt_tsip_event_code_stack_failed_to_start = tsip_event_code_stack_failed_to_start,
rt_tsip_event_code_stack_failed_to_stop = tsip_event_code_stack_failed_to_stop
};
// 9xx ==> Informational
rt_tsip_event_code_dialog_connecting = tsip_event_code_dialog_connecting,
rt_tsip_event_code_dialog_connected = tsip_event_code_dialog_connected,
rt_tsip_event_code_dialog_terminating = tsip_event_code_dialog_terminating,
rt_tsip_event_code_dialog_terminated = tsip_event_code_dialog_terminated,
rt_tsip_event_code_stack_starting = tsip_event_code_stack_starting,
rt_tsip_event_code_stack_started = tsip_event_code_stack_started,
rt_tsip_event_code_stack_stopping = tsip_event_code_stack_stopping,
rt_tsip_event_code_stack_stopped = tsip_event_code_stack_stopped,
rt_tsip_event_code_stack_failed_to_start = tsip_event_code_stack_failed_to_start,
rt_tsip_event_code_stack_failed_to_stop = tsip_event_code_stack_failed_to_stop
};
public enum class rt_twrap_media_type_t
{
twrap_media_none = twrap_media_none,
public enum class rt_twrap_media_type_t
{
twrap_media_none = twrap_media_none,
twrap_media_audio = twrap_media_audio,
twrap_media_video = twrap_media_video,
twrap_media_msrp = twrap_media_msrp,
twrap_media_t140 = twrap_media_t140,
twrap_media_bfcp = twrap_media_bfcp,
twrap_media_bfcp_audio = twrap_media_bfcp_audio,
twrap_media_bfcp_video = twrap_media_bfcp_video,
twrap_media_audio = twrap_media_audio,
twrap_media_video = twrap_media_video,
twrap_media_msrp = twrap_media_msrp,
twrap_media_t140 = twrap_media_t140,
twrap_media_bfcp = twrap_media_bfcp,
twrap_media_bfcp_audio = twrap_media_bfcp_audio,
twrap_media_bfcp_video = twrap_media_bfcp_video,
twrap_media_audiovideo = twrap_media_audiovideo, /* @deprecated */
twrap_media_audio_video = twrap_media_audio_video,
};
twrap_media_audiovideo = twrap_media_audiovideo, /* @deprecated */
twrap_media_audio_video = twrap_media_audio_video,
};
public enum class rt_tmedia_bandwidth_level_t
{
tmedia_bl_low = tmedia_bl_low,
tmedia_bl_medium = tmedia_bl_medium,
tmedia_bl_hight = tmedia_bl_hight,
tmedia_bl_unrestricted = tmedia_bl_unrestricted
};
public enum class rt_tmedia_bandwidth_level_t
{
tmedia_bl_low = tmedia_bl_low,
tmedia_bl_medium = tmedia_bl_medium,
tmedia_bl_hight = tmedia_bl_hight,
tmedia_bl_unrestricted = tmedia_bl_unrestricted
};
public enum class rt_tmedia_pref_video_size_t
{/* must be sorted like this */
tmedia_pref_video_size_sqcif = tmedia_pref_video_size_sqcif, // 128 x 98
tmedia_pref_video_size_qcif = tmedia_pref_video_size_qcif, // 176 x 144
tmedia_pref_video_size_qvga = tmedia_pref_video_size_qvga, // 320 x 240
tmedia_pref_video_size_cif = tmedia_pref_video_size_cif, // 352 x 288
tmedia_pref_video_size_hvga = tmedia_pref_video_size_hvga, // 480 x 320
tmedia_pref_video_size_vga = tmedia_pref_video_size_vga, // 640 x 480
tmedia_pref_video_size_4cif = tmedia_pref_video_size_4cif, // 704 x 576
tmedia_pref_video_size_wvga = tmedia_pref_video_size_wvga, // 800 x 480
tmedia_pref_video_size_svga = tmedia_pref_video_size_svga, // 800 x 600
tmedia_pref_video_size_480p = tmedia_pref_video_size_480p, // 852 x 480
tmedia_pref_video_size_xga = tmedia_pref_video_size_xga, // 1024 x 768
tmedia_pref_video_size_720p = tmedia_pref_video_size_720p, // 1280 x 720
tmedia_pref_video_size_16cif = tmedia_pref_video_size_16cif, // 1408 x 1152
tmedia_pref_video_size_1080p = tmedia_pref_video_size_1080p, // 1920 x 1080
};
public enum class rt_tmedia_pref_video_size_t
{
/* must be sorted like this */
tmedia_pref_video_size_sqcif = tmedia_pref_video_size_sqcif, // 128 x 98
tmedia_pref_video_size_qcif = tmedia_pref_video_size_qcif, // 176 x 144
tmedia_pref_video_size_qvga = tmedia_pref_video_size_qvga, // 320 x 240
tmedia_pref_video_size_cif = tmedia_pref_video_size_cif, // 352 x 288
tmedia_pref_video_size_hvga = tmedia_pref_video_size_hvga, // 480 x 320
tmedia_pref_video_size_vga = tmedia_pref_video_size_vga, // 640 x 480
tmedia_pref_video_size_4cif = tmedia_pref_video_size_4cif, // 704 x 576
tmedia_pref_video_size_wvga = tmedia_pref_video_size_wvga, // 800 x 480
tmedia_pref_video_size_svga = tmedia_pref_video_size_svga, // 800 x 600
tmedia_pref_video_size_480p = tmedia_pref_video_size_480p, // 852 x 480
tmedia_pref_video_size_xga = tmedia_pref_video_size_xga, // 1024 x 768
tmedia_pref_video_size_720p = tmedia_pref_video_size_720p, // 1280 x 720
tmedia_pref_video_size_16cif = tmedia_pref_video_size_16cif, // 1408 x 1152
tmedia_pref_video_size_1080p = tmedia_pref_video_size_1080p, // 1920 x 1080
};
public enum class rt_tmedia_profile_t
{
tmedia_profile_default = tmedia_profile_default,
tmedia_profile_rtcweb = tmedia_profile_rtcweb
};
public enum class rt_tmedia_profile_t
{
tmedia_profile_default = tmedia_profile_default,
tmedia_profile_rtcweb = tmedia_profile_rtcweb
};
public enum class rt_tmedia_qos_strength_t
{
tmedia_qos_strength_none = tmedia_qos_strength_none,
tmedia_qos_strength_failure = tmedia_qos_strength_failure,
tmedia_qos_strength_unknown = tmedia_qos_strength_unknown,
tmedia_qos_strength_optional = tmedia_qos_strength_optional,
tmedia_qos_strength_mandatory = tmedia_qos_strength_mandatory
};
public enum class rt_tmedia_qos_strength_t
{
tmedia_qos_strength_none = tmedia_qos_strength_none,
tmedia_qos_strength_failure = tmedia_qos_strength_failure,
tmedia_qos_strength_unknown = tmedia_qos_strength_unknown,
tmedia_qos_strength_optional = tmedia_qos_strength_optional,
tmedia_qos_strength_mandatory = tmedia_qos_strength_mandatory
};
public enum class rt_tmedia_qos_stype_t
{
tmedia_qos_stype_none = tmedia_qos_stype_none,
public enum class rt_tmedia_qos_stype_t
{
tmedia_qos_stype_none = tmedia_qos_stype_none,
tmedia_qos_stype_segmented = tmedia_qos_stype_segmented,
tmedia_qos_stype_e2e = tmedia_qos_stype_e2e,
};
tmedia_qos_stype_segmented = tmedia_qos_stype_segmented,
tmedia_qos_stype_e2e = tmedia_qos_stype_e2e,
};
public enum class rt_tmedia_srtp_mode_t
{
tmedia_srtp_mode_none = tmedia_srtp_mode_none,
tmedia_srtp_mode_optional = tmedia_srtp_mode_optional,
tmedia_srtp_mode_mandatory = tmedia_srtp_mode_mandatory
};
public enum class rt_tmedia_srtp_mode_t
{
tmedia_srtp_mode_none = tmedia_srtp_mode_none,
tmedia_srtp_mode_optional = tmedia_srtp_mode_optional,
tmedia_srtp_mode_mandatory = tmedia_srtp_mode_mandatory
};
public enum class rt_tmedia_srtp_type_t
{
tmedia_srtp_type_none = tmedia_srtp_type_none,
tmedia_srtp_type_sdes = tmedia_srtp_type_sdes,
tmedia_srtp_type_dtls = tmedia_srtp_type_dtls,
tmedia_srtp_type_sdes_dtls = tmedia_srtp_type_sdes_dtls
};
public enum class rt_tmedia_srtp_type_t
{
tmedia_srtp_type_none = tmedia_srtp_type_none,
tmedia_srtp_type_sdes = tmedia_srtp_type_sdes,
tmedia_srtp_type_dtls = tmedia_srtp_type_dtls,
tmedia_srtp_type_sdes_dtls = tmedia_srtp_type_sdes_dtls
};
public enum class rt_tmedia_t140_data_type_t
{
tmedia_t140_data_type_utf8 = tmedia_t140_data_type_utf8,
tmedia_t140_data_type_zero_width_no_break_space = tmedia_t140_data_type_zero_width_no_break_space,
tmedia_t140_data_type_backspace = tmedia_t140_data_type_backspace,
tmedia_t140_data_type_esc = tmedia_t140_data_type_esc,
tmedia_t140_data_type_cr = tmedia_t140_data_type_cr,
tmedia_t140_data_type_lf = tmedia_t140_data_type_lf,
tmedia_t140_data_type_cr_lf = tmedia_t140_data_type_cr_lf,
tmedia_t140_data_type_bell = tmedia_t140_data_type_bell,
tmedia_t140_data_type_sos = tmedia_t140_data_type_sos,
tmedia_t140_data_type_string_term = tmedia_t140_data_type_string_term,
tmedia_t140_data_type_graphic_start = tmedia_t140_data_type_graphic_start,
tmedia_t140_data_type_graphic_end = tmedia_t140_data_type_graphic_end,
tmedia_t140_data_type_loss_char_char = tmedia_t140_data_type_loss_char_char,
tmedia_t140_data_type_loss_utf8 = tmedia_t140_data_type_loss_utf8,
};
public enum class rt_tmedia_t140_data_type_t
{
tmedia_t140_data_type_utf8 = tmedia_t140_data_type_utf8,
tmedia_t140_data_type_zero_width_no_break_space = tmedia_t140_data_type_zero_width_no_break_space,
tmedia_t140_data_type_backspace = tmedia_t140_data_type_backspace,
tmedia_t140_data_type_esc = tmedia_t140_data_type_esc,
tmedia_t140_data_type_cr = tmedia_t140_data_type_cr,
tmedia_t140_data_type_lf = tmedia_t140_data_type_lf,
tmedia_t140_data_type_cr_lf = tmedia_t140_data_type_cr_lf,
tmedia_t140_data_type_bell = tmedia_t140_data_type_bell,
tmedia_t140_data_type_sos = tmedia_t140_data_type_sos,
tmedia_t140_data_type_string_term = tmedia_t140_data_type_string_term,
tmedia_t140_data_type_graphic_start = tmedia_t140_data_type_graphic_start,
tmedia_t140_data_type_graphic_end = tmedia_t140_data_type_graphic_end,
tmedia_t140_data_type_loss_char_char = tmedia_t140_data_type_loss_char_char,
tmedia_t140_data_type_loss_utf8 = tmedia_t140_data_type_loss_utf8,
};
public enum class rt_tmedia_type_t
{
tmedia_none = tmedia_none,
tmedia_ghost = tmedia_ghost,
public enum class rt_tmedia_type_t
{
tmedia_none = tmedia_none,
tmedia_ghost = tmedia_ghost,
tmedia_audio = tmedia_audio,
tmedia_video = tmedia_video,
tmedia_chat = tmedia_chat,
tmedia_file = tmedia_file,
tmedia_t38 = tmedia_t38,
tmedia_t140 = tmedia_t140,
tmedia_audio = tmedia_audio,
tmedia_video = tmedia_video,
tmedia_chat = tmedia_chat,
tmedia_file = tmedia_file,
tmedia_t38 = tmedia_t38,
tmedia_t140 = tmedia_t140,
tmedia_msrp = tmedia_msrp,
tmedia_audiovideo = tmedia_audiovideo,
tmedia_msrp = tmedia_msrp,
tmedia_audiovideo = tmedia_audiovideo,
tmedia_all = tmedia_all
};
tmedia_all = tmedia_all
};
public enum class rt_tmsrp_event_type_t
{
tmsrp_event_type_none = tmsrp_event_type_none,
tmsrp_event_type_connected = tmsrp_event_type_connected,
tmsrp_event_type_disconnected = tmsrp_event_type_disconnected,
tmsrp_event_type_message = tmsrp_event_type_message,
};
public enum class rt_tmsrp_event_type_t
{
tmsrp_event_type_none = tmsrp_event_type_none,
tmsrp_event_type_connected = tmsrp_event_type_connected,
tmsrp_event_type_disconnected = tmsrp_event_type_disconnected,
tmsrp_event_type_message = tmsrp_event_type_message,
};
public enum class rt_tmsrp_request_type_t
{
tmsrp_NONE = tmsrp_NONE,
public enum class rt_tmsrp_request_type_t
{
tmsrp_NONE = tmsrp_NONE,
tmsrp_SEND = tmsrp_SEND,
tmsrp_REPORT = tmsrp_REPORT,
tmsrp_AUTH = tmsrp_AUTH
};
tmsrp_SEND = tmsrp_SEND,
tmsrp_REPORT = tmsrp_REPORT,
tmsrp_AUTH = tmsrp_AUTH
};
public enum class rt_tsip_info_event_type_t
{
tsip_i_info = tsip_i_info,
tsip_ao_info = tsip_ao_info,
};
public enum class rt_tsip_info_event_type_t
{
tsip_i_info = tsip_i_info,
tsip_ao_info = tsip_ao_info,
};
public enum class rt_tsip_invite_event_type_t
{
tsip_i_newcall = tsip_i_newcall,
public enum class rt_tsip_invite_event_type_t
{
tsip_i_newcall = tsip_i_newcall,
tsip_i_request = tsip_i_request,
tsip_ao_request = tsip_ao_request,
tsip_i_request = tsip_i_request,
tsip_ao_request = tsip_ao_request,
tsip_o_ect_trying = tsip_o_ect_trying,
tsip_o_ect_accepted = tsip_o_ect_accepted,
tsip_o_ect_completed = tsip_o_ect_completed,
tsip_o_ect_failed = tsip_o_ect_failed,
tsip_o_ect_notify = tsip_o_ect_notify,
tsip_i_ect_requested = tsip_i_ect_requested,
tsip_i_ect_newcall = tsip_i_ect_newcall,
tsip_i_ect_completed = tsip_i_ect_completed,
tsip_i_ect_failed = tsip_i_ect_failed,
tsip_i_ect_notify = tsip_i_ect_notify,
tsip_o_ect_trying = tsip_o_ect_trying,
tsip_o_ect_accepted = tsip_o_ect_accepted,
tsip_o_ect_completed = tsip_o_ect_completed,
tsip_o_ect_failed = tsip_o_ect_failed,
tsip_o_ect_notify = tsip_o_ect_notify,
tsip_i_ect_requested = tsip_i_ect_requested,
tsip_i_ect_newcall = tsip_i_ect_newcall,
tsip_i_ect_completed = tsip_i_ect_completed,
tsip_i_ect_failed = tsip_i_ect_failed,
tsip_i_ect_notify = tsip_i_ect_notify,
tsip_m_early_media = tsip_m_early_media,
tsip_m_updating = tsip_m_updating,
tsip_m_updated = tsip_m_updated,
tsip_m_early_media = tsip_m_early_media,
tsip_m_updating = tsip_m_updating,
tsip_m_updated = tsip_m_updated,
tsip_m_local_hold_ok = tsip_m_local_hold_ok,
tsip_m_local_hold_nok = tsip_m_local_hold_nok,
tsip_m_local_resume_ok = tsip_m_local_resume_ok,
tsip_m_local_resume_nok = tsip_m_local_resume_nok,
tsip_m_remote_hold = tsip_m_remote_hold,
tsip_m_remote_resume = tsip_m_remote_resume,
};
tsip_m_local_hold_ok = tsip_m_local_hold_ok,
tsip_m_local_hold_nok = tsip_m_local_hold_nok,
tsip_m_local_resume_ok = tsip_m_local_resume_ok,
tsip_m_local_resume_nok = tsip_m_local_resume_nok,
tsip_m_remote_hold = tsip_m_remote_hold,
tsip_m_remote_resume = tsip_m_remote_resume,
};
public enum class rt_tsip_message_event_type_t
{
tsip_i_message = tsip_i_message,
tsip_ao_message = tsip_ao_message,
};
public enum class rt_tsip_message_event_type_t
{
tsip_i_message = tsip_i_message,
tsip_ao_message = tsip_ao_message,
};
public enum class rt_tsip_options_event_type_t
{
tsip_i_options = tsip_i_options,
tsip_ao_options = tsip_ao_options,
};
public enum class rt_tsip_options_event_type_t
{
tsip_i_options = tsip_i_options,
tsip_ao_options = tsip_ao_options,
};
public enum class rt_tsip_publish_event_type_t
{
tsip_i_publish = tsip_i_publish,
tsip_ao_publish = tsip_ao_publish,
public enum class rt_tsip_publish_event_type_t
{
tsip_i_publish = tsip_i_publish,
tsip_ao_publish = tsip_ao_publish,
tsip_i_unpublish = tsip_i_unpublish,
tsip_ao_unpublish = tsip_ao_unpublish
};
tsip_i_unpublish = tsip_i_unpublish,
tsip_ao_unpublish = tsip_ao_unpublish
};
public enum class rt_tsip_register_event_type_t
{
tsip_i_newreg = tsip_i_newreg,
public enum class rt_tsip_register_event_type_t
{
tsip_i_newreg = tsip_i_newreg,
tsip_i_register = tsip_i_register,
tsip_ao_register = tsip_ao_register,
tsip_i_register = tsip_i_register,
tsip_ao_register = tsip_ao_register,
tsip_i_unregister = tsip_i_unregister,
tsip_ao_unregister = tsip_ao_unregister,
};
tsip_i_unregister = tsip_i_unregister,
tsip_ao_unregister = tsip_ao_unregister,
};
public enum class rt_tsip_request_type_t
{
tsip_NONE = tsip_NONE,
public enum class rt_tsip_request_type_t
{
tsip_NONE = tsip_NONE,
tsip_ACK = tsip_ACK,
tsip_BYE = tsip_BYE,
tsip_CANCEL = tsip_CANCEL,
tsip_INVITE = tsip_INVITE,
tsip_OPTIONS = tsip_OPTIONS,
tsip_REGISTER = tsip_REGISTER,
tsip_SUBSCRIBE = tsip_SUBSCRIBE,
tsip_NOTIFY = tsip_NOTIFY,
tsip_REFER = tsip_REFER,
tsip_INFO = tsip_INFO,
tsip_UPDATE = tsip_UPDATE,
tsip_MESSAGE = tsip_MESSAGE,
tsip_PUBLISH = tsip_PUBLISH,
tsip_PRACK = tsip_PRACK
};
tsip_ACK = tsip_ACK,
tsip_BYE = tsip_BYE,
tsip_CANCEL = tsip_CANCEL,
tsip_INVITE = tsip_INVITE,
tsip_OPTIONS = tsip_OPTIONS,
tsip_REGISTER = tsip_REGISTER,
tsip_SUBSCRIBE = tsip_SUBSCRIBE,
tsip_NOTIFY = tsip_NOTIFY,
tsip_REFER = tsip_REFER,
tsip_INFO = tsip_INFO,
tsip_UPDATE = tsip_UPDATE,
tsip_MESSAGE = tsip_MESSAGE,
tsip_PUBLISH = tsip_PUBLISH,
tsip_PRACK = tsip_PRACK
};
public enum class rt_tsip_subscribe_event_type_t
{
tsip_i_subscribe = tsip_i_subscribe,
tsip_ao_subscribe = tsip_ao_subscribe,
public enum class rt_tsip_subscribe_event_type_t
{
tsip_i_subscribe = tsip_i_subscribe,
tsip_ao_subscribe = tsip_ao_subscribe,
tsip_i_unsubscribe = tsip_i_unsubscribe,
tsip_ao_unsubscribe = tsip_ao_unsubscribe,
tsip_i_unsubscribe = tsip_i_unsubscribe,
tsip_ao_unsubscribe = tsip_ao_unsubscribe,
tsip_i_notify = tsip_i_notify,
tsip_ao_notify = tsip_ao_notify
};
tsip_i_notify = tsip_i_notify,
tsip_ao_notify = tsip_ao_notify
};
public enum class rt_tdav_codec_id_t
{
tdav_codec_id_none = tmedia_codec_id_none,
public enum class rt_tdav_codec_id_t
{
tdav_codec_id_none = tmedia_codec_id_none,
tdav_codec_id_amr_nb_oa = tmedia_codec_id_amr_nb_oa,
tdav_codec_id_amr_nb_be = tmedia_codec_id_amr_nb_be,
tdav_codec_id_amr_wb_oa = tmedia_codec_id_amr_wb_oa,
tdav_codec_id_amr_wb_be = tmedia_codec_id_amr_wb_be,
tdav_codec_id_gsm = tmedia_codec_id_gsm,
tdav_codec_id_pcma = tmedia_codec_id_pcma,
tdav_codec_id_pcmu = tmedia_codec_id_pcmu,
tdav_codec_id_ilbc = tmedia_codec_id_ilbc,
tdav_codec_id_speex_nb = tmedia_codec_id_speex_nb,
tdav_codec_id_speex_wb = tmedia_codec_id_speex_wb,
tdav_codec_id_speex_uwb = tmedia_codec_id_speex_uwb,
tdav_codec_id_bv16 = tmedia_codec_id_bv16,
tdav_codec_id_bv32 = tmedia_codec_id_bv32,
tdav_codec_id_opus = tmedia_codec_id_opus,
tdav_codec_id_g729ab = tmedia_codec_id_g729ab,
tdav_codec_id_g722 = tmedia_codec_id_g722,
tdav_codec_id_amr_nb_oa = tmedia_codec_id_amr_nb_oa,
tdav_codec_id_amr_nb_be = tmedia_codec_id_amr_nb_be,
tdav_codec_id_amr_wb_oa = tmedia_codec_id_amr_wb_oa,
tdav_codec_id_amr_wb_be = tmedia_codec_id_amr_wb_be,
tdav_codec_id_gsm = tmedia_codec_id_gsm,
tdav_codec_id_pcma = tmedia_codec_id_pcma,
tdav_codec_id_pcmu = tmedia_codec_id_pcmu,
tdav_codec_id_ilbc = tmedia_codec_id_ilbc,
tdav_codec_id_speex_nb = tmedia_codec_id_speex_nb,
tdav_codec_id_speex_wb = tmedia_codec_id_speex_wb,
tdav_codec_id_speex_uwb = tmedia_codec_id_speex_uwb,
tdav_codec_id_bv16 = tmedia_codec_id_bv16,
tdav_codec_id_bv32 = tmedia_codec_id_bv32,
tdav_codec_id_opus = tmedia_codec_id_opus,
tdav_codec_id_g729ab = tmedia_codec_id_g729ab,
tdav_codec_id_g722 = tmedia_codec_id_g722,
tdav_codec_id_h261 = tmedia_codec_id_h261,
tdav_codec_id_h263 = tmedia_codec_id_h263,
tdav_codec_id_h263p = tmedia_codec_id_h263p,
tdav_codec_id_h263pp = tmedia_codec_id_h263pp,
tdav_codec_id_h264_bp = tmedia_codec_id_h264_bp,
tdav_codec_id_h264_mp = tmedia_codec_id_h264_mp,
tdav_codec_id_h264_hp = tmedia_codec_id_h264_hp,
tdav_codec_id_h264_bp10 = tmedia_codec_id_h264_bp, // @deprecated
tdav_codec_id_h264_bp20 = tmedia_codec_id_h264_bp, // @deprecated
tdav_codec_id_h264_bp30 = tmedia_codec_id_h264_bp, // @deprecated
tdav_codec_id_h264_svc = tmedia_codec_id_h264_svc,
tdav_codec_id_theora = tmedia_codec_id_theora,
tdav_codec_id_mp4ves_es = tmedia_codec_id_mp4ves_es,
tdav_codec_id_vp8 = tmedia_codec_id_vp8,
tdav_codec_id_h261 = tmedia_codec_id_h261,
tdav_codec_id_h263 = tmedia_codec_id_h263,
tdav_codec_id_h263p = tmedia_codec_id_h263p,
tdav_codec_id_h263pp = tmedia_codec_id_h263pp,
tdav_codec_id_h264_bp = tmedia_codec_id_h264_bp,
tdav_codec_id_h264_mp = tmedia_codec_id_h264_mp,
tdav_codec_id_h264_hp = tmedia_codec_id_h264_hp,
tdav_codec_id_h264_bp10 = tmedia_codec_id_h264_bp, // @deprecated
tdav_codec_id_h264_bp20 = tmedia_codec_id_h264_bp, // @deprecated
tdav_codec_id_h264_bp30 = tmedia_codec_id_h264_bp, // @deprecated
tdav_codec_id_h264_svc = tmedia_codec_id_h264_svc,
tdav_codec_id_theora = tmedia_codec_id_theora,
tdav_codec_id_mp4ves_es = tmedia_codec_id_mp4ves_es,
tdav_codec_id_vp8 = tmedia_codec_id_vp8,
tdav_codec_id_t140 = tmedia_codec_id_t140,
tdav_codec_id_t140 = tmedia_codec_id_t140,
#if !COM_VISIBLE
tdav_codec_id_red = tmedia_codec_id_red,
tdav_codec_id_red = tmedia_codec_id_red,
#endif
tdav_codec_id_all = tmedia_codec_id_all,
};
}
tdav_codec_id_all = tmedia_codec_id_all,
};
}
}

View File

@ -25,106 +25,106 @@ struct tmedia_session_mgr_s;
namespace doubango_rt
{
namespace BackEnd
{
enum class rt_twrap_media_type_t;
enum class rt_tmedia_profile_t;
enum class rt_tmedia_srtp_mode_t;
enum class rt_tmedia_srtp_type_t;
enum class rt_tmedia_profile_t;
enum class rt_tmedia_pref_video_size_t;
namespace BackEnd
{
enum class rt_twrap_media_type_t;
enum class rt_tmedia_profile_t;
enum class rt_tmedia_srtp_mode_t;
enum class rt_tmedia_srtp_type_t;
enum class rt_tmedia_profile_t;
enum class rt_tmedia_pref_video_size_t;
public ref class rtCodec sealed
{
internal:
rtCodec(struct tmedia_codec_s* pCodec);
public:
virtual ~rtCodec();
enum class rt_twrap_media_type_t getMediaType();
Platform::String^ getName();
Platform::String^ getDescription();
Platform::String^ getNegFormat();
int getAudioSamplingRate();
int getAudioChannels();
int getAudioPTime();
public ref class rtCodec sealed
{
internal:
rtCodec(struct tmedia_codec_s* pCodec);
public:
virtual ~rtCodec();
enum class rt_twrap_media_type_t getMediaType();
Platform::String^ getName();
Platform::String^ getDescription();
Platform::String^ getNegFormat();
int getAudioSamplingRate();
int getAudioChannels();
int getAudioPTime();
private:
Codec* m_pCodec;
};
private:
Codec* m_pCodec;
};
public ref class rtMediaSessionMgr sealed
{
internal:
rtMediaSessionMgr(struct tmedia_session_mgr_s* pWrappedMgr);
public ref class rtMediaSessionMgr sealed
{
internal:
rtMediaSessionMgr(struct tmedia_session_mgr_s* pWrappedMgr);
public:
virtual ~rtMediaSessionMgr();
bool sessionSetInt32(rt_twrap_media_type_t media, Platform::String^ key, int32 value);
int32 sessionGetInt32(rt_twrap_media_type_t media, Platform::String^ key);
public:
virtual ~rtMediaSessionMgr();
bool sessionSetInt32(rt_twrap_media_type_t media, Platform::String^ key, int32 value);
int32 sessionGetInt32(rt_twrap_media_type_t media, Platform::String^ key);
bool consumerSetInt32(rt_twrap_media_type_t media, Platform::String^ key, int32 value);
bool consumerSetInt64(rt_twrap_media_type_t media, Platform::String^ key, int64 value);
bool consumerSetInt32(rt_twrap_media_type_t media, Platform::String^ key, int32 value);
bool consumerSetInt64(rt_twrap_media_type_t media, Platform::String^ key, int64 value);
bool producerSetInt32(rt_twrap_media_type_t media, Platform::String^ key, int32 value);
bool producerSetInt64(rt_twrap_media_type_t media, Platform::String^ key, int64 value);
rtCodec^ producerGetCodec(rt_twrap_media_type_t media);
bool producerSetInt32(rt_twrap_media_type_t media, Platform::String^ key, int32 value);
bool producerSetInt64(rt_twrap_media_type_t media, Platform::String^ key, int64 value);
rtCodec^ producerGetCodec(rt_twrap_media_type_t media);
static unsigned int registerAudioPluginFromFile(Platform::String^ path);
static unsigned int registerAudioPluginFromFile(Platform::String^ path);
uint64 getSessionId(rt_twrap_media_type_t media);
uint64 getSessionId(rt_twrap_media_type_t media);
internal: // Must be from SIP service to share same global memory space
static bool defaultsSetProfile(rt_tmedia_profile_t profile);
static rt_tmedia_profile_t defaultsGetProfile();
static bool defaultsSetPrefVideoSize(enum class rt_tmedia_pref_video_size_t pref_video_size);
static bool defaultsSetJbMargin(uint32 jb_margin_ms);
static bool defaultsSetJbMaxLateRate(uint32 jb_late_rate_percent);
static bool defaultsSetEchoTail(uint32 echo_tail);
static uint32 defaultsGetEchoTail();
static bool defaultsSetEchoSkew(uint32 echo_skew);
static bool defaultsSetEchoSuppEnabled(bool echo_supp_enabled);
static bool defaultsGetEchoSuppEnabled();
static bool defaultsSetAgcEnabled(bool agc_enabled);
static bool defaultsGetAgcEnabled();
static bool defaultsSetAgcLevel(float agc_level);
static float defaultsGetAgcLevel();
static bool defaultsSetVadEnabled(bool vad_enabled);
static bool defaultsGetGetVadEnabled();
static bool defaultsSetNoiseSuppEnabled(bool noise_supp_enabled);
static bool defaultsGetNoiseSuppEnabled();
static bool defaultsSetNoiseSuppLevel(int32 noise_supp_level);
static int32 defaultsGetNoiseSuppLevel();
static bool defaultsSet100relEnabled(bool _100rel_enabled);
static bool defaultsGet100relEnabled();
static bool defaultsSetScreenSize(int32 sx, int32 sy);
static bool defaultsSetAudioGain(int32 producer_gain, int32 consumer_gain);
static bool defaultsSetRtpPortRange(uint16 range_start, uint16 range_stop);
static bool defaultsSetRtpSymetricEnabled(bool enabled);
static bool defaultsSetMediaType(enum class rt_twrap_media_type_t media_type);
static bool defaultsSetVolume(int32 volume);
static int32 defaultsGetVolume();
static bool defaultsSetInviteSessionTimers(int32 timeout, Platform::String^ refresher);
static bool defaultsSetSRtpMode(enum class rt_tmedia_srtp_mode_t mode);
static enum class rt_tmedia_srtp_mode_t defaultsGetSRtpMode();
static bool defaultsSetSRtpType(enum class rt_tmedia_srtp_type_t srtp_type);
static enum class rt_tmedia_srtp_type_t defaultsGetSRtpType();
static bool defaultsSetRtcpEnabled(bool enabled);
static bool defaultsGetRtcpEnabled();
static bool defaultsSetRtcpMuxEnabled(bool enabled);
static bool defaultsGetRtcpMuxEnabled();
static bool defaultsSetIceEnabled(bool ice_enabled);
static bool defaultsSetByPassEncoding(bool enabled);
static bool defaultsGetByPassEncoding();
static bool defaultsSetByPassDecoding(bool enabled);
static bool defaultsGetByPassDecoding();
static bool defaultsSetVideoJbEnabled(bool enabled);
static bool defaultsGetVideoJbEnabled();
static bool defaultsSetRtpBuffSize(unsigned buffSize);
static unsigned defaultsGetRtpBuffSize();
static bool defaultsSetAvpfTail(unsigned tail_min, unsigned tail_max);
internal: // Must be from SIP service to share same global memory space
static bool defaultsSetProfile(rt_tmedia_profile_t profile);
static rt_tmedia_profile_t defaultsGetProfile();
static bool defaultsSetPrefVideoSize(enum class rt_tmedia_pref_video_size_t pref_video_size);
static bool defaultsSetJbMargin(uint32 jb_margin_ms);
static bool defaultsSetJbMaxLateRate(uint32 jb_late_rate_percent);
static bool defaultsSetEchoTail(uint32 echo_tail);
static uint32 defaultsGetEchoTail();
static bool defaultsSetEchoSkew(uint32 echo_skew);
static bool defaultsSetEchoSuppEnabled(bool echo_supp_enabled);
static bool defaultsGetEchoSuppEnabled();
static bool defaultsSetAgcEnabled(bool agc_enabled);
static bool defaultsGetAgcEnabled();
static bool defaultsSetAgcLevel(float agc_level);
static float defaultsGetAgcLevel();
static bool defaultsSetVadEnabled(bool vad_enabled);
static bool defaultsGetGetVadEnabled();
static bool defaultsSetNoiseSuppEnabled(bool noise_supp_enabled);
static bool defaultsGetNoiseSuppEnabled();
static bool defaultsSetNoiseSuppLevel(int32 noise_supp_level);
static int32 defaultsGetNoiseSuppLevel();
static bool defaultsSet100relEnabled(bool _100rel_enabled);
static bool defaultsGet100relEnabled();
static bool defaultsSetScreenSize(int32 sx, int32 sy);
static bool defaultsSetAudioGain(int32 producer_gain, int32 consumer_gain);
static bool defaultsSetRtpPortRange(uint16 range_start, uint16 range_stop);
static bool defaultsSetRtpSymetricEnabled(bool enabled);
static bool defaultsSetMediaType(enum class rt_twrap_media_type_t media_type);
static bool defaultsSetVolume(int32 volume);
static int32 defaultsGetVolume();
static bool defaultsSetInviteSessionTimers(int32 timeout, Platform::String^ refresher);
static bool defaultsSetSRtpMode(enum class rt_tmedia_srtp_mode_t mode);
static enum class rt_tmedia_srtp_mode_t defaultsGetSRtpMode();
static bool defaultsSetSRtpType(enum class rt_tmedia_srtp_type_t srtp_type);
static enum class rt_tmedia_srtp_type_t defaultsGetSRtpType();
static bool defaultsSetRtcpEnabled(bool enabled);
static bool defaultsGetRtcpEnabled();
static bool defaultsSetRtcpMuxEnabled(bool enabled);
static bool defaultsGetRtcpMuxEnabled();
static bool defaultsSetIceEnabled(bool ice_enabled);
static bool defaultsSetByPassEncoding(bool enabled);
static bool defaultsGetByPassEncoding();
static bool defaultsSetByPassDecoding(bool enabled);
static bool defaultsGetByPassDecoding();
static bool defaultsSetVideoJbEnabled(bool enabled);
static bool defaultsGetVideoJbEnabled();
static bool defaultsSetRtpBuffSize(unsigned buffSize);
static unsigned defaultsGetRtpBuffSize();
static bool defaultsSetAvpfTail(unsigned tail_min, unsigned tail_max);
private:
MediaSessionMgr* m_pMediaSessionMgr;
};
}
private:
MediaSessionMgr* m_pMediaSessionMgr;
};
}
}

View File

@ -25,85 +25,96 @@ class MsrpEvent;
namespace doubango_rt
{
namespace BackEnd
{
ref class rtMsrpSession;
namespace BackEnd
{
ref class rtMsrpSession;
public ref class rtMsrpByteRange sealed
{
internal:
rtMsrpByteRange(int64 start, int64 end, int64 total):_start(start),_end(end),_total(total){}
public:
property int64 Start{ int64 get() { return _start; }; }
property int64 End{ int64 get() { return _end; }; }
property int64 Total{ int64 get() { return _total; }; }
private:
int64 _start, _end, _total;
};
public ref class rtMsrpByteRange sealed
{
internal:
rtMsrpByteRange(int64 start, int64 end, int64 total):_start(start),_end(end),_total(total) {}
public:
property int64 Start { int64 get() {
return _start;
};
}
property int64 End { int64 get() {
return _end;
};
}
property int64 Total { int64 get() {
return _total;
};
}
private:
int64 _start, _end, _total;
};
public ref class rtMsrpMessage sealed
{
public:
virtual ~rtMsrpMessage();
internal:
rtMsrpMessage(struct tmsrp_message_s *message);
public ref class rtMsrpMessage sealed
{
public:
virtual ~rtMsrpMessage();
internal:
rtMsrpMessage(struct tmsrp_message_s *message);
public:
bool isRequest();
short getCode();
Platform::String^ getPhrase();
rt_tmsrp_request_type_t getRequestType();
public:
bool isRequest();
short getCode();
Platform::String^ getPhrase();
rt_tmsrp_request_type_t getRequestType();
#if COM_VISIBLE
rtMsrpByteRange^ getByteRange();
rtMsrpByteRange^ getByteRange();
#else
void getByteRange(Platform::IntPtr start, Platform::IntPtr end, Platform::IntPtr total);
void getByteRange(Platform::IntPtr start, Platform::IntPtr end, Platform::IntPtr total);
#endif
bool isLastChunck();
bool isFirstChunck();
bool isSuccessReport();
Platform::String^ getMsrpHeaderValue(Platform::String^ name);
Platform::String^ getMsrpHeaderParamValue(Platform::String^ name, Platform::String^ param);
unsigned getMsrpContentLength();
bool isLastChunck();
bool isFirstChunck();
bool isSuccessReport();
Platform::String^ getMsrpHeaderValue(Platform::String^ name);
Platform::String^ getMsrpHeaderParamValue(Platform::String^ name, Platform::String^ param);
unsigned getMsrpContentLength();
#if COM_VISIBLE
Platform::String^ getMsrpContent(unsigned maxsize);
Platform::String^ getMsrpContent(unsigned maxsize);
#else
unsigned getMsrpContent(Platform::IntPtr output, unsigned maxsize);
unsigned getMsrpContent(Platform::IntPtr output, unsigned maxsize);
#endif
private:
MsrpMessage* m_pMsrpMessage;
};
private:
MsrpMessage* m_pMsrpMessage;
};
public ref class rtMsrpEvent sealed
{
internal:
rtMsrpEvent(const struct tmsrp_event_s *event);
public:
virtual ~rtMsrpEvent();
public ref class rtMsrpEvent sealed
{
internal:
rtMsrpEvent(const struct tmsrp_event_s *event);
public:
virtual ~rtMsrpEvent();
rt_tmsrp_event_type_t getType();
rtMsrpSession^ getSipSession();
rtMsrpMessage^ getMessage();
rt_tmsrp_event_type_t getType();
rtMsrpSession^ getSipSession();
rtMsrpMessage^ getMessage();
private:
MsrpEvent* m_pMsrpEvent;
};
private:
MsrpEvent* m_pMsrpEvent;
};
public interface class rtIMsrpCallback
{
virtual int OnEvent(rtMsrpEvent^ pEvent);
};
public ref class rtMsrpCallback sealed
{
internal:
rtMsrpCallback(rtIMsrpCallback^ pI);
const MsrpCallback* getWrappedCallback(){ return m_pCallback; }
public:
virtual ~rtMsrpCallback();
public interface class rtIMsrpCallback
{
virtual int OnEvent(rtMsrpEvent^ pEvent);
};
public ref class rtMsrpCallback sealed
{
internal:
rtMsrpCallback(rtIMsrpCallback^ pI);
const MsrpCallback* getWrappedCallback() {
return m_pCallback;
}
public:
virtual ~rtMsrpCallback();
private:
MsrpCallback* m_pCallback;
rtIMsrpCallback^ m_pI;
};
}
private:
MsrpCallback* m_pCallback;
rtIMsrpCallback^ m_pI;
};
}
}

View File

@ -22,49 +22,49 @@ class SipCallbackProxy;
namespace doubango_rt
{
namespace BackEnd
{
ref class rtDialogEvent;
ref class rtStackEvent;
namespace BackEnd
{
ref class rtDialogEvent;
ref class rtStackEvent;
ref class rtInviteEvent;
ref class rtMessagingEvent;
ref class rtInfoEvent;
ref class rtOptionsEvent;
ref class rtPublicationEvent;
ref class rtRegistrationEvent;
ref class rtSubscriptionEvent;
ref class rtInviteEvent;
ref class rtMessagingEvent;
ref class rtInfoEvent;
ref class rtOptionsEvent;
ref class rtPublicationEvent;
ref class rtRegistrationEvent;
ref class rtSubscriptionEvent;
public interface class rtISipCallback
{
virtual int OnDialogEvent(rtDialogEvent^ e);
virtual int OnStackEvent(rtStackEvent^ e);
public interface class rtISipCallback
{
virtual int OnDialogEvent(rtDialogEvent^ e);
virtual int OnStackEvent(rtStackEvent^ e);
virtual int OnInviteEvent(rtInviteEvent^ e);
virtual int OnMessagingEvent(rtMessagingEvent^ e);
virtual int OnInfoEvent(rtInfoEvent^ e);
virtual int OnOptionsEvent(rtOptionsEvent^ e);
virtual int OnPublicationEvent(rtPublicationEvent^ e);
virtual int OnRegistrationEvent(rtRegistrationEvent^ e);
virtual int OnSubscriptionEvent(rtSubscriptionEvent^ e);
};
virtual int OnInviteEvent(rtInviteEvent^ e);
virtual int OnMessagingEvent(rtMessagingEvent^ e);
virtual int OnInfoEvent(rtInfoEvent^ e);
virtual int OnOptionsEvent(rtOptionsEvent^ e);
virtual int OnPublicationEvent(rtPublicationEvent^ e);
virtual int OnRegistrationEvent(rtRegistrationEvent^ e);
virtual int OnSubscriptionEvent(rtSubscriptionEvent^ e);
};
public ref class rtSipCallback sealed
{
internal:
rtSipCallback(rtISipCallback^ pI);
public:
virtual ~rtSipCallback();
friend class SipCallbackProxy;
public ref class rtSipCallback sealed
{
internal:
rtSipCallback(rtISipCallback^ pI);
public:
virtual ~rtSipCallback();
friend class SipCallbackProxy;
internal:
const SipCallback* getWrappedCallback();
internal:
const SipCallback* getWrappedCallback();
private:
rtISipCallback^ m_pI;
SipCallbackProxy* m_pCallback;
};
}
private:
rtISipCallback^ m_pI;
SipCallbackProxy* m_pCallback;
};
}
}

View File

@ -57,188 +57,188 @@ rtSipMessage^ cls##::getSipMessage(){ \
namespace doubango_rt
{
namespace BackEnd
{
interface class rtISipSession;
ref class rtSipMessage;
ref class rtInviteSession;
ref class rtMsrpSession;
ref class rtCallSession;
ref class rtMessagingSession;
ref class rtInfoSession;
ref class rtOptionsSession;
ref class rtPublicationSession;
ref class rtRegistrationSession;
ref class rtSubscriptionSession;
namespace BackEnd
{
interface class rtISipSession;
ref class rtSipMessage;
ref class rtInviteSession;
ref class rtMsrpSession;
ref class rtCallSession;
ref class rtMessagingSession;
ref class rtInfoSession;
ref class rtOptionsSession;
ref class rtPublicationSession;
ref class rtRegistrationSession;
ref class rtSubscriptionSession;
/* ======================== rtISipEvent ========================*/
public interface class rtISipEvent
{
short getCode();
Platform::String^ getPhrase();
rtISipSession^ getBaseSession();
rtSipMessage^ getSipMessage();
};
/* ======================== rtISipEvent ========================*/
public interface class rtISipEvent
{
short getCode();
Platform::String^ getPhrase();
rtISipSession^ getBaseSession();
rtSipMessage^ getSipMessage();
};
/* ======================== rtDialogEvent ========================*/
public ref class rtDialogEvent sealed : rtISipEvent
{
internal:
rtDialogEvent(const struct tsip_event_s *e);
/* ======================== rtDialogEvent ========================*/
public ref class rtDialogEvent sealed : rtISipEvent
{
internal:
rtDialogEvent(const struct tsip_event_s *e);
public:
virtual ~rtDialogEvent();
rtISipEvent_Declare();
public:
virtual ~rtDialogEvent();
rtISipEvent_Declare();
private:
DialogEvent* m_pEvent;
};
private:
DialogEvent* m_pEvent;
};
/* ======================== rtStackEvent ========================*/
public ref class rtStackEvent sealed : rtISipEvent
{
internal:
rtStackEvent(const struct tsip_event_s *e);
/* ======================== rtStackEvent ========================*/
public ref class rtStackEvent sealed : rtISipEvent
{
internal:
rtStackEvent(const struct tsip_event_s *e);
public:
virtual ~rtStackEvent();
rtISipEvent_Declare();
public:
virtual ~rtStackEvent();
rtISipEvent_Declare();
private:
StackEvent* m_pEvent;
};
private:
StackEvent* m_pEvent;
};
/* ======================== rtInviteEvent ========================*/
public ref class rtInviteEvent sealed : rtISipEvent
{
internal:
rtInviteEvent(const struct tsip_event_s *e);
/* ======================== rtInviteEvent ========================*/
public ref class rtInviteEvent sealed : rtISipEvent
{
internal:
rtInviteEvent(const struct tsip_event_s *e);
public:
virtual ~rtInviteEvent();
rtISipEvent_Declare();
public:
virtual ~rtInviteEvent();
rtISipEvent_Declare();
rt_tsip_invite_event_type_t getType();
rt_twrap_media_type_t getMediaType();
rtInviteSession^ getSession();
rtCallSession^ takeCallSessionOwnership();
rtMsrpSession^ takeMsrpSessionOwnership();
rt_tsip_invite_event_type_t getType();
rt_twrap_media_type_t getMediaType();
rtInviteSession^ getSession();
rtCallSession^ takeCallSessionOwnership();
rtMsrpSession^ takeMsrpSessionOwnership();
private:
InviteEvent* m_pEvent;
};
private:
InviteEvent* m_pEvent;
};
/* ======================== rtMessagingEvent ========================*/
public ref class rtMessagingEvent sealed : rtISipEvent
{
internal:
rtMessagingEvent(const struct tsip_event_s *e);
/* ======================== rtMessagingEvent ========================*/
public ref class rtMessagingEvent sealed : rtISipEvent
{
internal:
rtMessagingEvent(const struct tsip_event_s *e);
public:
virtual ~rtMessagingEvent();
rtISipEvent_Declare();
public:
virtual ~rtMessagingEvent();
rtISipEvent_Declare();
rt_tsip_message_event_type_t getType();
rtMessagingSession^ getSession();
rtMessagingSession^ takeSessionOwnership();
rt_tsip_message_event_type_t getType();
rtMessagingSession^ getSession();
rtMessagingSession^ takeSessionOwnership();
private:
MessagingEvent* m_pEvent;
};
private:
MessagingEvent* m_pEvent;
};
/* ======================== rtInfoEvent ========================*/
public ref class rtInfoEvent sealed : rtISipEvent
{
internal:
rtInfoEvent(const struct tsip_event_s *e);
/* ======================== rtInfoEvent ========================*/
public ref class rtInfoEvent sealed : rtISipEvent
{
internal:
rtInfoEvent(const struct tsip_event_s *e);
public:
virtual ~rtInfoEvent();
rtISipEvent_Declare();
public:
virtual ~rtInfoEvent();
rtISipEvent_Declare();
rt_tsip_info_event_type_t getType();
rtInfoSession^ getSession();
rtInfoSession^ takeSessionOwnership();
rt_tsip_info_event_type_t getType();
rtInfoSession^ getSession();
rtInfoSession^ takeSessionOwnership();
private:
InfoEvent* m_pEvent;
};
private:
InfoEvent* m_pEvent;
};
/* ======================== rtOptionsEvent ========================*/
public ref class rtOptionsEvent sealed : rtISipEvent
{
internal:
rtOptionsEvent(const struct tsip_event_s *e);
/* ======================== rtOptionsEvent ========================*/
public ref class rtOptionsEvent sealed : rtISipEvent
{
internal:
rtOptionsEvent(const struct tsip_event_s *e);
public:
virtual ~rtOptionsEvent();
rtISipEvent_Declare();
public:
virtual ~rtOptionsEvent();
rtISipEvent_Declare();
rt_tsip_options_event_type_t getType();
rtOptionsSession^ getSession();
rtOptionsSession^ takeSessionOwnership();
rt_tsip_options_event_type_t getType();
rtOptionsSession^ getSession();
rtOptionsSession^ takeSessionOwnership();
private:
OptionsEvent* m_pEvent;
};
private:
OptionsEvent* m_pEvent;
};
/* ======================== rtPublicationEvent ========================*/
public ref class rtPublicationEvent sealed : rtISipEvent
{
internal:
rtPublicationEvent(const struct tsip_event_s *e);
/* ======================== rtPublicationEvent ========================*/
public ref class rtPublicationEvent sealed : rtISipEvent
{
internal:
rtPublicationEvent(const struct tsip_event_s *e);
public:
virtual ~rtPublicationEvent();
rtISipEvent_Declare();
public:
virtual ~rtPublicationEvent();
rtISipEvent_Declare();
rt_tsip_publish_event_type_t getType();
rtPublicationSession^ getSession();
rtPublicationSession^ takeSessionOwnership();
rt_tsip_publish_event_type_t getType();
rtPublicationSession^ getSession();
rtPublicationSession^ takeSessionOwnership();
private:
PublicationEvent* m_pEvent;
};
private:
PublicationEvent* m_pEvent;
};
/* ======================== rtRegistrationEvent ========================*/
public ref class rtRegistrationEvent sealed : rtISipEvent
{
internal:
rtRegistrationEvent(const struct tsip_event_s *e);
/* ======================== rtRegistrationEvent ========================*/
public ref class rtRegistrationEvent sealed : rtISipEvent
{
internal:
rtRegistrationEvent(const struct tsip_event_s *e);
public:
virtual ~rtRegistrationEvent();
rtISipEvent_Declare();
public:
virtual ~rtRegistrationEvent();
rtISipEvent_Declare();
rt_tsip_register_event_type_t getType();
rtRegistrationSession^ getSession();
rtRegistrationSession^ takeSessionOwnership();
rt_tsip_register_event_type_t getType();
rtRegistrationSession^ getSession();
rtRegistrationSession^ takeSessionOwnership();
private:
RegistrationEvent* m_pEvent;
};
private:
RegistrationEvent* m_pEvent;
};
/* ======================== rtSubscriptionEvent ========================*/
public ref class rtSubscriptionEvent sealed : rtISipEvent
{
internal:
rtSubscriptionEvent(const struct tsip_event_s *e);
/* ======================== rtSubscriptionEvent ========================*/
public ref class rtSubscriptionEvent sealed : rtISipEvent
{
internal:
rtSubscriptionEvent(const struct tsip_event_s *e);
public:
virtual ~rtSubscriptionEvent();
rtISipEvent_Declare();
public:
virtual ~rtSubscriptionEvent();
rtISipEvent_Declare();
rt_tsip_subscribe_event_type_t getType();
rtSubscriptionSession^ getSession();
rtSubscriptionSession^ takeSessionOwnership();
rt_tsip_subscribe_event_type_t getType();
rtSubscriptionSession^ getSession();
rtSubscriptionSession^ takeSessionOwnership();
private:
SubscriptionEvent* m_pEvent;
};
}
private:
SubscriptionEvent* m_pEvent;
};
}
}

View File

@ -27,52 +27,52 @@ struct tsip_message_s;
namespace doubango_rt
{
namespace BackEnd
{
public ref class rtSdpMessage sealed
{
internal:
rtSdpMessage();
rtSdpMessage(struct tsdp_message_s *message);
public:
virtual ~rtSdpMessage();
namespace BackEnd
{
public ref class rtSdpMessage sealed
{
internal:
rtSdpMessage();
rtSdpMessage(struct tsdp_message_s *message);
public:
virtual ~rtSdpMessage();
public:
Platform::String^ getSdpHeaderValue(Platform::String^ media, Platform::String^ name, unsigned index);
Platform::String^ getSdpHeaderValue(Platform::String^ media, Platform::String^ name);
Platform::String^ getSdpHeaderAValue(Platform::String^ media, Platform::String^ attributeName);
public:
Platform::String^ getSdpHeaderValue(Platform::String^ media, Platform::String^ name, unsigned index);
Platform::String^ getSdpHeaderValue(Platform::String^ media, Platform::String^ name);
Platform::String^ getSdpHeaderAValue(Platform::String^ media, Platform::String^ attributeName);
private:
SdpMessage* m_pSdpMessage;
};
private:
SdpMessage* m_pSdpMessage;
};
public ref class rtSipMessage sealed
{
internal:
rtSipMessage();
rtSipMessage(struct tsip_message_s* message);
public:
virtual ~rtSipMessage();
public ref class rtSipMessage sealed
{
internal:
rtSipMessage();
rtSipMessage(struct tsip_message_s* message);
public:
virtual ~rtSipMessage();
public:
bool isResponse();
rt_tsip_request_type_t getRequestType();
short getResponseCode();
Platform::String^ getResponsePhrase();
Platform::String^ getSipHeaderValue(Platform::String^ name, unsigned index);
Platform::String^ getSipHeaderValue(Platform::String^ name);
Platform::String^ getSipHeaderParamValue(Platform::String^ name, Platform::String^ param, unsigned index);
Platform::String^ getSipHeaderParamValue(Platform::String^ name, Platform::String^ param);
unsigned getSipContentLength();
public:
bool isResponse();
rt_tsip_request_type_t getRequestType();
short getResponseCode();
Platform::String^ getResponsePhrase();
Platform::String^ getSipHeaderValue(Platform::String^ name, unsigned index);
Platform::String^ getSipHeaderValue(Platform::String^ name);
Platform::String^ getSipHeaderParamValue(Platform::String^ name, Platform::String^ param, unsigned index);
Platform::String^ getSipHeaderParamValue(Platform::String^ name, Platform::String^ param);
unsigned getSipContentLength();
#if COM_VISIBLE
Platform::String^ getSipContent();
Platform::String^ getSipContent();
#else
unsigned getSipContent(Platform::IntPtr output, unsigned maxsize);
unsigned getSipContent(Platform::IntPtr output, unsigned maxsize);
#endif
rtSdpMessage^ getSdpMessage();
rtSdpMessage^ getSdpMessage();
private:
SipMessage* m_pSipMessage;
};
}
private:
SipMessage* m_pSipMessage;
};
}
}

View File

@ -159,352 +159,360 @@ rtMediaSessionMgr^ cls##::getMediaMgr(){ \
namespace doubango_rt
{
namespace BackEnd
{
ref class rtMsrpCallback;
interface class rtIMsrpCallback;
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();
/* ======================== 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;
};
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; }
/* ======================== 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();
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;
}
protected:
virtual int ondata(rtT140CallbackData^ pData) {
if(m_pI) {
return m_pI->ondata(pData);
}
return 0;
}
private:
T140Callback* m_pCallback;
rtIT140Callback^ m_pI;
};
private:
T140Callback* m_pCallback;
rtIT140Callback^ m_pI;
};
/* ======================== rtISipSession ========================*/
public interface class rtISipSession
{
rtISession_Declare();
};
/* ======================== rtISipSession ========================*/
public interface class rtISipSession
{
rtISession_Declare();
};
/* ======================== rtIInviteSession ========================*/
public interface class rtIInviteSession : rtISipSession
{
rtIInviteSession_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; }
/* ======================== 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();
public:
rtISession_Declare();
private:
SipSession* m_pSipSession;
};
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; }
/* ======================== 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();
public:
rtISession_Declare();
rtIInviteSession_Declare();
private:
InviteSession* m_pSipSession;
};
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; }
/* ======================== 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();
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);
[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();
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);
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);
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);
bool sendT140Data(rt_tmedia_t140_data_type_t data_type);
bool setT140Callback(rtT140Callback^ pT140Callback);
private:
CallSession* m_pSipSession;
};
private:
CallSession* m_pSipSession;
};
/* ======================== rtMsrpSession ========================*/
public ref class rtMsrpSession sealed : rtIInviteSession
{
public:
rtMsrpSession(rtSipStack^ pStack, rtIMsrpCallback^ pCallback);
virtual ~rtMsrpSession();
/* ======================== 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; }
internal:
rtMsrpSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
MsrpSession* getWrappedSession() {
return m_pSipSession;
}
public:
rtISession_Declare();
rtIInviteSession_Declare();
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);
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);
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);
bool sendMessage(Platform::IntPtr payload, unsigned len, rtActionConfig^ config);
bool sendMessage(Platform::IntPtr payload, unsigned len);
#endif
private:
MsrpSession* m_pSipSession;
rtMsrpCallback^ m_pCallback;
};
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();
/* ======================== rtMessagingSession ========================*/
public ref class rtMessagingSession sealed : rtISipSession
{
internal:
rtMessagingSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
public:
rtMessagingSession(rtSipStack^ pStack);
virtual ~rtMessagingSession();
rtISession_Declare();
rtISession_Declare();
#if COM_VISIBLE
bool send(Platform::String^ payload, rtActionConfig^ config);
bool send(Platform::String^ payload);
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);
[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();
[Windows::Foundation::Metadata::DefaultOverload]
bool accept(rtActionConfig^ config);
bool accept();
[Windows::Foundation::Metadata::DefaultOverload]
bool reject(rtActionConfig^ config);
bool reject();
private:
MessagingSession* m_pSipSession;
};
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();
/* ======================== rtInfoSession ========================*/
public ref class rtInfoSession sealed : rtISipSession
{
internal:
rtInfoSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
public:
rtInfoSession(rtSipStack^ pStack);
virtual ~rtInfoSession();
rtISession_Declare();
rtISession_Declare();
#if COM_VISIBLE
bool send(Platform::String^ payload, rtActionConfig^ config);
bool send(Platform::String^ payload);
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);
[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();
[Windows::Foundation::Metadata::DefaultOverload]
bool accept(rtActionConfig^ config);
bool accept();
[Windows::Foundation::Metadata::DefaultOverload]
bool reject(rtActionConfig^ config);
bool reject();
private:
InfoSession* m_pSipSession;
};
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();
/* ======================== rtOptionsSession ========================*/
public ref class rtOptionsSession sealed : rtISipSession
{
internal:
rtOptionsSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
public:
rtOptionsSession(rtSipStack^ pStack);
virtual ~rtOptionsSession();
rtISession_Declare();
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();
[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;
};
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();
/* ======================== rtPublicationSession ========================*/
public ref class rtPublicationSession sealed : rtISipSession
{
internal:
rtPublicationSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
public:
rtPublicationSession(rtSipStack^ pStack);
virtual ~rtPublicationSession();
rtISession_Declare();
rtISession_Declare();
#if COM_VISIBLE
bool publish(Platform::String^ payload, rtActionConfig^ config);
bool publish(Platform::String^ payload);
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);
[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();
[Windows::Foundation::Metadata::DefaultOverload]
bool unPublish(rtActionConfig^ config);
bool unPublish();
private:
PublicationSession* m_pSipSession;
};
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();
/* ======================== rtRegistrationSession ========================*/
public ref class rtRegistrationSession sealed : rtISipSession
{
internal:
rtRegistrationSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
public:
rtRegistrationSession(rtSipStack^ pStack);
virtual ~rtRegistrationSession();
rtISession_Declare();
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();
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;
};
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();
/* ======================== rtSubscriptionSession ========================*/
public ref class rtSubscriptionSession sealed : rtISipSession
{
internal:
rtSubscriptionSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
public:
rtSubscriptionSession(rtSipStack^ pStack);
virtual ~rtSubscriptionSession();
rtISession_Declare();
rtISession_Declare();
bool subscribe();
bool unSubscribe();
bool subscribe();
bool unSubscribe();
private:
SubscriptionSession* m_pSipSession;
};
}
private:
SubscriptionSession* m_pSipSession;
};
}
}

View File

@ -23,98 +23,106 @@ class SipStack;
namespace doubango_rt
{
namespace BackEnd
{
ref class rtSipCallback;
interface class rtISipCallback;
ref class rtDDebugCallback;
interface class rtIDDebugCallback;
namespace BackEnd
{
ref class rtSipCallback;
interface class rtISipCallback;
ref class rtDDebugCallback;
interface class rtIDDebugCallback;
enum class rt_tdav_codec_id_t;
enum class rt_tdav_codec_id_t;
public ref class rtDnsResult sealed
{
internal:
rtDnsResult(uint16 port, Platform::String^ address):_port(port), _address(address){}
public:
property uint16 Port{ uint16 get() { return _port; }; }
property Platform::String^ Address{ Platform::String^ get() { return _address; }; }
private:
uint16 _port;
Platform::String^ _address;
};
public ref class rtDnsResult sealed
{
internal:
rtDnsResult(uint16 port, Platform::String^ address):_port(port), _address(address) {}
public:
property uint16 Port { uint16 get() {
return _port;
};
}
property Platform::String^ Address { Platform::String^ get() {
return _address;
};
}
private:
uint16 _port;
Platform::String^ _address;
};
public ref class rtSipStack sealed
{
public:
virtual ~rtSipStack();
public ref class rtSipStack sealed
{
public:
virtual ~rtSipStack();
internal:
rtSipStack(rtISipCallback^ callback, Platform::String^ realmUri, Platform::String^ impiString, Platform::String^ impuUri);
const SipStack* getWrappedStack() { return m_pSipStack; }
internal:
rtSipStack(rtISipCallback^ callback, Platform::String^ realmUri, Platform::String^ impiString, Platform::String^ impuUri);
const SipStack* getWrappedStack() {
return m_pSipStack;
}
public:
bool start();
bool setDebugCallback(rtIDDebugCallback^ pCallback);
bool setDisplayName(Platform::String^ display_name);
bool setRealm(Platform::String^ realm_uri);
bool setIMPI(Platform::String^ impi);
bool setIMPU(Platform::String^ impu_uri);
bool setPassword(Platform::String^ password);
bool setAMF(Platform::String^ amf);
bool setOperatorId(Platform::String^ opid);
bool setProxyCSCF(Platform::String^ fqdn, unsigned short port, Platform::String^ transport, Platform::String^ ipversion);
bool setLocalIP(Platform::String^ ip, Platform::String^ transport);
bool setLocalIP(Platform::String^ ip);
bool setLocalPort(unsigned short port, Platform::String^ transport);
bool setLocalPort(unsigned short port);
bool setEarlyIMS(bool enabled);
bool addHeader(Platform::String^ name, Platform::String^ value);
bool removeHeader(Platform::String^ name);
bool addDnsServer(Platform::String^ ip);
bool setDnsDiscovery(bool enabled);
bool setAoR(Platform::String^ ip, int port);
bool setSigCompParams(unsigned dms, unsigned sms, unsigned cpb, bool enablePresDict);
bool addSigCompCompartment(Platform::String^ compId);
bool removeSigCompCompartment(Platform::String^ compId);
public:
bool start();
bool setDebugCallback(rtIDDebugCallback^ pCallback);
bool setDisplayName(Platform::String^ display_name);
bool setRealm(Platform::String^ realm_uri);
bool setIMPI(Platform::String^ impi);
bool setIMPU(Platform::String^ impu_uri);
bool setPassword(Platform::String^ password);
bool setAMF(Platform::String^ amf);
bool setOperatorId(Platform::String^ opid);
bool setProxyCSCF(Platform::String^ fqdn, unsigned short port, Platform::String^ transport, Platform::String^ ipversion);
bool setLocalIP(Platform::String^ ip, Platform::String^ transport);
bool setLocalIP(Platform::String^ ip);
bool setLocalPort(unsigned short port, Platform::String^ transport);
bool setLocalPort(unsigned short port);
bool setEarlyIMS(bool enabled);
bool addHeader(Platform::String^ name, Platform::String^ value);
bool removeHeader(Platform::String^ name);
bool addDnsServer(Platform::String^ ip);
bool setDnsDiscovery(bool enabled);
bool setAoR(Platform::String^ ip, int port);
bool setSigCompParams(unsigned dms, unsigned sms, unsigned cpb, bool enablePresDict);
bool addSigCompCompartment(Platform::String^ compId);
bool removeSigCompCompartment(Platform::String^ compId);
bool setSTUNServer(Platform::String^ ip, unsigned short port);
bool setSTUNCred(Platform::String^ login, Platform::String^ password);
bool setSTUNServer(Platform::String^ ip, unsigned short port);
bool setSTUNCred(Platform::String^ login, Platform::String^ password);
bool setTLSSecAgree(bool enabled);
bool setSSLCertificates(Platform::String^ privKey, Platform::String^ pubKey, Platform::String^ caKey, bool verify);
bool setSSLCertificates(Platform::String^ privKey, Platform::String^ pubKey, Platform::String^ caKey);
bool setIPSecSecAgree(bool enabled);
bool setIPSecParameters(Platform::String^ algo, Platform::String^ ealgo, Platform::String^ mode, Platform::String^ proto);
bool setTLSSecAgree(bool enabled);
bool setSSLCertificates(Platform::String^ privKey, Platform::String^ pubKey, Platform::String^ caKey, bool verify);
bool setSSLCertificates(Platform::String^ privKey, Platform::String^ pubKey, Platform::String^ caKey);
bool setIPSecSecAgree(bool enabled);
bool setIPSecParameters(Platform::String^ algo, Platform::String^ ealgo, Platform::String^ mode, Platform::String^ proto);
Platform::String^ dnsENUM(Platform::String^ service, Platform::String^ e164num, Platform::String^ domain);
Platform::String^ dnsENUM(Platform::String^ service, Platform::String^ e164num, Platform::String^ domain);
#if COM_VISIBLE
rtDnsResult^ dnsNaptrSrv(Platform::String^ domain, Platform::String^ service);
rtDnsResult^ dnsSrv(Platform::String^ service);
Platform::String^ getLocalIP(Platform::String^ protocol);
uint16 getLocalPort(Platform::String^ protocol);
rtDnsResult^ dnsNaptrSrv(Platform::String^ domain, Platform::String^ service);
rtDnsResult^ dnsSrv(Platform::String^ service);
Platform::String^ getLocalIP(Platform::String^ protocol);
uint16 getLocalPort(Platform::String^ protocol);
#else
Platform::String^ dnsNaptrSrv(Platform::String^ domain, Platform::String^ service, Platform::IntPtr port);
Platform::String^ dnsSrv(Platform::String^ service, Platform::IntPtr port);
Platform::String^ getLocalIPnPort(Platform::String^ protocol, Platform::IntPtr port);
Platform::String^ dnsNaptrSrv(Platform::String^ domain, Platform::String^ service, Platform::IntPtr port);
Platform::String^ dnsSrv(Platform::String^ service, Platform::IntPtr port);
Platform::String^ getLocalIPnPort(Platform::String^ protocol, Platform::IntPtr port);
#endif
Platform::String^ getPreferredIdentity();
Platform::String^ getPreferredIdentity();
bool isValid();
bool stop();
bool isValid();
bool stop();
static bool initialize();
static bool deInitialize();
static void setCodecs(enum class rt_tdav_codec_id_t codecs);
static bool setCodecPriority(enum class rt_tdav_codec_id_t codec_id, int priority);
static bool isCodecSupported(enum class rt_tdav_codec_id_t codec_id);
static bool initialize();
static bool deInitialize();
static void setCodecs(enum class rt_tdav_codec_id_t codecs);
static bool setCodecPriority(enum class rt_tdav_codec_id_t codec_id, int priority);
static bool isCodecSupported(enum class rt_tdav_codec_id_t codec_id);
private:
SipStack* m_pSipStack;
rtSipCallback^ m_pSipCallback;
rtDDebugCallback^ m_pDebugCallback;
std::recursive_mutex mLock;
};
}
private:
SipStack* m_pSipStack;
rtSipCallback^ m_pSipCallback;
rtDDebugCallback^ m_pDebugCallback;
std::recursive_mutex mLock;
};
}
}

View File

@ -23,38 +23,40 @@ class SipUri;
namespace doubango_rt
{
namespace BackEnd
{
public ref class rtSipUri sealed
{
public:
virtual ~rtSipUri();
rtSipUri(Platform::String^ uriString, Platform::String^ displayName);
rtSipUri(Platform::String^ uriString);
namespace BackEnd
{
public ref class rtSipUri sealed
{
public:
virtual ~rtSipUri();
rtSipUri(Platform::String^ uriString, Platform::String^ displayName);
rtSipUri(Platform::String^ uriString);
public:
static bool isValid(Platform::String^ uri);
public:
static bool isValid(Platform::String^ uri);
#if COM_VISIBLE
bool isValid_();
bool isValid_();
#else
bool isValid();
bool isValid();
#endif
Platform::String^ getScheme();
Platform::String^ getHost();
unsigned short getPort();
Platform::String^ getUserName();
Platform::String^ getPassword();
Platform::String^ getDisplayName();
Platform::String^ getParamValue(Platform::String^ name);
void setDisplayName(Platform::String^ displayName);
Platform::String^ getScheme();
Platform::String^ getHost();
unsigned short getPort();
Platform::String^ getUserName();
Platform::String^ getPassword();
Platform::String^ getDisplayName();
Platform::String^ getParamValue(Platform::String^ name);
void setDisplayName(Platform::String^ displayName);
internal:
const SipUri* getWrappedUri(){ return m_pSipUri; }
internal:
const SipUri* getWrappedUri() {
return m_pSipUri;
}
private:
SipUri* m_pSipUri;
};
}
private:
SipUri* m_pSipUri;
};
}
}

View File

@ -21,13 +21,13 @@
namespace doubango_rt
{
namespace BackEnd
{
ref class rtString sealed
{
internal:
static std::vector<char> toUtf8(Platform::String^ str);
static Platform::String^ toString(char const* str);
};
}
namespace BackEnd
{
ref class rtString sealed
{
internal:
static std::vector<char> toUtf8(Platform::String^ str);
static Platform::String^ toString(char const* str);
};
}
}

View File

@ -26,51 +26,51 @@ using namespace std;
rtActionConfig::rtActionConfig()
{
m_pActionConfig = new ActionConfig();
m_pActionConfig = new ActionConfig();
}
rtActionConfig::~rtActionConfig()
{
rtSafeDelete(m_pActionConfig);
rtSafeDelete(m_pActionConfig);
}
bool rtActionConfig::addHeader(String^ name, String^ value)
{
return m_pActionConfig->addHeader(rtString::toUtf8(name).data(), rtString::toUtf8(value).data());
return m_pActionConfig->addHeader(rtString::toUtf8(name).data(), rtString::toUtf8(value).data());
}
bool rtActionConfig::setActiveMedia(rt_twrap_media_type_t type)
{
return m_pActionConfig->setActiveMedia((twrap_media_type_t)type);
return m_pActionConfig->setActiveMedia((twrap_media_type_t)type);
}
#if COM_VISIBLE
bool rtActionConfig::addPayload(Platform::String^ payload)
{
static std::vector<char> _payload = rtString::toUtf8(payload);
return m_pActionConfig->addPayload(_payload.data(), _payload.size());
static std::vector<char> _payload = rtString::toUtf8(payload);
return m_pActionConfig->addPayload(_payload.data(), _payload.size());
}
#else
bool rtActionConfig::addPayload(IntPtr payload, unsigned len)
{
return m_pActionConfig->addPayload((const void*)payload, len);
return m_pActionConfig->addPayload((const void*)payload, len);
}
#endif /* COM_VISIBLE */
rtActionConfig^ rtActionConfig::setResponseLine(short code, String^ phrase)
{
m_pActionConfig->setResponseLine(code, rtString::toUtf8(phrase).data());
return this;
m_pActionConfig->setResponseLine(code, rtString::toUtf8(phrase).data());
return this;
}
rtActionConfig^ rtActionConfig::setMediaString(rt_twrap_media_type_t type, String^ key, String^ value)
{
m_pActionConfig->setMediaString((twrap_media_type_t)type, rtString::toUtf8(key).data(), rtString::toUtf8(value).data());
return this;
m_pActionConfig->setMediaString((twrap_media_type_t)type, rtString::toUtf8(key).data(), rtString::toUtf8(value).data());
return this;
}
rtActionConfig^ rtActionConfig::setMediaInt(rt_twrap_media_type_t type, String^ key, int value)
{
m_pActionConfig->setMediaInt((twrap_media_type_t)type, rtString::toUtf8(key).data(), value);
return this;
m_pActionConfig->setMediaInt((twrap_media_type_t)type, rtString::toUtf8(key).data(), value);
return this;
}

View File

@ -27,52 +27,46 @@ using namespace std;
class DDebugCallbackProxy : public DDebugCallback
{
public:
DDebugCallbackProxy(rtDDebugCallback^ pCallback)
{
m_pCallback = pCallback;
}
DDebugCallbackProxy(rtDDebugCallback^ pCallback) {
m_pCallback = pCallback;
}
~DDebugCallbackProxy()
{
~DDebugCallbackProxy() {
}
}
virtual int OnDebugInfo(const char* message)
{
return m_pCallback->m_pI->OnDebugInfo(rtString::toString(message));
}
virtual int OnDebugInfo(const char* message) {
return m_pCallback->m_pI->OnDebugInfo(rtString::toString(message));
}
virtual int OnDebugWarn(const char* message)
{
return m_pCallback->m_pI->OnDebugWarn(rtString::toString(message));
}
virtual int OnDebugWarn(const char* message) {
return m_pCallback->m_pI->OnDebugWarn(rtString::toString(message));
}
virtual int OnDebugError(const char* message)
{
return m_pCallback->m_pI->OnDebugError(rtString::toString(message));
}
virtual int OnDebugError(const char* message) {
return m_pCallback->m_pI->OnDebugError(rtString::toString(message));
}
virtual int OnDebugFatal(const char* message)
{
return m_pCallback->m_pI->OnDebugFatal(rtString::toString(message));
}
virtual int OnDebugFatal(const char* message) {
return m_pCallback->m_pI->OnDebugFatal(rtString::toString(message));
}
private:
rtDDebugCallback^ m_pCallback;
rtDDebugCallback^ m_pCallback;
};
rtDDebugCallback::rtDDebugCallback(rtIDDebugCallback^ pI)
{
m_pI = pI;
m_pCallback = new DDebugCallbackProxy(this);
m_pI = pI;
m_pCallback = new DDebugCallbackProxy(this);
}
rtDDebugCallback::~rtDDebugCallback()
{
rtSafeDelete(m_pCallback);
rtSafeDelete(m_pCallback);
}
const DDebugCallback* rtDDebugCallback::getWrappedCallback()
{
return dynamic_cast<const DDebugCallback*>(m_pCallback);
return dynamic_cast<const DDebugCallback*>(m_pCallback);
}

View File

@ -27,348 +27,347 @@ using namespace std;
rtCodec::rtCodec(struct tmedia_codec_s* pCodec)
{
m_pCodec = new Codec(pCodec);
m_pCodec = new Codec(pCodec);
}
rtCodec::~rtCodec()
{
rtSafeDelete(m_pCodec);
rtSafeDelete(m_pCodec);
}
enum class rt_twrap_media_type_t rtCodec::getMediaType()
{
return (rt_twrap_media_type_t)m_pCodec->getMediaType();
return (rt_twrap_media_type_t)m_pCodec->getMediaType();
}
Platform::String^ rtCodec::getName()
{
return rtString::toString(m_pCodec->getName());
return rtString::toString(m_pCodec->getName());
}
Platform::String^ rtCodec::getDescription()
{
return rtString::toString(m_pCodec->getDescription());
return rtString::toString(m_pCodec->getDescription());
}
Platform::String^ rtCodec::getNegFormat()
{
return rtString::toString(m_pCodec->getNegFormat());
return rtString::toString(m_pCodec->getNegFormat());
}
int rtCodec::getAudioSamplingRate()
{
return m_pCodec->getAudioSamplingRate();
return m_pCodec->getAudioSamplingRate();
}
int rtCodec::getAudioChannels()
{
return m_pCodec->getAudioChannels();
return m_pCodec->getAudioChannels();
}
int rtCodec::getAudioPTime()
{
return m_pCodec->getAudioPTime();
return m_pCodec->getAudioPTime();
}
rtMediaSessionMgr::rtMediaSessionMgr(struct tmedia_session_mgr_s* pWrappedMgr)
{
m_pMediaSessionMgr = new MediaSessionMgr(pWrappedMgr);
m_pMediaSessionMgr = new MediaSessionMgr(pWrappedMgr);
}
rtMediaSessionMgr::~rtMediaSessionMgr()
{
rtSafeDelete(m_pMediaSessionMgr);
rtSafeDelete(m_pMediaSessionMgr);
}
bool rtMediaSessionMgr::sessionSetInt32(rt_twrap_media_type_t media, Platform::String^ key, int32 value)
{
return m_pMediaSessionMgr->sessionSetInt32((twrap_media_type_t)media, rtString::toUtf8(key).data(), value);
return m_pMediaSessionMgr->sessionSetInt32((twrap_media_type_t)media, rtString::toUtf8(key).data(), value);
}
int32 rtMediaSessionMgr::sessionGetInt32(rt_twrap_media_type_t media, Platform::String^ key)
{
return m_pMediaSessionMgr->sessionGetInt32((twrap_media_type_t)media, rtString::toUtf8(key).data());
return m_pMediaSessionMgr->sessionGetInt32((twrap_media_type_t)media, rtString::toUtf8(key).data());
}
bool rtMediaSessionMgr::consumerSetInt32(rt_twrap_media_type_t media, Platform::String^ key, int32 value)
{
return m_pMediaSessionMgr->consumerSetInt32((twrap_media_type_t)media, rtString::toUtf8(key).data(), value);
return m_pMediaSessionMgr->consumerSetInt32((twrap_media_type_t)media, rtString::toUtf8(key).data(), value);
}
bool rtMediaSessionMgr::consumerSetInt64(rt_twrap_media_type_t media, Platform::String^ key, int64 value)
{
return m_pMediaSessionMgr->consumerSetInt64((twrap_media_type_t)media, rtString::toUtf8(key).data(), value);
return m_pMediaSessionMgr->consumerSetInt64((twrap_media_type_t)media, rtString::toUtf8(key).data(), value);
}
bool rtMediaSessionMgr::producerSetInt32(rt_twrap_media_type_t media, Platform::String^ key, int32 value)
{
return m_pMediaSessionMgr->producerSetInt32((twrap_media_type_t)media, rtString::toUtf8(key).data(), value);
return m_pMediaSessionMgr->producerSetInt32((twrap_media_type_t)media, rtString::toUtf8(key).data(), value);
}
bool rtMediaSessionMgr::producerSetInt64(rt_twrap_media_type_t media, Platform::String^ key, int64 value)
{
return m_pMediaSessionMgr->producerSetInt64((twrap_media_type_t)media, rtString::toUtf8(key).data(), value);
return m_pMediaSessionMgr->producerSetInt64((twrap_media_type_t)media, rtString::toUtf8(key).data(), value);
}
rtCodec^ rtMediaSessionMgr::producerGetCodec(rt_twrap_media_type_t media)
{
Codec* c = m_pMediaSessionMgr->producerGetCodec((twrap_media_type_t)media);
if(c)
{
rtCodec^ codec = ref new rtCodec(const_cast<struct tmedia_codec_s*>(c->getWrappedCodec()));
rtSafeDelete(c);
return codec;
}
return nullptr;
Codec* c = m_pMediaSessionMgr->producerGetCodec((twrap_media_type_t)media);
if(c) {
rtCodec^ codec = ref new rtCodec(const_cast<struct tmedia_codec_s*>(c->getWrappedCodec()));
rtSafeDelete(c);
return codec;
}
return nullptr;
}
unsigned int rtMediaSessionMgr::registerAudioPluginFromFile(Platform::String^ path)
{
return MediaSessionMgr::registerAudioPluginFromFile(rtString::toUtf8(path).data());
return MediaSessionMgr::registerAudioPluginFromFile(rtString::toUtf8(path).data());
}
uint64 rtMediaSessionMgr::getSessionId(rt_twrap_media_type_t media)
{
return m_pMediaSessionMgr->getSessionId((twrap_media_type_t)media);
return m_pMediaSessionMgr->getSessionId((twrap_media_type_t)media);
}
bool rtMediaSessionMgr::defaultsSetProfile(rt_tmedia_profile_t profile)
{
return MediaSessionMgr::defaultsSetProfile((tmedia_profile_t) profile);
return MediaSessionMgr::defaultsSetProfile((tmedia_profile_t) profile);
}
rt_tmedia_profile_t rtMediaSessionMgr::defaultsGetProfile()
{
return (rt_tmedia_profile_t)MediaSessionMgr::defaultsGetProfile();
return (rt_tmedia_profile_t)MediaSessionMgr::defaultsGetProfile();
}
bool rtMediaSessionMgr::defaultsSetPrefVideoSize(enum class rt_tmedia_pref_video_size_t pref_video_size)
{
return MediaSessionMgr::defaultsSetPrefVideoSize((tmedia_pref_video_size_t) pref_video_size);
return MediaSessionMgr::defaultsSetPrefVideoSize((tmedia_pref_video_size_t) pref_video_size);
}
bool rtMediaSessionMgr::defaultsSetJbMargin(uint32 jb_margin_ms)
{
return MediaSessionMgr::defaultsSetJbMargin(jb_margin_ms);
return MediaSessionMgr::defaultsSetJbMargin(jb_margin_ms);
}
bool rtMediaSessionMgr::defaultsSetJbMaxLateRate(uint32 jb_late_rate_percent)
{
return MediaSessionMgr::defaultsSetJbMaxLateRate(jb_late_rate_percent);
return MediaSessionMgr::defaultsSetJbMaxLateRate(jb_late_rate_percent);
}
bool rtMediaSessionMgr::defaultsSetEchoTail(uint32 echo_tail)
{
return MediaSessionMgr::defaultsSetEchoTail(echo_tail);
return MediaSessionMgr::defaultsSetEchoTail(echo_tail);
}
uint32 rtMediaSessionMgr::defaultsGetEchoTail()
{
return MediaSessionMgr::defaultsGetEchoTail();
return MediaSessionMgr::defaultsGetEchoTail();
}
bool rtMediaSessionMgr::defaultsSetEchoSkew(uint32 echo_skew)
{
return MediaSessionMgr::defaultsSetEchoSkew(echo_skew);
return MediaSessionMgr::defaultsSetEchoSkew(echo_skew);
}
bool rtMediaSessionMgr::defaultsSetEchoSuppEnabled(bool echo_supp_enabled)
{
return MediaSessionMgr::defaultsSetEchoSuppEnabled(echo_supp_enabled);
return MediaSessionMgr::defaultsSetEchoSuppEnabled(echo_supp_enabled);
}
bool rtMediaSessionMgr::defaultsGetEchoSuppEnabled()
{
return MediaSessionMgr::defaultsGetEchoSuppEnabled();
return MediaSessionMgr::defaultsGetEchoSuppEnabled();
}
bool rtMediaSessionMgr::defaultsSetAgcEnabled(bool agc_enabled)
{
return MediaSessionMgr::defaultsSetAgcEnabled(agc_enabled);
return MediaSessionMgr::defaultsSetAgcEnabled(agc_enabled);
}
bool rtMediaSessionMgr::defaultsGetAgcEnabled()
{
return MediaSessionMgr::defaultsGetAgcEnabled();
return MediaSessionMgr::defaultsGetAgcEnabled();
}
bool rtMediaSessionMgr::defaultsSetAgcLevel(float agc_level)
{
return MediaSessionMgr::defaultsSetAgcLevel(agc_level);
return MediaSessionMgr::defaultsSetAgcLevel(agc_level);
}
float rtMediaSessionMgr::defaultsGetAgcLevel()
{
return MediaSessionMgr::defaultsGetAgcLevel();
return MediaSessionMgr::defaultsGetAgcLevel();
}
bool rtMediaSessionMgr::defaultsSetVadEnabled(bool vad_enabled)
{
return MediaSessionMgr::defaultsSetVadEnabled(vad_enabled);
return MediaSessionMgr::defaultsSetVadEnabled(vad_enabled);
}
bool rtMediaSessionMgr::defaultsGetGetVadEnabled()
{
return MediaSessionMgr::defaultsGetGetVadEnabled();
return MediaSessionMgr::defaultsGetGetVadEnabled();
}
bool rtMediaSessionMgr::defaultsSetNoiseSuppEnabled(bool noise_supp_enabled)
{
return MediaSessionMgr::defaultsSetNoiseSuppEnabled(noise_supp_enabled);
return MediaSessionMgr::defaultsSetNoiseSuppEnabled(noise_supp_enabled);
}
bool rtMediaSessionMgr::defaultsGetNoiseSuppEnabled()
{
return MediaSessionMgr::defaultsGetNoiseSuppEnabled();
return MediaSessionMgr::defaultsGetNoiseSuppEnabled();
}
bool rtMediaSessionMgr::defaultsSetNoiseSuppLevel(int32 noise_supp_level)
{
return MediaSessionMgr::defaultsSetNoiseSuppLevel(noise_supp_level);
return MediaSessionMgr::defaultsSetNoiseSuppLevel(noise_supp_level);
}
int32 rtMediaSessionMgr::defaultsGetNoiseSuppLevel()
{
return MediaSessionMgr::defaultsGetNoiseSuppLevel();
return MediaSessionMgr::defaultsGetNoiseSuppLevel();
}
bool rtMediaSessionMgr::defaultsSet100relEnabled(bool _100rel_enabled)
{
return MediaSessionMgr::defaultsSet100relEnabled(_100rel_enabled);
return MediaSessionMgr::defaultsSet100relEnabled(_100rel_enabled);
}
bool rtMediaSessionMgr::defaultsGet100relEnabled()
{
return MediaSessionMgr::defaultsGet100relEnabled();
return MediaSessionMgr::defaultsGet100relEnabled();
}
bool rtMediaSessionMgr::defaultsSetScreenSize(int32 sx, int32 sy)
{
return MediaSessionMgr::defaultsSetScreenSize(sx, sy);
return MediaSessionMgr::defaultsSetScreenSize(sx, sy);
}
bool rtMediaSessionMgr::defaultsSetAudioGain(int32 producer_gain, int32 consumer_gain)
{
return MediaSessionMgr::defaultsSetAudioGain(producer_gain, consumer_gain);
return MediaSessionMgr::defaultsSetAudioGain(producer_gain, consumer_gain);
}
bool rtMediaSessionMgr::defaultsSetRtpPortRange(uint16 range_start, uint16 range_stop)
{
return MediaSessionMgr::defaultsSetRtpPortRange(range_start, range_stop);
return MediaSessionMgr::defaultsSetRtpPortRange(range_start, range_stop);
}
bool rtMediaSessionMgr::defaultsSetRtpSymetricEnabled(bool enabled)
{
return MediaSessionMgr::defaultsSetRtpSymetricEnabled(enabled);
return MediaSessionMgr::defaultsSetRtpSymetricEnabled(enabled);
}
bool rtMediaSessionMgr::defaultsSetMediaType(enum class rt_twrap_media_type_t media_type)
{
return MediaSessionMgr::defaultsSetMediaType((twrap_media_type_t) media_type);
return MediaSessionMgr::defaultsSetMediaType((twrap_media_type_t) media_type);
}
bool rtMediaSessionMgr::defaultsSetVolume(int32 volume)
{
return MediaSessionMgr::defaultsSetVolume(volume);
return MediaSessionMgr::defaultsSetVolume(volume);
}
int32 rtMediaSessionMgr::defaultsGetVolume()
{
return MediaSessionMgr::defaultsGetVolume();
return MediaSessionMgr::defaultsGetVolume();
}
bool rtMediaSessionMgr::defaultsSetInviteSessionTimers(int32 timeout, Platform::String^ refresher)
{
return MediaSessionMgr::defaultsSetInviteSessionTimers(timeout, rtString::toUtf8(refresher).data());
return MediaSessionMgr::defaultsSetInviteSessionTimers(timeout, rtString::toUtf8(refresher).data());
}
bool rtMediaSessionMgr::defaultsSetSRtpMode(enum class rt_tmedia_srtp_mode_t mode)
{
return MediaSessionMgr::defaultsSetSRtpMode((tmedia_srtp_mode_t) mode);
return MediaSessionMgr::defaultsSetSRtpMode((tmedia_srtp_mode_t) mode);
}
enum class rt_tmedia_srtp_mode_t rtMediaSessionMgr::defaultsGetSRtpMode()
{
return (rt_tmedia_srtp_mode_t)MediaSessionMgr::defaultsGetSRtpMode();
return (rt_tmedia_srtp_mode_t)MediaSessionMgr::defaultsGetSRtpMode();
}
bool rtMediaSessionMgr::defaultsSetSRtpType(enum class rt_tmedia_srtp_type_t srtp_type)
{
return MediaSessionMgr::defaultsSetSRtpType((tmedia_srtp_type_t) srtp_type);
return MediaSessionMgr::defaultsSetSRtpType((tmedia_srtp_type_t) srtp_type);
}
enum class rt_tmedia_srtp_type_t rtMediaSessionMgr::defaultsGetSRtpType()
{
return (rt_tmedia_srtp_type_t)MediaSessionMgr::defaultsGetSRtpType();
return (rt_tmedia_srtp_type_t)MediaSessionMgr::defaultsGetSRtpType();
}
bool rtMediaSessionMgr::defaultsSetRtcpEnabled(bool enabled)
{
return MediaSessionMgr::defaultsSetRtcpEnabled(enabled);
return MediaSessionMgr::defaultsSetRtcpEnabled(enabled);
}
bool rtMediaSessionMgr::defaultsGetRtcpEnabled()
{
return MediaSessionMgr::defaultsGetRtcpEnabled();
return MediaSessionMgr::defaultsGetRtcpEnabled();
}
bool rtMediaSessionMgr::defaultsSetRtcpMuxEnabled(bool enabled)
{
return MediaSessionMgr::defaultsSetRtcpMuxEnabled(enabled);
return MediaSessionMgr::defaultsSetRtcpMuxEnabled(enabled);
}
bool rtMediaSessionMgr::defaultsGetRtcpMuxEnabled()
{
return MediaSessionMgr::defaultsGetRtcpMuxEnabled();
return MediaSessionMgr::defaultsGetRtcpMuxEnabled();
}
bool rtMediaSessionMgr::defaultsSetIceEnabled(bool ice_enabled)
{
return MediaSessionMgr::defaultsSetIceEnabled(ice_enabled);
return MediaSessionMgr::defaultsSetIceEnabled(ice_enabled);
}
bool rtMediaSessionMgr::defaultsSetByPassEncoding(bool enabled)
{
return MediaSessionMgr::defaultsSetByPassEncoding(enabled);
return MediaSessionMgr::defaultsSetByPassEncoding(enabled);
}
bool rtMediaSessionMgr::defaultsGetByPassEncoding()
{
return MediaSessionMgr::defaultsGetByPassEncoding();
return MediaSessionMgr::defaultsGetByPassEncoding();
}
bool rtMediaSessionMgr::defaultsSetByPassDecoding(bool enabled)
{
return MediaSessionMgr::defaultsSetByPassDecoding(enabled);
return MediaSessionMgr::defaultsSetByPassDecoding(enabled);
}
bool rtMediaSessionMgr::defaultsGetByPassDecoding()
{
return MediaSessionMgr::defaultsGetByPassDecoding();
return MediaSessionMgr::defaultsGetByPassDecoding();
}
bool rtMediaSessionMgr::defaultsSetVideoJbEnabled(bool enabled)
{
return MediaSessionMgr::defaultsSetVideoJbEnabled(enabled);
return MediaSessionMgr::defaultsSetVideoJbEnabled(enabled);
}
bool rtMediaSessionMgr::defaultsGetVideoJbEnabled()
{
return MediaSessionMgr::defaultsGetVideoJbEnabled();
return MediaSessionMgr::defaultsGetVideoJbEnabled();
}
bool rtMediaSessionMgr::defaultsSetRtpBuffSize(unsigned buffSize)
{
return MediaSessionMgr::defaultsSetRtpBuffSize(buffSize);
return MediaSessionMgr::defaultsSetRtpBuffSize(buffSize);
}
unsigned rtMediaSessionMgr::defaultsGetRtpBuffSize()
{
return MediaSessionMgr::defaultsGetRtpBuffSize();
return MediaSessionMgr::defaultsGetRtpBuffSize();
}
bool rtMediaSessionMgr::defaultsSetAvpfTail(unsigned tail_min, unsigned tail_max)
{
return MediaSessionMgr::defaultsSetAvpfTail(tail_min, tail_max);
return MediaSessionMgr::defaultsSetAvpfTail(tail_min, tail_max);
}

View File

@ -35,103 +35,101 @@ using namespace std;
rtMsrpMessage::rtMsrpMessage(struct tmsrp_message_s *message)
{
m_pMsrpMessage= new MsrpMessage(message);
m_pMsrpMessage= new MsrpMessage(message);
}
rtMsrpMessage::~rtMsrpMessage()
{
rtSafeDelete(m_pMsrpMessage);
rtSafeDelete(m_pMsrpMessage);
}
bool rtMsrpMessage::isRequest()
{
return m_pMsrpMessage->isRequest();
return m_pMsrpMessage->isRequest();
}
short rtMsrpMessage::getCode()
{
return m_pMsrpMessage->getCode();
return m_pMsrpMessage->getCode();
}
String^ rtMsrpMessage::getPhrase()
{
return rtString::toString(m_pMsrpMessage->getPhrase());
return rtString::toString(m_pMsrpMessage->getPhrase());
}
rt_tmsrp_request_type_t rtMsrpMessage::getRequestType()
{
return (rt_tmsrp_request_type_t)m_pMsrpMessage->getRequestType();
return (rt_tmsrp_request_type_t)m_pMsrpMessage->getRequestType();
}
#if COM_VISIBLE
rtMsrpByteRange^ rtMsrpMessage::getByteRange()
{
int64_t _start = -1, _end = -1, _total = -1;
m_pMsrpMessage->getByteRange(&_start, &_end, &_total);
return ref new rtMsrpByteRange(_start, _end, _total);
int64_t _start = -1, _end = -1, _total = -1;
m_pMsrpMessage->getByteRange(&_start, &_end, &_total);
return ref new rtMsrpByteRange(_start, _end, _total);
}
#else
void rtMsrpMessage::getByteRange(IntPtr start, IntPtr end, IntPtr total)
{
int64_t _start = -1, _end = -1, _total = -1;
m_pMsrpMessage->getByteRange(&_start, &_end, &_total);
// IntPtr is 32bit or 64bit -> 32 to be sure not memory errors will raise
*((int32_t*)(void*)start) = (int32_t)_start;
*((int32_t*)(void*)end) = (int32_t)_end;
*((int32_t*)(void*)total) = (int32_t)_total;
int64_t _start = -1, _end = -1, _total = -1;
m_pMsrpMessage->getByteRange(&_start, &_end, &_total);
// IntPtr is 32bit or 64bit -> 32 to be sure not memory errors will raise
*((int32_t*)(void*)start) = (int32_t)_start;
*((int32_t*)(void*)end) = (int32_t)_end;
*((int32_t*)(void*)total) = (int32_t)_total;
}
#endif /* COM_VISIBLE */
bool rtMsrpMessage::isLastChunck()
{
return m_pMsrpMessage->isLastChunck();
return m_pMsrpMessage->isLastChunck();
}
bool rtMsrpMessage::isFirstChunck()
{
return m_pMsrpMessage->isFirstChunck();
return m_pMsrpMessage->isFirstChunck();
}
bool rtMsrpMessage::isSuccessReport()
{
return m_pMsrpMessage->isSuccessReport();
return m_pMsrpMessage->isSuccessReport();
}
String^ rtMsrpMessage::getMsrpHeaderValue(String^ name)
{
return rtString::toString(m_pMsrpMessage->getMsrpHeaderValue(rtString::toUtf8(name).data()));
return rtString::toString(m_pMsrpMessage->getMsrpHeaderValue(rtString::toUtf8(name).data()));
}
String^ rtMsrpMessage::getMsrpHeaderParamValue(String^ name, String^ param)
{
return rtString::toString(m_pMsrpMessage->getMsrpHeaderParamValue(rtString::toUtf8(name).data(), rtString::toUtf8(param).data()));
return rtString::toString(m_pMsrpMessage->getMsrpHeaderParamValue(rtString::toUtf8(name).data(), rtString::toUtf8(param).data()));
}
unsigned rtMsrpMessage::getMsrpContentLength()
{
return m_pMsrpMessage->getMsrpContentLength();
return m_pMsrpMessage->getMsrpContentLength();
}
#if COM_VISIBLE
String^ rtMsrpMessage::getMsrpContent(unsigned maxsize)
{
if(maxsize)
{
void* _s = calloc(maxsize + 1, 1);
if(_s)
{
unsigned len = m_pMsrpMessage->getMsrpContent(_s, maxsize);
String^ s = rtString::toString((const char*)_s);
free(_s);
return s;
}
}
return nullptr;
if(maxsize) {
void* _s = calloc(maxsize + 1, 1);
if(_s) {
unsigned len = m_pMsrpMessage->getMsrpContent(_s, maxsize);
String^ s = rtString::toString((const char*)_s);
free(_s);
return s;
}
}
return nullptr;
}
#else
unsigned rtMsrpMessage::getMsrpContent(IntPtr output, unsigned maxsize)
{
return m_pMsrpMessage->getMsrpContent((void*)output, maxsize);
return m_pMsrpMessage->getMsrpContent((void*)output, maxsize);
}
#endif /* COM_VISIBLE */
@ -142,37 +140,35 @@ unsigned rtMsrpMessage::getMsrpContent(IntPtr output, unsigned maxsize)
rtMsrpEvent::rtMsrpEvent(const struct tmsrp_event_s *event)
{
m_pMsrpEvent = new MsrpEvent(event);
m_pMsrpEvent = new MsrpEvent(event);
}
rtMsrpEvent::~rtMsrpEvent()
{
rtSafeDelete(m_pMsrpEvent);
rtSafeDelete(m_pMsrpEvent);
}
rt_tmsrp_event_type_t rtMsrpEvent::getType()
{
return (rt_tmsrp_event_type_t)m_pMsrpEvent->getType();
return (rt_tmsrp_event_type_t)m_pMsrpEvent->getType();
}
rtMsrpSession^ rtMsrpEvent::getSipSession()
{
if(m_pMsrpEvent->getSipSession())
{
assert(0); // FIXME: Not implemented
return nullptr;
// return ref new rtMsrpSession(m_pMsrpEvent->getSipSession()->getWrappedSession());
}
return nullptr;
if(m_pMsrpEvent->getSipSession()) {
assert(0); // FIXME: Not implemented
return nullptr;
// return ref new rtMsrpSession(m_pMsrpEvent->getSipSession()->getWrappedSession());
}
return nullptr;
}
rtMsrpMessage^ rtMsrpEvent::getMessage()
{
if(m_pMsrpEvent->getMessage())
{
return ref new rtMsrpMessage(const_cast<struct tmsrp_message_s *>(const_cast<MsrpMessage*>(m_pMsrpEvent->getMessage())->getWrappedMsrpMessage()));
}
return nullptr;
if(m_pMsrpEvent->getMessage()) {
return ref new rtMsrpMessage(const_cast<struct tmsrp_message_s *>(const_cast<MsrpMessage*>(m_pMsrpEvent->getMessage())->getWrappedMsrpMessage()));
}
return nullptr;
}
//
@ -181,14 +177,13 @@ rtMsrpMessage^ rtMsrpEvent::getMessage()
rtMsrpCallback::rtMsrpCallback(rtIMsrpCallback^ pI)
{
m_pI = pI;
m_pCallback = new MsrpCallback();
m_pI = pI;
m_pCallback = new MsrpCallback();
}
rtMsrpCallback::~rtMsrpCallback()
{
rtSafeDelete(m_pCallback);
rtSafeDelete(m_pCallback);
}

View File

@ -28,108 +28,89 @@ using namespace std;
class SipCallbackProxy : public SipCallback
{
public:
SipCallbackProxy(rtSipCallback^ rtCallback)
{
m_pCallback = rtCallback;
}
SipCallbackProxy(rtSipCallback^ rtCallback) {
m_pCallback = rtCallback;
}
virtual int OnDialogEvent(const DialogEvent* e) override
{
if(e && m_pCallback && m_pCallback->m_pI)
{
return m_pCallback->m_pI->OnDialogEvent(ref new rtDialogEvent(const_cast<tsip_event_t*>(const_cast<DialogEvent*>(e)->getWrappedEvent())));
}
return 0;
}
virtual int OnDialogEvent(const DialogEvent* e) override {
if(e && m_pCallback && m_pCallback->m_pI) {
return m_pCallback->m_pI->OnDialogEvent(ref new rtDialogEvent(const_cast<tsip_event_t*>(const_cast<DialogEvent*>(e)->getWrappedEvent())));
}
return 0;
}
virtual int OnStackEvent(const StackEvent* e) override
{
if(e && m_pCallback && m_pCallback->m_pI)
{
return m_pCallback->m_pI->OnStackEvent(ref new rtStackEvent(const_cast<tsip_event_t*>(const_cast<StackEvent*>(e)->getWrappedEvent())));
}
return 0;
}
virtual int OnStackEvent(const StackEvent* e) override {
if(e && m_pCallback && m_pCallback->m_pI) {
return m_pCallback->m_pI->OnStackEvent(ref new rtStackEvent(const_cast<tsip_event_t*>(const_cast<StackEvent*>(e)->getWrappedEvent())));
}
return 0;
}
virtual int OnInviteEvent(const InviteEvent* e) override
{
if(e && m_pCallback && m_pCallback->m_pI)
{
return m_pCallback->m_pI->OnInviteEvent(ref new rtInviteEvent(const_cast<tsip_event_t*>(const_cast<InviteEvent*>(e)->getWrappedEvent())));
}
return 0;
}
virtual int OnInviteEvent(const InviteEvent* e) override {
if(e && m_pCallback && m_pCallback->m_pI) {
return m_pCallback->m_pI->OnInviteEvent(ref new rtInviteEvent(const_cast<tsip_event_t*>(const_cast<InviteEvent*>(e)->getWrappedEvent())));
}
return 0;
}
virtual int OnMessagingEvent(const MessagingEvent* e) override
{
if(e && m_pCallback && m_pCallback->m_pI)
{
return m_pCallback->m_pI->OnMessagingEvent(ref new rtMessagingEvent(const_cast<tsip_event_t*>(const_cast<MessagingEvent*>(e)->getWrappedEvent())));
}
return 0;
}
virtual int OnMessagingEvent(const MessagingEvent* e) override {
if(e && m_pCallback && m_pCallback->m_pI) {
return m_pCallback->m_pI->OnMessagingEvent(ref new rtMessagingEvent(const_cast<tsip_event_t*>(const_cast<MessagingEvent*>(e)->getWrappedEvent())));
}
return 0;
}
virtual int OnInfoEvent(const InfoEvent* e) override
{
if(m_pCallback && m_pCallback->m_pI)
{
return m_pCallback->m_pI->OnInfoEvent(ref new rtInfoEvent(const_cast<tsip_event_t*>(const_cast<InfoEvent*>(e)->getWrappedEvent())));
}
return 0;
}
virtual int OnInfoEvent(const InfoEvent* e) override {
if(m_pCallback && m_pCallback->m_pI) {
return m_pCallback->m_pI->OnInfoEvent(ref new rtInfoEvent(const_cast<tsip_event_t*>(const_cast<InfoEvent*>(e)->getWrappedEvent())));
}
return 0;
}
virtual int OnOptionsEvent(const OptionsEvent* e) override
{
if(e && m_pCallback && m_pCallback->m_pI)
{
return m_pCallback->m_pI->OnOptionsEvent(ref new rtOptionsEvent(const_cast<tsip_event_t*>(const_cast<OptionsEvent*>(e)->getWrappedEvent())));
}
return 0;
}
virtual int OnOptionsEvent(const OptionsEvent* e) override {
if(e && m_pCallback && m_pCallback->m_pI) {
return m_pCallback->m_pI->OnOptionsEvent(ref new rtOptionsEvent(const_cast<tsip_event_t*>(const_cast<OptionsEvent*>(e)->getWrappedEvent())));
}
return 0;
}
virtual int OnPublicationEvent(const PublicationEvent* e) override
{
if(e && m_pCallback && m_pCallback->m_pI)
{
return m_pCallback->m_pI->OnPublicationEvent(ref new rtPublicationEvent(const_cast<tsip_event_t*>(const_cast<PublicationEvent*>(e)->getWrappedEvent())));
}
return 0;
}
virtual int OnPublicationEvent(const PublicationEvent* e) override {
if(e && m_pCallback && m_pCallback->m_pI) {
return m_pCallback->m_pI->OnPublicationEvent(ref new rtPublicationEvent(const_cast<tsip_event_t*>(const_cast<PublicationEvent*>(e)->getWrappedEvent())));
}
return 0;
}
virtual int OnRegistrationEvent(const RegistrationEvent* e) override
{
if(m_pCallback && m_pCallback->m_pI)
{
return m_pCallback->m_pI->OnRegistrationEvent(ref new rtRegistrationEvent(const_cast<tsip_event_t*>(const_cast<RegistrationEvent*>(e)->getWrappedEvent())));
}
return 0;
}
virtual int OnRegistrationEvent(const RegistrationEvent* e) override {
if(m_pCallback && m_pCallback->m_pI) {
return m_pCallback->m_pI->OnRegistrationEvent(ref new rtRegistrationEvent(const_cast<tsip_event_t*>(const_cast<RegistrationEvent*>(e)->getWrappedEvent())));
}
return 0;
}
virtual int OnSubscriptionEvent(const SubscriptionEvent* e) override
{
if(e && m_pCallback && m_pCallback->m_pI)
{
return m_pCallback->m_pI->OnSubscriptionEvent(ref new rtSubscriptionEvent(const_cast<tsip_event_t*>(const_cast<SubscriptionEvent*>(e)->getWrappedEvent())));
}
return 0;
}
virtual int OnSubscriptionEvent(const SubscriptionEvent* e) override {
if(e && m_pCallback && m_pCallback->m_pI) {
return m_pCallback->m_pI->OnSubscriptionEvent(ref new rtSubscriptionEvent(const_cast<tsip_event_t*>(const_cast<SubscriptionEvent*>(e)->getWrappedEvent())));
}
return 0;
}
private:
rtSipCallback^ m_pCallback;
rtSipCallback^ m_pCallback;
};
rtSipCallback::rtSipCallback(rtISipCallback^ pI)
{
m_pI = pI;
m_pCallback = new SipCallbackProxy(this);
m_pI = pI;
m_pCallback = new SipCallbackProxy(this);
}
rtSipCallback::~rtSipCallback()
{
rtSafeDelete(m_pCallback);
rtSafeDelete(m_pCallback);
}
const SipCallback* rtSipCallback::getWrappedCallback()
{
return dynamic_cast<const SipCallback*>(m_pCallback);
return dynamic_cast<const SipCallback*>(m_pCallback);
}

View File

@ -55,12 +55,12 @@ rtISipEvent_Implement(rtDialogEvent);
rtDialogEvent::rtDialogEvent(const struct tsip_event_s *e)
{
m_pEvent = new DialogEvent(e);
m_pEvent = new DialogEvent(e);
}
rtDialogEvent::~rtDialogEvent()
{
rtSafeDelete(m_pEvent);
rtSafeDelete(m_pEvent);
}
@ -69,36 +69,36 @@ rtISipEvent_Implement(rtStackEvent);
rtStackEvent::rtStackEvent(const struct tsip_event_s *e)
{
m_pEvent = new StackEvent(e);
m_pEvent = new StackEvent(e);
}
rtStackEvent::~rtStackEvent()
{
rtSafeDelete(m_pEvent);
rtSafeDelete(m_pEvent);
}
/* ======================== rtInviteEvent ========================*/
/* ======================== rtInviteEvent ========================*/
rtISipEvent_Implement(rtInviteEvent);
rtInviteEvent::rtInviteEvent(const struct tsip_event_s *e)
{
m_pEvent = new InviteEvent(e);
m_pEvent = new InviteEvent(e);
}
rtInviteEvent::~rtInviteEvent()
{
rtSafeDelete(m_pEvent);
rtSafeDelete(m_pEvent);
}
rt_tsip_invite_event_type_t rtInviteEvent::getType()
{
return (rt_tsip_invite_event_type_t)m_pEvent->getType();
return (rt_tsip_invite_event_type_t)m_pEvent->getType();
}
rt_twrap_media_type_t rtInviteEvent::getMediaType()
{
return (rt_twrap_media_type_t)m_pEvent->getMediaType();
return (rt_twrap_media_type_t)m_pEvent->getMediaType();
}
rt_getSession_Implement(Invite);
@ -110,18 +110,18 @@ rtISipEvent_Implement(rtMessagingEvent);
rtMessagingEvent::rtMessagingEvent(const struct tsip_event_s *e)
{
m_pEvent = new MessagingEvent(e);
m_pEvent = new MessagingEvent(e);
}
rtMessagingEvent::~rtMessagingEvent()
{
rtSafeDelete(m_pEvent);
rtSafeDelete(m_pEvent);
}
rt_tsip_message_event_type_t rtMessagingEvent::getType()
{
return (rt_tsip_message_event_type_t)m_pEvent->getType();
return (rt_tsip_message_event_type_t)m_pEvent->getType();
}
rt_getSession_Implement(Messaging);
@ -133,17 +133,17 @@ rtISipEvent_Implement(rtInfoEvent);
rtInfoEvent::rtInfoEvent(const struct tsip_event_s *e)
{
m_pEvent = new InfoEvent(e);
m_pEvent = new InfoEvent(e);
}
rtInfoEvent::~rtInfoEvent()
{
rtSafeDelete(m_pEvent);
rtSafeDelete(m_pEvent);
}
rt_tsip_info_event_type_t rtInfoEvent::getType()
{
return (rt_tsip_info_event_type_t)m_pEvent->getType();
return (rt_tsip_info_event_type_t)m_pEvent->getType();
}
rt_getSession_Implement(Info);
@ -155,17 +155,17 @@ rtISipEvent_Implement(rtOptionsEvent);
rtOptionsEvent::rtOptionsEvent(const struct tsip_event_s *e)
{
m_pEvent = new OptionsEvent(e);
m_pEvent = new OptionsEvent(e);
}
rtOptionsEvent::~rtOptionsEvent()
{
rtSafeDelete(m_pEvent);
rtSafeDelete(m_pEvent);
}
rt_tsip_options_event_type_t rtOptionsEvent::getType()
{
return (rt_tsip_options_event_type_t)m_pEvent->getType();
return (rt_tsip_options_event_type_t)m_pEvent->getType();
}
rt_getSession_Implement(Options);
@ -177,17 +177,17 @@ rtISipEvent_Implement(rtPublicationEvent);
rtPublicationEvent::rtPublicationEvent(const struct tsip_event_s *e)
{
m_pEvent = new PublicationEvent(e);
m_pEvent = new PublicationEvent(e);
}
rtPublicationEvent::~rtPublicationEvent()
{
rtSafeDelete(m_pEvent);
rtSafeDelete(m_pEvent);
}
rt_tsip_publish_event_type_t rtPublicationEvent::getType()
{
return (rt_tsip_publish_event_type_t)m_pEvent->getType();
return (rt_tsip_publish_event_type_t)m_pEvent->getType();
}
rt_getSession_Implement(Publication);
@ -200,17 +200,17 @@ rtISipEvent_Implement(rtRegistrationEvent);
rtRegistrationEvent::rtRegistrationEvent(const struct tsip_event_s *e)
{
m_pEvent = new RegistrationEvent(e);
m_pEvent = new RegistrationEvent(e);
}
rtRegistrationEvent::~rtRegistrationEvent()
{
rtSafeDelete(m_pEvent);
rtSafeDelete(m_pEvent);
}
rt_tsip_register_event_type_t rtRegistrationEvent::getType()
{
return (rt_tsip_register_event_type_t)m_pEvent->getType();
return (rt_tsip_register_event_type_t)m_pEvent->getType();
}
rt_getSession_Implement(Registration);
@ -222,17 +222,17 @@ rtISipEvent_Implement(rtSubscriptionEvent);
rtSubscriptionEvent::rtSubscriptionEvent(const struct tsip_event_s *e)
{
m_pEvent = new SubscriptionEvent(e);
m_pEvent = new SubscriptionEvent(e);
}
rtSubscriptionEvent::~rtSubscriptionEvent()
{
rtSafeDelete(m_pEvent);
rtSafeDelete(m_pEvent);
}
rt_tsip_subscribe_event_type_t rtSubscriptionEvent::getType()
{
return (rt_tsip_subscribe_event_type_t)m_pEvent->getType();
return (rt_tsip_subscribe_event_type_t)m_pEvent->getType();
}
rt_getSession_Implement(Subscription);

View File

@ -29,52 +29,50 @@ using namespace std;
//
rtSdpMessage::rtSdpMessage()
:m_pSdpMessage(NULL)
:m_pSdpMessage(NULL)
{
}
rtSdpMessage::rtSdpMessage(struct tsdp_message_s *message)
{
m_pSdpMessage = new SdpMessage(message);
m_pSdpMessage = new SdpMessage(message);
}
rtSdpMessage::~rtSdpMessage()
{
rtSafeDelete(m_pSdpMessage);
rtSafeDelete(m_pSdpMessage);
}
String^ rtSdpMessage::getSdpHeaderValue(String^ media, String^ name, unsigned index)
{
if(m_pSdpMessage)
{
char * _str = m_pSdpMessage->getSdpHeaderValue
(rtString::toUtf8(media).data(),
rtString::toUtf8(media).data()[0],
index);
String^ str = rtString::toString(_str);
TSK_FREE(str);
return str;
}
return nullptr;
if(m_pSdpMessage) {
char * _str = m_pSdpMessage->getSdpHeaderValue
(rtString::toUtf8(media).data(),
rtString::toUtf8(media).data()[0],
index);
String^ str = rtString::toString(_str);
TSK_FREE(str);
return str;
}
return nullptr;
}
String^ rtSdpMessage::getSdpHeaderValue(String^ media, String^ name)
{
return getSdpHeaderValue(media, name, 0);
return getSdpHeaderValue(media, name, 0);
}
String^ rtSdpMessage::getSdpHeaderAValue(String^ media, String^ attributeName)
{
if(m_pSdpMessage)
{
char * _str = m_pSdpMessage->getSdpHeaderAValue
(rtString::toUtf8(media).data(),
rtString::toUtf8(attributeName).data());
String^ str = rtString::toString(_str);
TSK_FREE(str);
return str;
}
return nullptr;
if(m_pSdpMessage) {
char * _str = m_pSdpMessage->getSdpHeaderAValue
(rtString::toUtf8(media).data(),
rtString::toUtf8(attributeName).data());
String^ str = rtString::toString(_str);
TSK_FREE(str);
return str;
}
return nullptr;
}
//
@ -82,90 +80,88 @@ String^ rtSdpMessage::getSdpHeaderAValue(String^ media, String^ attributeName)
//
rtSipMessage::rtSipMessage()
:m_pSipMessage(NULL)
:m_pSipMessage(NULL)
{
}
rtSipMessage::rtSipMessage(struct tsip_message_s* message)
{
m_pSipMessage = new SipMessage(message);
m_pSipMessage = new SipMessage(message);
}
rtSipMessage::~rtSipMessage()
{
rtSafeDelete(m_pSipMessage);
rtSafeDelete(m_pSipMessage);
}
bool rtSipMessage::isResponse()
{
return m_pSipMessage ? m_pSipMessage->isResponse() : false;
return m_pSipMessage ? m_pSipMessage->isResponse() : false;
}
rt_tsip_request_type_t rtSipMessage::getRequestType()
{
return (rt_tsip_request_type_t)(m_pSipMessage ? m_pSipMessage->getRequestType() : 0);
return (rt_tsip_request_type_t)(m_pSipMessage ? m_pSipMessage->getRequestType() : 0);
}
short rtSipMessage::getResponseCode()
{
return m_pSipMessage ? m_pSipMessage->getResponseCode() : 0;
return m_pSipMessage ? m_pSipMessage->getResponseCode() : 0;
}
String^ rtSipMessage::getResponsePhrase()
{
return m_pSipMessage ? rtString::toString(m_pSipMessage->getResponsePhrase()) : nullptr;
return m_pSipMessage ? rtString::toString(m_pSipMessage->getResponsePhrase()) : nullptr;
}
String^ rtSipMessage::getSipHeaderValue(String^ name, unsigned index)
{
return m_pSipMessage ? rtString::toString(m_pSipMessage->getSipHeaderValue(rtString::toUtf8(name).data(), index)) : nullptr;
return m_pSipMessage ? rtString::toString(m_pSipMessage->getSipHeaderValue(rtString::toUtf8(name).data(), index)) : nullptr;
}
String^ rtSipMessage::getSipHeaderValue(String^ name)
{
return getSipHeaderValue(name, 0);
return getSipHeaderValue(name, 0);
}
String^ rtSipMessage::getSipHeaderParamValue(String^ name, String^ param, unsigned index)
{
return m_pSipMessage ? rtString::toString(m_pSipMessage->getSipHeaderParamValue(rtString::toUtf8(name).data(), rtString::toUtf8(param).data(), index)) : nullptr;
return m_pSipMessage ? rtString::toString(m_pSipMessage->getSipHeaderParamValue(rtString::toUtf8(name).data(), rtString::toUtf8(param).data(), index)) : nullptr;
}
String^ rtSipMessage::getSipHeaderParamValue(String^ name, String^ param)
{
return getSipHeaderParamValue(name, param, 0);
return getSipHeaderParamValue(name, param, 0);
}
unsigned rtSipMessage::getSipContentLength()
{
return m_pSipMessage ? m_pSipMessage->getSipContentLength() : 0;
return m_pSipMessage ? m_pSipMessage->getSipContentLength() : 0;
}
#if COM_VISIBLE
String^ rtSipMessage::getSipContent()
{
unsigned len = getSipContentLength();
if(len > 0)
{
void* data_ptr = calloc(len, 1);
if(data_ptr)
{
m_pSipMessage->getSipContent(data_ptr, len);
String^ s = rtString::toString((const char*)data_ptr);
free(data_ptr);
return s;
}
}
return nullptr;
unsigned len = getSipContentLength();
if(len > 0) {
void* data_ptr = calloc(len, 1);
if(data_ptr) {
m_pSipMessage->getSipContent(data_ptr, len);
String^ s = rtString::toString((const char*)data_ptr);
free(data_ptr);
return s;
}
}
return nullptr;
}
#else
unsigned rtSipMessage::getSipContent(IntPtr output, unsigned maxsize)
{
return m_pSipMessage ? m_pSipMessage->getSipContent((void*)output, maxsize) : 0;
return m_pSipMessage ? m_pSipMessage->getSipContent((void*)output, maxsize) : 0;
}
#endif
rtSdpMessage^ rtSipMessage::getSdpMessage()
{
return m_pSipMessage ? ref new rtSdpMessage(const_cast<struct tsdp_message_s *>(const_cast<SdpMessage*>(m_pSipMessage->getSdpMessage())->getWrappedSdpMessage())) : nullptr;
return m_pSipMessage ? ref new rtSdpMessage(const_cast<struct tsdp_message_s *>(const_cast<SdpMessage*>(m_pSipMessage->getSdpMessage())->getWrappedSdpMessage())) : nullptr;
}

View File

@ -31,24 +31,24 @@ 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);
m_pData = new T140CallbackData(data_type, data_ptr, data_size);
}
rtT140CallbackData::~rtT140CallbackData()
{
rtSafeDelete(m_pData);
rtSafeDelete(m_pData);
}
/* ======================== rtT140Callback ========================*/
rtT140Callback::rtT140Callback()
{
m_pCallback = new T140Callback();
m_pCallback = new T140Callback();
}
rtT140Callback::~rtT140Callback()
{
rtSafeDelete(m_pCallback);
rtSafeDelete(m_pCallback);
}
/* ======================== rtSipSession ========================*/
@ -56,17 +56,17 @@ rtISession_Implement(rtSipSession);
rtSipSession::rtSipSession(rtSipStack^ pStack)
{
m_pSipSession = new SipSession(const_cast<SipStack*>(pStack->getWrappedStack()));
m_pSipSession = new SipSession(const_cast<SipStack*>(pStack->getWrappedStack()));
}
rtSipSession::rtSipSession(SipStack* pStack, tsip_ssession_handle_t* pHandle)
{
m_pSipSession = new SipSession(pStack, pHandle);
m_pSipSession = new SipSession(pStack, pHandle);
}
rtSipSession::~rtSipSession()
{
rtSafeDelete(m_pSipSession);
rtSafeDelete(m_pSipSession);
}
@ -76,17 +76,17 @@ rtIInviteSession_Implement(rtInviteSession);
rtInviteSession::rtInviteSession(rtSipStack^ pStack)
{
m_pSipSession = new InviteSession(const_cast<SipStack*>(pStack->getWrappedStack()));
m_pSipSession = new InviteSession(const_cast<SipStack*>(pStack->getWrappedStack()));
}
rtInviteSession::rtInviteSession(SipStack* pStack, tsip_ssession_handle_t* pHandle)
{
m_pSipSession = new InviteSession(pStack, pHandle);
m_pSipSession = new InviteSession(pStack, pHandle);
}
rtInviteSession::~rtInviteSession()
{
rtSafeDelete(m_pSipSession);
rtSafeDelete(m_pSipSession);
}
@ -96,177 +96,177 @@ rtIInviteSession_Implement(rtCallSession);
rtCallSession::rtCallSession(rtSipStack^ pStack)
{
m_pSipSession = new CallSession(const_cast<SipStack*>(pStack->getWrappedStack()));
m_pSipSession = new CallSession(const_cast<SipStack*>(pStack->getWrappedStack()));
}
rtCallSession::rtCallSession(SipStack* pStack, tsip_ssession_handle_t* pHandle)
{
m_pSipSession = new CallSession(pStack, pHandle);
m_pSipSession = new CallSession(pStack, pHandle);
}
rtCallSession::~rtCallSession()
{
rtSafeDelete(m_pSipSession);
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);
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);
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);
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);
return call(remoteUri, media, nullptr);
}
bool rtCallSession::setSessionTimer(unsigned timeout, String^ refresher)
{
return m_pSipSession->setSessionTimer(timeout, rtString::toUtf8(refresher).data());
return m_pSipSession->setSessionTimer(timeout, rtString::toUtf8(refresher).data());
}
bool rtCallSession::set100rel(bool enabled)
{
return m_pSipSession->set100rel(enabled);
return m_pSipSession->set100rel(enabled);
}
bool rtCallSession::setRtcp(bool enabled)
{
return m_pSipSession->setRtcp(enabled);
return m_pSipSession->setRtcp(enabled);
}
bool rtCallSession::setRtcpMux(bool enabled)
{
return m_pSipSession->setRtcpMux(enabled);
return m_pSipSession->setRtcpMux(enabled);
}
bool rtCallSession::setICE(bool enabled)
{
return m_pSipSession->setICE(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);
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);
return m_pSipSession->setVideoFps(fps);
}
bool rtCallSession::setVideoBandwidthUploadMax(int32_t max)
{
return m_pSipSession->setVideoBandwidthUploadMax(max);
return m_pSipSession->setVideoBandwidthUploadMax(max);
}
bool rtCallSession::setVideoBandwidthDownloadMax(int32_t max)
{
return m_pSipSession->setVideoBandwidthDownloadMax(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);
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);
return m_pSipSession->hold(config ? config->getWrappedActionConfig() : tsk_null);
}
bool rtCallSession::hold()
{
return hold(nullptr);
return hold(nullptr);
}
bool rtCallSession::resume(rtActionConfig^ config)
{
return m_pSipSession->resume(config ? config->getWrappedActionConfig() : tsk_null);
return m_pSipSession->resume(config ? config->getWrappedActionConfig() : tsk_null);
}
bool rtCallSession::resume()
{
return resume(nullptr);
return resume(nullptr);
}
bool rtCallSession::transfer(String^ referToUriString, rtActionConfig^ config)
{
return m_pSipSession->transfer(rtString::toUtf8(referToUriString).data(), config ? config->getWrappedActionConfig() : tsk_null);
return m_pSipSession->transfer(rtString::toUtf8(referToUriString).data(), config ? config->getWrappedActionConfig() : tsk_null);
}
bool rtCallSession::transfer(String^ referToUriString)
{
return transfer(referToUriString, nullptr);
return transfer(referToUriString, nullptr);
}
bool rtCallSession::acceptTransfer(rtActionConfig^ config)
{
return m_pSipSession->acceptTransfer(config ? config->getWrappedActionConfig() : tsk_null);
return m_pSipSession->acceptTransfer(config ? config->getWrappedActionConfig() : tsk_null);
}
bool rtCallSession::acceptTransfer()
{
return acceptTransfer(nullptr);
return acceptTransfer(nullptr);
}
bool rtCallSession::rejectTransfer(rtActionConfig^ config)
{
return m_pSipSession->rejectTransfer(config ? config->getWrappedActionConfig() : tsk_null);
return m_pSipSession->rejectTransfer(config ? config->getWrappedActionConfig() : tsk_null);
}
bool rtCallSession::rejectTransfer()
{
return rejectTransfer(nullptr);
return rejectTransfer(nullptr);
}
bool rtCallSession::sendDTMF(int number)
{
return m_pSipSession->sendDTMF(number);
return m_pSipSession->sendDTMF(number);
}
unsigned rtCallSession::getSessionTransferId()
{
return m_pSipSession->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());
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);
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
return sendT140Data(data_type, nullptr
#if !COM_VISIBLE
, 0
, 0
#endif
);
);
}
bool rtCallSession::setT140Callback(rtT140Callback^ pT140Callback)
{
return m_pSipSession->setT140Callback(const_cast<T140Callback*>(pT140Callback->getWrappedCallback()));
return m_pSipSession->setT140Callback(const_cast<T140Callback*>(pT140Callback->getWrappedCallback()));
}
@ -276,74 +276,73 @@ 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()));
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);
m_pSipSession = new MsrpSession(pStack, pHandle);
}
rtMsrpSession::~rtMsrpSession()
{
rtSafeDelete(m_pSipSession);
rtSafeDelete(m_pCallback);
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()));
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);
return m_pSipSession->callMsrp(rtString::toUtf8(remoteUriString).data(), config ? config->getWrappedActionConfig() : tsk_null);
}
bool rtMsrpSession::callMsrp(Platform::String^ remoteUriString)
{
return callMsrp(remoteUriString, nullptr);
return callMsrp(remoteUriString, nullptr);
}
bool rtMsrpSession::callMsrp(rtSipUri^ remoteUri, rtActionConfig^ config)
{
return m_pSipSession->callMsrp(remoteUri->getWrappedUri(), config ? config->getWrappedActionConfig() : tsk_null);
return m_pSipSession->callMsrp(remoteUri->getWrappedUri(), config ? config->getWrappedActionConfig() : tsk_null);
}
bool rtMsrpSession::callMsrp(rtSipUri^ remoteUri)
{
return callMsrp(remoteUri, nullptr);
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);
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);
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);
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);
return sendMessage(payload, len, nullptr);
}
#endif /* COM_VISIBLE */
@ -353,61 +352,61 @@ rtISession_Implement(rtMessagingSession);
rtMessagingSession::rtMessagingSession(SipStack* pStack, tsip_ssession_handle_t* pHandle)
{
m_pSipSession = new MessagingSession(pStack, pHandle);
m_pSipSession = new MessagingSession(pStack, pHandle);
}
rtMessagingSession::rtMessagingSession(rtSipStack^ pStack)
{
m_pSipSession = new MessagingSession(const_cast<SipStack*>(pStack->getWrappedStack()));
m_pSipSession = new MessagingSession(const_cast<SipStack*>(pStack->getWrappedStack()));
}
rtMessagingSession::~rtMessagingSession()
{
rtSafeDelete(m_pSipSession);
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);
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);
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);
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);
return send(payload, len, nullptr);
}
#endif
bool rtMessagingSession::accept(rtActionConfig^ config)
{
return m_pSipSession->accept(config ? config->getWrappedActionConfig() : tsk_null);
return m_pSipSession->accept(config ? config->getWrappedActionConfig() : tsk_null);
}
bool rtMessagingSession::accept()
{
return accept(nullptr);
return accept(nullptr);
}
bool rtMessagingSession::reject(rtActionConfig^ config)
{
return m_pSipSession->reject(config ? config->getWrappedActionConfig() : tsk_null);
return m_pSipSession->reject(config ? config->getWrappedActionConfig() : tsk_null);
}
bool rtMessagingSession::reject()
{
return reject(nullptr);
return reject(nullptr);
}
/* ======================== rtInfoSession ========================*/
@ -415,60 +414,60 @@ rtISession_Implement(rtInfoSession);
rtInfoSession::rtInfoSession(SipStack* pStack, tsip_ssession_handle_t* pHandle)
{
m_pSipSession = new InfoSession(pStack, pHandle);
m_pSipSession = new InfoSession(pStack, pHandle);
}
rtInfoSession::rtInfoSession(rtSipStack^ pStack)
{
m_pSipSession = new InfoSession(const_cast<SipStack*>(pStack->getWrappedStack()));
m_pSipSession = new InfoSession(const_cast<SipStack*>(pStack->getWrappedStack()));
}
rtInfoSession::~rtInfoSession()
{
rtSafeDelete(m_pSipSession);
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);
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);
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);
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);
return send(payload, len, nullptr);
}
#endif
bool rtInfoSession::accept(rtActionConfig^ config)
{
return m_pSipSession->accept(config ? config->getWrappedActionConfig() : tsk_null);
return m_pSipSession->accept(config ? config->getWrappedActionConfig() : tsk_null);
}
bool rtInfoSession::accept()
{
return accept(nullptr);
return accept(nullptr);
}
bool rtInfoSession::reject(rtActionConfig^ config)
{
return m_pSipSession->reject(config ? config->getWrappedActionConfig() : tsk_null);
return m_pSipSession->reject(config ? config->getWrappedActionConfig() : tsk_null);
}
bool rtInfoSession::reject()
{
return reject(nullptr);
return reject(nullptr);
}
@ -478,47 +477,47 @@ rtISession_Implement(rtOptionsSession);
rtOptionsSession::rtOptionsSession(SipStack* pStack, tsip_ssession_handle_t* pHandle)
{
m_pSipSession = new OptionsSession(pStack, pHandle);
m_pSipSession = new OptionsSession(pStack, pHandle);
}
rtOptionsSession::rtOptionsSession(rtSipStack^ pStack)
{
m_pSipSession = new OptionsSession(const_cast<SipStack*>(pStack->getWrappedStack()));
m_pSipSession = new OptionsSession(const_cast<SipStack*>(pStack->getWrappedStack()));
}
rtOptionsSession::~rtOptionsSession()
{
rtSafeDelete(m_pSipSession);
rtSafeDelete(m_pSipSession);
}
bool rtOptionsSession::send(rtActionConfig^ config)
{
return m_pSipSession->send(config ? config->getWrappedActionConfig() : tsk_null);
return m_pSipSession->send(config ? config->getWrappedActionConfig() : tsk_null);
}
bool rtOptionsSession::send()
{
return send(nullptr);
return send(nullptr);
}
bool rtOptionsSession::accept(rtActionConfig^ config)
{
return m_pSipSession->accept(config ? config->getWrappedActionConfig() : tsk_null);
return m_pSipSession->accept(config ? config->getWrappedActionConfig() : tsk_null);
}
bool rtOptionsSession::accept()
{
return accept(nullptr);
return accept(nullptr);
}
bool rtOptionsSession::reject(rtActionConfig^ config)
{
return m_pSipSession->reject(config ? config->getWrappedActionConfig() : tsk_null);
return m_pSipSession->reject(config ? config->getWrappedActionConfig() : tsk_null);
}
bool rtOptionsSession::reject()
{
return reject(nullptr);
return reject(nullptr);
}
@ -528,49 +527,49 @@ rtISession_Implement(rtPublicationSession);
rtPublicationSession::rtPublicationSession(rtSipStack^ pStack)
{
m_pSipSession = new PublicationSession(const_cast<SipStack*>(pStack->getWrappedStack()));
m_pSipSession = new PublicationSession(const_cast<SipStack*>(pStack->getWrappedStack()));
}
rtPublicationSession::rtPublicationSession(SipStack* pStack, tsip_ssession_handle_t* pHandle)
{
m_pSipSession = new PublicationSession(pStack, pHandle);
m_pSipSession = new PublicationSession(pStack, pHandle);
}
rtPublicationSession::~rtPublicationSession()
{
rtSafeDelete(m_pSipSession);
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);
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);
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);
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);
return publish(payload, len, nullptr);
}
#endif
bool rtPublicationSession::unPublish(rtActionConfig^ config)
{
return m_pSipSession->unPublish(config ? config->getWrappedActionConfig() : tsk_null);
return m_pSipSession->unPublish(config ? config->getWrappedActionConfig() : tsk_null);
}
bool rtPublicationSession::unPublish()
{
return unPublish(nullptr);
return unPublish(nullptr);
}
@ -579,57 +578,57 @@ rtISession_Implement(rtRegistrationSession);
rtRegistrationSession::rtRegistrationSession(SipStack* pStack, tsip_ssession_handle_t* pHandle)
{
m_pSipSession = new RegistrationSession(pStack, pHandle);
m_pSipSession = new RegistrationSession(pStack, pHandle);
}
rtRegistrationSession::rtRegistrationSession(rtSipStack^ pStack)
{
m_pSipSession = new RegistrationSession(const_cast<SipStack*>(pStack->getWrappedStack()));
m_pSipSession = new RegistrationSession(const_cast<SipStack*>(pStack->getWrappedStack()));
}
rtRegistrationSession::~rtRegistrationSession()
{
rtSafeDelete(m_pSipSession);
rtSafeDelete(m_pSipSession);
}
bool rtRegistrationSession::register_(rtActionConfig^ config)
{
return m_pSipSession->register_(config ? config->getWrappedActionConfig() : tsk_null);
return m_pSipSession->register_(config ? config->getWrappedActionConfig() : tsk_null);
}
bool rtRegistrationSession::register_()
{
return register_(nullptr);
return register_(nullptr);
}
bool rtRegistrationSession::unRegister(rtActionConfig^ config)
{
return m_pSipSession->unRegister(config ? config->getWrappedActionConfig() : tsk_null);
return m_pSipSession->unRegister(config ? config->getWrappedActionConfig() : tsk_null);
}
bool rtRegistrationSession::unRegister()
{
return unRegister(nullptr);
return unRegister(nullptr);
}
bool rtRegistrationSession::accept(rtActionConfig^ config)
{
return m_pSipSession->accept(config ? config->getWrappedActionConfig() : tsk_null);
return m_pSipSession->accept(config ? config->getWrappedActionConfig() : tsk_null);
}
bool rtRegistrationSession::accept()
{
return accept(nullptr);
return accept(nullptr);
}
bool rtRegistrationSession::reject(rtActionConfig^ config)
{
return m_pSipSession->reject(config ? config->getWrappedActionConfig() : tsk_null);
return m_pSipSession->reject(config ? config->getWrappedActionConfig() : tsk_null);
}
bool rtRegistrationSession::reject()
{
return reject(nullptr);
return reject(nullptr);
}
@ -638,25 +637,25 @@ rtISession_Implement(rtSubscriptionSession);
rtSubscriptionSession::rtSubscriptionSession(rtSipStack^ pStack)
{
m_pSipSession = new SubscriptionSession(const_cast<SipStack*>(pStack->getWrappedStack()));
m_pSipSession = new SubscriptionSession(const_cast<SipStack*>(pStack->getWrappedStack()));
}
rtSubscriptionSession::rtSubscriptionSession(SipStack* pStack, tsip_ssession_handle_t* pHandle)
{
m_pSipSession = new SubscriptionSession(pStack, pHandle);
m_pSipSession = new SubscriptionSession(pStack, pHandle);
}
rtSubscriptionSession::~rtSubscriptionSession()
{
rtSafeDelete(m_pSipSession);
rtSafeDelete(m_pSipSession);
}
bool rtSubscriptionSession::subscribe()
{
return m_pSipSession->subscribe();
return m_pSipSession->subscribe();
}
bool rtSubscriptionSession::unSubscribe()
{
return m_pSipSession->unSubscribe();
return m_pSipSession->unSubscribe();
}

View File

@ -30,360 +30,359 @@ using namespace std;
rtSipStack::rtSipStack(rtISipCallback^ callback, Platform::String^ realmUri, Platform::String^ impiString, Platform::String^ impuUri)
{
m_pSipCallback = ref new rtSipCallback(callback);
m_pSipStack = new SipStack(
const_cast<SipCallback*>(m_pSipCallback->getWrappedCallback()),
rtString::toUtf8(realmUri).data(),
rtString::toUtf8(impiString).data(),
rtString::toUtf8(impuUri).data()
);
m_pSipCallback = ref new rtSipCallback(callback);
m_pSipStack = new SipStack(
const_cast<SipCallback*>(m_pSipCallback->getWrappedCallback()),
rtString::toUtf8(realmUri).data(),
rtString::toUtf8(impiString).data(),
rtString::toUtf8(impuUri).data()
);
}
rtSipStack::~rtSipStack()
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
rtSafeDelete(m_pSipStack);
rtSafeDelete(m_pSipCallback);
rtSafeDelete(m_pDebugCallback);
rtSafeDelete(m_pSipStack);
rtSafeDelete(m_pSipCallback);
rtSafeDelete(m_pDebugCallback);
}
bool rtSipStack::start()
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return m_pSipStack->start();
return m_pSipStack->start();
}
bool rtSipStack::setDebugCallback(rtIDDebugCallback^ pCallback)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
m_pSipStack->setDebugCallback(tsk_null);
rtSafeDelete(m_pDebugCallback);
if(!pCallback)
{
return true;
}
m_pSipStack->setDebugCallback(tsk_null);
rtSafeDelete(m_pDebugCallback);
if(!pCallback) {
return true;
}
m_pDebugCallback = ref new rtDDebugCallback(pCallback);
return m_pSipStack->setDebugCallback(const_cast<DDebugCallback*>(m_pDebugCallback->getWrappedCallback()));
m_pDebugCallback = ref new rtDDebugCallback(pCallback);
return m_pSipStack->setDebugCallback(const_cast<DDebugCallback*>(m_pDebugCallback->getWrappedCallback()));
}
bool rtSipStack::setDisplayName(Platform::String^ display_name)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return m_pSipStack->setDisplayName(rtString::toUtf8(display_name).data());
return m_pSipStack->setDisplayName(rtString::toUtf8(display_name).data());
}
bool rtSipStack::setRealm(Platform::String^ realm_uri)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return m_pSipStack->setRealm(rtString::toUtf8(realm_uri).data());
return m_pSipStack->setRealm(rtString::toUtf8(realm_uri).data());
}
bool rtSipStack::setIMPI(Platform::String^ impi)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return m_pSipStack->setIMPI(rtString::toUtf8(impi).data());
return m_pSipStack->setIMPI(rtString::toUtf8(impi).data());
}
bool rtSipStack::setIMPU(Platform::String^ impu_uri)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return m_pSipStack->setIMPU(rtString::toUtf8(impu_uri).data());
return m_pSipStack->setIMPU(rtString::toUtf8(impu_uri).data());
}
bool rtSipStack::setPassword(Platform::String^ password)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return m_pSipStack->setPassword(rtString::toUtf8(password).data());
return m_pSipStack->setPassword(rtString::toUtf8(password).data());
}
bool rtSipStack::setAMF(Platform::String^ amf)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return m_pSipStack->setAMF(rtString::toUtf8(amf).data());
return m_pSipStack->setAMF(rtString::toUtf8(amf).data());
}
bool rtSipStack::setOperatorId(Platform::String^ opid)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return m_pSipStack->setOperatorId(rtString::toUtf8(opid).data());
return m_pSipStack->setOperatorId(rtString::toUtf8(opid).data());
}
bool rtSipStack::setProxyCSCF(Platform::String^ fqdn, unsigned short port, Platform::String^ transport, Platform::String^ ipversion)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return m_pSipStack->setProxyCSCF(
rtString::toUtf8(fqdn).data(),
port,
rtString::toUtf8(transport).data(),
rtString::toUtf8(ipversion).data()
);
return m_pSipStack->setProxyCSCF(
rtString::toUtf8(fqdn).data(),
port,
rtString::toUtf8(transport).data(),
rtString::toUtf8(ipversion).data()
);
}
bool rtSipStack::setLocalIP(Platform::String^ ip, Platform::String^ transport)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return m_pSipStack->setLocalIP(rtString::toUtf8(ip).data(), rtString::toUtf8(transport).data());
return m_pSipStack->setLocalIP(rtString::toUtf8(ip).data(), rtString::toUtf8(transport).data());
}
bool rtSipStack::setLocalIP(Platform::String^ ip)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return m_pSipStack->setLocalIP(rtString::toUtf8(ip).data());
return m_pSipStack->setLocalIP(rtString::toUtf8(ip).data());
}
bool rtSipStack::setLocalPort(unsigned short port, Platform::String^ transport)
{
return m_pSipStack->setLocalPort(port, rtString::toUtf8(transport).data());
return m_pSipStack->setLocalPort(port, rtString::toUtf8(transport).data());
}
bool rtSipStack::setLocalPort(unsigned short port)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return m_pSipStack->setLocalPort(port);
return m_pSipStack->setLocalPort(port);
}
bool rtSipStack::setEarlyIMS(bool enabled)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return m_pSipStack->setEarlyIMS(enabled);
return m_pSipStack->setEarlyIMS(enabled);
}
bool rtSipStack::addHeader(Platform::String^ name, Platform::String^ value)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return m_pSipStack->addHeader(rtString::toUtf8(name).data(), rtString::toUtf8(value).data());
return m_pSipStack->addHeader(rtString::toUtf8(name).data(), rtString::toUtf8(value).data());
}
bool rtSipStack::removeHeader(Platform::String^ name)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return m_pSipStack->removeHeader(rtString::toUtf8(name).data());
return m_pSipStack->removeHeader(rtString::toUtf8(name).data());
}
bool rtSipStack::addDnsServer(Platform::String^ ip)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return m_pSipStack->removeHeader(rtString::toUtf8(ip).data());
return m_pSipStack->removeHeader(rtString::toUtf8(ip).data());
}
bool rtSipStack::setDnsDiscovery(bool enabled)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return m_pSipStack->setDnsDiscovery(enabled);
return m_pSipStack->setDnsDiscovery(enabled);
}
bool rtSipStack::setAoR(Platform::String^ ip, int port)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return m_pSipStack->setAoR(rtString::toUtf8(ip).data(), port);
return m_pSipStack->setAoR(rtString::toUtf8(ip).data(), port);
}
bool rtSipStack::setSigCompParams(unsigned dms, unsigned sms, unsigned cpb, bool enablePresDict)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return m_pSipStack->setSigCompParams(dms, sms, cpb, enablePresDict);
return m_pSipStack->setSigCompParams(dms, sms, cpb, enablePresDict);
}
bool rtSipStack::addSigCompCompartment(Platform::String^ compId)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return m_pSipStack->addSigCompCompartment(rtString::toUtf8(compId).data());
return m_pSipStack->addSigCompCompartment(rtString::toUtf8(compId).data());
}
bool rtSipStack::removeSigCompCompartment(Platform::String^ compId)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return m_pSipStack->removeSigCompCompartment(rtString::toUtf8(compId).data());
return m_pSipStack->removeSigCompCompartment(rtString::toUtf8(compId).data());
}
bool rtSipStack::setSTUNServer(Platform::String^ ip, unsigned short port)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return m_pSipStack->setSTUNServer(rtString::toUtf8(ip).data(), port);
return m_pSipStack->setSTUNServer(rtString::toUtf8(ip).data(), port);
}
bool rtSipStack::setSTUNCred(Platform::String^ login, Platform::String^ password)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return m_pSipStack->setSTUNCred(rtString::toUtf8(login).data(), rtString::toUtf8(password).data());
return m_pSipStack->setSTUNCred(rtString::toUtf8(login).data(), rtString::toUtf8(password).data());
}
bool rtSipStack::setTLSSecAgree(bool enabled)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return m_pSipStack->setTLSSecAgree(enabled);
return m_pSipStack->setTLSSecAgree(enabled);
}
bool rtSipStack::setSSLCertificates(Platform::String^ privKey, Platform::String^ pubKey, Platform::String^ caKey, bool verify)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return m_pSipStack->setSSLCertificates(rtString::toUtf8(privKey).data(), rtString::toUtf8(pubKey).data(), rtString::toUtf8(caKey).data(), verify);
return m_pSipStack->setSSLCertificates(rtString::toUtf8(privKey).data(), rtString::toUtf8(pubKey).data(), rtString::toUtf8(caKey).data(), verify);
}
bool rtSipStack::setSSLCertificates(Platform::String^ privKey, Platform::String^ pubKey, Platform::String^ caKey)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return setSSLCertificates(privKey, pubKey, caKey, false);
return setSSLCertificates(privKey, pubKey, caKey, false);
}
bool rtSipStack::setIPSecSecAgree(bool enabled)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return m_pSipStack->setIPSecSecAgree(enabled);
return m_pSipStack->setIPSecSecAgree(enabled);
}
bool rtSipStack::setIPSecParameters(Platform::String^ algo, Platform::String^ ealgo, Platform::String^ mode, Platform::String^ proto)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return m_pSipStack->setIPSecParameters(rtString::toUtf8(algo).data(), rtString::toUtf8(ealgo).data(), rtString::toUtf8(mode).data(), rtString::toUtf8(proto).data());
return m_pSipStack->setIPSecParameters(rtString::toUtf8(algo).data(), rtString::toUtf8(ealgo).data(), rtString::toUtf8(mode).data(), rtString::toUtf8(proto).data());
}
Platform::String^ rtSipStack::dnsENUM(Platform::String^ service, Platform::String^ e164num, Platform::String^ domain)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return rtString::toString(m_pSipStack->dnsENUM(rtString::toUtf8(service).data(), rtString::toUtf8(e164num).data(), rtString::toUtf8(domain).data()));
return rtString::toString(m_pSipStack->dnsENUM(rtString::toUtf8(service).data(), rtString::toUtf8(e164num).data(), rtString::toUtf8(domain).data()));
}
#if COM_VISIBLE
rtDnsResult^ rtSipStack::dnsNaptrSrv(String^ domain, String^ service)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
unsigned short _port = 0;
String^ address = rtString::toString(m_pSipStack->dnsNaptrSrv(rtString::toUtf8(domain).data(), rtString::toUtf8(service).data(), &_port));
return ref new rtDnsResult(_port, address);
unsigned short _port = 0;
String^ address = rtString::toString(m_pSipStack->dnsNaptrSrv(rtString::toUtf8(domain).data(), rtString::toUtf8(service).data(), &_port));
return ref new rtDnsResult(_port, address);
}
rtDnsResult^ rtSipStack::dnsSrv(String^ service)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
unsigned short _port = 0;
String^ address = rtString::toString(m_pSipStack->dnsSrv(rtString::toUtf8(service).data(), &_port));
return ref new rtDnsResult(_port, address);
unsigned short _port = 0;
String^ address = rtString::toString(m_pSipStack->dnsSrv(rtString::toUtf8(service).data(), &_port));
return ref new rtDnsResult(_port, address);
}
String^ rtSipStack::getLocalIP(String^ protocol)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
char* _ip = m_pSipStack->getLocalIPnPort(rtString::toUtf8(protocol).data(), tsk_null);
String^ ip = rtString::toString(_ip);
TSK_FREE(_ip);
return ip;
char* _ip = m_pSipStack->getLocalIPnPort(rtString::toUtf8(protocol).data(), tsk_null);
String^ ip = rtString::toString(_ip);
TSK_FREE(_ip);
return ip;
}
uint16 rtSipStack::getLocalPort(String^ protocol)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
uint16 port = 0;
char* _ip = m_pSipStack->getLocalIPnPort(rtString::toUtf8(protocol).data(), &port);
TSK_FREE(_ip);
return port;
uint16 port = 0;
char* _ip = m_pSipStack->getLocalIPnPort(rtString::toUtf8(protocol).data(), &port);
TSK_FREE(_ip);
return port;
}
#else
String^ rtSipStack::dnsNaptrSrv(String^ domain, String^ service, IntPtr port)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return rtString::toString(m_pSipStack->dnsNaptrSrv(rtString::toUtf8(domain).data(), rtString::toUtf8(service).data(), ((unsigned short*)(void*)port)));
return rtString::toString(m_pSipStack->dnsNaptrSrv(rtString::toUtf8(domain).data(), rtString::toUtf8(service).data(), ((unsigned short*)(void*)port)));
}
String^ rtSipStack::dnsSrv(String^ service, IntPtr port)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return rtString::toString(m_pSipStack->dnsSrv(rtString::toUtf8(service).data(), ((unsigned short*)(void*)port)));
return rtString::toString(m_pSipStack->dnsSrv(rtString::toUtf8(service).data(), ((unsigned short*)(void*)port)));
}
Platform::String^ rtSipStack::getLocalIPnPort(String^ protocol, IntPtr port)
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
char* _ip = m_pSipStack->getLocalIPnPort(rtString::toUtf8(protocol).data(), ((unsigned short*)(void*)port));
String^ ip = rtString::toString();
TSK_FREE(_ip);
return ip;
char* _ip = m_pSipStack->getLocalIPnPort(rtString::toUtf8(protocol).data(), ((unsigned short*)(void*)port));
String^ ip = rtString::toString();
TSK_FREE(_ip);
return ip;
}
#endif /* COM_VISIBLE */
Platform::String^ rtSipStack::getPreferredIdentity()
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return rtString::toString(m_pSipStack->getPreferredIdentity());
return rtString::toString(m_pSipStack->getPreferredIdentity());
}
bool rtSipStack::isValid()
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return m_pSipStack->isValid();
return m_pSipStack->isValid();
}
bool rtSipStack::stop()
{
std::lock_guard<std::recursive_mutex> lock(mLock);
std::lock_guard<std::recursive_mutex> lock(mLock);
return m_pSipStack->stop();
return m_pSipStack->stop();
}
bool rtSipStack::initialize()
{
return SipStack::initialize();
return SipStack::initialize();
}
bool rtSipStack::deInitialize()
{
return SipStack::deInitialize();
return SipStack::deInitialize();
}
void rtSipStack::setCodecs(enum class rt_tdav_codec_id_t codecs)
{
return SipStack::setCodecs((tdav_codec_id_t) codecs);
return SipStack::setCodecs((tdav_codec_id_t) codecs);
}
bool rtSipStack::setCodecPriority(enum class rt_tdav_codec_id_t codec_id, int priority)
{
return SipStack::setCodecPriority((tdav_codec_id_t)codec_id, priority);
return SipStack::setCodecPriority((tdav_codec_id_t)codec_id, priority);
}
bool rtSipStack::isCodecSupported(enum class rt_tdav_codec_id_t codec_id)
{
return SipStack::isCodecSupported((tdav_codec_id_t) codec_id);
return SipStack::isCodecSupported((tdav_codec_id_t) codec_id);
}

View File

@ -27,24 +27,24 @@ using namespace std;
rtSipUri::rtSipUri(Platform::String^ uriString, Platform::String^ displayName)
{
m_pSipUri = new SipUri(
rtString::toUtf8(uriString).data(),
rtString::toUtf8(displayName).data());
m_pSipUri = new SipUri(
rtString::toUtf8(uriString).data(),
rtString::toUtf8(displayName).data());
}
rtSipUri::rtSipUri(Platform::String^ uriString)
{
m_pSipUri = new SipUri(rtString::toUtf8(uriString).data());
m_pSipUri = new SipUri(rtString::toUtf8(uriString).data());
}
rtSipUri::~rtSipUri()
{
rtSafeDelete(m_pSipUri);
rtSafeDelete(m_pSipUri);
}
bool rtSipUri::isValid(Platform::String^ uri)
{
return SipUri::isValid(rtString::toUtf8(uri).data());
return SipUri::isValid(rtString::toUtf8(uri).data());
}
// MIDL4069: Static members and instance members cannot have the same name on a runtime class. isValid
@ -55,49 +55,48 @@ bool rtSipUri::isValid_()
bool rtSipUri::isValid()
#endif
{
return (m_pSipUri && m_pSipUri->isValid());
return (m_pSipUri && m_pSipUri->isValid());
}
Platform::String^ rtSipUri::getScheme()
{
return m_pSipUri ? rtString::toString(m_pSipUri->getScheme()) : nullptr;
return m_pSipUri ? rtString::toString(m_pSipUri->getScheme()) : nullptr;
}
Platform::String^ rtSipUri::getHost()
{
return m_pSipUri ? rtString::toString(m_pSipUri->getHost()) : nullptr;
return m_pSipUri ? rtString::toString(m_pSipUri->getHost()) : nullptr;
}
unsigned short rtSipUri::getPort()
{
return m_pSipUri ? m_pSipUri->getPort() : 0;
return m_pSipUri ? m_pSipUri->getPort() : 0;
}
Platform::String^ rtSipUri::getUserName()
{
return m_pSipUri ? rtString::toString(m_pSipUri->getUserName()) : nullptr;
return m_pSipUri ? rtString::toString(m_pSipUri->getUserName()) : nullptr;
}
Platform::String^ rtSipUri::getPassword()
{
return m_pSipUri ? rtString::toString(m_pSipUri->getPassword()) : nullptr;
return m_pSipUri ? rtString::toString(m_pSipUri->getPassword()) : nullptr;
}
Platform::String^ rtSipUri::getDisplayName()
{
return m_pSipUri ? rtString::toString(m_pSipUri->getDisplayName()) : nullptr;
return m_pSipUri ? rtString::toString(m_pSipUri->getDisplayName()) : nullptr;
}
Platform::String^ rtSipUri::getParamValue(Platform::String^ name)
{
return m_pSipUri ? rtString::toString(m_pSipUri->getParamValue(rtString::toUtf8(name).data())) : nullptr;
return m_pSipUri ? rtString::toString(m_pSipUri->getParamValue(rtString::toUtf8(name).data())) : nullptr;
}
void rtSipUri::setDisplayName(Platform::String^ displayName)
{
if(m_pSipUri)
{
m_pSipUri->setDisplayName(rtString::toUtf8(displayName).data());
}
if(m_pSipUri) {
m_pSipUri->setDisplayName(rtString::toUtf8(displayName).data());
}
}

View File

@ -25,34 +25,28 @@ using namespace std;
vector<char> rtString::toUtf8(String^ str)
{
if(str != nullptr && !str->IsEmpty())
{
int len = WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, str->Data(), str->Length(), nullptr, 0, nullptr, nullptr);
if (len > 0)
{
vector<char> vec(len + 1);
if (WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, str->Data(), str->Length(), vec.data(), len, nullptr, nullptr) == len)
{
return std::move(vec);
}
}
}
if(str != nullptr && !str->IsEmpty()) {
int len = WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, str->Data(), str->Length(), nullptr, 0, nullptr, nullptr);
if (len > 0) {
vector<char> vec(len + 1);
if (WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, str->Data(), str->Length(), vec.data(), len, nullptr, nullptr) == len) {
return std::move(vec);
}
}
}
return std::move(vector<char>(0));
}
String^ rtString::toString(char const* str)
{
if(str)
{
int len = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, str, -1, nullptr, 0);
if (len > 0)
{
vector<wchar_t> vec(len);
if (MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, str, -1, vec.data(), len) == len)
{
return ref new String(vec.data());
}
}
}
return nullptr;
if(str) {
int len = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, str, -1, nullptr, 0);
if (len > 0) {
vector<wchar_t> vec(len);
if (MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, str, -1, vec.data(), len) == len) {
return ref new String(vec.data());
}
}
}
return nullptr;
}

View File

@ -29,93 +29,87 @@
#include "tsk_safeobj.h"
#include "tsk_debug.h"
typedef enum PLUGIN_INDEX_E
{
PLUGIN_INDEX_AUDIO_CONSUMER,
PLUGIN_INDEX_AUDIO_PRODUCER,
PLUGIN_INDEX_COUNT
typedef enum PLUGIN_INDEX_E {
PLUGIN_INDEX_AUDIO_CONSUMER,
PLUGIN_INDEX_AUDIO_PRODUCER,
PLUGIN_INDEX_COUNT
}
PLUGIN_INDEX_T;
int __plugin_get_def_count()
{
return PLUGIN_INDEX_COUNT;
return PLUGIN_INDEX_COUNT;
}
tsk_plugin_def_type_t __plugin_get_def_type_at(int index)
{
switch(index){
case PLUGIN_INDEX_AUDIO_CONSUMER: return tsk_plugin_def_type_consumer;
case PLUGIN_INDEX_AUDIO_PRODUCER: return tsk_plugin_def_type_producer;
default:
{
AUDIO_OPENSLES_DEBUG_ERROR("No plugin at index %d", index);
return tsk_plugin_def_type_none;
}
}
switch(index) {
case PLUGIN_INDEX_AUDIO_CONSUMER:
return tsk_plugin_def_type_consumer;
case PLUGIN_INDEX_AUDIO_PRODUCER:
return tsk_plugin_def_type_producer;
default: {
AUDIO_OPENSLES_DEBUG_ERROR("No plugin at index %d", index);
return tsk_plugin_def_type_none;
}
}
}
tsk_plugin_def_media_type_t __plugin_get_def_media_type_at(int index)
{
switch(index){
case PLUGIN_INDEX_AUDIO_CONSUMER:
case PLUGIN_INDEX_AUDIO_PRODUCER:
{
return tsk_plugin_def_media_type_audio;
}
default:
{
AUDIO_OPENSLES_DEBUG_ERROR("No plugin at index %d", index);
return tsk_plugin_def_media_type_none;
}
}
switch(index) {
case PLUGIN_INDEX_AUDIO_CONSUMER:
case PLUGIN_INDEX_AUDIO_PRODUCER: {
return tsk_plugin_def_media_type_audio;
}
default: {
AUDIO_OPENSLES_DEBUG_ERROR("No plugin at index %d", index);
return tsk_plugin_def_media_type_none;
}
}
}
tsk_plugin_def_ptr_const_t __plugin_get_def_at(int index)
{
switch(index){
case PLUGIN_INDEX_AUDIO_CONSUMER:
{
return audio_consumer_opensles_plugin_def_t;
}
case PLUGIN_INDEX_AUDIO_PRODUCER:
{
return audio_producer_opensles_plugin_def_t;
}
default:
{
AUDIO_OPENSLES_DEBUG_ERROR("No plugin at index %d", index);
return tsk_null;
}
}
switch(index) {
case PLUGIN_INDEX_AUDIO_CONSUMER: {
return audio_consumer_opensles_plugin_def_t;
}
case PLUGIN_INDEX_AUDIO_PRODUCER: {
return audio_producer_opensles_plugin_def_t;
}
default: {
AUDIO_OPENSLES_DEBUG_ERROR("No plugin at index %d", index);
return tsk_null;
}
}
}
//
// SLES AudioInstance
//
typedef struct audio_opensles_instance_s
{
TSK_DECLARE_OBJECT;
typedef struct audio_opensles_instance_s {
TSK_DECLARE_OBJECT;
uint64_t sessionId;
uint64_t sessionId;
bool isStarted;
bool isStarted;
bool isConsumerPrepared;
bool isConsumerStarted;
bool isProducerPrepared;
bool isProducerStarted;
bool isConsumerPrepared;
bool isConsumerStarted;
bool isProducerPrepared;
bool isProducerStarted;
bool isSpeakerAvailable;
bool isPlayoutAvailable;
bool isRecordingAvailable;
bool isSpeakerAvailable;
bool isPlayoutAvailable;
bool isRecordingAvailable;
SLAudioDevice* device;
SLAudioDeviceCallbackImpl* callback;
SLAudioDevice* device;
SLAudioDeviceCallbackImpl* callback;
TSK_DECLARE_SAFEOBJ;
TSK_DECLARE_SAFEOBJ;
}
audio_opensles_instance_t;
typedef tsk_list_t audio_opensles_instances_L_t;
@ -124,442 +118,442 @@ static audio_opensles_instances_L_t* __audioInstances = tsk_null;
static tsk_object_t* audio_opensles_instance_ctor(tsk_object_t * self, va_list * app)
{
audio_opensles_instance_t* audioInstance = (audio_opensles_instance_t*)self;
if(audioInstance){
tsk_safeobj_init(audioInstance);
}
return self;
audio_opensles_instance_t* audioInstance = (audio_opensles_instance_t*)self;
if(audioInstance) {
tsk_safeobj_init(audioInstance);
}
return self;
}
static tsk_object_t* audio_opensles_instance_dtor(tsk_object_t * self)
{
AUDIO_OPENSLES_DEBUG_INFO("Audio Instance destroyed");
audio_opensles_instance_t* audioInstance = (audio_opensles_instance_t*)self;
if(audioInstance){
AUDIO_OPENSLES_DEBUG_INFO("Audio Instance destroyed");
audio_opensles_instance_t* audioInstance = (audio_opensles_instance_t*)self;
if(audioInstance) {
tsk_safeobj_lock(audioInstance);
if(audioInstance->device){
audioInstance->device->SetCallback(NULL);
audioInstance->device->Terminate();
delete audioInstance->device;
audioInstance->device = tsk_null;
}
if(audioInstance->callback){
delete audioInstance->callback;
audioInstance->callback = tsk_null;
}
if(audioInstance->device) {
audioInstance->device->SetCallback(NULL);
audioInstance->device->Terminate();
delete audioInstance->device;
audioInstance->device = tsk_null;
}
if(audioInstance->callback) {
delete audioInstance->callback;
audioInstance->callback = tsk_null;
}
tsk_safeobj_unlock(audioInstance);
tsk_safeobj_deinit(audioInstance);
}
return self;
tsk_safeobj_deinit(audioInstance);
}
return self;
}
static int audio_opensles_instance_cmp(const tsk_object_t *_ai1, const tsk_object_t *_ai2)
{
return ((int)_ai1 - (int)_ai2);
return ((int)_ai1 - (int)_ai2);
}
static const tsk_object_def_t audio_opensles_instance_def_s =
{
sizeof(audio_opensles_instance_t),
audio_opensles_instance_ctor,
audio_opensles_instance_dtor,
audio_opensles_instance_cmp,
static const tsk_object_def_t audio_opensles_instance_def_s = {
sizeof(audio_opensles_instance_t),
audio_opensles_instance_ctor,
audio_opensles_instance_dtor,
audio_opensles_instance_cmp,
};
const tsk_object_def_t *audio_opensles_instance_def_t = &audio_opensles_instance_def_s;
audio_opensles_instance_handle_t* audio_opensles_instance_create(uint64_t sessionId)
{
audio_opensles_instance_t* audioInstance = tsk_null;
audio_opensles_instance_t* audioInstance = tsk_null;
// create list used to hold instances
if(!__audioInstances && !(__audioInstances = tsk_list_create())){
AUDIO_OPENSLES_DEBUG_ERROR("Failed to create new list");
return tsk_null;
}
// create list used to hold instances
if(!__audioInstances && !(__audioInstances = tsk_list_create())) {
AUDIO_OPENSLES_DEBUG_ERROR("Failed to create new list");
return tsk_null;
}
//= lock the list
tsk_list_lock(__audioInstances);
//= lock the list
tsk_list_lock(__audioInstances);
// find the instance from the list
const tsk_list_item_t* item;
tsk_list_foreach(item, __audioInstances){
if(((audio_opensles_instance_t*)item->data)->sessionId == sessionId){
audioInstance = (audio_opensles_instance_t*)tsk_object_ref(item->data);
break;
}
}
// find the instance from the list
const tsk_list_item_t* item;
tsk_list_foreach(item, __audioInstances) {
if(((audio_opensles_instance_t*)item->data)->sessionId == sessionId) {
audioInstance = (audio_opensles_instance_t*)tsk_object_ref(item->data);
break;
}
}
if(!audioInstance){
audio_opensles_instance_t* _audioInstance;
if(!(_audioInstance = (audio_opensles_instance_t*)tsk_object_new(&audio_opensles_instance_def_s))){
AUDIO_OPENSLES_DEBUG_ERROR("Failed to create new audio instance");
goto done;
}
if(!audioInstance) {
audio_opensles_instance_t* _audioInstance;
if(!(_audioInstance = (audio_opensles_instance_t*)tsk_object_new(&audio_opensles_instance_def_s))) {
AUDIO_OPENSLES_DEBUG_ERROR("Failed to create new audio instance");
goto done;
}
if(!(_audioInstance->device = new SLAudioDevice())){
AUDIO_OPENSLES_DEBUG_ERROR("Failed to create audio device");
TSK_OBJECT_SAFE_FREE(_audioInstance);
goto done;
}
if(!(_audioInstance->device = new SLAudioDevice())) {
AUDIO_OPENSLES_DEBUG_ERROR("Failed to create audio device");
TSK_OBJECT_SAFE_FREE(_audioInstance);
goto done;
}
if(!(_audioInstance->callback = new SLAudioDeviceCallbackImpl())){
AUDIO_OPENSLES_DEBUG_ERROR("Failed to create audio transport");
TSK_OBJECT_SAFE_FREE(_audioInstance);
goto done;
}
if((_audioInstance->device->SetCallback(_audioInstance->callback))){
AUDIO_OPENSLES_DEBUG_ERROR("AudioDeviceModule::RegisterAudioCallback() failed");
TSK_OBJECT_SAFE_FREE(_audioInstance);
goto done;
}
if(!(_audioInstance->callback = new SLAudioDeviceCallbackImpl())) {
AUDIO_OPENSLES_DEBUG_ERROR("Failed to create audio transport");
TSK_OBJECT_SAFE_FREE(_audioInstance);
goto done;
}
if((_audioInstance->device->SetCallback(_audioInstance->callback))) {
AUDIO_OPENSLES_DEBUG_ERROR("AudioDeviceModule::RegisterAudioCallback() failed");
TSK_OBJECT_SAFE_FREE(_audioInstance);
goto done;
}
if((_audioInstance->device->Init())){
AUDIO_OPENSLES_DEBUG_ERROR("AudioDeviceModule::Init() failed");
TSK_OBJECT_SAFE_FREE(_audioInstance);
goto done;
}
if((_audioInstance->device->Init())) {
AUDIO_OPENSLES_DEBUG_ERROR("AudioDeviceModule::Init() failed");
TSK_OBJECT_SAFE_FREE(_audioInstance);
goto done;
}
_audioInstance->sessionId = sessionId;
audioInstance = _audioInstance;
tsk_list_push_back_data(__audioInstances, (void**)&_audioInstance);
}
_audioInstance->sessionId = sessionId;
audioInstance = _audioInstance;
tsk_list_push_back_data(__audioInstances, (void**)&_audioInstance);
}
done:
//= unlock the list
tsk_list_unlock(__audioInstances);
//= unlock the list
tsk_list_unlock(__audioInstances);
return audioInstance;
return audioInstance;
}
int audio_opensles_instance_prepare_consumer(audio_opensles_instance_handle_t* _self, tmedia_consumer_t** _consumer)
{
audio_opensles_instance_t* self = (audio_opensles_instance_t*)_self;
const struct audio_consumer_opensles_s* consumer = (const struct audio_consumer_opensles_s*)*_consumer;
if(!self || !self->device || !self->callback || !_consumer || !*_consumer){
AUDIO_OPENSLES_DEBUG_ERROR("invalid parameter");
return -1;
}
audio_opensles_instance_t* self = (audio_opensles_instance_t*)_self;
const struct audio_consumer_opensles_s* consumer = (const struct audio_consumer_opensles_s*)*_consumer;
if(!self || !self->device || !self->callback || !_consumer || !*_consumer) {
AUDIO_OPENSLES_DEBUG_ERROR("invalid parameter");
return -1;
}
if(self->isConsumerPrepared){
AUDIO_OPENSLES_DEBUG_WARN("Consumer already prepared");
return 0;
}
if(self->isConsumerPrepared) {
AUDIO_OPENSLES_DEBUG_WARN("Consumer already prepared");
return 0;
}
int ret;
bool _bool;
int ret;
bool _bool;
tsk_safeobj_lock(self);
tsk_safeobj_lock(self);
self->callback->SetConsumer(consumer);
self->callback->SetConsumer(consumer);
if((ret = self->device->SpeakerIsAvailable(&_bool))){
AUDIO_OPENSLES_DEBUG_ERROR("SpeakerIsAvailable() failed with error code=%d", ret);
}
else{
if(!_bool){
AUDIO_OPENSLES_DEBUG_ERROR("SpeakerIsAvailable() returned false");
}
self->isSpeakerAvailable = _bool;
}
if((ret = self->device->SpeakerIsAvailable(&_bool))) {
AUDIO_OPENSLES_DEBUG_ERROR("SpeakerIsAvailable() failed with error code=%d", ret);
}
else {
if(!_bool) {
AUDIO_OPENSLES_DEBUG_ERROR("SpeakerIsAvailable() returned false");
}
self->isSpeakerAvailable = _bool;
}
if((ret = self->device->InitSpeaker())){
AUDIO_OPENSLES_DEBUG_ERROR("InitSpeaker() failed with error code=%d", ret);
}
else if((ret = self->device->SetSpeakerOn(audio_consumer_opensles_is_speakerOn(consumer)))){
AUDIO_OPENSLES_DEBUG_ERROR("SetSpeakerOn() failed with error code=%d", ret);
}
if((ret = self->device->InitSpeaker())) {
AUDIO_OPENSLES_DEBUG_ERROR("InitSpeaker() failed with error code=%d", ret);
}
else if((ret = self->device->SetSpeakerOn(audio_consumer_opensles_is_speakerOn(consumer)))) {
AUDIO_OPENSLES_DEBUG_ERROR("SetSpeakerOn() failed with error code=%d", ret);
}
if((ret = self->device->PlayoutIsAvailable(&_bool))){
AUDIO_OPENSLES_DEBUG_ERROR("PlayoutIsAvailable() failed with error code =%d", ret);
}
else{
if(!_bool){
AUDIO_OPENSLES_DEBUG_ERROR("PlayoutIsAvailable() returned false");
}
self->isPlayoutAvailable = _bool;
}
if((ret = self->device->PlayoutIsAvailable(&_bool))) {
AUDIO_OPENSLES_DEBUG_ERROR("PlayoutIsAvailable() failed with error code =%d", ret);
}
else {
if(!_bool) {
AUDIO_OPENSLES_DEBUG_ERROR("PlayoutIsAvailable() returned false");
}
self->isPlayoutAvailable = _bool;
}
if((ret = self->device->SetStereoPlayout(((*_consumer)->audio.in.channels == 2)))){
AUDIO_OPENSLES_DEBUG_ERROR("SetStereoPlayout(%d==2) failed with error code=%d", (*_consumer)->audio.in.channels, ret);
}
if((ret = self->device->SetStereoPlayout(((*_consumer)->audio.in.channels == 2)))) {
AUDIO_OPENSLES_DEBUG_ERROR("SetStereoPlayout(%d==2) failed with error code=%d", (*_consumer)->audio.in.channels, ret);
}
//if((ret = self->device->SetPlayoutBuffer(AudioDeviceModule::kFixedBufferSize, (*_consumer)->audio.ptime))){
// AUDIO_OPENSLES_DEBUG_ERROR("SetPlayoutBuffer(%d ms) failed with error code=%d", (*_consumer)->audio.ptime, ret);
//}
// always request 10ms buffers
if((ret = self->device->SetPlayoutBuffer(10))){
AUDIO_OPENSLES_DEBUG_ERROR("SetPlayoutBuffer(%d ms) failed with error code=%d", 10, ret);
}
//if((ret = self->device->SetPlayoutBuffer(AudioDeviceModule::kFixedBufferSize, (*_consumer)->audio.ptime))){
// AUDIO_OPENSLES_DEBUG_ERROR("SetPlayoutBuffer(%d ms) failed with error code=%d", (*_consumer)->audio.ptime, ret);
//}
// always request 10ms buffers
if((ret = self->device->SetPlayoutBuffer(10))) {
AUDIO_OPENSLES_DEBUG_ERROR("SetPlayoutBuffer(%d ms) failed with error code=%d", 10, ret);
}
int playoutSampleRate = (*_consumer)->audio.out.rate ? (*_consumer)->audio.out.rate : (*_consumer)->audio.in.rate;
if((ret = self->device->SetPlayoutSampleRate(playoutSampleRate))){
AUDIO_OPENSLES_DEBUG_ERROR("SetPlayoutSampleRate(%d) failed with error code=%d", playoutSampleRate, ret);
}
int playoutSampleRate = (*_consumer)->audio.out.rate ? (*_consumer)->audio.out.rate : (*_consumer)->audio.in.rate;
if((ret = self->device->SetPlayoutSampleRate(playoutSampleRate))) {
AUDIO_OPENSLES_DEBUG_ERROR("SetPlayoutSampleRate(%d) failed with error code=%d", playoutSampleRate, ret);
}
if((ret = self->device->InitPlayout())){
AUDIO_OPENSLES_DEBUG_ERROR("AudioDeviceModule::InitPlayout() failed with error code = %d", ret);
goto done;
}
if((ret = self->device->InitPlayout())) {
AUDIO_OPENSLES_DEBUG_ERROR("AudioDeviceModule::InitPlayout() failed with error code = %d", ret);
goto done;
}
// init output parameters
if((ret = self->device->StereoPlayout(&_bool))){
AUDIO_OPENSLES_DEBUG_ERROR("StereoPlayout() failed with error code=%d", ret);
}
else{
(*_consumer)->audio.out.channels = (_bool ? 2 : 1);
}
if((ret = self->device->PlayoutSampleRate(&playoutSampleRate))){
AUDIO_OPENSLES_DEBUG_ERROR("PlayoutSampleRate() failed with error code=%d", ret);
}
else{
(*_consumer)->audio.out.rate = playoutSampleRate;
}
// init output parameters
if((ret = self->device->StereoPlayout(&_bool))) {
AUDIO_OPENSLES_DEBUG_ERROR("StereoPlayout() failed with error code=%d", ret);
}
else {
(*_consumer)->audio.out.channels = (_bool ? 2 : 1);
}
if((ret = self->device->PlayoutSampleRate(&playoutSampleRate))) {
AUDIO_OPENSLES_DEBUG_ERROR("PlayoutSampleRate() failed with error code=%d", ret);
}
else {
(*_consumer)->audio.out.rate = playoutSampleRate;
}
done:
tsk_safeobj_unlock(self);
tsk_safeobj_unlock(self);
self->isConsumerPrepared = (ret == 0);
self->isConsumerPrepared = (ret == 0);
return ret;
return ret;
}
int audio_opensles_instance_prepare_producer(audio_opensles_instance_handle_t* _self, tmedia_producer_t** _producer)
{
audio_opensles_instance_t* self = (audio_opensles_instance_t*)_self;
if(!self || !self->device || !self->callback || !_producer || !*_producer){
AUDIO_OPENSLES_DEBUG_ERROR("invalid parameter");
return -1;
}
audio_opensles_instance_t* self = (audio_opensles_instance_t*)_self;
if(!self || !self->device || !self->callback || !_producer || !*_producer) {
AUDIO_OPENSLES_DEBUG_ERROR("invalid parameter");
return -1;
}
if(self->isProducerPrepared){
AUDIO_OPENSLES_DEBUG_WARN("Producer already prepared");
return 0;
}
if(self->isProducerPrepared) {
AUDIO_OPENSLES_DEBUG_WARN("Producer already prepared");
return 0;
}
int ret;
bool _bool;
int ret;
bool _bool;
tsk_safeobj_lock(self);
tsk_safeobj_lock(self);
self->callback->SetProducer((const struct audio_producer_opensles_s*)*_producer);
self->callback->SetProducer((const struct audio_producer_opensles_s*)*_producer);
if((ret = self->device->RecordingIsAvailable(&_bool))){
AUDIO_OPENSLES_DEBUG_ERROR("RecordingIsAvailable() failed with error code =%d", ret);
}
else{
if(!_bool){
AUDIO_OPENSLES_DEBUG_ERROR("RecordingIsAvailable() returned false");
}
self->isRecordingAvailable = _bool;
}
if((ret = self->device->RecordingIsAvailable(&_bool))) {
AUDIO_OPENSLES_DEBUG_ERROR("RecordingIsAvailable() failed with error code =%d", ret);
}
else {
if(!_bool) {
AUDIO_OPENSLES_DEBUG_ERROR("RecordingIsAvailable() returned false");
}
self->isRecordingAvailable = _bool;
}
if((ret = self->device->MicrophoneIsAvailable(&_bool))){
AUDIO_OPENSLES_DEBUG_ERROR("MicrophoneIsAvailable() failed with error code =%d", ret);
}
else{
if(!_bool){
AUDIO_OPENSLES_DEBUG_ERROR("MicrophoneIsAvailable() returned false");
}
else{
if((ret = self->device->InitMicrophone())){
AUDIO_OPENSLES_DEBUG_ERROR("InitMicrophone() failed with error code =%d", ret);
}
}
}
if((ret = self->device->MicrophoneIsAvailable(&_bool))) {
AUDIO_OPENSLES_DEBUG_ERROR("MicrophoneIsAvailable() failed with error code =%d", ret);
}
else {
if(!_bool) {
AUDIO_OPENSLES_DEBUG_ERROR("MicrophoneIsAvailable() returned false");
}
else {
if((ret = self->device->InitMicrophone())) {
AUDIO_OPENSLES_DEBUG_ERROR("InitMicrophone() failed with error code =%d", ret);
}
}
}
if((ret = self->device->SetStereoRecording(((*_producer)->audio.channels == 2)))){
AUDIO_OPENSLES_DEBUG_ERROR("SetStereoRecording(%d==2) failed with error code=%d", (*_producer)->audio.channels, ret);
}
if((ret = self->device->SetStereoRecording(((*_producer)->audio.channels == 2)))) {
AUDIO_OPENSLES_DEBUG_ERROR("SetStereoRecording(%d==2) failed with error code=%d", (*_producer)->audio.channels, ret);
}
int recordingSampleRate = (*_producer)->audio.rate;
if((ret = self->device->SetRecordingSampleRate(recordingSampleRate))){
AUDIO_OPENSLES_DEBUG_ERROR("SetRecordingSampleRate(%d) failed with error code=%d", recordingSampleRate, ret);
}
int recordingSampleRate = (*_producer)->audio.rate;
if((ret = self->device->SetRecordingSampleRate(recordingSampleRate))) {
AUDIO_OPENSLES_DEBUG_ERROR("SetRecordingSampleRate(%d) failed with error code=%d", recordingSampleRate, ret);
}
if((ret = self->device->InitRecording())){
AUDIO_OPENSLES_DEBUG_ERROR("AudioDeviceModule::InitRecording() failed with error code = %d", ret);
goto done;
}
if((ret = self->device->InitRecording())) {
AUDIO_OPENSLES_DEBUG_ERROR("AudioDeviceModule::InitRecording() failed with error code = %d", ret);
goto done;
}
// init output parameters
if((ret = self->device->StereoRecording(&_bool))){
AUDIO_OPENSLES_DEBUG_ERROR("StereoRecording() failed with error code=%d", ret);
}
else{
(*_producer)->audio.channels = (_bool ? 2 : 1);
}
if((ret = self->device->RecordingSampleRate(&recordingSampleRate))){
AUDIO_OPENSLES_DEBUG_ERROR("RecordingSampleRate() failed with error code=%d", ret);
}
else{
(*_producer)->audio.rate = recordingSampleRate;
}
// init output parameters
if((ret = self->device->StereoRecording(&_bool))) {
AUDIO_OPENSLES_DEBUG_ERROR("StereoRecording() failed with error code=%d", ret);
}
else {
(*_producer)->audio.channels = (_bool ? 2 : 1);
}
if((ret = self->device->RecordingSampleRate(&recordingSampleRate))) {
AUDIO_OPENSLES_DEBUG_ERROR("RecordingSampleRate() failed with error code=%d", ret);
}
else {
(*_producer)->audio.rate = recordingSampleRate;
}
done:
tsk_safeobj_unlock(self);
tsk_safeobj_unlock(self);
self->isProducerPrepared = (ret == 0);
self->isProducerPrepared = (ret == 0);
return ret;
return ret;
}
int audio_opensles_instance_start_consumer(audio_opensles_instance_handle_t* _self)
{
audio_opensles_instance_t* self = (audio_opensles_instance_t*)_self;
if(!self || !self->device || !self->callback){
AUDIO_OPENSLES_DEBUG_ERROR("invalid parameter");
return -1;
}
audio_opensles_instance_t* self = (audio_opensles_instance_t*)_self;
if(!self || !self->device || !self->callback) {
AUDIO_OPENSLES_DEBUG_ERROR("invalid parameter");
return -1;
}
tsk_safeobj_lock(self);
if(!self->isConsumerPrepared){
AUDIO_OPENSLES_DEBUG_ERROR("Consumer not prepared");
goto done;
}
tsk_safeobj_lock(self);
if(!self->isConsumerPrepared) {
AUDIO_OPENSLES_DEBUG_ERROR("Consumer not prepared");
goto done;
}
if(self->isConsumerStarted){
AUDIO_OPENSLES_DEBUG_WARN("Consumer already started");
goto done;
}
if(self->isConsumerStarted) {
AUDIO_OPENSLES_DEBUG_WARN("Consumer already started");
goto done;
}
if(self->isPlayoutAvailable){
int ret;
if((ret = self->device->StartPlayout())){
AUDIO_OPENSLES_DEBUG_ERROR("StartPlayout() failed with error code = %d", ret);
}
if(self->isPlayoutAvailable) {
int ret;
if((ret = self->device->StartPlayout())) {
AUDIO_OPENSLES_DEBUG_ERROR("StartPlayout() failed with error code = %d", ret);
}
self->isConsumerStarted = self->device->Playing();
AUDIO_OPENSLES_DEBUG_INFO("isPlaying=%s", (self->isConsumerPrepared ? "true" : "false"));
}
self->isConsumerStarted = self->device->Playing();
AUDIO_OPENSLES_DEBUG_INFO("isPlaying=%s", (self->isConsumerPrepared ? "true" : "false"));
}
done:
tsk_safeobj_unlock(self);
return (self->isConsumerStarted ? 0 : -1);
tsk_safeobj_unlock(self);
return (self->isConsumerStarted ? 0 : -1);
}
int audio_opensles_instance_start_producer(audio_opensles_instance_handle_t* _self)
{
audio_opensles_instance_t* self = (audio_opensles_instance_t*)_self;
if(!self || !self->device || !self->callback){
AUDIO_OPENSLES_DEBUG_ERROR("invalid parameter");
return -1;
}
audio_opensles_instance_t* self = (audio_opensles_instance_t*)_self;
if(!self || !self->device || !self->callback) {
AUDIO_OPENSLES_DEBUG_ERROR("invalid parameter");
return -1;
}
tsk_safeobj_lock(self);
if(!self->isProducerPrepared){
AUDIO_OPENSLES_DEBUG_ERROR("Producer not prepared");
goto done;
}
tsk_safeobj_lock(self);
if(!self->isProducerPrepared) {
AUDIO_OPENSLES_DEBUG_ERROR("Producer not prepared");
goto done;
}
if(self->isProducerStarted){
AUDIO_OPENSLES_DEBUG_WARN("Consumer already started");
goto done;
}
if(self->isProducerStarted) {
AUDIO_OPENSLES_DEBUG_WARN("Consumer already started");
goto done;
}
if(self->isRecordingAvailable){
int ret;
if((ret = self->device->StartRecording())){
AUDIO_OPENSLES_DEBUG_ERROR("StartRecording() failed with error code = %d", ret);
}
if(self->isRecordingAvailable) {
int ret;
if((ret = self->device->StartRecording())) {
AUDIO_OPENSLES_DEBUG_ERROR("StartRecording() failed with error code = %d", ret);
}
self->isProducerStarted = self->device->Recording();
AUDIO_OPENSLES_DEBUG_INFO("isRecording=%s", (self->isProducerStarted ? "true" : "false"));
}
self->isProducerStarted = self->device->Recording();
AUDIO_OPENSLES_DEBUG_INFO("isRecording=%s", (self->isProducerStarted ? "true" : "false"));
}
done:
tsk_safeobj_unlock(self);
return (self->isProducerStarted ? 0 : -1);
tsk_safeobj_unlock(self);
return (self->isProducerStarted ? 0 : -1);
}
int audio_opensles_instance_stop_consumer(audio_opensles_instance_handle_t* _self)
{
audio_opensles_instance_t* self = (audio_opensles_instance_t*)_self;
if(!self || !self->device || !self->callback){
AUDIO_OPENSLES_DEBUG_ERROR("invalid parameter");
return -1;
}
audio_opensles_instance_t* self = (audio_opensles_instance_t*)_self;
if(!self || !self->device || !self->callback) {
AUDIO_OPENSLES_DEBUG_ERROR("invalid parameter");
return -1;
}
tsk_safeobj_lock(self);
tsk_safeobj_lock(self);
if(!self->isConsumerStarted){
goto done;
}
if(!self->isConsumerStarted) {
goto done;
}
int ret;
if((ret = self->device->StopPlayout())){
AUDIO_OPENSLES_DEBUG_ERROR("StopPlayout() failed with error code = %d", ret);
}
else{
self->isConsumerStarted = self->device->Playing();
self->isConsumerPrepared = false;
}
int ret;
if((ret = self->device->StopPlayout())) {
AUDIO_OPENSLES_DEBUG_ERROR("StopPlayout() failed with error code = %d", ret);
}
else {
self->isConsumerStarted = self->device->Playing();
self->isConsumerPrepared = false;
}
done:
tsk_safeobj_unlock(self);
return (self->isConsumerStarted ? -1 : 0);
tsk_safeobj_unlock(self);
return (self->isConsumerStarted ? -1 : 0);
}
int audio_opensles_instance_stop_producer(audio_opensles_instance_handle_t* _self)
{
audio_opensles_instance_t* self = (audio_opensles_instance_t*)_self;
if(!self || !self->device || !self->callback){
AUDIO_OPENSLES_DEBUG_ERROR("invalid parameter");
return -1;
}
audio_opensles_instance_t* self = (audio_opensles_instance_t*)_self;
if(!self || !self->device || !self->callback) {
AUDIO_OPENSLES_DEBUG_ERROR("invalid parameter");
return -1;
}
tsk_safeobj_lock(self);
tsk_safeobj_lock(self);
if(!self->isProducerStarted){
goto done;
}
if(!self->isProducerStarted) {
goto done;
}
int ret;
if((ret = self->device->StopRecording())){
AUDIO_OPENSLES_DEBUG_ERROR("StopRecording() failed with error code = %d", ret);
}
else{
self->isProducerStarted = self->device->Recording();
self->isProducerPrepared = false;
}
int ret;
if((ret = self->device->StopRecording())) {
AUDIO_OPENSLES_DEBUG_ERROR("StopRecording() failed with error code = %d", ret);
}
else {
self->isProducerStarted = self->device->Recording();
self->isProducerPrepared = false;
}
done:
tsk_safeobj_unlock(self);
return (self->isProducerStarted ? -1 : 0);
tsk_safeobj_unlock(self);
return (self->isProducerStarted ? -1 : 0);
}
int audio_opensles_instance_set_speakerOn(audio_opensles_instance_handle_t* _self, bool speakerOn)
{
audio_opensles_instance_t* self = (audio_opensles_instance_t*)_self;
if(!self || !self->device ){
AUDIO_OPENSLES_DEBUG_ERROR("Invalid parameter");
return -1;
}
return self->device->SetSpeakerOn(speakerOn);
audio_opensles_instance_t* self = (audio_opensles_instance_t*)_self;
if(!self || !self->device ) {
AUDIO_OPENSLES_DEBUG_ERROR("Invalid parameter");
return -1;
}
return self->device->SetSpeakerOn(speakerOn);
}
int audio_opensles_instance_set_microphone_volume(audio_opensles_instance_handle_t* _self, int32_t volume)
{
audio_opensles_instance_t* self = (audio_opensles_instance_t*)_self;
if(!self || !self->device ){
AUDIO_OPENSLES_DEBUG_ERROR("Invalid parameter");
return -1;
}
return self->device->SetMicrophoneVolume(volume);
audio_opensles_instance_t* self = (audio_opensles_instance_t*)_self;
if(!self || !self->device ) {
AUDIO_OPENSLES_DEBUG_ERROR("Invalid parameter");
return -1;
}
return self->device->SetMicrophoneVolume(volume);
}
int audio_opensles_instance_destroy(audio_opensles_instance_handle_t** _self){
if(!_self || !*_self){
AUDIO_OPENSLES_DEBUG_ERROR("Invalid parameter");
return -1;
}
tsk_list_lock(__audioInstances);
if(tsk_object_get_refcount(*_self)==1){
tsk_list_remove_item_by_data(__audioInstances, *_self);
}
else {
tsk_object_unref(*_self);
}
tsk_list_unlock(__audioInstances);
*_self = tsk_null;
return 0;
int audio_opensles_instance_destroy(audio_opensles_instance_handle_t** _self)
{
if(!_self || !*_self) {
AUDIO_OPENSLES_DEBUG_ERROR("Invalid parameter");
return -1;
}
tsk_list_lock(__audioInstances);
if(tsk_object_get_refcount(*_self)==1) {
tsk_list_remove_item_by_data(__audioInstances, *_self);
}
else {
tsk_object_unref(*_self);
}
tsk_list_unlock(__audioInstances);
*_self = tsk_null;
return 0;
}

View File

@ -94,7 +94,7 @@
#endif
#if HAVE_CONFIG_H
#include "../config.h"
#include "../config.h"
#endif
#if AUDIO_OPENSLES_UNDER_ANDROID

View File

@ -25,172 +25,173 @@
#include "tsk_memory.h"
#include "tsk_debug.h"
typedef struct audio_consumer_opensles_s
{
TDAV_DECLARE_CONSUMER_AUDIO;
audio_opensles_instance_handle_t* audioInstHandle;
bool isSpeakerOn;
struct{
void* ptr;
bool isFull;
int size;
int index;
} buffer;
typedef struct audio_consumer_opensles_s {
TDAV_DECLARE_CONSUMER_AUDIO;
audio_opensles_instance_handle_t* audioInstHandle;
bool isSpeakerOn;
struct {
void* ptr;
bool isFull;
int size;
int index;
} buffer;
}
audio_consumer_opensles_t;
int audio_consumer_opensles_get_data_10ms(const audio_consumer_opensles_t* _self, void* audioSamples, int nSamples, int nBytesPerSample, int nChannels, int samplesPerSec, uint32_t &nSamplesOut)
{
nSamplesOut = 0;
if(!_self || !audioSamples || !nSamples){
AUDIO_OPENSLES_DEBUG_ERROR("Invalid parameter");
return -1;
}
if((nSamples != (samplesPerSec / 100))){
AUDIO_OPENSLES_DEBUG_ERROR("Not producing 10ms samples (nSamples=%d, samplesPerSec=%d)", nSamples, samplesPerSec);
return -2;
}
if((nBytesPerSample != (TMEDIA_CONSUMER(_self)->audio.bits_per_sample >> 3))){
AUDIO_OPENSLES_DEBUG_ERROR("%d not valid bytes/samples", nBytesPerSample);
return -3;
}
if((nChannels != TMEDIA_CONSUMER(_self)->audio.out.channels)){
AUDIO_OPENSLES_DEBUG_ERROR("Playout - %d not the expected number of channels but should be %d", nChannels, TMEDIA_CONSUMER(_self)->audio.out.channels);
return -4;
}
nSamplesOut = 0;
if(!_self || !audioSamples || !nSamples) {
AUDIO_OPENSLES_DEBUG_ERROR("Invalid parameter");
return -1;
}
if((nSamples != (samplesPerSec / 100))) {
AUDIO_OPENSLES_DEBUG_ERROR("Not producing 10ms samples (nSamples=%d, samplesPerSec=%d)", nSamples, samplesPerSec);
return -2;
}
if((nBytesPerSample != (TMEDIA_CONSUMER(_self)->audio.bits_per_sample >> 3))) {
AUDIO_OPENSLES_DEBUG_ERROR("%d not valid bytes/samples", nBytesPerSample);
return -3;
}
if((nChannels != TMEDIA_CONSUMER(_self)->audio.out.channels)) {
AUDIO_OPENSLES_DEBUG_ERROR("Playout - %d not the expected number of channels but should be %d", nChannels, TMEDIA_CONSUMER(_self)->audio.out.channels);
return -4;
}
audio_consumer_opensles_t* self = const_cast<audio_consumer_opensles_t*>(_self);
audio_consumer_opensles_t* self = const_cast<audio_consumer_opensles_t*>(_self);
if(self->buffer.index == self->buffer.size){
if((tdav_consumer_audio_get(TDAV_CONSUMER_AUDIO(self), self->buffer.ptr, self->buffer.size)) != self->buffer.size){
nSamplesOut = 0;
self->buffer.index = self->buffer.size;
return 0;
}
self->buffer.index = 0;
tdav_consumer_audio_tick(TDAV_CONSUMER_AUDIO(self));
}
if(self->buffer.index == self->buffer.size) {
if((tdav_consumer_audio_get(TDAV_CONSUMER_AUDIO(self), self->buffer.ptr, self->buffer.size)) != self->buffer.size) {
nSamplesOut = 0;
self->buffer.index = self->buffer.size;
return 0;
}
self->buffer.index = 0;
tdav_consumer_audio_tick(TDAV_CONSUMER_AUDIO(self));
}
int nSamplesInBits = (nSamples * nBytesPerSample);
if(_self->buffer.index + nSamplesInBits <= _self->buffer.size){
memcpy(audioSamples, (((uint8_t*)self->buffer.ptr) + self->buffer.index), nSamplesInBits);
}
self->buffer.index += nSamplesInBits;
TSK_CLAMP(0, self->buffer.index, self->buffer.size);
nSamplesOut = nSamples;
int nSamplesInBits = (nSamples * nBytesPerSample);
if(_self->buffer.index + nSamplesInBits <= _self->buffer.size) {
memcpy(audioSamples, (((uint8_t*)self->buffer.ptr) + self->buffer.index), nSamplesInBits);
}
self->buffer.index += nSamplesInBits;
TSK_CLAMP(0, self->buffer.index, self->buffer.size);
nSamplesOut = nSamples;
return 0;
return 0;
}
bool audio_consumer_opensles_is_speakerOn(const audio_consumer_opensles_t* self)
{
if(!self){
AUDIO_OPENSLES_DEBUG_ERROR("Invalid parameter");
return false;
}
return self->isSpeakerOn;
if(!self) {
AUDIO_OPENSLES_DEBUG_ERROR("Invalid parameter");
return false;
}
return self->isSpeakerOn;
}
/* ============ Media Consumer Interface ================= */
static int audio_consumer_opensles_set(tmedia_consumer_t* _self, const tmedia_param_t* param)
{
audio_consumer_opensles_t* self = (audio_consumer_opensles_t*)_self;
int ret = tdav_consumer_audio_set(TDAV_CONSUMER_AUDIO(self), param);
audio_consumer_opensles_t* self = (audio_consumer_opensles_t*)_self;
int ret = tdav_consumer_audio_set(TDAV_CONSUMER_AUDIO(self), param);
if(ret == 0){
if(tsk_striequals(param->key, "volume")){
if(ret == 0) {
if(tsk_striequals(param->key, "volume")) {
}
else if(tsk_striequals(param->key, "speaker-on")){
self->isSpeakerOn = (TSK_TO_INT32((uint8_t*)param->value) != 0);
if(self->audioInstHandle){
return audio_opensles_instance_set_speakerOn(self->audioInstHandle, self->isSpeakerOn);
}
else return 0; // will be set when instance is initialized
}
}
}
else if(tsk_striequals(param->key, "speaker-on")) {
self->isSpeakerOn = (TSK_TO_INT32((uint8_t*)param->value) != 0);
if(self->audioInstHandle) {
return audio_opensles_instance_set_speakerOn(self->audioInstHandle, self->isSpeakerOn);
}
else {
return 0; // will be set when instance is initialized
}
}
}
return ret;
return ret;
}
static int audio_consumer_opensles_prepare(tmedia_consumer_t* _self, const tmedia_codec_t* codec)
{
audio_consumer_opensles_t* self = (audio_consumer_opensles_t*)_self;
if(!self){
AUDIO_OPENSLES_DEBUG_ERROR("Invalid parameter");
return -1;
}
audio_consumer_opensles_t* self = (audio_consumer_opensles_t*)_self;
if(!self) {
AUDIO_OPENSLES_DEBUG_ERROR("Invalid parameter");
return -1;
}
// create audio instance
if(!(self->audioInstHandle = audio_opensles_instance_create(TMEDIA_CONSUMER(self)->session_id))){
AUDIO_OPENSLES_DEBUG_ERROR("Failed to create audio instance handle");
return -1;
}
// create audio instance
if(!(self->audioInstHandle = audio_opensles_instance_create(TMEDIA_CONSUMER(self)->session_id))) {
AUDIO_OPENSLES_DEBUG_ERROR("Failed to create audio instance handle");
return -1;
}
// initialize input parameters from the codec information
TMEDIA_CONSUMER(self)->audio.ptime = TMEDIA_CODEC_PTIME_AUDIO_DECODING(codec);
TMEDIA_CONSUMER(self)->audio.in.channels = TMEDIA_CODEC_CHANNELS_AUDIO_DECODING(codec);
TMEDIA_CONSUMER(self)->audio.in.rate = TMEDIA_CODEC_RATE_DECODING(codec);
// initialize input parameters from the codec information
TMEDIA_CONSUMER(self)->audio.ptime = TMEDIA_CODEC_PTIME_AUDIO_DECODING(codec);
TMEDIA_CONSUMER(self)->audio.in.channels = TMEDIA_CODEC_CHANNELS_AUDIO_DECODING(codec);
TMEDIA_CONSUMER(self)->audio.in.rate = TMEDIA_CODEC_RATE_DECODING(codec);
AUDIO_OPENSLES_DEBUG_INFO("audio_consumer_opensles_prepare(channels=%d, rate=%d, ptime=%d)", codec->plugin->audio.channels, codec->plugin->rate, codec->plugin->audio.ptime);
AUDIO_OPENSLES_DEBUG_INFO("audio_consumer_opensles_prepare(channels=%d, rate=%d, ptime=%d)", codec->plugin->audio.channels, codec->plugin->rate, codec->plugin->audio.ptime);
// prepare playout device and update output parameters
int ret = audio_opensles_instance_prepare_consumer(self->audioInstHandle, &_self);
// prepare playout device and update output parameters
int ret = audio_opensles_instance_prepare_consumer(self->audioInstHandle, &_self);
// now that the producer is prepared we can initialize internal buffer using device caps
if(ret == 0){
// allocate buffer
int xsize = ((TMEDIA_CONSUMER(self)->audio.ptime * TMEDIA_CONSUMER(self)->audio.out.rate) / 1000) * (TMEDIA_CONSUMER(self)->audio.bits_per_sample >> 3);
if(!(self->buffer.ptr = tsk_realloc(self->buffer.ptr, xsize))){
AUDIO_OPENSLES_DEBUG_ERROR("Failed to allocate buffer with size = %d", xsize);
self->buffer.size = 0;
return -1;
}
memset(self->buffer.ptr, 0, xsize);
self->buffer.size = xsize;
self->buffer.index = 0;
self->buffer.isFull = false;
}
return ret;
// now that the producer is prepared we can initialize internal buffer using device caps
if(ret == 0) {
// allocate buffer
int xsize = ((TMEDIA_CONSUMER(self)->audio.ptime * TMEDIA_CONSUMER(self)->audio.out.rate) / 1000) * (TMEDIA_CONSUMER(self)->audio.bits_per_sample >> 3);
if(!(self->buffer.ptr = tsk_realloc(self->buffer.ptr, xsize))) {
AUDIO_OPENSLES_DEBUG_ERROR("Failed to allocate buffer with size = %d", xsize);
self->buffer.size = 0;
return -1;
}
memset(self->buffer.ptr, 0, xsize);
self->buffer.size = xsize;
self->buffer.index = 0;
self->buffer.isFull = false;
}
return ret;
}
static int audio_consumer_opensles_start(tmedia_consumer_t* _self)
{
audio_consumer_opensles_t* self = (audio_consumer_opensles_t*)_self;
if(!self){
AUDIO_OPENSLES_DEBUG_ERROR("Invalid parameter");
return -1;
}
audio_consumer_opensles_t* self = (audio_consumer_opensles_t*)_self;
if(!self) {
AUDIO_OPENSLES_DEBUG_ERROR("Invalid parameter");
return -1;
}
return audio_opensles_instance_start_consumer(self->audioInstHandle);
return audio_opensles_instance_start_consumer(self->audioInstHandle);
}
static int audio_consumer_opensles_consume(tmedia_consumer_t* _self, const void* data, tsk_size_t data_size, const tsk_object_t* proto_hdr)
{
audio_consumer_opensles_t* self = (audio_consumer_opensles_t*)_self;
if(!self || !data || !data_size){
AUDIO_OPENSLES_DEBUG_ERROR("1Invalid parameter");
return -1;
}
/* buffer is already decoded */
return tdav_consumer_audio_put(TDAV_CONSUMER_AUDIO(self), data, data_size, proto_hdr);
audio_consumer_opensles_t* self = (audio_consumer_opensles_t*)_self;
if(!self || !data || !data_size) {
AUDIO_OPENSLES_DEBUG_ERROR("1Invalid parameter");
return -1;
}
/* buffer is already decoded */
return tdav_consumer_audio_put(TDAV_CONSUMER_AUDIO(self), data, data_size, proto_hdr);
}
static int audio_consumer_opensles_pause(tmedia_consumer_t* self)
{
return 0;
return 0;
}
static int audio_consumer_opensles_stop(tmedia_consumer_t* _self)
{
audio_consumer_opensles_t* self = (audio_consumer_opensles_t*)_self;
if(!self){
AUDIO_OPENSLES_DEBUG_ERROR("Invalid parameter");
return -1;
}
audio_consumer_opensles_t* self = (audio_consumer_opensles_t*)_self;
if(!self) {
AUDIO_OPENSLES_DEBUG_ERROR("Invalid parameter");
return -1;
}
return audio_opensles_instance_stop_consumer(self->audioInstHandle);
return audio_opensles_instance_stop_consumer(self->audioInstHandle);
}
@ -200,54 +201,52 @@ static int audio_consumer_opensles_stop(tmedia_consumer_t* _self)
/* constructor */
static tsk_object_t* audio_consumer_opensles_ctor(tsk_object_t *_self, va_list * app)
{
audio_consumer_opensles_t *self = (audio_consumer_opensles_t *)_self;
if(self){
/* init base */
tdav_consumer_audio_init(TDAV_CONSUMER_AUDIO(self));
/* init self */
audio_consumer_opensles_t *self = (audio_consumer_opensles_t *)_self;
if(self) {
/* init base */
tdav_consumer_audio_init(TDAV_CONSUMER_AUDIO(self));
/* init self */
}
return self;
}
return self;
}
/* destructor */
static tsk_object_t* audio_consumer_opensles_dtor(tsk_object_t *_self)
{
audio_consumer_opensles_t *self = (audio_consumer_opensles_t *)_self;
if(self){
/* stop */
audio_consumer_opensles_stop(TMEDIA_CONSUMER(self));
/* deinit self */
if(self->audioInstHandle){
audio_opensles_instance_destroy(&self->audioInstHandle);
}
TSK_FREE(self->buffer.ptr);
/* deinit base */
tdav_consumer_audio_deinit(TDAV_CONSUMER_AUDIO(self));
}
audio_consumer_opensles_t *self = (audio_consumer_opensles_t *)_self;
if(self) {
/* stop */
audio_consumer_opensles_stop(TMEDIA_CONSUMER(self));
/* deinit self */
if(self->audioInstHandle) {
audio_opensles_instance_destroy(&self->audioInstHandle);
}
TSK_FREE(self->buffer.ptr);
/* deinit base */
tdav_consumer_audio_deinit(TDAV_CONSUMER_AUDIO(self));
}
return self;
return self;
}
/* object definition */
static const tsk_object_def_t audio_consumer_opensles_def_s =
{
sizeof(audio_consumer_opensles_t),
audio_consumer_opensles_ctor,
audio_consumer_opensles_dtor,
tdav_consumer_audio_cmp,
static const tsk_object_def_t audio_consumer_opensles_def_s = {
sizeof(audio_consumer_opensles_t),
audio_consumer_opensles_ctor,
audio_consumer_opensles_dtor,
tdav_consumer_audio_cmp,
};
/* plugin definition*/
static const tmedia_consumer_plugin_def_t audio_consumer_opensles_plugin_def_s =
{
&audio_consumer_opensles_def_s,
static const tmedia_consumer_plugin_def_t audio_consumer_opensles_plugin_def_s = {
&audio_consumer_opensles_def_s,
tmedia_audio,
"SLES audio consumer",
tmedia_audio,
"SLES audio consumer",
audio_consumer_opensles_set,
audio_consumer_opensles_prepare,
audio_consumer_opensles_start,
audio_consumer_opensles_consume,
audio_consumer_opensles_pause,
audio_consumer_opensles_stop
audio_consumer_opensles_set,
audio_consumer_opensles_prepare,
audio_consumer_opensles_start,
audio_consumer_opensles_consume,
audio_consumer_opensles_pause,
audio_consumer_opensles_stop
};
const tmedia_consumer_plugin_def_t *audio_consumer_opensles_plugin_def_t = &audio_consumer_opensles_plugin_def_s;

File diff suppressed because it is too large Load Diff

View File

@ -66,75 +66,75 @@ protected:
class SLAudioDevice
{
public:
SLAudioDevice(const SLAudioDeviceCallback* pCallback = NULL);
virtual ~SLAudioDevice();
SLAudioDevice(const SLAudioDeviceCallback* pCallback = NULL);
virtual ~SLAudioDevice();
public:
int SetCallback(const SLAudioDeviceCallback* pCallback);
int Init();
bool Initialized();
int SpeakerIsAvailable(bool *pAvailable);
int InitSpeaker();
int SetMaxSpeakerVolume(int nMaxSpeakerVolume);
int SetMinSpeakerVolume(int nMinSpeakerVolume);
int SetSpeakerVolume(int nSpeakerVolume);
int SetSpeakerOn(bool bSpeakerOn);
int PlayoutIsAvailable(bool *pAvailable);
int SetStereoPlayout(bool bEnabled);
int SetPlayoutBuffer(int nPlayoutBufferSize);
int SetPlayoutSampleRate(int nPlayoutSampleRate);
int InitPlayout();
int StereoPlayout(bool *pEnabled);
int PlayoutSampleRate(int *pPlayoutSampleRate);
int StartPlayout();
bool Playing();
int StopPlayout();
int RecordingIsAvailable(bool *pAvailable);
int MicrophoneIsAvailable(bool *pAvailable);
int InitMicrophone();
int SetMicrophoneVolume(int nMicrophoneVolume);
int SetStereoRecording(bool bEnabled);
int SetRecordingSampleRate(int nRecordingSampleRate);
int InitRecording();
int StereoRecording(bool *pEnabled);
int RecordingSampleRate(int *pRecordingSampleRate);
int StartRecording();
bool Recording();
int StopRecording();
int Terminate();
int SetCallback(const SLAudioDeviceCallback* pCallback);
int Init();
bool Initialized();
int SpeakerIsAvailable(bool *pAvailable);
int InitSpeaker();
int SetMaxSpeakerVolume(int nMaxSpeakerVolume);
int SetMinSpeakerVolume(int nMinSpeakerVolume);
int SetSpeakerVolume(int nSpeakerVolume);
int SetSpeakerOn(bool bSpeakerOn);
int PlayoutIsAvailable(bool *pAvailable);
int SetStereoPlayout(bool bEnabled);
int SetPlayoutBuffer(int nPlayoutBufferSize);
int SetPlayoutSampleRate(int nPlayoutSampleRate);
int InitPlayout();
int StereoPlayout(bool *pEnabled);
int PlayoutSampleRate(int *pPlayoutSampleRate);
int StartPlayout();
bool Playing();
int StopPlayout();
int RecordingIsAvailable(bool *pAvailable);
int MicrophoneIsAvailable(bool *pAvailable);
int InitMicrophone();
int SetMicrophoneVolume(int nMicrophoneVolume);
int SetStereoRecording(bool bEnabled);
int SetRecordingSampleRate(int nRecordingSampleRate);
int InitRecording();
int StereoRecording(bool *pEnabled);
int RecordingSampleRate(int *pRecordingSampleRate);
int StartRecording();
bool Recording();
int StopRecording();
int Terminate();
private:
int PlayoutApplyNewConfig();
uint32_t PullPlayoutData(void* pAudioSamples, const uint32_t nSamples);
void PushRecordingData(void* pAudioSamples, const uint32_t nSamples);
int PlayoutApplyNewConfig();
uint32_t PullPlayoutData(void* pAudioSamples, const uint32_t nSamples);
void PushRecordingData(void* pAudioSamples, const uint32_t nSamples);
#if AUDIO_OPENSLES_UNDER_ANDROID
static void PlayerSimpleBufferQueueCallback(SLAndroidSimpleBufferQueueItf queueItf, void *pContext);
static void RecorderSimpleBufferQueueCallback(SLAndroidSimpleBufferQueueItf queueItf, void *pContext);
static void PlayerSimpleBufferQueueCallback(SLAndroidSimpleBufferQueueItf queueItf, void *pContext);
static void RecorderSimpleBufferQueueCallback(SLAndroidSimpleBufferQueueItf queueItf, void *pContext);
#endif
private:
const SLAudioDeviceCallback* m_pCallback;
int m_nMicDeviceId;
bool m_bInitialized;
bool m_bSpeakerInitialized;
bool m_bPlayoutInitialized;
bool m_bRecordingInitialized;
bool m_bMicrophoneInitialized;
bool m_bSpeakerOn;
bool m_bStereoPlayout;
bool m_bStereoRecording;
int m_nPlayoutBufferSize;
int m_nRecordingBufferSize;
int m_nPlayoutSampleRate;
int m_nRecordingSampleRate;
bool m_bPlaying;
bool m_bRecording;
int m_nSpeakerVolume;
int m_nMaxSpeakerVolume;
int m_nMinSpeakerVolume;
const SLAudioDeviceCallback* m_pCallback;
int m_nMicDeviceId;
bool m_bInitialized;
bool m_bSpeakerInitialized;
bool m_bPlayoutInitialized;
bool m_bRecordingInitialized;
bool m_bMicrophoneInitialized;
bool m_bSpeakerOn;
bool m_bStereoPlayout;
bool m_bStereoRecording;
int m_nPlayoutBufferSize;
int m_nRecordingBufferSize;
int m_nPlayoutSampleRate;
int m_nRecordingSampleRate;
bool m_bPlaying;
bool m_bRecording;
int m_nSpeakerVolume;
int m_nMaxSpeakerVolume;
int m_nMinSpeakerVolume;
#if AUDIO_OPENSLES_UNDER_ANDROID
// audio unit
// audio unit
SLObjectItf m_slEngineObject;
// playout device
@ -152,10 +152,10 @@ private:
SLAndroidSimpleBufferQueueItf m_slRecorderSimpleBufferQueue;
SLDeviceVolumeItf m_slMicVolume;
int _recQueueSeq;
int _recQueueSeq;
// Playout buffer
uint8_t _playQueueBuffer[N_PLAY_QUEUE_BUFFERS][PLAY_BUF_SIZE_IN_SAMPLES << BYTES_PER_SAMPLE_LOG2];
// Playout buffer
uint8_t _playQueueBuffer[N_PLAY_QUEUE_BUFFERS][PLAY_BUF_SIZE_IN_SAMPLES << BYTES_PER_SAMPLE_LOG2];
int _playQueueSeq;
// Recording buffer
uint8_t _recQueueBuffer[N_REC_QUEUE_BUFFERS][REC_BUF_SIZE_IN_SAMPLES << BYTES_PER_SAMPLE_LOG2];

View File

@ -21,7 +21,7 @@
#include "audio_opensles_consumer.h"
SLAudioDeviceCallbackImpl::SLAudioDeviceCallbackImpl():
SLAudioDeviceCallback()
SLAudioDeviceCallback()
{
}
@ -30,29 +30,29 @@ SLAudioDeviceCallbackImpl::~SLAudioDeviceCallbackImpl()
}
int32_t SLAudioDeviceCallbackImpl::RecordedDataIsAvailable(const void* audioSamples,
const uint32_t nSamples,
const uint8_t nBytesPerSample,
const uint8_t nChannels,
const uint32_t samplesPerSec)
const uint32_t nSamples,
const uint8_t nBytesPerSample,
const uint8_t nChannels,
const uint32_t samplesPerSec)
{
if(!m_pProducer){
AUDIO_OPENSLES_DEBUG_WARN("No wrapped producer");
return 0;
}
return audio_producer_opensles_handle_data_10ms(m_pProducer, audioSamples, nSamples, nBytesPerSample, samplesPerSec, nChannels);
if(!m_pProducer) {
AUDIO_OPENSLES_DEBUG_WARN("No wrapped producer");
return 0;
}
return audio_producer_opensles_handle_data_10ms(m_pProducer, audioSamples, nSamples, nBytesPerSample, samplesPerSec, nChannels);
}
int32_t SLAudioDeviceCallbackImpl::NeedMorePlayData(const uint32_t nSamples,
const uint8_t nBytesPerSample,
const uint8_t nChannels,
const uint32_t samplesPerSec,
void* audioSamples,
uint32_t& nSamplesOut)
const uint8_t nBytesPerSample,
const uint8_t nChannels,
const uint32_t samplesPerSec,
void* audioSamples,
uint32_t& nSamplesOut)
{
if(!m_pConsumer){
AUDIO_OPENSLES_DEBUG_WARN("No wrapped consumer");
return 0;
}
return audio_consumer_opensles_get_data_10ms(m_pConsumer, audioSamples, nSamples, nBytesPerSample, nChannels, samplesPerSec, nSamplesOut);
if(!m_pConsumer) {
AUDIO_OPENSLES_DEBUG_WARN("No wrapped consumer");
return 0;
}
return audio_consumer_opensles_get_data_10ms(m_pConsumer, audioSamples, nSamples, nBytesPerSample, nChannels, samplesPerSec, nSamplesOut);
}

View File

@ -24,10 +24,10 @@
class SLAudioDeviceCallbackImpl : public SLAudioDeviceCallback
{
public:
SLAudioDeviceCallbackImpl();
virtual ~SLAudioDeviceCallbackImpl();
SLAudioDeviceCallbackImpl();
virtual ~SLAudioDeviceCallbackImpl();
virtual int32_t RecordedDataIsAvailable(const void* audioSamples,
virtual int32_t RecordedDataIsAvailable(const void* audioSamples,
const uint32_t nSamples,
const uint8_t nBytesPerSample,
const uint8_t nChannels,
@ -40,12 +40,16 @@ public:
void* audioSamples,
uint32_t& nSamplesOut);
inline void SetConsumer(const struct audio_consumer_opensles_s* pConsumer){ m_pConsumer = pConsumer; }
inline void SetProducer(const struct audio_producer_opensles_s* pProducer){ m_pProducer = pProducer; }
inline void SetConsumer(const struct audio_consumer_opensles_s* pConsumer) {
m_pConsumer = pConsumer;
}
inline void SetProducer(const struct audio_producer_opensles_s* pProducer) {
m_pProducer = pProducer;
}
private:
const struct audio_consumer_opensles_s* m_pConsumer; // mut be const and must not take reference
const struct audio_producer_opensles_s* m_pProducer; // mut be const and must not take reference
const struct audio_consumer_opensles_s* m_pConsumer; // mut be const and must not take reference
const struct audio_producer_opensles_s* m_pProducer; // mut be const and must not take reference
};
#endif /* _DOUBANGO_AUDIO_OPENSLES_SLDEVICE_IMPL_H */

View File

@ -24,159 +24,158 @@
#include "tsk_memory.h"
#include "tsk_debug.h"
typedef struct audio_producer_opensles_s
{
TDAV_DECLARE_PRODUCER_AUDIO;
typedef struct audio_producer_opensles_s {
TDAV_DECLARE_PRODUCER_AUDIO;
bool isMuted;
audio_opensles_instance_handle_t* audioInstHandle;
struct{
void* ptr;
int size;
int index;
} buffer;
bool isMuted;
audio_opensles_instance_handle_t* audioInstHandle;
struct {
void* ptr;
int size;
int index;
} buffer;
}
audio_producer_opensles_t;
int audio_producer_opensles_handle_data_10ms(const audio_producer_opensles_t* _self, const void* audioSamples, int nSamples, int nBytesPerSample, int samplesPerSec, int nChannels)
{
if(!_self || !audioSamples || !nSamples){
AUDIO_OPENSLES_DEBUG_ERROR("Invalid parameter");
return -1;
}
if(!TMEDIA_PRODUCER(_self)->enc_cb.callback){
AUDIO_OPENSLES_DEBUG_WARN("No callback function is registered for the producer");
return 0;
}
if((nSamples != (samplesPerSec / 100))){
AUDIO_OPENSLES_DEBUG_ERROR("Not producing 10ms samples (nSamples=%d, samplesPerSec=%d)", nSamples, samplesPerSec);
return -2;
}
if((nBytesPerSample != (TMEDIA_PRODUCER(_self)->audio.bits_per_sample >> 3))){
AUDIO_OPENSLES_DEBUG_ERROR("%d not valid bytes/samples", nBytesPerSample);
return -3;
}
if((nChannels != TMEDIA_PRODUCER(_self)->audio.channels)){
AUDIO_OPENSLES_DEBUG_ERROR("Recording - %d not the expected number of channels but should be %d", nChannels, TMEDIA_PRODUCER(_self)->audio.channels);
return -4;
}
if(!_self || !audioSamples || !nSamples) {
AUDIO_OPENSLES_DEBUG_ERROR("Invalid parameter");
return -1;
}
if(!TMEDIA_PRODUCER(_self)->enc_cb.callback) {
AUDIO_OPENSLES_DEBUG_WARN("No callback function is registered for the producer");
return 0;
}
if((nSamples != (samplesPerSec / 100))) {
AUDIO_OPENSLES_DEBUG_ERROR("Not producing 10ms samples (nSamples=%d, samplesPerSec=%d)", nSamples, samplesPerSec);
return -2;
}
if((nBytesPerSample != (TMEDIA_PRODUCER(_self)->audio.bits_per_sample >> 3))) {
AUDIO_OPENSLES_DEBUG_ERROR("%d not valid bytes/samples", nBytesPerSample);
return -3;
}
if((nChannels != TMEDIA_PRODUCER(_self)->audio.channels)) {
AUDIO_OPENSLES_DEBUG_ERROR("Recording - %d not the expected number of channels but should be %d", nChannels, TMEDIA_PRODUCER(_self)->audio.channels);
return -4;
}
int nSamplesInBits = (nSamples * nBytesPerSample);
if(_self->buffer.index + nSamplesInBits > _self->buffer.size){
AUDIO_OPENSLES_DEBUG_ERROR("Buffer overflow");
return -5;
}
int nSamplesInBits = (nSamples * nBytesPerSample);
if(_self->buffer.index + nSamplesInBits > _self->buffer.size) {
AUDIO_OPENSLES_DEBUG_ERROR("Buffer overflow");
return -5;
}
audio_producer_opensles_t* self = const_cast<audio_producer_opensles_t*>(_self);
audio_producer_opensles_t* self = const_cast<audio_producer_opensles_t*>(_self);
if(self->isMuted){
memset((((uint8_t*)self->buffer.ptr) + self->buffer.index), 0, nSamplesInBits);
}
else{
memcpy((((uint8_t*)self->buffer.ptr) + self->buffer.index), audioSamples, nSamplesInBits);
}
self->buffer.index += nSamplesInBits;
if(self->isMuted) {
memset((((uint8_t*)self->buffer.ptr) + self->buffer.index), 0, nSamplesInBits);
}
else {
memcpy((((uint8_t*)self->buffer.ptr) + self->buffer.index), audioSamples, nSamplesInBits);
}
self->buffer.index += nSamplesInBits;
if(self->buffer.index == self->buffer.size){
self->buffer.index = 0;
TMEDIA_PRODUCER(self)->enc_cb.callback(TMEDIA_PRODUCER(self)->enc_cb.callback_data, self->buffer.ptr, self->buffer.size);
}
if(self->buffer.index == self->buffer.size) {
self->buffer.index = 0;
TMEDIA_PRODUCER(self)->enc_cb.callback(TMEDIA_PRODUCER(self)->enc_cb.callback_data, self->buffer.ptr, self->buffer.size);
}
return 0;
return 0;
}
/* ============ Media Producer Interface ================= */
static int audio_producer_opensles_set(tmedia_producer_t* _self, const tmedia_param_t* param)
{
audio_producer_opensles_t* self = (audio_producer_opensles_t*)_self;
if(param->plugin_type == tmedia_ppt_producer){
if(param->value_type == tmedia_pvt_int32){
if(tsk_striequals(param->key, "mute")){
self->isMuted = (*((int32_t*)param->value) != 0);
// Mute not supported on android -> send silence when needed
return 0;
}
else if(tsk_striequals(param->key, "volume")){
return audio_opensles_instance_set_microphone_volume(self->audioInstHandle, *((int32_t*)param->value));
}
}
}
return tdav_producer_audio_set(TDAV_PRODUCER_AUDIO(self), param);
audio_producer_opensles_t* self = (audio_producer_opensles_t*)_self;
if(param->plugin_type == tmedia_ppt_producer) {
if(param->value_type == tmedia_pvt_int32) {
if(tsk_striequals(param->key, "mute")) {
self->isMuted = (*((int32_t*)param->value) != 0);
// Mute not supported on android -> send silence when needed
return 0;
}
else if(tsk_striequals(param->key, "volume")) {
return audio_opensles_instance_set_microphone_volume(self->audioInstHandle, *((int32_t*)param->value));
}
}
}
return tdav_producer_audio_set(TDAV_PRODUCER_AUDIO(self), param);
}
static int audio_producer_opensles_prepare(tmedia_producer_t* _self, const tmedia_codec_t* codec)
{
audio_producer_opensles_t* self = (audio_producer_opensles_t*)_self;
if(!self || !codec){
AUDIO_OPENSLES_DEBUG_ERROR("Invalid parameter");
return -1;
}
audio_producer_opensles_t* self = (audio_producer_opensles_t*)_self;
if(!self || !codec) {
AUDIO_OPENSLES_DEBUG_ERROR("Invalid parameter");
return -1;
}
// create audio instance
if(!(self->audioInstHandle = audio_opensles_instance_create(TMEDIA_PRODUCER(self)->session_id))){
AUDIO_OPENSLES_DEBUG_ERROR("Failed to create audio instance handle");
return -2;
}
// create audio instance
if(!(self->audioInstHandle = audio_opensles_instance_create(TMEDIA_PRODUCER(self)->session_id))) {
AUDIO_OPENSLES_DEBUG_ERROR("Failed to create audio instance handle");
return -2;
}
// check that ptime is mutiple of 10
if((codec->plugin->audio.ptime % 10)){
AUDIO_OPENSLES_DEBUG_ERROR("ptime=%d not multiple of 10", codec->plugin->audio.ptime);
return -3;
}
// check that ptime is mutiple of 10
if((codec->plugin->audio.ptime % 10)) {
AUDIO_OPENSLES_DEBUG_ERROR("ptime=%d not multiple of 10", codec->plugin->audio.ptime);
return -3;
}
// init input parameters from the codec
TMEDIA_PRODUCER(self)->audio.channels = TMEDIA_CODEC_CHANNELS_AUDIO_ENCODING(codec);
TMEDIA_PRODUCER(self)->audio.rate = TMEDIA_CODEC_RATE_ENCODING(codec);
TMEDIA_PRODUCER(self)->audio.ptime = TMEDIA_CODEC_PTIME_AUDIO_ENCODING(codec);
// init input parameters from the codec
TMEDIA_PRODUCER(self)->audio.channels = TMEDIA_CODEC_CHANNELS_AUDIO_ENCODING(codec);
TMEDIA_PRODUCER(self)->audio.rate = TMEDIA_CODEC_RATE_ENCODING(codec);
TMEDIA_PRODUCER(self)->audio.ptime = TMEDIA_CODEC_PTIME_AUDIO_ENCODING(codec);
AUDIO_OPENSLES_DEBUG_INFO("audio_producer_opensles_prepare(channels=%d, rate=%d, ptime=%d)", codec->plugin->audio.channels, codec->plugin->rate, codec->plugin->audio.ptime);
AUDIO_OPENSLES_DEBUG_INFO("audio_producer_opensles_prepare(channels=%d, rate=%d, ptime=%d)", codec->plugin->audio.channels, codec->plugin->rate, codec->plugin->audio.ptime);
// prepare playout device and update output parameters
int ret;
ret = audio_opensles_instance_prepare_producer(self->audioInstHandle, &_self);
// prepare playout device and update output parameters
int ret;
ret = audio_opensles_instance_prepare_producer(self->audioInstHandle, &_self);
// now that the producer is prepared we can initialize internal buffer using device caps
if(ret == 0){
// allocate buffer
int xsize = ((TMEDIA_PRODUCER(self)->audio.ptime * TMEDIA_PRODUCER(self)->audio.rate) / 1000) * (TMEDIA_PRODUCER(self)->audio.bits_per_sample >> 3);
AUDIO_OPENSLES_DEBUG_INFO("producer buffer xsize = %d", xsize);
if(!(self->buffer.ptr = tsk_realloc(self->buffer.ptr, xsize))){
AUDIO_OPENSLES_DEBUG_ERROR("Failed to allocate buffer with size = %d", xsize);
self->buffer.size = 0;
return -1;
}
self->buffer.size = xsize;
self->buffer.index = 0;
}
return ret;
// now that the producer is prepared we can initialize internal buffer using device caps
if(ret == 0) {
// allocate buffer
int xsize = ((TMEDIA_PRODUCER(self)->audio.ptime * TMEDIA_PRODUCER(self)->audio.rate) / 1000) * (TMEDIA_PRODUCER(self)->audio.bits_per_sample >> 3);
AUDIO_OPENSLES_DEBUG_INFO("producer buffer xsize = %d", xsize);
if(!(self->buffer.ptr = tsk_realloc(self->buffer.ptr, xsize))) {
AUDIO_OPENSLES_DEBUG_ERROR("Failed to allocate buffer with size = %d", xsize);
self->buffer.size = 0;
return -1;
}
self->buffer.size = xsize;
self->buffer.index = 0;
}
return ret;
}
static int audio_producer_opensles_start(tmedia_producer_t* _self)
{
audio_producer_opensles_t* self = (audio_producer_opensles_t*)_self;
if(!self){
AUDIO_OPENSLES_DEBUG_ERROR("Invalid parameter");
return -1;
}
AUDIO_OPENSLES_DEBUG_INFO("audio_producer_opensles_start");
audio_producer_opensles_t* self = (audio_producer_opensles_t*)_self;
if(!self) {
AUDIO_OPENSLES_DEBUG_ERROR("Invalid parameter");
return -1;
}
AUDIO_OPENSLES_DEBUG_INFO("audio_producer_opensles_start");
return audio_opensles_instance_start_producer(self->audioInstHandle);
return audio_opensles_instance_start_producer(self->audioInstHandle);
}
static int audio_producer_opensles_pause(tmedia_producer_t* self)
{
return 0;
return 0;
}
static int audio_producer_opensles_stop(tmedia_producer_t* _self)
{
audio_producer_opensles_t* self = (audio_producer_opensles_t*)_self;
if(!self){
AUDIO_OPENSLES_DEBUG_ERROR("Invalid parameter");
return -1;
}
audio_producer_opensles_t* self = (audio_producer_opensles_t*)_self;
if(!self) {
AUDIO_OPENSLES_DEBUG_ERROR("Invalid parameter");
return -1;
}
return audio_opensles_instance_stop_producer(self->audioInstHandle);
return audio_opensles_instance_stop_producer(self->audioInstHandle);
}
@ -186,54 +185,52 @@ static int audio_producer_opensles_stop(tmedia_producer_t* _self)
/* constructor */
static tsk_object_t* audio_producer_opensles_ctor(tsk_object_t *_self, va_list * app)
{
audio_producer_opensles_t *self = (audio_producer_opensles_t *)_self;
if(self){
/* init base */
tdav_producer_audio_init(TDAV_PRODUCER_AUDIO(self));
/* init self */
audio_producer_opensles_t *self = (audio_producer_opensles_t *)_self;
if(self) {
/* init base */
tdav_producer_audio_init(TDAV_PRODUCER_AUDIO(self));
/* init self */
}
return self;
}
return self;
}
/* destructor */
static tsk_object_t* audio_producer_opensles_dtor(tsk_object_t *_self)
{
audio_producer_opensles_t *self = (audio_producer_opensles_t *)_self;
if(self){
/* stop */
audio_producer_opensles_stop(TMEDIA_PRODUCER(self));
/* deinit self */
if(self->audioInstHandle){
audio_opensles_instance_destroy(&self->audioInstHandle);
}
TSK_FREE(self->buffer.ptr);
audio_producer_opensles_t *self = (audio_producer_opensles_t *)_self;
if(self) {
/* stop */
audio_producer_opensles_stop(TMEDIA_PRODUCER(self));
/* deinit self */
if(self->audioInstHandle) {
audio_opensles_instance_destroy(&self->audioInstHandle);
}
TSK_FREE(self->buffer.ptr);
/* deinit base */
tdav_producer_audio_deinit(TDAV_PRODUCER_AUDIO(self));
}
/* deinit base */
tdav_producer_audio_deinit(TDAV_PRODUCER_AUDIO(self));
}
return self;
return self;
}
/* object definition */
static const tsk_object_def_t audio_producer_opensles_def_s =
{
sizeof(audio_producer_opensles_t),
audio_producer_opensles_ctor,
audio_producer_opensles_dtor,
tdav_producer_audio_cmp,
static const tsk_object_def_t audio_producer_opensles_def_s = {
sizeof(audio_producer_opensles_t),
audio_producer_opensles_ctor,
audio_producer_opensles_dtor,
tdav_producer_audio_cmp,
};
/* plugin definition*/
static const tmedia_producer_plugin_def_t audio_producer_opensles_plugin_def_s =
{
&audio_producer_opensles_def_s,
static const tmedia_producer_plugin_def_t audio_producer_opensles_plugin_def_s = {
&audio_producer_opensles_def_s,
tmedia_audio,
"SLES audio producer",
tmedia_audio,
"SLES audio producer",
audio_producer_opensles_set,
audio_producer_opensles_prepare,
audio_producer_opensles_start,
audio_producer_opensles_pause,
audio_producer_opensles_stop
audio_producer_opensles_set,
audio_producer_opensles_prepare,
audio_producer_opensles_start,
audio_producer_opensles_pause,
audio_producer_opensles_stop
};
const tmedia_producer_plugin_def_t *audio_producer_opensles_plugin_def_t = &audio_producer_opensles_plugin_def_s;

View File

@ -20,16 +20,15 @@
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
switch (ul_reason_for_call) {
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

View File

@ -39,97 +39,91 @@ using namespace webrtc;
// https://groups.google.com/group/android-ndk/browse_thread/thread/a1667f28162cf69b/8ef3a171df7f8dfe
extern "C"
{
void *__dso_handle = NULL;
void *__dso_handle = NULL;
}
#endif
typedef enum PLUGIN_INDEX_E
{
PLUGIN_INDEX_AUDIO_CONSUMER,
PLUGIN_INDEX_AUDIO_PRODUCER,
PLUGIN_INDEX_COUNT
typedef enum PLUGIN_INDEX_E {
PLUGIN_INDEX_AUDIO_CONSUMER,
PLUGIN_INDEX_AUDIO_PRODUCER,
PLUGIN_INDEX_COUNT
}
PLUGIN_INDEX_T;
int __plugin_get_def_count()
{
return PLUGIN_INDEX_COUNT;
return PLUGIN_INDEX_COUNT;
}
tsk_plugin_def_type_t __plugin_get_def_type_at(int index)
{
switch(index){
case PLUGIN_INDEX_AUDIO_CONSUMER: return tsk_plugin_def_type_consumer;
case PLUGIN_INDEX_AUDIO_PRODUCER: return tsk_plugin_def_type_producer;
default:
{
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("No plugin at index %d", index);
return tsk_plugin_def_type_none;
}
}
switch(index) {
case PLUGIN_INDEX_AUDIO_CONSUMER:
return tsk_plugin_def_type_consumer;
case PLUGIN_INDEX_AUDIO_PRODUCER:
return tsk_plugin_def_type_producer;
default: {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("No plugin at index %d", index);
return tsk_plugin_def_type_none;
}
}
}
tsk_plugin_def_media_type_t __plugin_get_def_media_type_at(int index)
{
switch(index){
case PLUGIN_INDEX_AUDIO_CONSUMER:
case PLUGIN_INDEX_AUDIO_PRODUCER:
{
return tsk_plugin_def_media_type_audio;
}
default:
{
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("No plugin at index %d", index);
return tsk_plugin_def_media_type_none;
}
}
switch(index) {
case PLUGIN_INDEX_AUDIO_CONSUMER:
case PLUGIN_INDEX_AUDIO_PRODUCER: {
return tsk_plugin_def_media_type_audio;
}
default: {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("No plugin at index %d", index);
return tsk_plugin_def_media_type_none;
}
}
}
tsk_plugin_def_ptr_const_t __plugin_get_def_at(int index)
{
switch(index){
case PLUGIN_INDEX_AUDIO_CONSUMER:
{
return audio_consumer_webrtc_plugin_def_t;
}
case PLUGIN_INDEX_AUDIO_PRODUCER:
{
return audio_producer_webrtc_plugin_def_t;
}
default:
{
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("No plugin at index %d", index);
return tsk_null;
}
}
switch(index) {
case PLUGIN_INDEX_AUDIO_CONSUMER: {
return audio_consumer_webrtc_plugin_def_t;
}
case PLUGIN_INDEX_AUDIO_PRODUCER: {
return audio_producer_webrtc_plugin_def_t;
}
default: {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("No plugin at index %d", index);
return tsk_null;
}
}
}
//
// WebRTC AudioInstance
//
typedef struct audio_webrtc_instance_s
{
TSK_DECLARE_OBJECT;
typedef struct audio_webrtc_instance_s {
TSK_DECLARE_OBJECT;
uint64_t sessionId;
uint64_t sessionId;
bool isStarted;
bool isStarted;
bool isConsumerPrepared;
bool isConsumerStarted;
bool isProducerPrepared;
bool isProducerStarted;
bool isConsumerPrepared;
bool isConsumerStarted;
bool isProducerPrepared;
bool isProducerStarted;
bool isSpeakerAvailable;
bool isPlayoutAvailable;
bool isRecordingAvailable;
bool isSpeakerAvailable;
bool isPlayoutAvailable;
bool isRecordingAvailable;
AudioDeviceModule* device;
AudioTransportImpl* transport;
AudioDeviceModule* device;
AudioTransportImpl* transport;
TSK_DECLARE_SAFEOBJ;
TSK_DECLARE_SAFEOBJ;
}
audio_webrtc_instance_t;
typedef tsk_list_t audio_webrtc_instances_L_t;
@ -138,425 +132,425 @@ static audio_webrtc_instances_L_t* __audioInstances = tsk_null;
static tsk_object_t* audio_webrtc_instance_ctor(tsk_object_t * self, va_list * app)
{
audio_webrtc_instance_t* audioInstance = (audio_webrtc_instance_t*)self;
if(audioInstance){
tsk_safeobj_init(audioInstance);
}
return self;
audio_webrtc_instance_t* audioInstance = (audio_webrtc_instance_t*)self;
if(audioInstance) {
tsk_safeobj_init(audioInstance);
}
return self;
}
static tsk_object_t* audio_webrtc_instance_dtor(tsk_object_t * self)
{
DOUBANGO_AUDIO_WEBRTC_DEBUG_INFO("Audio Instance destroyed");
audio_webrtc_instance_t* audioInstance = (audio_webrtc_instance_t*)self;
if(audioInstance){
DOUBANGO_AUDIO_WEBRTC_DEBUG_INFO("Audio Instance destroyed");
audio_webrtc_instance_t* audioInstance = (audio_webrtc_instance_t*)self;
if(audioInstance) {
tsk_safeobj_lock(audioInstance);
if(audioInstance->device){
audioInstance->device->RegisterAudioCallback(tsk_null);
audioInstance->device->Terminate();
audioInstance->device->Release();//FIXME: must be deleted?
audioInstance->device = tsk_null;
}
if(audioInstance->transport){
delete audioInstance->transport;
audioInstance->transport = tsk_null;
}
if(audioInstance->device) {
audioInstance->device->RegisterAudioCallback(tsk_null);
audioInstance->device->Terminate();
audioInstance->device->Release();//FIXME: must be deleted?
audioInstance->device = tsk_null;
}
if(audioInstance->transport) {
delete audioInstance->transport;
audioInstance->transport = tsk_null;
}
tsk_safeobj_unlock(audioInstance);
tsk_safeobj_deinit(audioInstance);
}
return self;
tsk_safeobj_deinit(audioInstance);
}
return self;
}
static int audio_webrtc_instance_cmp(const tsk_object_t *_ai1, const tsk_object_t *_ai2)
{
return ((int)_ai1 - (int)_ai2);
return ((int)_ai1 - (int)_ai2);
}
static const tsk_object_def_t audio_webrtc_instance_def_s =
{
sizeof(audio_webrtc_instance_t),
audio_webrtc_instance_ctor,
audio_webrtc_instance_dtor,
audio_webrtc_instance_cmp,
static const tsk_object_def_t audio_webrtc_instance_def_s = {
sizeof(audio_webrtc_instance_t),
audio_webrtc_instance_ctor,
audio_webrtc_instance_dtor,
audio_webrtc_instance_cmp,
};
const tsk_object_def_t *audio_webrtc_instance_def_t = &audio_webrtc_instance_def_s;
audio_webrtc_instance_handle_t* audio_webrtc_instance_create(uint64_t sessionId)
{
audio_webrtc_instance_t* audioInstance = tsk_null;
audio_webrtc_instance_t* audioInstance = tsk_null;
// create list used to hold instances
if(!__audioInstances && !(__audioInstances = tsk_list_create())){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("Failed to create new list");
return tsk_null;
}
// create list used to hold instances
if(!__audioInstances && !(__audioInstances = tsk_list_create())) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("Failed to create new list");
return tsk_null;
}
//= lock the list
tsk_list_lock(__audioInstances);
//= lock the list
tsk_list_lock(__audioInstances);
// find the instance from the list
const tsk_list_item_t* item;
tsk_list_foreach(item, __audioInstances){
if(((audio_webrtc_instance_t*)item->data)->sessionId == sessionId){
audioInstance = (audio_webrtc_instance_t*)tsk_object_ref(item->data);
break;
}
}
// find the instance from the list
const tsk_list_item_t* item;
tsk_list_foreach(item, __audioInstances) {
if(((audio_webrtc_instance_t*)item->data)->sessionId == sessionId) {
audioInstance = (audio_webrtc_instance_t*)tsk_object_ref(item->data);
break;
}
}
if(!audioInstance){
audio_webrtc_instance_t* _audioInstance;
if(!(_audioInstance = (audio_webrtc_instance_t*)tsk_object_new(&audio_webrtc_instance_def_s))){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("Failed to create new audio instance");
goto done;
}
if(!audioInstance) {
audio_webrtc_instance_t* _audioInstance;
if(!(_audioInstance = (audio_webrtc_instance_t*)tsk_object_new(&audio_webrtc_instance_def_s))) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("Failed to create new audio instance");
goto done;
}
if(!(_audioInstance->device = AudioDeviceModuleImpl::Create(kAudioDeviceModuleId))){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("Failed to create audio device");
TSK_OBJECT_SAFE_FREE(_audioInstance);
goto done;
}
_audioInstance->device->AddRef();
if(!(_audioInstance->device = AudioDeviceModuleImpl::Create(kAudioDeviceModuleId))) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("Failed to create audio device");
TSK_OBJECT_SAFE_FREE(_audioInstance);
goto done;
}
_audioInstance->device->AddRef();
if(!(_audioInstance->transport = new AudioTransportImpl(_audioInstance->device))){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("Failed to create audio transport");
TSK_OBJECT_SAFE_FREE(_audioInstance);
goto done;
}
if((_audioInstance->device->RegisterAudioCallback(_audioInstance->transport))){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("AudioDeviceModule::RegisterAudioCallback() failed");
TSK_OBJECT_SAFE_FREE(_audioInstance);
goto done;
}
if(!(_audioInstance->transport = new AudioTransportImpl(_audioInstance->device))) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("Failed to create audio transport");
TSK_OBJECT_SAFE_FREE(_audioInstance);
goto done;
}
if((_audioInstance->device->RegisterAudioCallback(_audioInstance->transport))) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("AudioDeviceModule::RegisterAudioCallback() failed");
TSK_OBJECT_SAFE_FREE(_audioInstance);
goto done;
}
if((_audioInstance->device->Init())){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("AudioDeviceModule::Init() failed");
TSK_OBJECT_SAFE_FREE(_audioInstance);
goto done;
}
if((_audioInstance->device->Init())) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("AudioDeviceModule::Init() failed");
TSK_OBJECT_SAFE_FREE(_audioInstance);
goto done;
}
_audioInstance->sessionId = sessionId;
audioInstance = _audioInstance;
tsk_list_push_back_data(__audioInstances, (void**)&_audioInstance);
}
_audioInstance->sessionId = sessionId;
audioInstance = _audioInstance;
tsk_list_push_back_data(__audioInstances, (void**)&_audioInstance);
}
done:
//= unlock the list
tsk_list_unlock(__audioInstances);
//= unlock the list
tsk_list_unlock(__audioInstances);
return audioInstance;
return audioInstance;
}
int audio_webrtc_instance_prepare_consumer(audio_webrtc_instance_handle_t* _self, tmedia_consumer_t** _consumer)
{
audio_webrtc_instance_t* self = (audio_webrtc_instance_t*)_self;
if(!self || !self->device || !self->transport || !_consumer || !*_consumer){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("invalid parameter");
return -1;
}
audio_webrtc_instance_t* self = (audio_webrtc_instance_t*)_self;
if(!self || !self->device || !self->transport || !_consumer || !*_consumer) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("invalid parameter");
return -1;
}
if(self->isConsumerPrepared){
DOUBANGO_AUDIO_WEBRTC_DEBUG_WARN("Consumer already prepared");
return 0;
}
if(self->isConsumerPrepared) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_WARN("Consumer already prepared");
return 0;
}
int ret;
bool _bool;
int ret;
bool _bool;
tsk_safeobj_lock(self);
tsk_safeobj_lock(self);
self->transport->SetConsumer((const struct audio_consumer_webrtc_s*)*_consumer);
self->transport->SetConsumer((const struct audio_consumer_webrtc_s*)*_consumer);
if((ret = self->device->SetPlayoutDevice(DOUBANGO_AUDIO_WEBRTC_DEVICE_DEFAULT))){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("AudioDeviceModule->SetPlayoutDevice(%d) failed", DOUBANGO_AUDIO_WEBRTC_DEVICE_DEFAULT);
}
if((ret = self->device->SetPlayoutDevice(DOUBANGO_AUDIO_WEBRTC_DEVICE_DEFAULT))) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("AudioDeviceModule->SetPlayoutDevice(%d) failed", DOUBANGO_AUDIO_WEBRTC_DEVICE_DEFAULT);
}
if((ret = self->device->SpeakerIsAvailable(&_bool))){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("SpeakerIsAvailable() failed with error code=%d", ret);
}
else{
if(!_bool){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("SpeakerIsAvailable() returned false");
}
self->isSpeakerAvailable = _bool;
}
if((ret = self->device->SpeakerIsAvailable(&_bool))) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("SpeakerIsAvailable() failed with error code=%d", ret);
}
else {
if(!_bool) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("SpeakerIsAvailable() returned false");
}
self->isSpeakerAvailable = _bool;
}
if((ret = self->device->InitSpeaker())){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("InitSpeaker() failed with error code=%d", ret);
}
if((ret = self->device->InitSpeaker())) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("InitSpeaker() failed with error code=%d", ret);
}
if((ret = self->device->PlayoutIsAvailable(&_bool))){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("PlayoutIsAvailable() failed with error code =%d", ret);
}
else{
if(!_bool){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("PlayoutIsAvailable() returned false");
}
self->isPlayoutAvailable = _bool;
}
if((ret = self->device->PlayoutIsAvailable(&_bool))) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("PlayoutIsAvailable() failed with error code =%d", ret);
}
else {
if(!_bool) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("PlayoutIsAvailable() returned false");
}
self->isPlayoutAvailable = _bool;
}
if((ret = self->device->SetStereoPlayout(((*_consumer)->audio.in.channels == 2)))){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("SetStereoPlayout(%d==2) failed with error code=%d", (*_consumer)->audio.in.channels, ret);
}
if((ret = self->device->SetStereoPlayout(((*_consumer)->audio.in.channels == 2)))) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("SetStereoPlayout(%d==2) failed with error code=%d", (*_consumer)->audio.in.channels, ret);
}
//if((ret = self->device->SetPlayoutBuffer(AudioDeviceModule::kFixedBufferSize, (*_consumer)->audio.ptime))){
// DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("SetPlayoutBuffer(%d ms) failed with error code=%d", (*_consumer)->audio.ptime, ret);
//}
// always request 10ms buffers. In all cases WebRTC don't support anything else
if((ret = self->device->SetPlayoutBuffer(AudioDeviceModule::kFixedBufferSize, 10))){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("SetPlayoutBuffer(%d ms) failed with error code=%d", 10, ret);
}
//if((ret = self->device->SetPlayoutBuffer(AudioDeviceModule::kFixedBufferSize, (*_consumer)->audio.ptime))){
// DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("SetPlayoutBuffer(%d ms) failed with error code=%d", (*_consumer)->audio.ptime, ret);
//}
// always request 10ms buffers. In all cases WebRTC don't support anything else
if((ret = self->device->SetPlayoutBuffer(AudioDeviceModule::kFixedBufferSize, 10))) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("SetPlayoutBuffer(%d ms) failed with error code=%d", 10, ret);
}
uint32_t playoutSampleRate = (*_consumer)->audio.out.rate ? (*_consumer)->audio.out.rate : (*_consumer)->audio.in.rate;
if((ret = self->device->SetPlayoutSampleRate(playoutSampleRate))){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("SetPlayoutSampleRate(%d) failed with error code=%d", playoutSampleRate, ret);
}
uint32_t playoutSampleRate = (*_consumer)->audio.out.rate ? (*_consumer)->audio.out.rate : (*_consumer)->audio.in.rate;
if((ret = self->device->SetPlayoutSampleRate(playoutSampleRate))) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("SetPlayoutSampleRate(%d) failed with error code=%d", playoutSampleRate, ret);
}
if((ret = self->device->InitPlayout())){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("AudioDeviceModule::InitPlayout() failed with error code = %d", ret);
goto done;
}
if((ret = self->device->InitPlayout())) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("AudioDeviceModule::InitPlayout() failed with error code = %d", ret);
goto done;
}
// init output parameters
if((ret = self->device->StereoPlayout(&_bool))){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("StereoPlayout() failed with error code=%d", ret);
}
else{
(*_consumer)->audio.out.channels = (_bool ? 2 : 1);
}
if((ret = self->device->PlayoutSampleRate(&playoutSampleRate))){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("PlayoutSampleRate() failed with error code=%d", ret);
}
else{
(*_consumer)->audio.out.rate = playoutSampleRate;
}
// init output parameters
if((ret = self->device->StereoPlayout(&_bool))) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("StereoPlayout() failed with error code=%d", ret);
}
else {
(*_consumer)->audio.out.channels = (_bool ? 2 : 1);
}
if((ret = self->device->PlayoutSampleRate(&playoutSampleRate))) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("PlayoutSampleRate() failed with error code=%d", ret);
}
else {
(*_consumer)->audio.out.rate = playoutSampleRate;
}
done:
tsk_safeobj_unlock(self);
tsk_safeobj_unlock(self);
self->isConsumerPrepared = (ret == 0);
self->isConsumerPrepared = (ret == 0);
return ret;
return ret;
}
int audio_webrtc_instance_prepare_producer(audio_webrtc_instance_handle_t* _self, tmedia_producer_t** _producer)
{
audio_webrtc_instance_t* self = (audio_webrtc_instance_t*)_self;
if(!self || !self->device || !self->transport || !_producer || !*_producer){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("invalid parameter");
return -1;
}
audio_webrtc_instance_t* self = (audio_webrtc_instance_t*)_self;
if(!self || !self->device || !self->transport || !_producer || !*_producer) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("invalid parameter");
return -1;
}
if(self->isProducerPrepared){
DOUBANGO_AUDIO_WEBRTC_DEBUG_WARN("Producer already prepared");
return 0;
}
if(self->isProducerPrepared) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_WARN("Producer already prepared");
return 0;
}
int ret;
bool _bool;
int ret;
bool _bool;
tsk_safeobj_lock(self);
tsk_safeobj_lock(self);
self->transport->SetProducer((const struct audio_producer_webrtc_s*)*_producer);
self->transport->SetProducer((const struct audio_producer_webrtc_s*)*_producer);
if((ret = self->device->SetRecordingDevice(DOUBANGO_AUDIO_WEBRTC_DEVICE_DEFAULT))){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("AudioDeviceModule->SetRecordingDevice(%d) failed", DOUBANGO_AUDIO_WEBRTC_DEVICE_DEFAULT);
}
if((ret = self->device->SetRecordingDevice(DOUBANGO_AUDIO_WEBRTC_DEVICE_DEFAULT))) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("AudioDeviceModule->SetRecordingDevice(%d) failed", DOUBANGO_AUDIO_WEBRTC_DEVICE_DEFAULT);
}
if((ret = self->device->RecordingIsAvailable(&_bool))){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("RecordingIsAvailable() failed with error code =%d", ret);
}
else{
if(!_bool){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("RecordingIsAvailable() returned false");
}
self->isRecordingAvailable = _bool;
}
if((ret = self->device->RecordingIsAvailable(&_bool))) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("RecordingIsAvailable() failed with error code =%d", ret);
}
else {
if(!_bool) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("RecordingIsAvailable() returned false");
}
self->isRecordingAvailable = _bool;
}
if((ret = self->device->MicrophoneIsAvailable(&_bool))){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("MicrophoneIsAvailable() failed with error code =%d", ret);
}
else{
if(!_bool){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("MicrophoneIsAvailable() returned false");
}
else{
if((ret = self->device->InitMicrophone())){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("InitMicrophone() failed with error code =%d", ret);
}
}
}
if((ret = self->device->MicrophoneIsAvailable(&_bool))) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("MicrophoneIsAvailable() failed with error code =%d", ret);
}
else {
if(!_bool) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("MicrophoneIsAvailable() returned false");
}
else {
if((ret = self->device->InitMicrophone())) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("InitMicrophone() failed with error code =%d", ret);
}
}
}
if((ret = self->device->SetStereoRecording(((*_producer)->audio.channels == 2)))){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("SetStereoRecording(%d==2) failed with error code=%d", (*_producer)->audio.channels, ret);
}
if((ret = self->device->SetStereoRecording(((*_producer)->audio.channels == 2)))) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("SetStereoRecording(%d==2) failed with error code=%d", (*_producer)->audio.channels, ret);
}
uint32_t recordingSampleRate = (*_producer)->audio.rate;
if((ret = self->device->SetRecordingSampleRate(recordingSampleRate))){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("SetRecordingSampleRate(%d) failed with error code=%d", recordingSampleRate, ret);
}
uint32_t recordingSampleRate = (*_producer)->audio.rate;
if((ret = self->device->SetRecordingSampleRate(recordingSampleRate))) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("SetRecordingSampleRate(%d) failed with error code=%d", recordingSampleRate, ret);
}
if((ret = self->device->InitRecording())){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("AudioDeviceModule::InitRecording() failed with error code = %d", ret);
goto done;
}
if((ret = self->device->InitRecording())) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("AudioDeviceModule::InitRecording() failed with error code = %d", ret);
goto done;
}
// init output parameters
if((ret = self->device->StereoRecording(&_bool))){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("StereoRecording() failed with error code=%d", ret);
}
else{
(*_producer)->audio.channels = (_bool ? 2 : 1);
}
if((ret = self->device->RecordingSampleRate(&recordingSampleRate))){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("RecordingSampleRate() failed with error code=%d", ret);
}
else{
(*_producer)->audio.rate = recordingSampleRate;
}
// init output parameters
if((ret = self->device->StereoRecording(&_bool))) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("StereoRecording() failed with error code=%d", ret);
}
else {
(*_producer)->audio.channels = (_bool ? 2 : 1);
}
if((ret = self->device->RecordingSampleRate(&recordingSampleRate))) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("RecordingSampleRate() failed with error code=%d", ret);
}
else {
(*_producer)->audio.rate = recordingSampleRate;
}
done:
tsk_safeobj_unlock(self);
tsk_safeobj_unlock(self);
self->isProducerPrepared = (ret == 0);
self->isProducerPrepared = (ret == 0);
return ret;
return ret;
}
int audio_webrtc_instance_start_consumer(audio_webrtc_instance_handle_t* _self)
{
audio_webrtc_instance_t* self = (audio_webrtc_instance_t*)_self;
if(!self || !self->device || !self->transport){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("invalid parameter");
return -1;
}
audio_webrtc_instance_t* self = (audio_webrtc_instance_t*)_self;
if(!self || !self->device || !self->transport) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("invalid parameter");
return -1;
}
tsk_safeobj_lock(self);
if(!self->isConsumerPrepared){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("Consumer not prepared");
goto done;
}
tsk_safeobj_lock(self);
if(!self->isConsumerPrepared) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("Consumer not prepared");
goto done;
}
if(self->isConsumerStarted){
DOUBANGO_AUDIO_WEBRTC_DEBUG_WARN("Consumer already started");
goto done;
}
if(self->isConsumerStarted) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_WARN("Consumer already started");
goto done;
}
if(self->isPlayoutAvailable){
int ret;
if((ret = self->device->StartPlayout())){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("StartPlayout() failed with error code = %d", ret);
}
if(self->isPlayoutAvailable) {
int ret;
if((ret = self->device->StartPlayout())) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("StartPlayout() failed with error code = %d", ret);
}
self->isConsumerStarted = self->device->Playing();
DOUBANGO_AUDIO_WEBRTC_DEBUG_INFO("isPlaying=%s", (self->isConsumerPrepared ? "true" : "false"));
}
self->isConsumerStarted = self->device->Playing();
DOUBANGO_AUDIO_WEBRTC_DEBUG_INFO("isPlaying=%s", (self->isConsumerPrepared ? "true" : "false"));
}
done:
tsk_safeobj_unlock(self);
return (self->isConsumerStarted ? 0 : -1);
tsk_safeobj_unlock(self);
return (self->isConsumerStarted ? 0 : -1);
}
int audio_webrtc_instance_start_producer(audio_webrtc_instance_handle_t* _self)
{
audio_webrtc_instance_t* self = (audio_webrtc_instance_t*)_self;
if(!self || !self->device || !self->transport){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("invalid parameter");
return -1;
}
audio_webrtc_instance_t* self = (audio_webrtc_instance_t*)_self;
if(!self || !self->device || !self->transport) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("invalid parameter");
return -1;
}
tsk_safeobj_lock(self);
if(!self->isProducerPrepared){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("Producer not prepared");
goto done;
}
tsk_safeobj_lock(self);
if(!self->isProducerPrepared) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("Producer not prepared");
goto done;
}
if(self->isProducerStarted){
DOUBANGO_AUDIO_WEBRTC_DEBUG_WARN("Consumer already started");
goto done;
}
if(self->isProducerStarted) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_WARN("Consumer already started");
goto done;
}
if(self->isRecordingAvailable){
int ret;
if((ret = self->device->StartRecording())){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("StartRecording() failed with error code = %d", ret);
}
if(self->isRecordingAvailable) {
int ret;
if((ret = self->device->StartRecording())) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("StartRecording() failed with error code = %d", ret);
}
self->isProducerStarted = self->device->Recording();
DOUBANGO_AUDIO_WEBRTC_DEBUG_INFO("isRecording=%s", (self->isProducerStarted ? "true" : "false"));
}
self->isProducerStarted = self->device->Recording();
DOUBANGO_AUDIO_WEBRTC_DEBUG_INFO("isRecording=%s", (self->isProducerStarted ? "true" : "false"));
}
done:
tsk_safeobj_unlock(self);
return (self->isProducerStarted ? 0 : -1);
return 0;
tsk_safeobj_unlock(self);
return (self->isProducerStarted ? 0 : -1);
return 0;
}
int audio_webrtc_instance_stop_consumer(audio_webrtc_instance_handle_t* _self)
{
audio_webrtc_instance_t* self = (audio_webrtc_instance_t*)_self;
if(!self || !self->device || !self->transport){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("invalid parameter");
return -1;
}
audio_webrtc_instance_t* self = (audio_webrtc_instance_t*)_self;
if(!self || !self->device || !self->transport) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("invalid parameter");
return -1;
}
tsk_safeobj_lock(self);
tsk_safeobj_lock(self);
if(!self->isConsumerStarted){
goto done;
}
if(!self->isConsumerStarted) {
goto done;
}
int ret;
if((ret = self->device->StopPlayout())){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("StopPlayout() failed with error code = %d", ret);
}
else{
self->isConsumerStarted = self->device->Playing();
}
int ret;
if((ret = self->device->StopPlayout())) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("StopPlayout() failed with error code = %d", ret);
}
else {
self->isConsumerStarted = self->device->Playing();
}
done:
tsk_safeobj_unlock(self);
return (self->isConsumerStarted ? -1 : 0);
tsk_safeobj_unlock(self);
return (self->isConsumerStarted ? -1 : 0);
}
int audio_webrtc_instance_stop_producer(audio_webrtc_instance_handle_t* _self)
{
audio_webrtc_instance_t* self = (audio_webrtc_instance_t*)_self;
if(!self || !self->device || !self->transport){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("invalid parameter");
return -1;
}
audio_webrtc_instance_t* self = (audio_webrtc_instance_t*)_self;
if(!self || !self->device || !self->transport) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("invalid parameter");
return -1;
}
tsk_safeobj_lock(self);
tsk_safeobj_lock(self);
if(!self->isProducerStarted){
goto done;
}
if(!self->isProducerStarted) {
goto done;
}
int ret;
if((ret = self->device->StopRecording())){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("StopRecording() failed with error code = %d", ret);
}
else{
self->isProducerStarted = self->device->Recording();
}
int ret;
if((ret = self->device->StopRecording())) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("StopRecording() failed with error code = %d", ret);
}
else {
self->isProducerStarted = self->device->Recording();
}
done:
tsk_safeobj_unlock(self);
return (self->isProducerStarted ? -1 : 0);
tsk_safeobj_unlock(self);
return (self->isProducerStarted ? -1 : 0);
}
int audio_webrtc_instance_destroy(audio_webrtc_instance_handle_t** _self){
if(!_self || !*_self){
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("Invalid parameter");
return -1;
}
tsk_list_lock(__audioInstances);
if(tsk_object_get_refcount(*_self)==1){
tsk_list_remove_item_by_data(__audioInstances, *_self);
}
else {
tsk_object_unref(*_self);
}
tsk_list_unlock(__audioInstances);
*_self = tsk_null;
return 0;
int audio_webrtc_instance_destroy(audio_webrtc_instance_handle_t** _self)
{
if(!_self || !*_self) {
DOUBANGO_AUDIO_WEBRTC_DEBUG_ERROR("Invalid parameter");
return -1;
}
tsk_list_lock(__audioInstances);
if(tsk_object_get_refcount(*_self)==1) {
tsk_list_remove_item_by_data(__audioInstances, *_self);
}
else {
tsk_object_unref(*_self);
}
tsk_list_unlock(__audioInstances);
*_self = tsk_null;
return 0;
}

View File

@ -96,7 +96,7 @@
#endif
#if HAVE_CONFIG_H
#include "../config.h"
#include "../config.h"
#endif
#if DOUBANGO_AUDIO_WEBRTC_UNDER_WINDOWS
@ -113,22 +113,30 @@
#define ANDROID_DEBUG_TAG "plugin_audio_webrtc" // DDMS log tag when using eclise
static void DOUBANGO_AUDIO_WEBRTC_DEBUG_ANY(int level, const char* fmt, ...)
{
char* message = tsk_null;
va_list ap;
va_start(ap, fmt);
tsk_sprintf_2(&message, fmt, &ap);
char* message = tsk_null;
va_list ap;
va_start(ap, fmt);
tsk_sprintf_2(&message, fmt, &ap);
if(message){
switch(level){
case DEBUG_LEVEL_INFO: __android_log_write(ANDROID_LOG_INFO, ANDROID_DEBUG_TAG, message); break;
case DEBUG_LEVEL_WARN: __android_log_write(ANDROID_LOG_WARN, ANDROID_DEBUG_TAG, message); break;
case DEBUG_LEVEL_ERROR: __android_log_write(ANDROID_LOG_ERROR, ANDROID_DEBUG_TAG, message); break;
case DEBUG_LEVEL_FATAL: __android_log_write(ANDROID_LOG_FATAL, ANDROID_DEBUG_TAG, message); break;
}
TSK_FREE(message);
}
if(message) {
switch(level) {
case DEBUG_LEVEL_INFO:
__android_log_write(ANDROID_LOG_INFO, ANDROID_DEBUG_TAG, message);
break;
case DEBUG_LEVEL_WARN:
__android_log_write(ANDROID_LOG_WARN, ANDROID_DEBUG_TAG, message);
break;
case DEBUG_LEVEL_ERROR:
__android_log_write(ANDROID_LOG_ERROR, ANDROID_DEBUG_TAG, message);
break;
case DEBUG_LEVEL_FATAL:
__android_log_write(ANDROID_LOG_FATAL, ANDROID_DEBUG_TAG, message);
break;
}
TSK_FREE(message);
}
va_end(ap);
va_end(ap);
}
#define DOUBANGO_AUDIO_WEBRTC_DEBUG_INFO(FMT, ...) DOUBANGO_AUDIO_WEBRTC_DEBUG_ANY(DEBUG_LEVEL_INFO, FMT, ##__VA_ARGS__)
#define DOUBANGO_AUDIO_WEBRTC_DEBUG_WARN(FMT, ...) DOUBANGO_AUDIO_WEBRTC_DEBUG_ANY(DEBUG_LEVEL_WARN, FMT, ##__VA_ARGS__)

Some files were not shown because too many files have changed in this diff Show More