From 62593dd2b09933ac59049225cf92137d33120571 Mon Sep 17 00:00:00 2001 From: nanang Date: Wed, 18 Mar 2026 13:47:57 +0700 Subject: [PATCH 1/3] Add PJSUA2 AudioMediaAiPort wrapper for AI media port Wraps pjmedia_ai_port as a PJSUA2 AudioMedia subclass, enabling C++/Java/Python/C# apps to connect to AI services (e.g. OpenAI Realtime API) through the high-level API with startTransmit()/ stopTransmit(). Changes: - Add AudioMediaAiPort class with createPort(), connect(), disconnect(), and virtual onEvent() callback - Add AiMediaEvent struct and AiMediaPortParam for C++ API - Use pjsua's SIP endpoint ioqueue/timer heap (no separate worker thread needed) - Add pjmedia_ai_port_set_user_data() to C API for safe callback invalidation on destruction - Add ai_port.h to pjmedia.h umbrella header - Update SWIG: director feature for AudioMediaAiPort, symbols.lst entry for pjmedia_ai_event_type, regenerated symbols.i Ref: #4523 Co-Authored-By: Claude Code --- pjmedia/include/pjmedia.h | 1 + pjmedia/include/pjmedia/ai_port.h | 9 + pjmedia/src/pjmedia/ai_port.c | 7 + pjsip-apps/src/swig/pjsua2.i | 1 + pjsip-apps/src/swig/symbols.i | 1356 +++++++++++++++-------------- pjsip-apps/src/swig/symbols.lst | 1 + pjsip/include/pjsua2/media.hpp | 122 +++ pjsip/src/pjsua2/media.cpp | 150 ++++ 8 files changed, 987 insertions(+), 660 deletions(-) diff --git a/pjmedia/include/pjmedia.h b/pjmedia/include/pjmedia.h index 534eb21257..5e40458328 100644 --- a/pjmedia/include/pjmedia.h +++ b/pjmedia/include/pjmedia.h @@ -23,6 +23,7 @@ * @file pjmedia.h * @brief PJMEDIA main header file. */ +#include #include #include #include diff --git a/pjmedia/include/pjmedia/ai_port.h b/pjmedia/include/pjmedia/ai_port.h index 8001d8ce08..4cbfcf4cc4 100644 --- a/pjmedia/include/pjmedia/ai_port.h +++ b/pjmedia/include/pjmedia/ai_port.h @@ -378,6 +378,15 @@ PJ_DECL(pj_status_t) pjmedia_ai_port_disconnect(pjmedia_ai_port *ai_port); */ PJ_DECL(void*) pjmedia_ai_port_get_user_data(pjmedia_ai_port *ai_port); +/** + * Set the user data associated with the AI port. + * + * @param ai_port The AI port instance. + * @param user_data The user data pointer. + */ +PJ_DECL(void) pjmedia_ai_port_set_user_data(pjmedia_ai_port *ai_port, + void *user_data); + /** * Create an OpenAI Realtime API backend. * diff --git a/pjmedia/src/pjmedia/ai_port.c b/pjmedia/src/pjmedia/ai_port.c index e49f07305f..507f67156e 100644 --- a/pjmedia/src/pjmedia/ai_port.c +++ b/pjmedia/src/pjmedia/ai_port.c @@ -801,3 +801,10 @@ PJ_DEF(void*) pjmedia_ai_port_get_user_data(pjmedia_ai_port *ai_port) PJ_ASSERT_RETURN(ai_port, NULL); return ai_port->user_data; } + +PJ_DEF(void) pjmedia_ai_port_set_user_data(pjmedia_ai_port *ai_port, + void *user_data) +{ + PJ_ASSERT_ON_FAIL(ai_port, return); + ai_port->user_data = user_data; +} diff --git a/pjsip-apps/src/swig/pjsua2.i b/pjsip-apps/src/swig/pjsua2.i index 408fde5082..f5547fc090 100644 --- a/pjsip-apps/src/swig/pjsua2.i +++ b/pjsip-apps/src/swig/pjsua2.i @@ -179,6 +179,7 @@ using namespace pj; %feature("director") FindBuddyMatch; %feature("director") AudioMediaPlayer; %feature("director") AudioMediaPort; +%feature("director") AudioMediaAiPort; %feature("director") VideoRecorder; // PendingJob is only used on Python diff --git a/pjsip-apps/src/swig/symbols.i b/pjsip-apps/src/swig/symbols.i index 5aa66d2a2b..6dfb5b8d86 100644 --- a/pjsip-apps/src/swig/symbols.i +++ b/pjsip-apps/src/swig/symbols.i @@ -2,206 +2,207 @@ enum pj_file_access { - PJ_O_RDONLY = 0x1101, - PJ_O_WRONLY = 0x1102, - PJ_O_RDWR = 0x1103, - PJ_O_APPEND = 0x1108, - PJ_O_CLOEXEC = 0x1104, - PJ_O_ASYNC = 0x200, - PJ_O_SEQUENTIAL = 0x400, - PJ_O_RANDOM = 0x800 + PJ_O_RDONLY = 0x1101, + PJ_O_WRONLY = 0x1102, + PJ_O_RDWR = 0x1103, + PJ_O_APPEND = 0x1108, + PJ_O_CLOEXEC = 0x1104, + PJ_O_ASYNC = 0x200, + PJ_O_SEQUENTIAL = 0x400, + PJ_O_RANDOM = 0x800 }; enum pj_log_decoration { - PJ_LOG_HAS_DAY_NAME = 1, - PJ_LOG_HAS_YEAR = 2, - PJ_LOG_HAS_MONTH = 4, - PJ_LOG_HAS_DAY_OF_MON = 8, - PJ_LOG_HAS_TIME = 16, - PJ_LOG_HAS_MICRO_SEC = 32, - PJ_LOG_HAS_SENDER = 64, - PJ_LOG_HAS_NEWLINE = 128, - PJ_LOG_HAS_CR = 256, - PJ_LOG_HAS_SPACE = 512, - PJ_LOG_HAS_COLOR = 1024, - PJ_LOG_HAS_LEVEL_TEXT = 2048, - PJ_LOG_HAS_THREAD_ID = 4096, - PJ_LOG_HAS_THREAD_SWC = 8192, - PJ_LOG_HAS_INDENT =16384 + PJ_LOG_HAS_DAY_NAME = 1, + PJ_LOG_HAS_YEAR = 2, + PJ_LOG_HAS_MONTH = 4, + PJ_LOG_HAS_DAY_OF_MON = 8, + PJ_LOG_HAS_TIME = 16, + PJ_LOG_HAS_MICRO_SEC = 32, + PJ_LOG_HAS_SENDER = 64, + PJ_LOG_HAS_NEWLINE = 128, + PJ_LOG_HAS_CR = 256, + PJ_LOG_HAS_SPACE = 512, + PJ_LOG_HAS_COLOR = 1024, + PJ_LOG_HAS_LEVEL_TEXT = 2048, + PJ_LOG_HAS_THREAD_ID = 4096, + PJ_LOG_HAS_THREAD_SWC = 8192, + PJ_LOG_HAS_INDENT = 16384 }; typedef enum pj_qos_type { - PJ_QOS_TYPE_BEST_EFFORT, - PJ_QOS_TYPE_BACKGROUND, - PJ_QOS_TYPE_VIDEO, - PJ_QOS_TYPE_VOICE, - PJ_QOS_TYPE_CONTROL, - PJ_QOS_TYPE_SIGNALLING + PJ_QOS_TYPE_BEST_EFFORT, + PJ_QOS_TYPE_BACKGROUND, + PJ_QOS_TYPE_VIDEO, + PJ_QOS_TYPE_VOICE, + PJ_QOS_TYPE_CONTROL, + PJ_QOS_TYPE_SIGNALLING } pj_qos_type; typedef enum pj_qos_flag { - PJ_QOS_PARAM_HAS_DSCP = 1, - PJ_QOS_PARAM_HAS_SO_PRIO = 2, - PJ_QOS_PARAM_HAS_WMM = 4 + PJ_QOS_PARAM_HAS_DSCP = 1, + PJ_QOS_PARAM_HAS_SO_PRIO = 2, + PJ_QOS_PARAM_HAS_WMM = 4 } pj_qos_flag; typedef enum pj_qos_wmm_prio { - PJ_QOS_WMM_PRIO_BULK_EFFORT, - PJ_QOS_WMM_PRIO_BULK, - PJ_QOS_WMM_PRIO_VIDEO, - PJ_QOS_WMM_PRIO_VOICE + PJ_QOS_WMM_PRIO_BULK_EFFORT, + PJ_QOS_WMM_PRIO_BULK, + PJ_QOS_WMM_PRIO_VIDEO, + PJ_QOS_WMM_PRIO_VOICE } pj_qos_wmm_prio; typedef struct pj_qos_params { - pj_uint8_t flags; - pj_uint8_t dscp_val; - pj_uint8_t so_prio; - pj_qos_wmm_prio wmm_prio; + pj_uint8_t flags; + pj_uint8_t dscp_val; + pj_uint8_t so_prio; + pj_qos_wmm_prio wmm_prio; } pj_qos_params; -typedef enum pj_ssl_cipher { - PJ_TLS_UNKNOWN_CIPHER = -1, - PJ_TLS_NULL_WITH_NULL_NULL = 0x00000000, - PJ_TLS_RSA_WITH_NULL_MD5 = 0x00000001, - PJ_TLS_RSA_WITH_NULL_SHA = 0x00000002, - PJ_TLS_RSA_WITH_NULL_SHA256 = 0x0000003B, - PJ_TLS_RSA_WITH_RC4_128_MD5 = 0x00000004, - PJ_TLS_RSA_WITH_RC4_128_SHA = 0x00000005, - PJ_TLS_RSA_WITH_3DES_EDE_CBC_SHA = 0x0000000A, - PJ_TLS_RSA_WITH_AES_128_CBC_SHA = 0x0000002F, - PJ_TLS_RSA_WITH_AES_256_CBC_SHA = 0x00000035, - PJ_TLS_RSA_WITH_AES_128_CBC_SHA256 = 0x0000003C, - PJ_TLS_RSA_WITH_AES_256_CBC_SHA256 = 0x0000003D, - PJ_TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA = 0x0000000D, - PJ_TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA = 0x00000010, - PJ_TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA = 0x00000013, - PJ_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA = 0x00000016, - PJ_TLS_DH_DSS_WITH_AES_128_CBC_SHA = 0x00000030, - PJ_TLS_DH_RSA_WITH_AES_128_CBC_SHA = 0x00000031, - PJ_TLS_DHE_DSS_WITH_AES_128_CBC_SHA = 0x00000032, - PJ_TLS_DHE_RSA_WITH_AES_128_CBC_SHA = 0x00000033, - PJ_TLS_DH_DSS_WITH_AES_256_CBC_SHA = 0x00000036, - PJ_TLS_DH_RSA_WITH_AES_256_CBC_SHA = 0x00000037, - PJ_TLS_DHE_DSS_WITH_AES_256_CBC_SHA = 0x00000038, - PJ_TLS_DHE_RSA_WITH_AES_256_CBC_SHA = 0x00000039, - PJ_TLS_DH_DSS_WITH_AES_128_CBC_SHA256 = 0x0000003E, - PJ_TLS_DH_RSA_WITH_AES_128_CBC_SHA256 = 0x0000003F, - PJ_TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 = 0x00000040, - PJ_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 = 0x00000067, - PJ_TLS_DH_DSS_WITH_AES_256_CBC_SHA256 = 0x00000068, - PJ_TLS_DH_RSA_WITH_AES_256_CBC_SHA256 = 0x00000069, - PJ_TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 = 0x0000006A, - PJ_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 = 0x0000006B, - PJ_TLS_DH_anon_WITH_RC4_128_MD5 = 0x00000018, - PJ_TLS_DH_anon_WITH_3DES_EDE_CBC_SHA = 0x0000001B, - PJ_TLS_DH_anon_WITH_AES_128_CBC_SHA = 0x00000034, - PJ_TLS_DH_anon_WITH_AES_256_CBC_SHA = 0x0000003A, - PJ_TLS_DH_anon_WITH_AES_128_CBC_SHA256 = 0x0000006C, - PJ_TLS_DH_anon_WITH_AES_256_CBC_SHA256 = 0x0000006D, - PJ_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 = 0x0000c02c, - PJ_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 = 0x0000c030, - PJ_TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 = 0x000000a3, - PJ_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 = 0x0000009f, - PJ_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 = 0x0000c02b, - PJ_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 = 0x0000c02f, - PJ_TLS_AES_128_GCM_SHA256 = 0x00001301, - PJ_TLS_AES_256_GCM_SHA384 = 0x00001302, - PJ_TLS_CHACHA20_POLY1305_SHA256 = 0x00001303, - PJ_TLS_RSA_EXPORT_WITH_RC4_40_MD5 = 0x00000003, - PJ_TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 = 0x00000006, - PJ_TLS_RSA_WITH_IDEA_CBC_SHA = 0x00000007, - PJ_TLS_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x00000008, - PJ_TLS_RSA_WITH_DES_CBC_SHA = 0x00000009, - PJ_TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA = 0x0000000B, - PJ_TLS_DH_DSS_WITH_DES_CBC_SHA = 0x0000000C, - PJ_TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x0000000E, - PJ_TLS_DH_RSA_WITH_DES_CBC_SHA = 0x0000000F, - PJ_TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA = 0x00000011, - PJ_TLS_DHE_DSS_WITH_DES_CBC_SHA = 0x00000012, - PJ_TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x00000014, - PJ_TLS_DHE_RSA_WITH_DES_CBC_SHA = 0x00000015, - PJ_TLS_DH_anon_EXPORT_WITH_RC4_40_MD5 = 0x00000017, - PJ_TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA = 0x00000019, - PJ_TLS_DH_anon_WITH_DES_CBC_SHA = 0x0000001A, - PJ_SSL_FORTEZZA_KEA_WITH_NULL_SHA = 0x0000001C, - PJ_SSL_FORTEZZA_KEA_WITH_FORTEZZA_CBC_SHA = 0x0000001D, - PJ_SSL_FORTEZZA_KEA_WITH_RC4_128_SHA = 0x0000001E, - PJ_SSL_CK_RC4_128_WITH_MD5 = 0x00010080, - PJ_SSL_CK_RC4_128_EXPORT40_WITH_MD5 = 0x00020080, - PJ_SSL_CK_RC2_128_CBC_WITH_MD5 = 0x00030080, - PJ_SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5 = 0x00040080, - PJ_SSL_CK_IDEA_128_CBC_WITH_MD5 = 0x00050080, - PJ_SSL_CK_DES_64_CBC_WITH_MD5 = 0x00060040, - PJ_SSL_CK_DES_192_EDE3_CBC_WITH_MD5 = 0x000700C0 +typedef enum pj_ssl_cipher +{ + PJ_TLS_UNKNOWN_CIPHER = -1, + PJ_TLS_NULL_WITH_NULL_NULL = 0x00000000, + PJ_TLS_RSA_WITH_NULL_MD5 = 0x00000001, + PJ_TLS_RSA_WITH_NULL_SHA = 0x00000002, + PJ_TLS_RSA_WITH_NULL_SHA256 = 0x0000003B, + PJ_TLS_RSA_WITH_RC4_128_MD5 = 0x00000004, + PJ_TLS_RSA_WITH_RC4_128_SHA = 0x00000005, + PJ_TLS_RSA_WITH_3DES_EDE_CBC_SHA = 0x0000000A, + PJ_TLS_RSA_WITH_AES_128_CBC_SHA = 0x0000002F, + PJ_TLS_RSA_WITH_AES_256_CBC_SHA = 0x00000035, + PJ_TLS_RSA_WITH_AES_128_CBC_SHA256 = 0x0000003C, + PJ_TLS_RSA_WITH_AES_256_CBC_SHA256 = 0x0000003D, + PJ_TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA = 0x0000000D, + PJ_TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA = 0x00000010, + PJ_TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA = 0x00000013, + PJ_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA = 0x00000016, + PJ_TLS_DH_DSS_WITH_AES_128_CBC_SHA = 0x00000030, + PJ_TLS_DH_RSA_WITH_AES_128_CBC_SHA = 0x00000031, + PJ_TLS_DHE_DSS_WITH_AES_128_CBC_SHA = 0x00000032, + PJ_TLS_DHE_RSA_WITH_AES_128_CBC_SHA = 0x00000033, + PJ_TLS_DH_DSS_WITH_AES_256_CBC_SHA = 0x00000036, + PJ_TLS_DH_RSA_WITH_AES_256_CBC_SHA = 0x00000037, + PJ_TLS_DHE_DSS_WITH_AES_256_CBC_SHA = 0x00000038, + PJ_TLS_DHE_RSA_WITH_AES_256_CBC_SHA = 0x00000039, + PJ_TLS_DH_DSS_WITH_AES_128_CBC_SHA256 = 0x0000003E, + PJ_TLS_DH_RSA_WITH_AES_128_CBC_SHA256 = 0x0000003F, + PJ_TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 = 0x00000040, + PJ_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 = 0x00000067, + PJ_TLS_DH_DSS_WITH_AES_256_CBC_SHA256 = 0x00000068, + PJ_TLS_DH_RSA_WITH_AES_256_CBC_SHA256 = 0x00000069, + PJ_TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 = 0x0000006A, + PJ_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 = 0x0000006B, + PJ_TLS_DH_anon_WITH_RC4_128_MD5 = 0x00000018, + PJ_TLS_DH_anon_WITH_3DES_EDE_CBC_SHA = 0x0000001B, + PJ_TLS_DH_anon_WITH_AES_128_CBC_SHA = 0x00000034, + PJ_TLS_DH_anon_WITH_AES_256_CBC_SHA = 0x0000003A, + PJ_TLS_DH_anon_WITH_AES_128_CBC_SHA256 = 0x0000006C, + PJ_TLS_DH_anon_WITH_AES_256_CBC_SHA256 = 0x0000006D, + PJ_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 = 0x0000c02c, + PJ_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 = 0x0000c030, + PJ_TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 = 0x000000a3, + PJ_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 = 0x0000009f, + PJ_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 = 0x0000c02b, + PJ_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 = 0x0000c02f, + PJ_TLS_AES_128_GCM_SHA256 = 0x00001301, + PJ_TLS_AES_256_GCM_SHA384 = 0x00001302, + PJ_TLS_CHACHA20_POLY1305_SHA256 = 0x00001303, + PJ_TLS_RSA_EXPORT_WITH_RC4_40_MD5 = 0x00000003, + PJ_TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 = 0x00000006, + PJ_TLS_RSA_WITH_IDEA_CBC_SHA = 0x00000007, + PJ_TLS_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x00000008, + PJ_TLS_RSA_WITH_DES_CBC_SHA = 0x00000009, + PJ_TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA = 0x0000000B, + PJ_TLS_DH_DSS_WITH_DES_CBC_SHA = 0x0000000C, + PJ_TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x0000000E, + PJ_TLS_DH_RSA_WITH_DES_CBC_SHA = 0x0000000F, + PJ_TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA = 0x00000011, + PJ_TLS_DHE_DSS_WITH_DES_CBC_SHA = 0x00000012, + PJ_TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x00000014, + PJ_TLS_DHE_RSA_WITH_DES_CBC_SHA = 0x00000015, + PJ_TLS_DH_anon_EXPORT_WITH_RC4_40_MD5 = 0x00000017, + PJ_TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA = 0x00000019, + PJ_TLS_DH_anon_WITH_DES_CBC_SHA = 0x0000001A, + PJ_SSL_FORTEZZA_KEA_WITH_NULL_SHA = 0x0000001C, + PJ_SSL_FORTEZZA_KEA_WITH_FORTEZZA_CBC_SHA = 0x0000001D, + PJ_SSL_FORTEZZA_KEA_WITH_RC4_128_SHA = 0x0000001E, + PJ_SSL_CK_RC4_128_WITH_MD5 = 0x00010080, + PJ_SSL_CK_RC4_128_EXPORT40_WITH_MD5 = 0x00020080, + PJ_SSL_CK_RC2_128_CBC_WITH_MD5 = 0x00030080, + PJ_SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5 = 0x00040080, + PJ_SSL_CK_IDEA_128_CBC_WITH_MD5 = 0x00050080, + PJ_SSL_CK_DES_64_CBC_WITH_MD5 = 0x00060040, + PJ_SSL_CK_DES_192_EDE3_CBC_WITH_MD5 = 0x000700C0 } pj_ssl_cipher; typedef enum pj_ssl_sock_proto { - PJ_SSL_SOCK_PROTO_DEFAULT = 0, - PJ_SSL_SOCK_PROTO_SSL2 = (1 << 0), - PJ_SSL_SOCK_PROTO_SSL3 = (1 << 1), - PJ_SSL_SOCK_PROTO_TLS1 = (1 << 2), - PJ_SSL_SOCK_PROTO_TLS1_1 = (1 << 3), - PJ_SSL_SOCK_PROTO_TLS1_2 = (1 << 4), - PJ_SSL_SOCK_PROTO_TLS1_3 = (1 << 5), - PJ_SSL_SOCK_PROTO_SSL23 = (1 << 16) - 1, - PJ_SSL_SOCK_PROTO_ALL = (1 << 16) - 1, - PJ_SSL_SOCK_PROTO_DTLS1 = (1 << 16), + PJ_SSL_SOCK_PROTO_DEFAULT = 0, + PJ_SSL_SOCK_PROTO_SSL2 = 1 << 0, + PJ_SSL_SOCK_PROTO_SSL3 = 1 << 1, + PJ_SSL_SOCK_PROTO_TLS1 = 1 << 2, + PJ_SSL_SOCK_PROTO_TLS1_1 = 1 << 3, + PJ_SSL_SOCK_PROTO_TLS1_2 = 1 << 4, + PJ_SSL_SOCK_PROTO_TLS1_3 = 1 << 5, + PJ_SSL_SOCK_PROTO_SSL23 = (1 << 16) - 1, + PJ_SSL_SOCK_PROTO_ALL = (1 << 16) - 1, + PJ_SSL_SOCK_PROTO_DTLS1 = 1 << 16 } pj_ssl_sock_proto; typedef enum pj_ssl_cert_name_type { - PJ_SSL_CERT_NAME_UNKNOWN = 0, - PJ_SSL_CERT_NAME_RFC822, - PJ_SSL_CERT_NAME_DNS, - PJ_SSL_CERT_NAME_URI, - PJ_SSL_CERT_NAME_IP + PJ_SSL_CERT_NAME_UNKNOWN = 0, + PJ_SSL_CERT_NAME_RFC822, + PJ_SSL_CERT_NAME_DNS, + PJ_SSL_CERT_NAME_URI, + PJ_SSL_CERT_NAME_IP } pj_ssl_cert_name_type; typedef enum pj_ssl_cert_verify_flag_t { - PJ_SSL_CERT_ESUCCESS = 0, - PJ_SSL_CERT_EISSUER_NOT_FOUND = (1 << 0), - PJ_SSL_CERT_EUNTRUSTED = (1 << 1), - PJ_SSL_CERT_EVALIDITY_PERIOD = (1 << 2), - PJ_SSL_CERT_EINVALID_FORMAT = (1 << 3), - PJ_SSL_CERT_EINVALID_PURPOSE = (1 << 4), - PJ_SSL_CERT_EISSUER_MISMATCH = (1 << 5), - PJ_SSL_CERT_ECRL_FAILURE = (1 << 6), - PJ_SSL_CERT_EREVOKED = (1 << 7), - PJ_SSL_CERT_ECHAIN_TOO_LONG = (1 << 8), - PJ_SSL_CERT_EWEAK_SIGNATURE = (1 << 9), - PJ_SSL_CERT_EIDENTITY_NOT_MATCH = (1 << 30), - PJ_SSL_CERT_EUNKNOWN = (1 << 31) + PJ_SSL_CERT_ESUCCESS = 0, + PJ_SSL_CERT_EISSUER_NOT_FOUND = 1 << 0, + PJ_SSL_CERT_EUNTRUSTED = 1 << 1, + PJ_SSL_CERT_EVALIDITY_PERIOD = 1 << 2, + PJ_SSL_CERT_EINVALID_FORMAT = 1 << 3, + PJ_SSL_CERT_EINVALID_PURPOSE = 1 << 4, + PJ_SSL_CERT_EISSUER_MISMATCH = 1 << 5, + PJ_SSL_CERT_ECRL_FAILURE = 1 << 6, + PJ_SSL_CERT_EREVOKED = 1 << 7, + PJ_SSL_CERT_ECHAIN_TOO_LONG = 1 << 8, + PJ_SSL_CERT_EWEAK_SIGNATURE = 1 << 9, + PJ_SSL_CERT_EIDENTITY_NOT_MATCH = 1 << 30, + PJ_SSL_CERT_EUNKNOWN = 1 << 31 } pj_ssl_cert_verify_flag_t; typedef enum pj_ssl_cert_lookup_type { - PJ_SSL_CERT_LOOKUP_NONE, - PJ_SSL_CERT_LOOKUP_SUBJECT, - PJ_SSL_CERT_LOOKUP_FINGERPRINT, - PJ_SSL_CERT_LOOKUP_FRIENDLY_NAME + PJ_SSL_CERT_LOOKUP_NONE, + PJ_SSL_CERT_LOOKUP_SUBJECT, + PJ_SSL_CERT_LOOKUP_FINGERPRINT, + PJ_SSL_CERT_LOOKUP_FRIENDLY_NAME } pj_ssl_cert_lookup_type; typedef enum pj_ssl_cert_direct_type { - PJ_SSL_CERT_DIRECT_NONE = 0, - PJ_SSL_CERT_DIRECT_OPENSSL_EVP_PKEY = 1, - PJ_SSL_CERT_DIRECT_OPENSSL_X509_CERT = 2, + PJ_SSL_CERT_DIRECT_NONE = 0, + PJ_SSL_CERT_DIRECT_OPENSSL_EVP_PKEY = 1, + PJ_SSL_CERT_DIRECT_OPENSSL_X509_CERT = 2 } pj_ssl_cert_direct_type; typedef int pj_status_t; enum pj_constants_ { - PJ_SUCCESS=0, - PJ_TRUE=1, - PJ_FALSE=0 + PJ_SUCCESS = 0, + PJ_TRUE = 1, + PJ_FALSE = 0 }; typedef unsigned char pj_uint8_t; @@ -214,691 +215,724 @@ typedef unsigned short pj_uint16_t; typedef enum pj_ice_sess_trickle { - PJ_ICE_SESS_TRICKLE_DISABLED, - PJ_ICE_SESS_TRICKLE_HALF, - PJ_ICE_SESS_TRICKLE_FULL + PJ_ICE_SESS_TRICKLE_DISABLED, + PJ_ICE_SESS_TRICKLE_HALF, + PJ_ICE_SESS_TRICKLE_FULL } pj_ice_sess_trickle; typedef enum pj_stun_nat_type { - PJ_STUN_NAT_TYPE_UNKNOWN, - PJ_STUN_NAT_TYPE_ERR_UNKNOWN, - PJ_STUN_NAT_TYPE_OPEN, - PJ_STUN_NAT_TYPE_BLOCKED, - PJ_STUN_NAT_TYPE_SYMMETRIC_UDP, - PJ_STUN_NAT_TYPE_FULL_CONE, - PJ_STUN_NAT_TYPE_SYMMETRIC, - PJ_STUN_NAT_TYPE_RESTRICTED, - PJ_STUN_NAT_TYPE_PORT_RESTRICTED + PJ_STUN_NAT_TYPE_UNKNOWN, + PJ_STUN_NAT_TYPE_ERR_UNKNOWN, + PJ_STUN_NAT_TYPE_OPEN, + PJ_STUN_NAT_TYPE_BLOCKED, + PJ_STUN_NAT_TYPE_SYMMETRIC_UDP, + PJ_STUN_NAT_TYPE_FULL_CONE, + PJ_STUN_NAT_TYPE_SYMMETRIC, + PJ_STUN_NAT_TYPE_RESTRICTED, + PJ_STUN_NAT_TYPE_PORT_RESTRICTED } pj_stun_nat_type; typedef enum pj_turn_tp_type { - PJ_TURN_TP_UDP = 17, - PJ_TURN_TP_TCP = 6, - PJ_TURN_TP_TLS = 56 + PJ_TURN_TP_UDP = 17, + PJ_TURN_TP_TCP = 6, + PJ_TURN_TP_TLS = 56 } pj_turn_tp_type; typedef enum pjmedia_conf_op_type { - PJMEDIA_CONF_OP_UNKNOWN, - PJMEDIA_CONF_OP_ADD_PORT, - PJMEDIA_CONF_OP_REMOVE_PORT, - PJMEDIA_CONF_OP_CONNECT_PORTS, - PJMEDIA_CONF_OP_DISCONNECT_PORTS + PJMEDIA_CONF_OP_UNKNOWN, + PJMEDIA_CONF_OP_ADD_PORT, + PJMEDIA_CONF_OP_REMOVE_PORT, + PJMEDIA_CONF_OP_CONNECT_PORTS, + PJMEDIA_CONF_OP_DISCONNECT_PORTS } pjmedia_conf_op_type; typedef enum pjmedia_echo_flag { - PJMEDIA_ECHO_DEFAULT= 0, - PJMEDIA_ECHO_SPEEX = 1, - PJMEDIA_ECHO_SIMPLE = 2, - PJMEDIA_ECHO_WEBRTC = 3, - PJMEDIA_ECHO_WEBRTC_AEC3 = 4, - PJMEDIA_ECHO_ALGO_MASK = 15, - PJMEDIA_ECHO_NO_LOCK = 16, - PJMEDIA_ECHO_USE_SIMPLE_FIFO = 32, - PJMEDIA_ECHO_USE_SW_ECHO = 64, - PJMEDIA_ECHO_USE_NOISE_SUPPRESSOR = 128, - PJMEDIA_ECHO_USE_GAIN_CONTROLLER = 256, - PJMEDIA_ECHO_AGGRESSIVENESS_DEFAULT = 0, - PJMEDIA_ECHO_AGGRESSIVENESS_CONSERVATIVE = 0x1000, - PJMEDIA_ECHO_AGGRESSIVENESS_MODERATE = 0x2000, - PJMEDIA_ECHO_AGGRESSIVENESS_AGGRESSIVE = 0x3000, - PJMEDIA_ECHO_AGGRESSIVENESS_MASK = 0xF000 + PJMEDIA_ECHO_DEFAULT = 0, + PJMEDIA_ECHO_SPEEX = 1, + PJMEDIA_ECHO_SIMPLE = 2, + PJMEDIA_ECHO_WEBRTC = 3, + PJMEDIA_ECHO_WEBRTC_AEC3 = 4, + PJMEDIA_ECHO_ALGO_MASK = 15, + PJMEDIA_ECHO_NO_LOCK = 16, + PJMEDIA_ECHO_USE_SIMPLE_FIFO = 32, + PJMEDIA_ECHO_USE_SW_ECHO = 64, + PJMEDIA_ECHO_USE_NOISE_SUPPRESSOR = 128, + PJMEDIA_ECHO_USE_GAIN_CONTROLLER = 256, + PJMEDIA_ECHO_AGGRESSIVENESS_DEFAULT = 0, + PJMEDIA_ECHO_AGGRESSIVENESS_CONSERVATIVE = 0x1000, + PJMEDIA_ECHO_AGGRESSIVENESS_MODERATE = 0x2000, + PJMEDIA_ECHO_AGGRESSIVENESS_AGGRESSIVE = 0x3000, + PJMEDIA_ECHO_AGGRESSIVENESS_MASK = 0xF000 } pjmedia_echo_flag; typedef enum pjmedia_event_type { - PJMEDIA_EVENT_NONE, - PJMEDIA_EVENT_FMT_CHANGED = ( 'H'<<24 | 'C'<<16 | 'M'<<8 | 'F' ), - PJMEDIA_EVENT_WND_CLOSING = ( 'L'<<24 | 'C'<<16 | 'N'<<8 | 'W' ), - PJMEDIA_EVENT_WND_CLOSED = ( 'O'<<24 | 'C'<<16 | 'N'<<8 | 'W' ), - PJMEDIA_EVENT_WND_RESIZED = ( 'Z'<<24 | 'R'<<16 | 'N'<<8 | 'W' ), - PJMEDIA_EVENT_MOUSE_BTN_DOWN = ( 'N'<<24 | 'D'<<16 | 'S'<<8 | 'M' ), - PJMEDIA_EVENT_KEYFRAME_FOUND = ( 'F'<<24 | 'R'<<16 | 'F'<<8 | 'I' ), - PJMEDIA_EVENT_KEYFRAME_MISSING = ( 'M'<<24 | 'R'<<16 | 'F'<<8 | 'I' ), - PJMEDIA_EVENT_ORIENT_CHANGED = ( 'T'<<24 | 'N'<<16 | 'R'<<8 | 'O' ), - PJMEDIA_EVENT_RX_RTCP_FB = ( 'B'<<24 | 'F'<<16 | 'T'<<8 | 'R' ), - PJMEDIA_EVENT_AUD_DEV_ERROR = ( 'R'<<24 | 'R'<<16 | 'E'<<8 | 'A' ), - PJMEDIA_EVENT_VID_DEV_ERROR = ( 'R'<<24 | 'R'<<16 | 'E'<<8 | 'V' ), - PJMEDIA_EVENT_MEDIA_TP_ERR = ( 'R'<<24 | 'R'<<16 | 'E'<<8 | 'T' ), - PJMEDIA_EVENT_CALLBACK = ( ' '<<24 | ' '<<16 | 'B'<<8 | 'C' ) + PJMEDIA_EVENT_NONE, + PJMEDIA_EVENT_FMT_CHANGED = ((('H' << 24) | ('C' << 16)) | ('M' << 8)) | 'F', + PJMEDIA_EVENT_WND_CLOSING = ((('L' << 24) | ('C' << 16)) | ('N' << 8)) | 'W', + PJMEDIA_EVENT_WND_CLOSED = ((('O' << 24) | ('C' << 16)) | ('N' << 8)) | 'W', + PJMEDIA_EVENT_WND_RESIZED = ((('Z' << 24) | ('R' << 16)) | ('N' << 8)) | 'W', + PJMEDIA_EVENT_MOUSE_BTN_DOWN = ((('N' << 24) | ('D' << 16)) | ('S' << 8)) | 'M', + PJMEDIA_EVENT_KEYFRAME_FOUND = ((('F' << 24) | ('R' << 16)) | ('F' << 8)) | 'I', + PJMEDIA_EVENT_KEYFRAME_MISSING = ((('M' << 24) | ('R' << 16)) | ('F' << 8)) | 'I', + PJMEDIA_EVENT_ORIENT_CHANGED = ((('T' << 24) | ('N' << 16)) | ('R' << 8)) | 'O', + PJMEDIA_EVENT_RX_RTCP_FB = ((('B' << 24) | ('F' << 16)) | ('T' << 8)) | 'R', + PJMEDIA_EVENT_AUD_DEV_ERROR = ((('R' << 24) | ('R' << 16)) | ('E' << 8)) | 'A', + PJMEDIA_EVENT_VID_DEV_ERROR = ((('R' << 24) | ('R' << 16)) | ('E' << 8)) | 'V', + PJMEDIA_EVENT_MEDIA_TP_ERR = ((('R' << 24) | ('R' << 16)) | ('E' << 8)) | 'T', + PJMEDIA_EVENT_CALLBACK = (((' ' << 24) | (' ' << 16)) | ('B' << 8)) | 'C' } pjmedia_event_type; typedef enum pjmedia_format_id { - PJMEDIA_FORMAT_L16 = 0, - PJMEDIA_FORMAT_PCM = PJMEDIA_FORMAT_L16, - PJMEDIA_FORMAT_PCMA = ( 'W'<<24 | 'A'<<16 | 'L'<<8 | 'A' ), - PJMEDIA_FORMAT_ALAW = PJMEDIA_FORMAT_PCMA, - PJMEDIA_FORMAT_PCMU = ( 'W'<<24 | 'A'<<16 | 'L'<<8 | 'u' ), - PJMEDIA_FORMAT_ULAW = PJMEDIA_FORMAT_PCMU, - PJMEDIA_FORMAT_AMR = ( 'R'<<24 | 'M'<<16 | 'A'<<8 | ' ' ), - PJMEDIA_FORMAT_G722 = ( '2'<<24 | '2'<<16 | '7'<<8 | 'G' ), - PJMEDIA_FORMAT_G729 = ( '9'<<24 | '2'<<16 | '7'<<8 | 'G' ), - PJMEDIA_FORMAT_ILBC = ( 'C'<<24 | 'B'<<16 | 'L'<<8 | 'I' ), - PJMEDIA_FORMAT_RGB24 = ( '3'<<24 | 'B'<<16 | 'G'<<8 | 'R' ), - PJMEDIA_FORMAT_RGBA = ( 'A'<<24 | 'B'<<16 | 'G'<<8 | 'R' ), - PJMEDIA_FORMAT_BGRA = ( 'A'<<24 | 'R'<<16 | 'G'<<8 | 'B' ), - PJMEDIA_FORMAT_RGB32 = PJMEDIA_FORMAT_RGBA, - PJMEDIA_FORMAT_DIB = ( ' '<<24 | 'B'<<16 | 'I'<<8 | 'D' ), - PJMEDIA_FORMAT_GBRP = ( 'P'<<24 | 'R'<<16 | 'B'<<8 | 'G' ), - PJMEDIA_FORMAT_AYUV = ( 'V'<<24 | 'U'<<16 | 'Y'<<8 | 'A' ), - PJMEDIA_FORMAT_YUY2 = ( '2'<<24 | 'Y'<<16 | 'U'<<8 | 'Y' ), - PJMEDIA_FORMAT_UYVY = ( 'Y'<<24 | 'V'<<16 | 'Y'<<8 | 'U' ), - PJMEDIA_FORMAT_YVYU = ( 'U'<<24 | 'Y'<<16 | 'V'<<8 | 'Y' ), - PJMEDIA_FORMAT_I420 = ( '0'<<24 | '2'<<16 | '4'<<8 | 'I' ), - PJMEDIA_FORMAT_IYUV = PJMEDIA_FORMAT_I420, - PJMEDIA_FORMAT_YV12 = ( '2'<<24 | '1'<<16 | 'V'<<8 | 'Y' ), - PJMEDIA_FORMAT_NV12 = ( '2'<<24 | '1'<<16 | 'V'<<8 | 'N' ), - PJMEDIA_FORMAT_NV21 = ( '1'<<24 | '2'<<16 | 'V'<<8 | 'N' ), - PJMEDIA_FORMAT_I422 = ( '2'<<24 | '2'<<16 | '4'<<8 | 'I' ), - PJMEDIA_FORMAT_I420JPEG = ( '0'<<24 | '2'<<16 | '4'<<8 | 'J' ), - PJMEDIA_FORMAT_I422JPEG = ( '2'<<24 | '2'<<16 | '4'<<8 | 'J' ), - PJMEDIA_FORMAT_H261 = ( '1'<<24 | '6'<<16 | '2'<<8 | 'H' ), - PJMEDIA_FORMAT_H263 = ( '3'<<24 | '6'<<16 | '2'<<8 | 'H' ), - PJMEDIA_FORMAT_H263P = ( '3'<<24 | '6'<<16 | '2'<<8 | 'P' ), - PJMEDIA_FORMAT_H264 = ( '4'<<24 | '6'<<16 | '2'<<8 | 'H' ), - PJMEDIA_FORMAT_VP8 = ( '0'<<24 | '8'<<16 | 'P'<<8 | 'V' ), - PJMEDIA_FORMAT_VP9 = ( '0'<<24 | '9'<<16 | 'P'<<8 | 'V' ), - PJMEDIA_FORMAT_MJPEG = ( 'G'<<24 | 'P'<<16 | 'J'<<8 | 'M' ), - PJMEDIA_FORMAT_MPEG1VIDEO = ( 'V'<<24 | '1'<<16 | 'P'<<8 | 'M' ), - PJMEDIA_FORMAT_MPEG2VIDEO = ( 'V'<<24 | '2'<<16 | 'P'<<8 | 'M' ), - PJMEDIA_FORMAT_MPEG4 = ( '4'<<24 | 'G'<<16 | 'P'<<8 | 'M' ), - PJMEDIA_FORMAT_INVALID = 0xFFFFFFF + PJMEDIA_FORMAT_L16 = 0, + PJMEDIA_FORMAT_PCM = PJMEDIA_FORMAT_L16, + PJMEDIA_FORMAT_PCMA = ((('W' << 24) | ('A' << 16)) | ('L' << 8)) | 'A', + PJMEDIA_FORMAT_ALAW = PJMEDIA_FORMAT_PCMA, + PJMEDIA_FORMAT_PCMU = ((('W' << 24) | ('A' << 16)) | ('L' << 8)) | 'u', + PJMEDIA_FORMAT_ULAW = PJMEDIA_FORMAT_PCMU, + PJMEDIA_FORMAT_AMR = ((('R' << 24) | ('M' << 16)) | ('A' << 8)) | ' ', + PJMEDIA_FORMAT_G722 = ((('2' << 24) | ('2' << 16)) | ('7' << 8)) | 'G', + PJMEDIA_FORMAT_G729 = ((('9' << 24) | ('2' << 16)) | ('7' << 8)) | 'G', + PJMEDIA_FORMAT_ILBC = ((('C' << 24) | ('B' << 16)) | ('L' << 8)) | 'I', + PJMEDIA_FORMAT_RGB24 = ((('3' << 24) | ('B' << 16)) | ('G' << 8)) | 'R', + PJMEDIA_FORMAT_RGBA = ((('A' << 24) | ('B' << 16)) | ('G' << 8)) | 'R', + PJMEDIA_FORMAT_BGRA = ((('A' << 24) | ('R' << 16)) | ('G' << 8)) | 'B', + PJMEDIA_FORMAT_RGB32 = PJMEDIA_FORMAT_RGBA, + PJMEDIA_FORMAT_DIB = (((' ' << 24) | ('B' << 16)) | ('I' << 8)) | 'D', + PJMEDIA_FORMAT_GBRP = ((('P' << 24) | ('R' << 16)) | ('B' << 8)) | 'G', + PJMEDIA_FORMAT_AYUV = ((('V' << 24) | ('U' << 16)) | ('Y' << 8)) | 'A', + PJMEDIA_FORMAT_YUY2 = ((('2' << 24) | ('Y' << 16)) | ('U' << 8)) | 'Y', + PJMEDIA_FORMAT_UYVY = ((('Y' << 24) | ('V' << 16)) | ('Y' << 8)) | 'U', + PJMEDIA_FORMAT_YVYU = ((('U' << 24) | ('Y' << 16)) | ('V' << 8)) | 'Y', + PJMEDIA_FORMAT_I420 = ((('0' << 24) | ('2' << 16)) | ('4' << 8)) | 'I', + PJMEDIA_FORMAT_IYUV = PJMEDIA_FORMAT_I420, + PJMEDIA_FORMAT_YV12 = ((('2' << 24) | ('1' << 16)) | ('V' << 8)) | 'Y', + PJMEDIA_FORMAT_NV12 = ((('2' << 24) | ('1' << 16)) | ('V' << 8)) | 'N', + PJMEDIA_FORMAT_NV21 = ((('1' << 24) | ('2' << 16)) | ('V' << 8)) | 'N', + PJMEDIA_FORMAT_I422 = ((('2' << 24) | ('2' << 16)) | ('4' << 8)) | 'I', + PJMEDIA_FORMAT_I420JPEG = ((('0' << 24) | ('2' << 16)) | ('4' << 8)) | 'J', + PJMEDIA_FORMAT_I422JPEG = ((('2' << 24) | ('2' << 16)) | ('4' << 8)) | 'J', + PJMEDIA_FORMAT_H261 = ((('1' << 24) | ('6' << 16)) | ('2' << 8)) | 'H', + PJMEDIA_FORMAT_H263 = ((('3' << 24) | ('6' << 16)) | ('2' << 8)) | 'H', + PJMEDIA_FORMAT_H263P = ((('3' << 24) | ('6' << 16)) | ('2' << 8)) | 'P', + PJMEDIA_FORMAT_H264 = ((('4' << 24) | ('6' << 16)) | ('2' << 8)) | 'H', + PJMEDIA_FORMAT_VP8 = ((('0' << 24) | ('8' << 16)) | ('P' << 8)) | 'V', + PJMEDIA_FORMAT_VP9 = ((('0' << 24) | ('9' << 16)) | ('P' << 8)) | 'V', + PJMEDIA_FORMAT_MJPEG = ((('G' << 24) | ('P' << 16)) | ('J' << 8)) | 'M', + PJMEDIA_FORMAT_MPEG1VIDEO = ((('V' << 24) | ('1' << 16)) | ('P' << 8)) | 'M', + PJMEDIA_FORMAT_MPEG2VIDEO = ((('V' << 24) | ('2' << 16)) | ('P' << 8)) | 'M', + PJMEDIA_FORMAT_MPEG4 = ((('4' << 24) | ('G' << 16)) | ('P' << 8)) | 'M', + PJMEDIA_FORMAT_INVALID = 0xFFFFFFF } pjmedia_format_id; typedef enum pjmedia_frame_type { - PJMEDIA_FRAME_TYPE_NONE, - PJMEDIA_FRAME_TYPE_AUDIO, - PJMEDIA_FRAME_TYPE_EXTENDED, - PJMEDIA_FRAME_TYPE_VIDEO + PJMEDIA_FRAME_TYPE_NONE, + PJMEDIA_FRAME_TYPE_AUDIO, + PJMEDIA_FRAME_TYPE_EXTENDED, + PJMEDIA_FRAME_TYPE_VIDEO } pjmedia_frame_type; typedef enum pjmedia_jb_discard_algo { - PJMEDIA_JB_DISCARD_NONE = 0, - PJMEDIA_JB_DISCARD_STATIC, - PJMEDIA_JB_DISCARD_PROGRESSIVE + PJMEDIA_JB_DISCARD_NONE = 0, + PJMEDIA_JB_DISCARD_STATIC, + PJMEDIA_JB_DISCARD_PROGRESSIVE } pjmedia_jb_discard_algo; typedef enum pjmedia_rtcp_fb_type { - PJMEDIA_RTCP_FB_ACK, - PJMEDIA_RTCP_FB_NACK, - PJMEDIA_RTCP_FB_TRR_INT, - PJMEDIA_RTCP_FB_OTHER + PJMEDIA_RTCP_FB_ACK, + PJMEDIA_RTCP_FB_NACK, + PJMEDIA_RTCP_FB_TRR_INT, + PJMEDIA_RTCP_FB_OTHER } pjmedia_rtcp_fb_type; +typedef struct pjmedia_tone_digit +{ + char digit; + short on_msec; + short off_msec; + short volume; +} pjmedia_tone_digit; + +typedef struct pjmedia_tone_digit_map +{ + unsigned count; + struct + { + char digit; + short freq1; + short freq2; + } digits[16]; +} pjmedia_tone_digit_map; + +typedef struct pjmedia_tone_desc +{ + short freq1; + short freq2; + short on_msec; + short off_msec; + short volume; + short flags; +} pjmedia_tone_desc; + typedef enum pjmedia_srtp_use { - PJMEDIA_SRTP_DISABLED, - PJMEDIA_SRTP_UNKNOWN = PJMEDIA_SRTP_DISABLED, - PJMEDIA_SRTP_OPTIONAL, - PJMEDIA_SRTP_MANDATORY + PJMEDIA_SRTP_DISABLED, + PJMEDIA_SRTP_UNKNOWN = PJMEDIA_SRTP_DISABLED, + PJMEDIA_SRTP_OPTIONAL, + PJMEDIA_SRTP_MANDATORY } pjmedia_srtp_use; typedef enum pjmedia_srtp_crypto_option { - PJMEDIA_SRTP_NO_ENCRYPTION = 1, - PJMEDIA_SRTP_NO_AUTHENTICATION = 2 + PJMEDIA_SRTP_NO_ENCRYPTION = 1, + PJMEDIA_SRTP_NO_AUTHENTICATION = 2 } pjmedia_srtp_crypto_option; typedef enum pjmedia_srtp_keying_method { - PJMEDIA_SRTP_KEYING_SDES, - PJMEDIA_SRTP_KEYING_DTLS_SRTP, - PJMEDIA_SRTP_KEYINGS_COUNT + PJMEDIA_SRTP_KEYING_SDES, + PJMEDIA_SRTP_KEYING_DTLS_SRTP, + PJMEDIA_SRTP_KEYINGS_COUNT } pjmedia_srtp_keying_method; typedef enum pjmedia_type { - PJMEDIA_TYPE_NONE, - PJMEDIA_TYPE_AUDIO, - PJMEDIA_TYPE_VIDEO, - PJMEDIA_TYPE_TEXT, - PJMEDIA_TYPE_APPLICATION, - PJMEDIA_TYPE_UNKNOWN + PJMEDIA_TYPE_NONE, + PJMEDIA_TYPE_AUDIO, + PJMEDIA_TYPE_VIDEO, + PJMEDIA_TYPE_TEXT, + PJMEDIA_TYPE_APPLICATION, + PJMEDIA_TYPE_UNKNOWN } pjmedia_type; typedef enum pjmedia_dir { - PJMEDIA_DIR_NONE = 0, - PJMEDIA_DIR_ENCODING = 1, - PJMEDIA_DIR_CAPTURE = PJMEDIA_DIR_ENCODING, - PJMEDIA_DIR_DECODING = 2, - PJMEDIA_DIR_PLAYBACK = PJMEDIA_DIR_DECODING, - PJMEDIA_DIR_RENDER = PJMEDIA_DIR_DECODING, - PJMEDIA_DIR_ENCODING_DECODING = 3, - PJMEDIA_DIR_CAPTURE_PLAYBACK = PJMEDIA_DIR_ENCODING_DECODING, - PJMEDIA_DIR_CAPTURE_RENDER = PJMEDIA_DIR_ENCODING_DECODING + PJMEDIA_DIR_NONE = 0, + PJMEDIA_DIR_ENCODING = 1, + PJMEDIA_DIR_CAPTURE = PJMEDIA_DIR_ENCODING, + PJMEDIA_DIR_DECODING = 2, + PJMEDIA_DIR_PLAYBACK = PJMEDIA_DIR_DECODING, + PJMEDIA_DIR_RENDER = PJMEDIA_DIR_DECODING, + PJMEDIA_DIR_ENCODING_DECODING = 3, + PJMEDIA_DIR_CAPTURE_PLAYBACK = PJMEDIA_DIR_ENCODING_DECODING, + PJMEDIA_DIR_CAPTURE_RENDER = PJMEDIA_DIR_ENCODING_DECODING } pjmedia_dir; typedef enum pjmedia_tp_proto { - PJMEDIA_TP_PROTO_NONE = 0, - PJMEDIA_TP_PROTO_UNKNOWN = (1 << 0), - PJMEDIA_TP_PROTO_UDP = (1 << 1), - PJMEDIA_TP_PROTO_RTP = (1 << 2), - PJMEDIA_TP_PROTO_DTLS = (1 << 3), - PJMEDIA_TP_PROFILE_RTCP_FB = (1 << 13), - PJMEDIA_TP_PROFILE_SRTP = (1 << 14), - PJMEDIA_TP_PROFILE_AVP = (1 << 15), - PJMEDIA_TP_PROTO_RTP_AVP = (PJMEDIA_TP_PROTO_RTP | - PJMEDIA_TP_PROFILE_AVP), - PJMEDIA_TP_PROTO_RTP_SAVP = (PJMEDIA_TP_PROTO_RTP_AVP | - PJMEDIA_TP_PROFILE_SRTP), - PJMEDIA_TP_PROTO_DTLS_SRTP = (PJMEDIA_TP_PROTO_DTLS | - PJMEDIA_TP_PROTO_RTP_SAVP), - PJMEDIA_TP_PROTO_RTP_AVPF = (PJMEDIA_TP_PROTO_RTP_AVP | - PJMEDIA_TP_PROFILE_RTCP_FB), - PJMEDIA_TP_PROTO_RTP_SAVPF = (PJMEDIA_TP_PROTO_RTP_SAVP | - PJMEDIA_TP_PROFILE_RTCP_FB), - PJMEDIA_TP_PROTO_DTLS_SRTPF = (PJMEDIA_TP_PROTO_DTLS_SRTP | - PJMEDIA_TP_PROFILE_RTCP_FB), + PJMEDIA_TP_PROTO_NONE = 0, + PJMEDIA_TP_PROTO_UNKNOWN = 1 << 0, + PJMEDIA_TP_PROTO_UDP = 1 << 1, + PJMEDIA_TP_PROTO_RTP = 1 << 2, + PJMEDIA_TP_PROTO_DTLS = 1 << 3, + PJMEDIA_TP_PROFILE_RTCP_FB = 1 << 13, + PJMEDIA_TP_PROFILE_SRTP = 1 << 14, + PJMEDIA_TP_PROFILE_AVP = 1 << 15, + PJMEDIA_TP_PROTO_RTP_AVP = PJMEDIA_TP_PROTO_RTP | PJMEDIA_TP_PROFILE_AVP, + PJMEDIA_TP_PROTO_RTP_SAVP = PJMEDIA_TP_PROTO_RTP_AVP | PJMEDIA_TP_PROFILE_SRTP, + PJMEDIA_TP_PROTO_DTLS_SRTP = PJMEDIA_TP_PROTO_DTLS | PJMEDIA_TP_PROTO_RTP_SAVP, + PJMEDIA_TP_PROTO_RTP_AVPF = PJMEDIA_TP_PROTO_RTP_AVP | PJMEDIA_TP_PROFILE_RTCP_FB, + PJMEDIA_TP_PROTO_RTP_SAVPF = PJMEDIA_TP_PROTO_RTP_SAVP | PJMEDIA_TP_PROFILE_RTCP_FB, + PJMEDIA_TP_PROTO_DTLS_SRTPF = PJMEDIA_TP_PROTO_DTLS_SRTP | PJMEDIA_TP_PROFILE_RTCP_FB } pjmedia_tp_proto; typedef enum pjmedia_orient { - PJMEDIA_ORIENT_UNKNOWN, - PJMEDIA_ORIENT_NATURAL, - PJMEDIA_ORIENT_ROTATE_90DEG, - PJMEDIA_ORIENT_ROTATE_180DEG, - PJMEDIA_ORIENT_ROTATE_270DEG + PJMEDIA_ORIENT_UNKNOWN, + PJMEDIA_ORIENT_NATURAL, + PJMEDIA_ORIENT_ROTATE_90DEG, + PJMEDIA_ORIENT_ROTATE_180DEG, + PJMEDIA_ORIENT_ROTATE_270DEG } pjmedia_orient; typedef enum pjmedia_vid_dev_hwnd_type { - PJMEDIA_VID_DEV_HWND_TYPE_NONE, - PJMEDIA_VID_DEV_HWND_TYPE_WINDOWS, - PJMEDIA_VID_DEV_HWND_TYPE_COCOA, - PJMEDIA_VID_DEV_HWND_TYPE_IOS, - PJMEDIA_VID_DEV_HWND_TYPE_ANDROID + PJMEDIA_VID_DEV_HWND_TYPE_NONE, + PJMEDIA_VID_DEV_HWND_TYPE_WINDOWS, + PJMEDIA_VID_DEV_HWND_TYPE_COCOA, + PJMEDIA_VID_DEV_HWND_TYPE_IOS, + PJMEDIA_VID_DEV_HWND_TYPE_ANDROID } pjmedia_vid_dev_hwnd_type; typedef enum pjmedia_vid_packing { - PJMEDIA_VID_PACKING_UNKNOWN, - PJMEDIA_VID_PACKING_PACKETS = 1, - PJMEDIA_VID_PACKING_WHOLE = 2 + PJMEDIA_VID_PACKING_UNKNOWN, + PJMEDIA_VID_PACKING_PACKETS = 1, + PJMEDIA_VID_PACKING_WHOLE = 2 } pjmedia_vid_packing; typedef enum pjmedia_vid_conf_op_type { - PJMEDIA_VID_CONF_OP_UNKNOWN, - PJMEDIA_VID_CONF_OP_ADD_PORT, - PJMEDIA_VID_CONF_OP_REMOVE_PORT, - PJMEDIA_VID_CONF_OP_CONNECT_PORTS, - PJMEDIA_VID_CONF_OP_DISCONNECT_PORTS, - PJMEDIA_VID_CONF_OP_UPDATE_PORT + PJMEDIA_VID_CONF_OP_UNKNOWN, + PJMEDIA_VID_CONF_OP_ADD_PORT, + PJMEDIA_VID_CONF_OP_REMOVE_PORT, + PJMEDIA_VID_CONF_OP_CONNECT_PORTS, + PJMEDIA_VID_CONF_OP_DISCONNECT_PORTS, + PJMEDIA_VID_CONF_OP_UPDATE_PORT } pjmedia_vid_conf_op_type; typedef enum pjmedia_vid_stream_rc_method { - PJMEDIA_VID_STREAM_RC_NONE = 0, - PJMEDIA_VID_STREAM_RC_SIMPLE_BLOCKING = 1, - PJMEDIA_VID_STREAM_RC_SEND_THREAD = 2 + PJMEDIA_VID_STREAM_RC_NONE = 0, + PJMEDIA_VID_STREAM_RC_SIMPLE_BLOCKING = 1, + PJMEDIA_VID_STREAM_RC_SEND_THREAD = 2 } pjmedia_vid_stream_rc_method; +typedef enum pjmedia_ai_event_type +{ + PJMEDIA_AI_EVENT_CONNECTED, + PJMEDIA_AI_EVENT_DISCONNECTED, + PJMEDIA_AI_EVENT_TRANSCRIPT, + PJMEDIA_AI_EVENT_RESPONSE_START, + PJMEDIA_AI_EVENT_RESPONSE_DONE, + PJMEDIA_AI_EVENT_SPEECH_STARTED, + PJMEDIA_AI_EVENT_SPEECH_STOPPED +} pjmedia_ai_event_type; + enum pjmedia_file_writer_option { - PJMEDIA_FILE_WRITE_PCM = 0, - PJMEDIA_FILE_WRITE_ALAW = 1, - PJMEDIA_FILE_WRITE_ULAW = 2, + PJMEDIA_FILE_WRITE_PCM = 0, + PJMEDIA_FILE_WRITE_ALAW = 1, + PJMEDIA_FILE_WRITE_ULAW = 2 }; enum pjmedia_file_player_option { - PJMEDIA_FILE_NO_LOOP = 1, - PJMEDIA_FILE_NO_LOCK = 2 + PJMEDIA_FILE_NO_LOOP = 1, + PJMEDIA_FILE_NO_LOCK = 2 }; typedef enum pjmedia_aud_dev_route { - PJMEDIA_AUD_DEV_ROUTE_DEFAULT = 0, - PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER = 1, - PJMEDIA_AUD_DEV_ROUTE_EARPIECE = 2, - PJMEDIA_AUD_DEV_ROUTE_BLUETOOTH = 4, - PJMEDIA_AUD_DEV_ROUTE_CUSTOM = 128 + PJMEDIA_AUD_DEV_ROUTE_DEFAULT = 0, + PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER = 1, + PJMEDIA_AUD_DEV_ROUTE_EARPIECE = 2, + PJMEDIA_AUD_DEV_ROUTE_BLUETOOTH = 4, + PJMEDIA_AUD_DEV_ROUTE_CUSTOM = 128 } pjmedia_aud_dev_route; typedef enum pjmedia_aud_dev_cap { - PJMEDIA_AUD_DEV_CAP_EXT_FORMAT = 1, - PJMEDIA_AUD_DEV_CAP_INPUT_LATENCY = 2, - PJMEDIA_AUD_DEV_CAP_OUTPUT_LATENCY = 4, - PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING = 8, - PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING = 16, - PJMEDIA_AUD_DEV_CAP_INPUT_SIGNAL_METER = 32, - PJMEDIA_AUD_DEV_CAP_OUTPUT_SIGNAL_METER = 64, - PJMEDIA_AUD_DEV_CAP_INPUT_ROUTE = 128, - PJMEDIA_AUD_DEV_CAP_INPUT_SOURCE = 128, - PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE = 256, - PJMEDIA_AUD_DEV_CAP_EC = 512, - PJMEDIA_AUD_DEV_CAP_EC_TAIL = 1024, - PJMEDIA_AUD_DEV_CAP_VAD = 2048, - PJMEDIA_AUD_DEV_CAP_CNG = 4096, - PJMEDIA_AUD_DEV_CAP_PLC = 8192, - PJMEDIA_AUD_DEV_CAP_MAX = 16384 + PJMEDIA_AUD_DEV_CAP_EXT_FORMAT = 1, + PJMEDIA_AUD_DEV_CAP_INPUT_LATENCY = 2, + PJMEDIA_AUD_DEV_CAP_OUTPUT_LATENCY = 4, + PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING = 8, + PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING = 16, + PJMEDIA_AUD_DEV_CAP_INPUT_SIGNAL_METER = 32, + PJMEDIA_AUD_DEV_CAP_OUTPUT_SIGNAL_METER = 64, + PJMEDIA_AUD_DEV_CAP_INPUT_ROUTE = 128, + PJMEDIA_AUD_DEV_CAP_INPUT_SOURCE = 128, + PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE = 256, + PJMEDIA_AUD_DEV_CAP_EC = 512, + PJMEDIA_AUD_DEV_CAP_EC_TAIL = 1024, + PJMEDIA_AUD_DEV_CAP_VAD = 2048, + PJMEDIA_AUD_DEV_CAP_CNG = 4096, + PJMEDIA_AUD_DEV_CAP_PLC = 8192, + PJMEDIA_AUD_DEV_CAP_MAX = 16384 } pjmedia_aud_dev_cap; typedef pj_int32_t pjmedia_vid_dev_index; enum pjmedia_vid_dev_std_index { - PJMEDIA_VID_DEFAULT_CAPTURE_DEV = -1, - PJMEDIA_VID_DEFAULT_RENDER_DEV = -2, - PJMEDIA_VID_INVALID_DEV = -3 + PJMEDIA_VID_DEFAULT_CAPTURE_DEV = -1, + PJMEDIA_VID_DEFAULT_RENDER_DEV = -2, + PJMEDIA_VID_INVALID_DEV = -3 }; typedef enum pjmedia_vid_dev_cap { - PJMEDIA_VID_DEV_CAP_FORMAT = 1, - PJMEDIA_VID_DEV_CAP_INPUT_SCALE = 2, - PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW = 4, - PJMEDIA_VID_DEV_CAP_OUTPUT_RESIZE = 8, - PJMEDIA_VID_DEV_CAP_OUTPUT_POSITION = 16, - PJMEDIA_VID_DEV_CAP_OUTPUT_HIDE = 32, - PJMEDIA_VID_DEV_CAP_INPUT_PREVIEW = 64, - PJMEDIA_VID_DEV_CAP_ORIENTATION = 128, - PJMEDIA_VID_DEV_CAP_SWITCH = 256, - PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW_FLAGS = 512, - PJMEDIA_VID_DEV_CAP_OUTPUT_FULLSCREEN = 1024, - PJMEDIA_VID_DEV_CAP_MAX = 16384 + PJMEDIA_VID_DEV_CAP_FORMAT = 1, + PJMEDIA_VID_DEV_CAP_INPUT_SCALE = 2, + PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW = 4, + PJMEDIA_VID_DEV_CAP_OUTPUT_RESIZE = 8, + PJMEDIA_VID_DEV_CAP_OUTPUT_POSITION = 16, + PJMEDIA_VID_DEV_CAP_OUTPUT_HIDE = 32, + PJMEDIA_VID_DEV_CAP_INPUT_PREVIEW = 64, + PJMEDIA_VID_DEV_CAP_ORIENTATION = 128, + PJMEDIA_VID_DEV_CAP_SWITCH = 256, + PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW_FLAGS = 512, + PJMEDIA_VID_DEV_CAP_OUTPUT_FULLSCREEN = 1024, + PJMEDIA_VID_DEV_CAP_MAX = 16384 } pjmedia_vid_dev_cap; typedef enum pjmedia_vid_dev_fullscreen_flag { - PJMEDIA_VID_DEV_WINDOWED = 0, - PJMEDIA_VID_DEV_FULLSCREEN = 1, - PJMEDIA_VID_DEV_FULLSCREEN_DESKTOP = 2 + PJMEDIA_VID_DEV_WINDOWED = 0, + PJMEDIA_VID_DEV_FULLSCREEN = 1, + PJMEDIA_VID_DEV_FULLSCREEN_DESKTOP = 2 } pjmedia_vid_dev_fullscreen_flag; typedef enum pjsip_cred_data_type { - PJSIP_CRED_DATA_PLAIN_PASSWD=0, - PJSIP_CRED_DATA_DIGEST =1, - PJSIP_CRED_DATA_EXT_AKA =16 + PJSIP_CRED_DATA_PLAIN_PASSWD = 0, + PJSIP_CRED_DATA_DIGEST = 1, + PJSIP_CRED_DATA_EXT_AKA = 16 } pjsip_cred_data_type; typedef enum pjsip_auth_algorithm_type { - PJSIP_AUTH_ALGORITHM_NOT_SET = 0, - PJSIP_AUTH_ALGORITHM_MD5, - PJSIP_AUTH_ALGORITHM_SHA256, - PJSIP_AUTH_ALGORITHM_SHA512_256, - PJSIP_AUTH_ALGORITHM_AKAV1_MD5, - PJSIP_AUTH_ALGORITHM_AKAV2_MD5, - PJSIP_AUTH_ALGORITHM_COUNT, + PJSIP_AUTH_ALGORITHM_NOT_SET = 0, + PJSIP_AUTH_ALGORITHM_MD5, + PJSIP_AUTH_ALGORITHM_SHA256, + PJSIP_AUTH_ALGORITHM_SHA512_256, + PJSIP_AUTH_ALGORITHM_AKAV1_MD5, + PJSIP_AUTH_ALGORITHM_AKAV2_MD5, + PJSIP_AUTH_ALGORITHM_COUNT } pjsip_auth_algorithm_type; typedef enum pjsip_dialog_cap_status { - PJSIP_DIALOG_CAP_UNSUPPORTED = 0, - PJSIP_DIALOG_CAP_SUPPORTED = 1, - PJSIP_DIALOG_CAP_UNKNOWN = 2 + PJSIP_DIALOG_CAP_UNSUPPORTED = 0, + PJSIP_DIALOG_CAP_SUPPORTED = 1, + PJSIP_DIALOG_CAP_UNKNOWN = 2 } pjsip_dialog_cap_status; typedef enum pjsip_event_id_e { - PJSIP_EVENT_UNKNOWN, - PJSIP_EVENT_TIMER, - PJSIP_EVENT_TX_MSG, - PJSIP_EVENT_RX_MSG, - PJSIP_EVENT_TRANSPORT_ERROR, - PJSIP_EVENT_TSX_STATE, - PJSIP_EVENT_USER + PJSIP_EVENT_UNKNOWN, + PJSIP_EVENT_TIMER, + PJSIP_EVENT_TX_MSG, + PJSIP_EVENT_RX_MSG, + PJSIP_EVENT_TRANSPORT_ERROR, + PJSIP_EVENT_TSX_STATE, + PJSIP_EVENT_USER } pjsip_event_id_e; typedef enum pjsip_status_code { - PJSIP_SC_NULL = 0, - PJSIP_SC_TRYING = 100, - PJSIP_SC_RINGING = 180, - PJSIP_SC_CALL_BEING_FORWARDED = 181, - PJSIP_SC_QUEUED = 182, - PJSIP_SC_PROGRESS = 183, - PJSIP_SC_EARLY_DIALOG_TERMINATED = 199, - PJSIP_SC_OK = 200, - PJSIP_SC_ACCEPTED = 202, - PJSIP_SC_NO_NOTIFICATION = 204, - PJSIP_SC_MULTIPLE_CHOICES = 300, - PJSIP_SC_MOVED_PERMANENTLY = 301, - PJSIP_SC_MOVED_TEMPORARILY = 302, - PJSIP_SC_USE_PROXY = 305, - PJSIP_SC_ALTERNATIVE_SERVICE = 380, - PJSIP_SC_BAD_REQUEST = 400, - PJSIP_SC_UNAUTHORIZED = 401, - PJSIP_SC_PAYMENT_REQUIRED = 402, - PJSIP_SC_FORBIDDEN = 403, - PJSIP_SC_NOT_FOUND = 404, - PJSIP_SC_METHOD_NOT_ALLOWED = 405, - PJSIP_SC_NOT_ACCEPTABLE = 406, - PJSIP_SC_PROXY_AUTHENTICATION_REQUIRED = 407, - PJSIP_SC_REQUEST_TIMEOUT = 408, - PJSIP_SC_CONFLICT = 409, - PJSIP_SC_GONE = 410, - PJSIP_SC_LENGTH_REQUIRED = 411, - PJSIP_SC_CONDITIONAL_REQUEST_FAILED = 412, - PJSIP_SC_REQUEST_ENTITY_TOO_LARGE = 413, - PJSIP_SC_REQUEST_URI_TOO_LONG = 414, - PJSIP_SC_UNSUPPORTED_MEDIA_TYPE = 415, - PJSIP_SC_UNSUPPORTED_URI_SCHEME = 416, - PJSIP_SC_UNKNOWN_RESOURCE_PRIORITY = 417, - PJSIP_SC_BAD_EXTENSION = 420, - PJSIP_SC_EXTENSION_REQUIRED = 421, - PJSIP_SC_SESSION_TIMER_TOO_SMALL = 422, - PJSIP_SC_INTERVAL_TOO_BRIEF = 423, - PJSIP_SC_BAD_LOCATION_INFORMATION = 424, - PJSIP_SC_USE_IDENTITY_HEADER = 428, - PJSIP_SC_PROVIDE_REFERRER_HEADER = 429, - PJSIP_SC_FLOW_FAILED = 430, - PJSIP_SC_ANONIMITY_DISALLOWED = 433, - PJSIP_SC_BAD_IDENTITY_INFO = 436, - PJSIP_SC_UNSUPPORTED_CERTIFICATE = 437, - PJSIP_SC_INVALID_IDENTITY_HEADER = 438, - PJSIP_SC_FIRST_HOP_LACKS_OUTBOUND_SUPPORT = 439, - PJSIP_SC_MAX_BREADTH_EXCEEDED = 440, - PJSIP_SC_BAD_INFO_PACKAGE = 469, - PJSIP_SC_CONSENT_NEEDED = 470, - PJSIP_SC_TEMPORARILY_UNAVAILABLE = 480, - PJSIP_SC_CALL_TSX_DOES_NOT_EXIST = 481, - PJSIP_SC_LOOP_DETECTED = 482, - PJSIP_SC_TOO_MANY_HOPS = 483, - PJSIP_SC_ADDRESS_INCOMPLETE = 484, - PJSIP_AC_AMBIGUOUS = 485, - PJSIP_SC_BUSY_HERE = 486, - PJSIP_SC_REQUEST_TERMINATED = 487, - PJSIP_SC_NOT_ACCEPTABLE_HERE = 488, - PJSIP_SC_BAD_EVENT = 489, - PJSIP_SC_REQUEST_UPDATED = 490, - PJSIP_SC_REQUEST_PENDING = 491, - PJSIP_SC_UNDECIPHERABLE = 493, - PJSIP_SC_SECURITY_AGREEMENT_NEEDED = 494, - PJSIP_SC_INTERNAL_SERVER_ERROR = 500, - PJSIP_SC_NOT_IMPLEMENTED = 501, - PJSIP_SC_BAD_GATEWAY = 502, - PJSIP_SC_SERVICE_UNAVAILABLE = 503, - PJSIP_SC_SERVER_TIMEOUT = 504, - PJSIP_SC_VERSION_NOT_SUPPORTED = 505, - PJSIP_SC_MESSAGE_TOO_LARGE = 513, - PJSIP_SC_PUSH_NOTIFICATION_SERVICE_NOT_SUPPORTED = 555, - PJSIP_SC_PRECONDITION_FAILURE = 580, - PJSIP_SC_BUSY_EVERYWHERE = 600, - PJSIP_SC_DECLINE = 603, - PJSIP_SC_DOES_NOT_EXIST_ANYWHERE = 604, - PJSIP_SC_NOT_ACCEPTABLE_ANYWHERE = 606, - PJSIP_SC_UNWANTED = 607, - PJSIP_SC_REJECTED = 608, - PJSIP_SC_TSX_TIMEOUT = PJSIP_SC_REQUEST_TIMEOUT, - PJSIP_SC_TSX_TRANSPORT_ERROR = PJSIP_SC_SERVICE_UNAVAILABLE, - PJSIP_SC__force_32bit = 0x7FFFFFFF + PJSIP_SC_NULL = 0, + PJSIP_SC_TRYING = 100, + PJSIP_SC_RINGING = 180, + PJSIP_SC_CALL_BEING_FORWARDED = 181, + PJSIP_SC_QUEUED = 182, + PJSIP_SC_PROGRESS = 183, + PJSIP_SC_EARLY_DIALOG_TERMINATED = 199, + PJSIP_SC_OK = 200, + PJSIP_SC_ACCEPTED = 202, + PJSIP_SC_NO_NOTIFICATION = 204, + PJSIP_SC_MULTIPLE_CHOICES = 300, + PJSIP_SC_MOVED_PERMANENTLY = 301, + PJSIP_SC_MOVED_TEMPORARILY = 302, + PJSIP_SC_USE_PROXY = 305, + PJSIP_SC_ALTERNATIVE_SERVICE = 380, + PJSIP_SC_BAD_REQUEST = 400, + PJSIP_SC_UNAUTHORIZED = 401, + PJSIP_SC_PAYMENT_REQUIRED = 402, + PJSIP_SC_FORBIDDEN = 403, + PJSIP_SC_NOT_FOUND = 404, + PJSIP_SC_METHOD_NOT_ALLOWED = 405, + PJSIP_SC_NOT_ACCEPTABLE = 406, + PJSIP_SC_PROXY_AUTHENTICATION_REQUIRED = 407, + PJSIP_SC_REQUEST_TIMEOUT = 408, + PJSIP_SC_CONFLICT = 409, + PJSIP_SC_GONE = 410, + PJSIP_SC_LENGTH_REQUIRED = 411, + PJSIP_SC_CONDITIONAL_REQUEST_FAILED = 412, + PJSIP_SC_REQUEST_ENTITY_TOO_LARGE = 413, + PJSIP_SC_REQUEST_URI_TOO_LONG = 414, + PJSIP_SC_UNSUPPORTED_MEDIA_TYPE = 415, + PJSIP_SC_UNSUPPORTED_URI_SCHEME = 416, + PJSIP_SC_UNKNOWN_RESOURCE_PRIORITY = 417, + PJSIP_SC_BAD_EXTENSION = 420, + PJSIP_SC_EXTENSION_REQUIRED = 421, + PJSIP_SC_SESSION_TIMER_TOO_SMALL = 422, + PJSIP_SC_INTERVAL_TOO_BRIEF = 423, + PJSIP_SC_BAD_LOCATION_INFORMATION = 424, + PJSIP_SC_USE_IDENTITY_HEADER = 428, + PJSIP_SC_PROVIDE_REFERRER_HEADER = 429, + PJSIP_SC_FLOW_FAILED = 430, + PJSIP_SC_ANONIMITY_DISALLOWED = 433, + PJSIP_SC_BAD_IDENTITY_INFO = 436, + PJSIP_SC_UNSUPPORTED_CERTIFICATE = 437, + PJSIP_SC_INVALID_IDENTITY_HEADER = 438, + PJSIP_SC_FIRST_HOP_LACKS_OUTBOUND_SUPPORT = 439, + PJSIP_SC_MAX_BREADTH_EXCEEDED = 440, + PJSIP_SC_BAD_INFO_PACKAGE = 469, + PJSIP_SC_CONSENT_NEEDED = 470, + PJSIP_SC_TEMPORARILY_UNAVAILABLE = 480, + PJSIP_SC_CALL_TSX_DOES_NOT_EXIST = 481, + PJSIP_SC_LOOP_DETECTED = 482, + PJSIP_SC_TOO_MANY_HOPS = 483, + PJSIP_SC_ADDRESS_INCOMPLETE = 484, + PJSIP_AC_AMBIGUOUS = 485, + PJSIP_SC_BUSY_HERE = 486, + PJSIP_SC_REQUEST_TERMINATED = 487, + PJSIP_SC_NOT_ACCEPTABLE_HERE = 488, + PJSIP_SC_BAD_EVENT = 489, + PJSIP_SC_REQUEST_UPDATED = 490, + PJSIP_SC_REQUEST_PENDING = 491, + PJSIP_SC_UNDECIPHERABLE = 493, + PJSIP_SC_SECURITY_AGREEMENT_NEEDED = 494, + PJSIP_SC_INTERNAL_SERVER_ERROR = 500, + PJSIP_SC_NOT_IMPLEMENTED = 501, + PJSIP_SC_BAD_GATEWAY = 502, + PJSIP_SC_SERVICE_UNAVAILABLE = 503, + PJSIP_SC_SERVER_TIMEOUT = 504, + PJSIP_SC_VERSION_NOT_SUPPORTED = 505, + PJSIP_SC_MESSAGE_TOO_LARGE = 513, + PJSIP_SC_PUSH_NOTIFICATION_SERVICE_NOT_SUPPORTED = 555, + PJSIP_SC_PRECONDITION_FAILURE = 580, + PJSIP_SC_BUSY_EVERYWHERE = 600, + PJSIP_SC_DECLINE = 603, + PJSIP_SC_DOES_NOT_EXIST_ANYWHERE = 604, + PJSIP_SC_NOT_ACCEPTABLE_ANYWHERE = 606, + PJSIP_SC_UNWANTED = 607, + PJSIP_SC_REJECTED = 608, + PJSIP_SC_TSX_TIMEOUT = PJSIP_SC_REQUEST_TIMEOUT, + PJSIP_SC_TSX_TRANSPORT_ERROR = PJSIP_SC_SERVICE_UNAVAILABLE, + PJSIP_SC__force_32bit = 0x7FFFFFFF } pjsip_status_code; typedef enum pjsip_hdr_e { - PJSIP_H_ACCEPT, - PJSIP_H_ACCEPT_ENCODING_UNIMP, - PJSIP_H_ACCEPT_LANGUAGE_UNIMP, - PJSIP_H_ALERT_INFO_UNIMP, - PJSIP_H_ALLOW, - PJSIP_H_AUTHENTICATION_INFO_UNIMP, - PJSIP_H_AUTHORIZATION, - PJSIP_H_CALL_ID, - PJSIP_H_CALL_INFO_UNIMP, - PJSIP_H_CONTACT, - PJSIP_H_CONTENT_DISPOSITION_UNIMP, - PJSIP_H_CONTENT_ENCODING_UNIMP, - PJSIP_H_CONTENT_LANGUAGE_UNIMP, - PJSIP_H_CONTENT_LENGTH, - PJSIP_H_CONTENT_TYPE, - PJSIP_H_CSEQ, - PJSIP_H_DATE_UNIMP, - PJSIP_H_ERROR_INFO_UNIMP, - PJSIP_H_EXPIRES, - PJSIP_H_FROM, - PJSIP_H_IN_REPLY_TO_UNIMP, - PJSIP_H_MAX_FORWARDS, - PJSIP_H_MIME_VERSION_UNIMP, - PJSIP_H_MIN_EXPIRES, - PJSIP_H_ORGANIZATION_UNIMP, - PJSIP_H_PRIORITY_UNIMP, - PJSIP_H_PROXY_AUTHENTICATE, - PJSIP_H_PROXY_AUTHORIZATION, - PJSIP_H_PROXY_REQUIRE_UNIMP, - PJSIP_H_RECORD_ROUTE, - PJSIP_H_REPLY_TO_UNIMP, - PJSIP_H_REQUIRE, - PJSIP_H_RETRY_AFTER, - PJSIP_H_ROUTE, - PJSIP_H_SERVER_UNIMP, - PJSIP_H_SUBJECT_UNIMP, - PJSIP_H_SUPPORTED, - PJSIP_H_TIMESTAMP_UNIMP, - PJSIP_H_TO, - PJSIP_H_UNSUPPORTED, - PJSIP_H_USER_AGENT_UNIMP, - PJSIP_H_VIA, - PJSIP_H_WARNING_UNIMP, - PJSIP_H_WWW_AUTHENTICATE, - PJSIP_H_OTHER + PJSIP_H_ACCEPT, + PJSIP_H_ACCEPT_ENCODING_UNIMP, + PJSIP_H_ACCEPT_LANGUAGE_UNIMP, + PJSIP_H_ALERT_INFO_UNIMP, + PJSIP_H_ALLOW, + PJSIP_H_AUTHENTICATION_INFO_UNIMP, + PJSIP_H_AUTHORIZATION, + PJSIP_H_CALL_ID, + PJSIP_H_CALL_INFO_UNIMP, + PJSIP_H_CONTACT, + PJSIP_H_CONTENT_DISPOSITION_UNIMP, + PJSIP_H_CONTENT_ENCODING_UNIMP, + PJSIP_H_CONTENT_LANGUAGE_UNIMP, + PJSIP_H_CONTENT_LENGTH, + PJSIP_H_CONTENT_TYPE, + PJSIP_H_CSEQ, + PJSIP_H_DATE_UNIMP, + PJSIP_H_ERROR_INFO_UNIMP, + PJSIP_H_EXPIRES, + PJSIP_H_FROM, + PJSIP_H_IN_REPLY_TO_UNIMP, + PJSIP_H_MAX_FORWARDS, + PJSIP_H_MIME_VERSION_UNIMP, + PJSIP_H_MIN_EXPIRES, + PJSIP_H_ORGANIZATION_UNIMP, + PJSIP_H_PRIORITY_UNIMP, + PJSIP_H_PROXY_AUTHENTICATE, + PJSIP_H_PROXY_AUTHORIZATION, + PJSIP_H_PROXY_REQUIRE_UNIMP, + PJSIP_H_RECORD_ROUTE, + PJSIP_H_REPLY_TO_UNIMP, + PJSIP_H_REQUIRE, + PJSIP_H_RETRY_AFTER, + PJSIP_H_ROUTE, + PJSIP_H_SERVER_UNIMP, + PJSIP_H_SUBJECT_UNIMP, + PJSIP_H_SUPPORTED, + PJSIP_H_TIMESTAMP_UNIMP, + PJSIP_H_TO, + PJSIP_H_UNSUPPORTED, + PJSIP_H_USER_AGENT_UNIMP, + PJSIP_H_VIA, + PJSIP_H_WARNING_UNIMP, + PJSIP_H_WWW_AUTHENTICATE, + PJSIP_H_OTHER } pjsip_hdr_e; typedef enum pjsip_tsx_state_e { - PJSIP_TSX_STATE_NULL, - PJSIP_TSX_STATE_CALLING, - PJSIP_TSX_STATE_TRYING, - PJSIP_TSX_STATE_PROCEEDING, - PJSIP_TSX_STATE_COMPLETED, - PJSIP_TSX_STATE_CONFIRMED, - PJSIP_TSX_STATE_TERMINATED, - PJSIP_TSX_STATE_DESTROYED, - PJSIP_TSX_STATE_MAX + PJSIP_TSX_STATE_NULL, + PJSIP_TSX_STATE_CALLING, + PJSIP_TSX_STATE_TRYING, + PJSIP_TSX_STATE_PROCEEDING, + PJSIP_TSX_STATE_COMPLETED, + PJSIP_TSX_STATE_CONFIRMED, + PJSIP_TSX_STATE_TERMINATED, + PJSIP_TSX_STATE_DESTROYED, + PJSIP_TSX_STATE_MAX } pjsip_tsx_state_e; typedef enum pjsip_transport_type_e { - PJSIP_TRANSPORT_UNSPECIFIED, - PJSIP_TRANSPORT_UDP, - PJSIP_TRANSPORT_TCP, - PJSIP_TRANSPORT_TLS, - PJSIP_TRANSPORT_DTLS, - PJSIP_TRANSPORT_SCTP, - PJSIP_TRANSPORT_LOOP, - PJSIP_TRANSPORT_LOOP_DGRAM, - PJSIP_TRANSPORT_START_OTHER, - PJSIP_TRANSPORT_IPV6 = 128, - PJSIP_TRANSPORT_UDP6 = PJSIP_TRANSPORT_UDP + PJSIP_TRANSPORT_IPV6, - PJSIP_TRANSPORT_TCP6 = PJSIP_TRANSPORT_TCP + PJSIP_TRANSPORT_IPV6, - PJSIP_TRANSPORT_TLS6 = PJSIP_TRANSPORT_TLS + PJSIP_TRANSPORT_IPV6, - PJSIP_TRANSPORT_DTLS6 = PJSIP_TRANSPORT_DTLS + PJSIP_TRANSPORT_IPV6 + PJSIP_TRANSPORT_UNSPECIFIED, + PJSIP_TRANSPORT_UDP, + PJSIP_TRANSPORT_TCP, + PJSIP_TRANSPORT_TLS, + PJSIP_TRANSPORT_DTLS, + PJSIP_TRANSPORT_SCTP, + PJSIP_TRANSPORT_LOOP, + PJSIP_TRANSPORT_LOOP_DGRAM, + PJSIP_TRANSPORT_START_OTHER, + PJSIP_TRANSPORT_IPV6 = 128, + PJSIP_TRANSPORT_UDP6 = PJSIP_TRANSPORT_UDP + PJSIP_TRANSPORT_IPV6, + PJSIP_TRANSPORT_TCP6 = PJSIP_TRANSPORT_TCP + PJSIP_TRANSPORT_IPV6, + PJSIP_TRANSPORT_TLS6 = PJSIP_TRANSPORT_TLS + PJSIP_TRANSPORT_IPV6, + PJSIP_TRANSPORT_DTLS6 = PJSIP_TRANSPORT_DTLS + PJSIP_TRANSPORT_IPV6 } pjsip_transport_type_e; enum pjsip_transport_flags_e { - PJSIP_TRANSPORT_RELIABLE = 1, - PJSIP_TRANSPORT_SECURE = 2, - PJSIP_TRANSPORT_DATAGRAM = 4 + PJSIP_TRANSPORT_RELIABLE = 1, + PJSIP_TRANSPORT_SECURE = 2, + PJSIP_TRANSPORT_DATAGRAM = 4 }; typedef enum pjsip_transport_state { - PJSIP_TP_STATE_CONNECTED, - PJSIP_TP_STATE_DISCONNECTED, - PJSIP_TP_STATE_SHUTDOWN, - PJSIP_TP_STATE_DESTROY, + PJSIP_TP_STATE_CONNECTED, + PJSIP_TP_STATE_DISCONNECTED, + PJSIP_TP_STATE_SHUTDOWN, + PJSIP_TP_STATE_DESTROY } pjsip_transport_state; typedef enum pjsip_ssl_method { - PJSIP_SSL_UNSPECIFIED_METHOD = 0, - PJSIP_SSLV2_METHOD = 20, - PJSIP_SSLV3_METHOD = 30, - PJSIP_TLSV1_METHOD = 31, - PJSIP_TLSV1_1_METHOD = 32, - PJSIP_TLSV1_2_METHOD = 33, - PJSIP_TLSV1_3_METHOD = 34, - PJSIP_SSLV23_METHOD = 23, + PJSIP_SSL_UNSPECIFIED_METHOD = 0, + PJSIP_SSLV2_METHOD = 20, + PJSIP_SSLV3_METHOD = 30, + PJSIP_TLSV1_METHOD = 31, + PJSIP_TLSV1_1_METHOD = 32, + PJSIP_TLSV1_2_METHOD = 33, + PJSIP_TLSV1_3_METHOD = 34, + PJSIP_SSLV23_METHOD = 23 } pjsip_ssl_method; typedef enum pjsip_role_e { - PJSIP_ROLE_UAC, - PJSIP_ROLE_UAS, - PJSIP_UAC_ROLE = PJSIP_ROLE_UAC, - PJSIP_UAS_ROLE = PJSIP_ROLE_UAS + PJSIP_ROLE_UAC, + PJSIP_ROLE_UAS, + PJSIP_UAC_ROLE = PJSIP_ROLE_UAC, + PJSIP_UAS_ROLE = PJSIP_ROLE_UAS } pjsip_role_e; typedef enum pjsip_redirect_op { - PJSIP_REDIRECT_REJECT, - PJSIP_REDIRECT_ACCEPT, - PJSIP_REDIRECT_ACCEPT_REPLACE, - PJSIP_REDIRECT_PENDING, - PJSIP_REDIRECT_STOP + PJSIP_REDIRECT_REJECT, + PJSIP_REDIRECT_ACCEPT, + PJSIP_REDIRECT_ACCEPT_REPLACE, + PJSIP_REDIRECT_PENDING, + PJSIP_REDIRECT_STOP } pjsip_redirect_op; typedef enum pjsip_evsub_state { - PJSIP_EVSUB_STATE_NULL, - PJSIP_EVSUB_STATE_SENT, - PJSIP_EVSUB_STATE_ACCEPTED, - PJSIP_EVSUB_STATE_PENDING, - PJSIP_EVSUB_STATE_ACTIVE, - PJSIP_EVSUB_STATE_TERMINATED, - PJSIP_EVSUB_STATE_UNKNOWN, + PJSIP_EVSUB_STATE_NULL, + PJSIP_EVSUB_STATE_SENT, + PJSIP_EVSUB_STATE_ACCEPTED, + PJSIP_EVSUB_STATE_PENDING, + PJSIP_EVSUB_STATE_ACTIVE, + PJSIP_EVSUB_STATE_TERMINATED, + PJSIP_EVSUB_STATE_UNKNOWN } pjsip_evsub_state; typedef enum pjrpid_activity { - PJRPID_ACTIVITY_UNKNOWN, - PJRPID_ACTIVITY_AWAY, - PJRPID_ACTIVITY_BUSY + PJRPID_ACTIVITY_UNKNOWN, + PJRPID_ACTIVITY_AWAY, + PJRPID_ACTIVITY_BUSY } pjrpid_activity; typedef enum pjsip_inv_state { - PJSIP_INV_STATE_NULL, - PJSIP_INV_STATE_CALLING, - PJSIP_INV_STATE_INCOMING, - PJSIP_INV_STATE_EARLY, - PJSIP_INV_STATE_CONNECTING, - PJSIP_INV_STATE_CONFIRMED, - PJSIP_INV_STATE_DISCONNECTED, + PJSIP_INV_STATE_NULL, + PJSIP_INV_STATE_CALLING, + PJSIP_INV_STATE_INCOMING, + PJSIP_INV_STATE_EARLY, + PJSIP_INV_STATE_CONNECTING, + PJSIP_INV_STATE_CONFIRMED, + PJSIP_INV_STATE_DISCONNECTED } pjsip_inv_state; enum pjsua_invalid_id_const_ { - PJSUA_INVALID_ID = -1 + PJSUA_INVALID_ID = -1 }; typedef enum pjsua_state { - PJSUA_STATE_NULL, - PJSUA_STATE_CREATED, - PJSUA_STATE_INIT, - PJSUA_STATE_STARTING, - PJSUA_STATE_RUNNING, - PJSUA_STATE_CLOSING + PJSUA_STATE_NULL, + PJSUA_STATE_CREATED, + PJSUA_STATE_INIT, + PJSUA_STATE_STARTING, + PJSUA_STATE_RUNNING, + PJSUA_STATE_CLOSING } pjsua_state; typedef enum pjsua_stun_use { - PJSUA_STUN_USE_DEFAULT, - PJSUA_STUN_USE_DISABLED, - PJSUA_STUN_RETRY_ON_FAILURE + PJSUA_STUN_USE_DEFAULT, + PJSUA_STUN_USE_DISABLED, + PJSUA_STUN_RETRY_ON_FAILURE } pjsua_stun_use; typedef enum pjsua_upnp_use { - PJSUA_UPNP_USE_DEFAULT, - PJSUA_UPNP_USE_DISABLED + PJSUA_UPNP_USE_DEFAULT, + PJSUA_UPNP_USE_DISABLED } pjsua_upnp_use; typedef enum pjsua_call_hold_type { - PJSUA_CALL_HOLD_TYPE_RFC3264, - PJSUA_CALL_HOLD_TYPE_RFC2543 + PJSUA_CALL_HOLD_TYPE_RFC3264, + PJSUA_CALL_HOLD_TYPE_RFC2543 } pjsua_call_hold_type; typedef int pjsua_acc_id; typedef enum pjsua_destroy_flag { - PJSUA_DESTROY_NO_RX_MSG = 1, - PJSUA_DESTROY_NO_TX_MSG = 2, - PJSUA_DESTROY_NO_NETWORK = PJSUA_DESTROY_NO_RX_MSG | - PJSUA_DESTROY_NO_TX_MSG + PJSUA_DESTROY_NO_RX_MSG = 1, + PJSUA_DESTROY_NO_TX_MSG = 2, + PJSUA_DESTROY_NO_NETWORK = PJSUA_DESTROY_NO_RX_MSG | PJSUA_DESTROY_NO_TX_MSG } pjsua_destroy_flag; typedef enum pjsua_100rel_use { - PJSUA_100REL_NOT_USED, - PJSUA_100REL_MANDATORY, - PJSUA_100REL_OPTIONAL + PJSUA_100REL_NOT_USED, + PJSUA_100REL_MANDATORY, + PJSUA_100REL_OPTIONAL } pjsua_100rel_use; typedef enum pjsua_sip_timer_use { - PJSUA_SIP_TIMER_INACTIVE, - PJSUA_SIP_TIMER_OPTIONAL, - PJSUA_SIP_TIMER_REQUIRED, - PJSUA_SIP_TIMER_ALWAYS + PJSUA_SIP_TIMER_INACTIVE, + PJSUA_SIP_TIMER_OPTIONAL, + PJSUA_SIP_TIMER_REQUIRED, + PJSUA_SIP_TIMER_ALWAYS } pjsua_sip_timer_use; typedef enum pjsua_ipv6_use { - PJSUA_IPV6_DISABLED, - PJSUA_IPV6_ENABLED = 1, - PJSUA_IPV6_ENABLED_NO_PREFERENCE = 1, - PJSUA_IPV6_ENABLED_PREFER_IPV4, - PJSUA_IPV6_ENABLED_PREFER_IPV6, - PJSUA_IPV6_ENABLED_USE_IPV6_ONLY + PJSUA_IPV6_DISABLED, + PJSUA_IPV6_ENABLED = 1, + PJSUA_IPV6_ENABLED_NO_PREFERENCE = 1, + PJSUA_IPV6_ENABLED_PREFER_IPV4, + PJSUA_IPV6_ENABLED_PREFER_IPV6, + PJSUA_IPV6_ENABLED_USE_IPV6_ONLY } pjsua_ipv6_use; typedef enum pjsua_nat64_opt { - PJSUA_NAT64_DISABLED, - PJSUA_NAT64_ENABLED + PJSUA_NAT64_DISABLED, + PJSUA_NAT64_ENABLED } pjsua_nat64_opt; typedef enum pjsua_buddy_status { - PJSUA_BUDDY_STATUS_UNKNOWN, - PJSUA_BUDDY_STATUS_ONLINE, - PJSUA_BUDDY_STATUS_OFFLINE, + PJSUA_BUDDY_STATUS_UNKNOWN, + PJSUA_BUDDY_STATUS_ONLINE, + PJSUA_BUDDY_STATUS_OFFLINE } pjsua_buddy_status; typedef enum pjsua_call_media_status { - PJSUA_CALL_MEDIA_NONE, - PJSUA_CALL_MEDIA_ACTIVE, - PJSUA_CALL_MEDIA_LOCAL_HOLD, - PJSUA_CALL_MEDIA_REMOTE_HOLD, - PJSUA_CALL_MEDIA_ERROR + PJSUA_CALL_MEDIA_NONE, + PJSUA_CALL_MEDIA_ACTIVE, + PJSUA_CALL_MEDIA_LOCAL_HOLD, + PJSUA_CALL_MEDIA_REMOTE_HOLD, + PJSUA_CALL_MEDIA_ERROR } pjsua_call_media_status; typedef int pjsua_vid_win_id; @@ -907,84 +941,86 @@ typedef int pjsua_call_id; typedef enum pjsua_med_tp_st { - PJSUA_MED_TP_NULL, - PJSUA_MED_TP_CREATING, - PJSUA_MED_TP_IDLE, - PJSUA_MED_TP_INIT, - PJSUA_MED_TP_RUNNING, - PJSUA_MED_TP_DISABLED + PJSUA_MED_TP_NULL, + PJSUA_MED_TP_CREATING, + PJSUA_MED_TP_IDLE, + PJSUA_MED_TP_INIT, + PJSUA_MED_TP_RUNNING, + PJSUA_MED_TP_DISABLED } pjsua_med_tp_st; typedef enum pjsua_call_vid_strm_op { - PJSUA_CALL_VID_STRM_NO_OP, - PJSUA_CALL_VID_STRM_ADD, - PJSUA_CALL_VID_STRM_REMOVE, - PJSUA_CALL_VID_STRM_CHANGE_DIR, - PJSUA_CALL_VID_STRM_CHANGE_CAP_DEV, - PJSUA_CALL_VID_STRM_START_TRANSMIT, - PJSUA_CALL_VID_STRM_STOP_TRANSMIT, - PJSUA_CALL_VID_STRM_SEND_KEYFRAME + PJSUA_CALL_VID_STRM_NO_OP, + PJSUA_CALL_VID_STRM_ADD, + PJSUA_CALL_VID_STRM_REMOVE, + PJSUA_CALL_VID_STRM_CHANGE_DIR, + PJSUA_CALL_VID_STRM_CHANGE_CAP_DEV, + PJSUA_CALL_VID_STRM_START_TRANSMIT, + PJSUA_CALL_VID_STRM_STOP_TRANSMIT, + PJSUA_CALL_VID_STRM_SEND_KEYFRAME } pjsua_call_vid_strm_op; typedef enum pjsua_vid_req_keyframe_method { - PJSUA_VID_REQ_KEYFRAME_SIP_INFO = 1, - PJSUA_VID_REQ_KEYFRAME_RTCP_PLI = 2 + PJSUA_VID_REQ_KEYFRAME_SIP_INFO = 1, + PJSUA_VID_REQ_KEYFRAME_RTCP_PLI = 2 } pjsua_vid_req_keyframe_method; typedef enum pjsua_call_flag { - PJSUA_CALL_UNHOLD = 1, - PJSUA_CALL_UPDATE_CONTACT = 2, - PJSUA_CALL_INCLUDE_DISABLED_MEDIA = 4, - PJSUA_CALL_NO_SDP_OFFER = 8, - PJSUA_CALL_REINIT_MEDIA = 16, - PJSUA_CALL_UPDATE_VIA = 32, - PJSUA_CALL_UPDATE_TARGET = 64, - PJSUA_CALL_SET_MEDIA_DIR = 128, - PJSUA_CALL_NO_MEDIA_SYNC = 256 + PJSUA_CALL_UNHOLD = 1, + PJSUA_CALL_UPDATE_CONTACT = 2, + PJSUA_CALL_INCLUDE_DISABLED_MEDIA = 4, + PJSUA_CALL_NO_SDP_OFFER = 8, + PJSUA_CALL_REINIT_MEDIA = 16, + PJSUA_CALL_UPDATE_VIA = 32, + PJSUA_CALL_UPDATE_TARGET = 64, + PJSUA_CALL_SET_MEDIA_DIR = 128, + PJSUA_CALL_NO_MEDIA_SYNC = 256 } pjsua_call_flag; typedef enum pjsua_create_media_transport_flag { - PJSUA_MED_TP_CLOSE_MEMBER = 1 + PJSUA_MED_TP_CLOSE_MEMBER = 1 } pjsua_create_media_transport_flag; typedef enum pjsua_snd_dev_id { - PJSUA_SND_DEFAULT_CAPTURE_DEV = -1, - PJSUA_SND_DEFAULT_PLAYBACK_DEV = -2, - PJSUA_SND_NO_DEV = -3, - PJSUA_SND_NULL_DEV = -99 + PJSUA_SND_DEFAULT_CAPTURE_DEV = -1, + PJSUA_SND_DEFAULT_PLAYBACK_DEV = -2, + PJSUA_SND_NO_DEV = -3, + PJSUA_SND_NULL_DEV = -99 } pjsua_snd_dev_id; typedef enum pjsua_snd_dev_mode { - PJSUA_SND_DEV_SPEAKER_ONLY = 1, - PJSUA_SND_DEV_NO_IMMEDIATE_OPEN = 2 + PJSUA_SND_DEV_SPEAKER_ONLY = 1, + PJSUA_SND_DEV_NO_IMMEDIATE_OPEN = 2 } pjsua_snd_dev_mode; -typedef enum pjsua_ip_change_op { - PJSUA_IP_CHANGE_OP_NULL, - PJSUA_IP_CHANGE_OP_SHUTDOWN_TP, - PJSUA_IP_CHANGE_OP_RESTART_LIS, - PJSUA_IP_CHANGE_OP_ACC_SHUTDOWN_TP, - PJSUA_IP_CHANGE_OP_ACC_UPDATE_CONTACT, - PJSUA_IP_CHANGE_OP_ACC_HANGUP_CALLS, - PJSUA_IP_CHANGE_OP_ACC_REINVITE_CALLS, - PJSUA_IP_CHANGE_OP_COMPLETED +typedef enum pjsua_ip_change_op +{ + PJSUA_IP_CHANGE_OP_NULL, + PJSUA_IP_CHANGE_OP_SHUTDOWN_TP, + PJSUA_IP_CHANGE_OP_RESTART_LIS, + PJSUA_IP_CHANGE_OP_ACC_SHUTDOWN_TP, + PJSUA_IP_CHANGE_OP_ACC_UPDATE_CONTACT, + PJSUA_IP_CHANGE_OP_ACC_HANGUP_CALLS, + PJSUA_IP_CHANGE_OP_ACC_REINVITE_CALLS, + PJSUA_IP_CHANGE_OP_COMPLETED } pjsua_ip_change_op; -typedef enum pjsua_dtmf_method { - PJSUA_DTMF_METHOD_RFC2833, - PJSUA_DTMF_METHOD_SIP_INFO +typedef enum pjsua_dtmf_method +{ + PJSUA_DTMF_METHOD_RFC2833, + PJSUA_DTMF_METHOD_SIP_INFO } pjsua_dtmf_method; typedef enum pjsua_sip_siprec_use { - PJSUA_SIP_SIPREC_INACTIVE, - PJSUA_SIP_SIPREC_OPTIONAL, - PJSUA_SIP_SIPREC_MANDATORY, + PJSUA_SIP_SIPREC_INACTIVE, + PJSUA_SIP_SIPREC_OPTIONAL, + PJSUA_SIP_SIPREC_MANDATORY } pjsua_sip_siprec_use; diff --git a/pjsip-apps/src/swig/symbols.lst b/pjsip-apps/src/swig/symbols.lst index 01fcb7df05..5274efea0c 100644 --- a/pjsip-apps/src/swig/symbols.lst +++ b/pjsip-apps/src/swig/symbols.lst @@ -21,6 +21,7 @@ pjmedia/videodev.h pjmedia_vid_dev_hwnd_type pjmedia/vid_codec.h pjmedia_vid_packing pjmedia/vid_conf.h pjmedia_vid_conf_op_type pjmedia/vid_stream.h pjmedia_vid_stream_rc_method +pjmedia/ai_port.h pjmedia_ai_event_type pjmedia/wav_port.h pjmedia_file_writer_option pjmedia_file_player_option pjmedia-audiodev/audiodev.h pjmedia_aud_dev_route pjmedia_aud_dev_cap diff --git a/pjsip/include/pjsua2/media.hpp b/pjsip/include/pjsua2/media.hpp index b6749d1aa7..74ffb23d3d 100644 --- a/pjsip/include/pjsua2/media.hpp +++ b/pjsip/include/pjsua2/media.hpp @@ -556,6 +556,128 @@ class AudioMediaPort : public AudioMedia pjmedia_port *port; }; + +/** + * AI Media Port event data. + */ +struct AiMediaEvent +{ + /** Event type. */ + pjmedia_ai_event_type type; + + /** Status code. PJ_SUCCESS for informational events. */ + pj_status_t status; + + /** Text payload (transcript). Only valid for TRANSCRIPT events. */ + string text; +}; + + +/** + * AI Media Port creation parameters. + */ +struct AiMediaPortParam +{ + /** + * Enable voice activity detection (VAD) on the TX path. + * When enabled, silence frames are not sent to the AI service. + * + * Default: false + */ + bool vadEnabled; + + /** + * Ptime in milliseconds. + * + * Default: 20 + */ + unsigned ptimeMsec; + +public: + /** Default constructor */ + AiMediaPortParam() : vadEnabled(false), ptimeMsec(20) {} +}; + + +/** + * AI Media Port. + * + * This wraps pjmedia_ai_port as an AudioMedia object that can be + * connected to the conference bridge. It bridges audio to/from + * real-time AI services (e.g. OpenAI Realtime API) over WebSocket. + * + * Basic usage: + * 1. Create with createPort() specifying the backend type. + * 2. Connect to the AI service with connect(). + * 3. Use startTransmit()/stopTransmit() to route audio from/to + * other conference bridge ports (e.g. AudioMedia from a call). + * 4. Disconnect with disconnect() when done. + * + * Events (connected, transcript, etc.) are delivered via the + * virtual onEvent() callback. + */ +class AudioMediaAiPort : public AudioMedia +{ +public: + /** + * Constructor. + */ + AudioMediaAiPort(); + + /** + * Destructor. Disconnects from the AI service (if connected) and + * unregisters the port from the conference bridge. + */ + virtual ~AudioMediaAiPort(); + + /** + * Create an AI media port with the OpenAI Realtime API backend and + * register it to the conference bridge. The port operates at the + * backend's native clock rate (e.g. 24kHz for OpenAI); the + * conference bridge handles resampling. + * + * @param prm Creation parameters. + */ + void createPort(const AiMediaPortParam &prm = AiMediaPortParam()) + PJSUA2_THROW(Error); + + /** + * Connect to the AI service asynchronously. The onEvent() callback + * will be called with PJMEDIA_AI_EVENT_CONNECTED or + * PJMEDIA_AI_EVENT_DISCONNECTED when complete. + * + * @param url WebSocket URL (e.g. + * "wss://api.openai.com/v1/realtime?model=...") + * @param authToken Authentication token (e.g. OpenAI API key). + */ + void connect(const string &url, const string &authToken) + PJSUA2_THROW(Error); + + /** + * Disconnect from the AI service gracefully. + */ + void disconnect() PJSUA2_THROW(Error); + + /* + * Callbacks + */ + + /** + * Called when an AI event occurs (connected, transcript, etc.). + * This may be called from the ioqueue worker thread. + * + * @param event The event data. + */ + virtual void onEvent(const AiMediaEvent &event) + { PJ_UNUSED_ARG(event); } + +private: + pj_pool_t *pool; + pjmedia_ai_port *aiPort; + pjmedia_ai_backend *backend; +}; + + /** * This structure contains additional info about AudioMediaPlayer. */ diff --git a/pjsip/src/pjsua2/media.cpp b/pjsip/src/pjsua2/media.cpp index 0710ed2678..6411f1d7b4 100644 --- a/pjsip/src/pjsua2/media.cpp +++ b/pjsip/src/pjsua2/media.cpp @@ -425,6 +425,156 @@ void AudioMediaPort::createPort(const string &name, MediaFormatAudio &fmt) /////////////////////////////////////////////////////////////////////////////// +static void ai_on_event_cb(pjmedia_ai_port *ai_port, + const pjmedia_ai_event *event) +{ + pjmedia_port *port = pjmedia_ai_port_get_port(ai_port); + AudioMediaAiPort *amp; + + /* Protect against use-after-free: check the back-pointer under + * grp_lock so the callback sees NULL if destructor has run. + */ + if (!port || !port->grp_lock) + return; + + pj_grp_lock_acquire(port->grp_lock); + amp = static_cast( + pjmedia_ai_port_get_user_data(ai_port)); + if (!amp) { + pj_grp_lock_release(port->grp_lock); + return; + } + + { + AiMediaEvent ev; + ev.type = event->type; + ev.status = event->status; + if (event->text.slen > 0) + ev.text.assign(event->text.ptr, event->text.slen); + + pj_grp_lock_release(port->grp_lock); + amp->onEvent(ev); + } +} + + +AudioMediaAiPort::AudioMediaAiPort() +: pool(NULL), aiPort(NULL), backend(NULL) +{ +} + +AudioMediaAiPort::~AudioMediaAiPort() +{ + if (aiPort) { + /* Null the back-pointer under grp_lock so ai_on_event_cb + * sees NULL and bails out, preventing use-after-free. + */ + pjmedia_port *port = pjmedia_ai_port_get_port(aiPort); + if (port && port->grp_lock) { + pj_grp_lock_acquire(port->grp_lock); + pjmedia_ai_port_set_user_data(aiPort, NULL); + pj_grp_lock_release(port->grp_lock); + } + + PJSUA2_CATCH_IGNORE( disconnect() ); + pj_thread_sleep(200); + } + + PJSUA2_CATCH_IGNORE( unregisterMediaPort() ); + + if (aiPort) { + pjmedia_port_destroy(pjmedia_ai_port_get_port(aiPort)); + aiPort = NULL; + } + + if (pool) { + pj_pool_release(pool); + pool = NULL; + } +} + +void AudioMediaAiPort::createPort(const AiMediaPortParam &prm) + PJSUA2_THROW(Error) +{ + pjmedia_ai_port_param ai_param; + pjmedia_port *media_port; + pjsip_endpoint *endpt; + pj_status_t status; + + if (pool) { + PJSUA2_RAISE_ERROR(PJ_EEXISTS); + } + + pool = pjsua_pool_create("aiamp%p", 4096, 4096); + if (!pool) { + PJSUA2_RAISE_ERROR(PJ_ENOMEM); + } + + /* Use pjsua's SIP endpoint ioqueue and timer heap so that + * WebSocket I/O is polled by pjsua's existing worker threads. + */ + endpt = pjsua_get_pjsip_endpt(); + + /* Create OpenAI backend */ + status = pjmedia_ai_openai_backend_create(pool, &backend); + if (status != PJ_SUCCESS) { + pj_pool_release(pool); + pool = NULL; + PJSUA2_RAISE_ERROR(status); + } + + /* Create AI port */ + pjmedia_ai_port_param_default(&ai_param); + ai_param.ioqueue = pjsip_endpt_get_ioqueue(endpt); + ai_param.timer_heap = pjsip_endpt_get_timer_heap(endpt); + ai_param.cb.on_event = &ai_on_event_cb; + ai_param.user_data = this; + ai_param.backend = backend; + ai_param.vad_enabled = prm.vadEnabled ? PJ_TRUE : PJ_FALSE; + ai_param.ptime_msec = prm.ptimeMsec; + + status = pjmedia_ai_port_create(pool, &ai_param, &aiPort); + if (status != PJ_SUCCESS) { + pj_pool_release(pool); + pool = NULL; + PJSUA2_RAISE_ERROR(status); + } + + media_port = pjmedia_ai_port_get_port(aiPort); + registerMediaPort2(media_port, pool); +} + +void AudioMediaAiPort::connect(const string &url, const string &authToken) + PJSUA2_THROW(Error) +{ + pj_str_t url_str, token_str; + pj_status_t status; + + if (!aiPort) { + PJSUA2_RAISE_ERROR(PJ_EINVALIDOP); + } + + url_str = pj_str((char*)url.c_str()); + token_str = pj_str((char*)authToken.c_str()); + + status = pjmedia_ai_port_connect(aiPort, &url_str, &token_str); + PJSUA2_CHECK_RAISE_ERROR(status); +} + +void AudioMediaAiPort::disconnect() PJSUA2_THROW(Error) +{ + pj_status_t status; + + if (!aiPort) { + return; + } + + status = pjmedia_ai_port_disconnect(aiPort); + PJSUA2_CHECK_RAISE_ERROR(status); +} + +/////////////////////////////////////////////////////////////////////////////// + AudioMediaPlayer::AudioMediaPlayer() : playerId(PJSUA_INVALID_ID) { From d0e71751d40f29c5aa12a8dc1c24c40f15d05c8f Mon Sep 17 00:00:00 2001 From: nanang Date: Wed, 18 Mar 2026 14:11:33 +0700 Subject: [PATCH 2/3] Address Copilot review on PJSUA2 AudioMediaAiPort - Fix pool lifetime: register grp_lock destroy handler to release the wrapper pool (which holds the backend struct) only after the port's ref-count reaches zero, preventing use-after-free if pjmedia_port_destroy is deferred by the conference bridge - Remove fixed 200ms sleep from destructor, rely on grp_lock ref-counting for proper synchronization - Document thread-safety requirement on set_user_data (caller must hold grp_lock if callbacks may run concurrently) - Fix createPort() doc: clarify it uses OpenAI backend, not a user-specified backend type Co-Authored-By: Claude Code --- pjmedia/include/pjmedia/ai_port.h | 5 ++++- pjsip/include/pjsua2/media.hpp | 2 +- pjsip/src/pjsua2/media.cpp | 24 +++++++++++++++++++----- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/pjmedia/include/pjmedia/ai_port.h b/pjmedia/include/pjmedia/ai_port.h index 4cbfcf4cc4..576b8c1a51 100644 --- a/pjmedia/include/pjmedia/ai_port.h +++ b/pjmedia/include/pjmedia/ai_port.h @@ -379,7 +379,10 @@ PJ_DECL(pj_status_t) pjmedia_ai_port_disconnect(pjmedia_ai_port *ai_port); PJ_DECL(void*) pjmedia_ai_port_get_user_data(pjmedia_ai_port *ai_port); /** - * Set the user data associated with the AI port. + * Set the user data associated with the AI port. If callbacks may + * be running concurrently, the caller should hold the port's + * grp_lock (via pjmedia_ai_port_get_port()->grp_lock) when calling + * this function. * * @param ai_port The AI port instance. * @param user_data The user data pointer. diff --git a/pjsip/include/pjsua2/media.hpp b/pjsip/include/pjsua2/media.hpp index 74ffb23d3d..9d3179870d 100644 --- a/pjsip/include/pjsua2/media.hpp +++ b/pjsip/include/pjsua2/media.hpp @@ -607,7 +607,7 @@ struct AiMediaPortParam * real-time AI services (e.g. OpenAI Realtime API) over WebSocket. * * Basic usage: - * 1. Create with createPort() specifying the backend type. + * 1. Create with createPort() (uses the OpenAI Realtime API backend). * 2. Connect to the AI service with connect(). * 3. Use startTransmit()/stopTransmit() to route audio from/to * other conference bridge ports (e.g. AudioMedia from a call). diff --git a/pjsip/src/pjsua2/media.cpp b/pjsip/src/pjsua2/media.cpp index 6411f1d7b4..7ca5a9dae8 100644 --- a/pjsip/src/pjsua2/media.cpp +++ b/pjsip/src/pjsua2/media.cpp @@ -463,6 +463,13 @@ AudioMediaAiPort::AudioMediaAiPort() { } +static void ai_wrapper_on_destroy(void *member) +{ + pj_pool_t *pool = static_cast(member); + if (pool) + pj_pool_release(pool); +} + AudioMediaAiPort::~AudioMediaAiPort() { if (aiPort) { @@ -477,7 +484,6 @@ AudioMediaAiPort::~AudioMediaAiPort() } PJSUA2_CATCH_IGNORE( disconnect() ); - pj_thread_sleep(200); } PJSUA2_CATCH_IGNORE( unregisterMediaPort() ); @@ -487,10 +493,10 @@ AudioMediaAiPort::~AudioMediaAiPort() aiPort = NULL; } - if (pool) { - pj_pool_release(pool); - pool = NULL; - } + /* Note: pool is released by ai_wrapper_on_destroy() via + * grp_lock destroy handler, not here. This ensures the pool + * (which holds the backend struct) outlives the port. + */ } void AudioMediaAiPort::createPort(const AiMediaPortParam &prm) @@ -541,6 +547,14 @@ void AudioMediaAiPort::createPort(const AiMediaPortParam &prm) } media_port = pjmedia_ai_port_get_port(aiPort); + + /* Register a grp_lock destroy handler so the wrapper pool (which + * holds the backend struct) is released only after the port's + * grp_lock ref-count reaches zero and all callbacks have completed. + */ + pj_grp_lock_add_handler(media_port->grp_lock, pool, + pool, &ai_wrapper_on_destroy); + registerMediaPort2(media_port, pool); } From 3e90421e5cefcc8aacdee2f7f171feb15817b2c7 Mon Sep 17 00:00:00 2001 From: nanang Date: Wed, 18 Mar 2026 15:50:31 +0700 Subject: [PATCH 3/3] Add Python SWIG test and fix disconnect when not connected - Add ua_ai_port_test() to Python SWIG test: creates AI port, registers to conf bridge, optionally connects to OpenAI if OPENAI_API_KEY is set (interactive mic/speaker, ENTER to stop), clean destroy - Fix disconnect() to silently ignore PJ_EINVALIDOP (not connected) instead of raising an error Co-Authored-By: Claude Code --- pjsip-apps/src/swig/python/test.py | 91 ++ pjsip-apps/src/swig/symbols.i | 1359 ++++++++++++++-------------- pjsip/src/pjsua2/media.cpp | 5 +- 3 files changed, 762 insertions(+), 693 deletions(-) diff --git a/pjsip-apps/src/swig/python/test.py b/pjsip-apps/src/swig/python/test.py index da1a40c1c3..1aee9f6c0c 100644 --- a/pjsip-apps/src/swig/python/test.py +++ b/pjsip-apps/src/swig/python/test.py @@ -1,5 +1,6 @@ import pjsua2 as pj import sys +import os import time from collections import deque import struct @@ -233,6 +234,95 @@ def ua_tonegen_test(): ep.libDestroy() +# +# AI Media Port test +# +class MyAiPort(pj.AudioMediaAiPort): + """Custom AI port that collects events.""" + def __init__(self): + super().__init__() + self.events = [] + self.connected = False + self.transcripts = [] + + def onEvent(self, event): + self.events.append(event.type) + if event.type == pj.PJMEDIA_AI_EVENT_CONNECTED: + self.connected = True + write(" [AI] Connected\r\n") + elif event.type == pj.PJMEDIA_AI_EVENT_DISCONNECTED: + self.connected = False + write(" [AI] Disconnected\r\n") + elif event.type == pj.PJMEDIA_AI_EVENT_TRANSCRIPT: + self.transcripts.append(event.text) + write(" [AI] " + event.text + "\r\n") + elif event.type == pj.PJMEDIA_AI_EVENT_RESPONSE_DONE: + write(" [AI] Response done\r\n") + +def ua_ai_port_test(): + write("AI media port test.." + "\r\n") + ep_cfg = pj.EpConfig() + + ep = pj.Endpoint() + ep.libCreate() + ep.libInit(ep_cfg) + ep.libStart() + + # Create AI port with default params + ai = MyAiPort() + prm = pj.AiMediaPortParam() + assert prm.vadEnabled == False + assert prm.ptimeMsec == 20 + + ai.createPort(prm) + write(" AI port created and registered to conf bridge\r\n") + + # Route audio: mic -> AI -> speaker + ai.startTransmit(ep.audDevManager().getPlaybackDevMedia()) + ep.audDevManager().getCaptureDevMedia().startTransmit(ai) + write(" Audio routing established\r\n") + + # Connect to OpenAI if API key is available + api_key = os.environ.get("OPENAI_API_KEY", "") + if api_key: + url = ("wss://api.openai.com/v1/realtime" + "?model=gpt-4o-mini-realtime-preview") + write(" Connecting to OpenAI..\r\n") + ai.connect(url, api_key) + + # Wait for connection + for i in range(150): + ep.libHandleEvents(100) + if ai.connected: + break + + if ai.connected: + write(" Connected! Speak into your mic.\r\n") + write(" Press ENTER to stop.\r\n") + input() + + write(" Disconnecting..\r\n") + ai.disconnect() + # Let close handshake complete + for i in range(20): + ep.libHandleEvents(100) + else: + write(" Connection timeout (non-fatal)\r\n") + else: + write(" OPENAI_API_KEY not set, skipping AI connection test\r\n") + + # Disconnect routing + ai.stopTransmit(ep.audDevManager().getPlaybackDevMedia()) + ep.audDevManager().getCaptureDevMedia().stopTransmit(ai) + write(" Audio routing disconnected\r\n") + + del ai + write(" AI port destroyed\r\n") + + ep.libDestroy() + write(" AI media port test OK\r\n") + + class RandomIntVal(): def __init__(self): self.value = randint(0, 100000) @@ -304,6 +394,7 @@ def ua_pending_job_test(): ua_run_test_exception() ua_run_log_test() ua_run_ua_test() + ua_ai_port_test() ua_tonegen_test() ua_pending_job_test() sys.exit(0) diff --git a/pjsip-apps/src/swig/symbols.i b/pjsip-apps/src/swig/symbols.i index 6dfb5b8d86..5213132054 100644 --- a/pjsip-apps/src/swig/symbols.i +++ b/pjsip-apps/src/swig/symbols.i @@ -2,207 +2,206 @@ enum pj_file_access { - PJ_O_RDONLY = 0x1101, - PJ_O_WRONLY = 0x1102, - PJ_O_RDWR = 0x1103, - PJ_O_APPEND = 0x1108, - PJ_O_CLOEXEC = 0x1104, - PJ_O_ASYNC = 0x200, - PJ_O_SEQUENTIAL = 0x400, - PJ_O_RANDOM = 0x800 + PJ_O_RDONLY = 0x1101, + PJ_O_WRONLY = 0x1102, + PJ_O_RDWR = 0x1103, + PJ_O_APPEND = 0x1108, + PJ_O_CLOEXEC = 0x1104, + PJ_O_ASYNC = 0x200, + PJ_O_SEQUENTIAL = 0x400, + PJ_O_RANDOM = 0x800 }; enum pj_log_decoration { - PJ_LOG_HAS_DAY_NAME = 1, - PJ_LOG_HAS_YEAR = 2, - PJ_LOG_HAS_MONTH = 4, - PJ_LOG_HAS_DAY_OF_MON = 8, - PJ_LOG_HAS_TIME = 16, - PJ_LOG_HAS_MICRO_SEC = 32, - PJ_LOG_HAS_SENDER = 64, - PJ_LOG_HAS_NEWLINE = 128, - PJ_LOG_HAS_CR = 256, - PJ_LOG_HAS_SPACE = 512, - PJ_LOG_HAS_COLOR = 1024, - PJ_LOG_HAS_LEVEL_TEXT = 2048, - PJ_LOG_HAS_THREAD_ID = 4096, - PJ_LOG_HAS_THREAD_SWC = 8192, - PJ_LOG_HAS_INDENT = 16384 + PJ_LOG_HAS_DAY_NAME = 1, + PJ_LOG_HAS_YEAR = 2, + PJ_LOG_HAS_MONTH = 4, + PJ_LOG_HAS_DAY_OF_MON = 8, + PJ_LOG_HAS_TIME = 16, + PJ_LOG_HAS_MICRO_SEC = 32, + PJ_LOG_HAS_SENDER = 64, + PJ_LOG_HAS_NEWLINE = 128, + PJ_LOG_HAS_CR = 256, + PJ_LOG_HAS_SPACE = 512, + PJ_LOG_HAS_COLOR = 1024, + PJ_LOG_HAS_LEVEL_TEXT = 2048, + PJ_LOG_HAS_THREAD_ID = 4096, + PJ_LOG_HAS_THREAD_SWC = 8192, + PJ_LOG_HAS_INDENT =16384 }; typedef enum pj_qos_type { - PJ_QOS_TYPE_BEST_EFFORT, - PJ_QOS_TYPE_BACKGROUND, - PJ_QOS_TYPE_VIDEO, - PJ_QOS_TYPE_VOICE, - PJ_QOS_TYPE_CONTROL, - PJ_QOS_TYPE_SIGNALLING + PJ_QOS_TYPE_BEST_EFFORT, + PJ_QOS_TYPE_BACKGROUND, + PJ_QOS_TYPE_VIDEO, + PJ_QOS_TYPE_VOICE, + PJ_QOS_TYPE_CONTROL, + PJ_QOS_TYPE_SIGNALLING } pj_qos_type; typedef enum pj_qos_flag { - PJ_QOS_PARAM_HAS_DSCP = 1, - PJ_QOS_PARAM_HAS_SO_PRIO = 2, - PJ_QOS_PARAM_HAS_WMM = 4 + PJ_QOS_PARAM_HAS_DSCP = 1, + PJ_QOS_PARAM_HAS_SO_PRIO = 2, + PJ_QOS_PARAM_HAS_WMM = 4 } pj_qos_flag; typedef enum pj_qos_wmm_prio { - PJ_QOS_WMM_PRIO_BULK_EFFORT, - PJ_QOS_WMM_PRIO_BULK, - PJ_QOS_WMM_PRIO_VIDEO, - PJ_QOS_WMM_PRIO_VOICE + PJ_QOS_WMM_PRIO_BULK_EFFORT, + PJ_QOS_WMM_PRIO_BULK, + PJ_QOS_WMM_PRIO_VIDEO, + PJ_QOS_WMM_PRIO_VOICE } pj_qos_wmm_prio; typedef struct pj_qos_params { - pj_uint8_t flags; - pj_uint8_t dscp_val; - pj_uint8_t so_prio; - pj_qos_wmm_prio wmm_prio; + pj_uint8_t flags; + pj_uint8_t dscp_val; + pj_uint8_t so_prio; + pj_qos_wmm_prio wmm_prio; } pj_qos_params; -typedef enum pj_ssl_cipher -{ - PJ_TLS_UNKNOWN_CIPHER = -1, - PJ_TLS_NULL_WITH_NULL_NULL = 0x00000000, - PJ_TLS_RSA_WITH_NULL_MD5 = 0x00000001, - PJ_TLS_RSA_WITH_NULL_SHA = 0x00000002, - PJ_TLS_RSA_WITH_NULL_SHA256 = 0x0000003B, - PJ_TLS_RSA_WITH_RC4_128_MD5 = 0x00000004, - PJ_TLS_RSA_WITH_RC4_128_SHA = 0x00000005, - PJ_TLS_RSA_WITH_3DES_EDE_CBC_SHA = 0x0000000A, - PJ_TLS_RSA_WITH_AES_128_CBC_SHA = 0x0000002F, - PJ_TLS_RSA_WITH_AES_256_CBC_SHA = 0x00000035, - PJ_TLS_RSA_WITH_AES_128_CBC_SHA256 = 0x0000003C, - PJ_TLS_RSA_WITH_AES_256_CBC_SHA256 = 0x0000003D, - PJ_TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA = 0x0000000D, - PJ_TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA = 0x00000010, - PJ_TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA = 0x00000013, - PJ_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA = 0x00000016, - PJ_TLS_DH_DSS_WITH_AES_128_CBC_SHA = 0x00000030, - PJ_TLS_DH_RSA_WITH_AES_128_CBC_SHA = 0x00000031, - PJ_TLS_DHE_DSS_WITH_AES_128_CBC_SHA = 0x00000032, - PJ_TLS_DHE_RSA_WITH_AES_128_CBC_SHA = 0x00000033, - PJ_TLS_DH_DSS_WITH_AES_256_CBC_SHA = 0x00000036, - PJ_TLS_DH_RSA_WITH_AES_256_CBC_SHA = 0x00000037, - PJ_TLS_DHE_DSS_WITH_AES_256_CBC_SHA = 0x00000038, - PJ_TLS_DHE_RSA_WITH_AES_256_CBC_SHA = 0x00000039, - PJ_TLS_DH_DSS_WITH_AES_128_CBC_SHA256 = 0x0000003E, - PJ_TLS_DH_RSA_WITH_AES_128_CBC_SHA256 = 0x0000003F, - PJ_TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 = 0x00000040, - PJ_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 = 0x00000067, - PJ_TLS_DH_DSS_WITH_AES_256_CBC_SHA256 = 0x00000068, - PJ_TLS_DH_RSA_WITH_AES_256_CBC_SHA256 = 0x00000069, - PJ_TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 = 0x0000006A, - PJ_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 = 0x0000006B, - PJ_TLS_DH_anon_WITH_RC4_128_MD5 = 0x00000018, - PJ_TLS_DH_anon_WITH_3DES_EDE_CBC_SHA = 0x0000001B, - PJ_TLS_DH_anon_WITH_AES_128_CBC_SHA = 0x00000034, - PJ_TLS_DH_anon_WITH_AES_256_CBC_SHA = 0x0000003A, - PJ_TLS_DH_anon_WITH_AES_128_CBC_SHA256 = 0x0000006C, - PJ_TLS_DH_anon_WITH_AES_256_CBC_SHA256 = 0x0000006D, - PJ_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 = 0x0000c02c, - PJ_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 = 0x0000c030, - PJ_TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 = 0x000000a3, - PJ_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 = 0x0000009f, - PJ_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 = 0x0000c02b, - PJ_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 = 0x0000c02f, - PJ_TLS_AES_128_GCM_SHA256 = 0x00001301, - PJ_TLS_AES_256_GCM_SHA384 = 0x00001302, - PJ_TLS_CHACHA20_POLY1305_SHA256 = 0x00001303, - PJ_TLS_RSA_EXPORT_WITH_RC4_40_MD5 = 0x00000003, - PJ_TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 = 0x00000006, - PJ_TLS_RSA_WITH_IDEA_CBC_SHA = 0x00000007, - PJ_TLS_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x00000008, - PJ_TLS_RSA_WITH_DES_CBC_SHA = 0x00000009, - PJ_TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA = 0x0000000B, - PJ_TLS_DH_DSS_WITH_DES_CBC_SHA = 0x0000000C, - PJ_TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x0000000E, - PJ_TLS_DH_RSA_WITH_DES_CBC_SHA = 0x0000000F, - PJ_TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA = 0x00000011, - PJ_TLS_DHE_DSS_WITH_DES_CBC_SHA = 0x00000012, - PJ_TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x00000014, - PJ_TLS_DHE_RSA_WITH_DES_CBC_SHA = 0x00000015, - PJ_TLS_DH_anon_EXPORT_WITH_RC4_40_MD5 = 0x00000017, - PJ_TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA = 0x00000019, - PJ_TLS_DH_anon_WITH_DES_CBC_SHA = 0x0000001A, - PJ_SSL_FORTEZZA_KEA_WITH_NULL_SHA = 0x0000001C, - PJ_SSL_FORTEZZA_KEA_WITH_FORTEZZA_CBC_SHA = 0x0000001D, - PJ_SSL_FORTEZZA_KEA_WITH_RC4_128_SHA = 0x0000001E, - PJ_SSL_CK_RC4_128_WITH_MD5 = 0x00010080, - PJ_SSL_CK_RC4_128_EXPORT40_WITH_MD5 = 0x00020080, - PJ_SSL_CK_RC2_128_CBC_WITH_MD5 = 0x00030080, - PJ_SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5 = 0x00040080, - PJ_SSL_CK_IDEA_128_CBC_WITH_MD5 = 0x00050080, - PJ_SSL_CK_DES_64_CBC_WITH_MD5 = 0x00060040, - PJ_SSL_CK_DES_192_EDE3_CBC_WITH_MD5 = 0x000700C0 +typedef enum pj_ssl_cipher { + PJ_TLS_UNKNOWN_CIPHER = -1, + PJ_TLS_NULL_WITH_NULL_NULL = 0x00000000, + PJ_TLS_RSA_WITH_NULL_MD5 = 0x00000001, + PJ_TLS_RSA_WITH_NULL_SHA = 0x00000002, + PJ_TLS_RSA_WITH_NULL_SHA256 = 0x0000003B, + PJ_TLS_RSA_WITH_RC4_128_MD5 = 0x00000004, + PJ_TLS_RSA_WITH_RC4_128_SHA = 0x00000005, + PJ_TLS_RSA_WITH_3DES_EDE_CBC_SHA = 0x0000000A, + PJ_TLS_RSA_WITH_AES_128_CBC_SHA = 0x0000002F, + PJ_TLS_RSA_WITH_AES_256_CBC_SHA = 0x00000035, + PJ_TLS_RSA_WITH_AES_128_CBC_SHA256 = 0x0000003C, + PJ_TLS_RSA_WITH_AES_256_CBC_SHA256 = 0x0000003D, + PJ_TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA = 0x0000000D, + PJ_TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA = 0x00000010, + PJ_TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA = 0x00000013, + PJ_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA = 0x00000016, + PJ_TLS_DH_DSS_WITH_AES_128_CBC_SHA = 0x00000030, + PJ_TLS_DH_RSA_WITH_AES_128_CBC_SHA = 0x00000031, + PJ_TLS_DHE_DSS_WITH_AES_128_CBC_SHA = 0x00000032, + PJ_TLS_DHE_RSA_WITH_AES_128_CBC_SHA = 0x00000033, + PJ_TLS_DH_DSS_WITH_AES_256_CBC_SHA = 0x00000036, + PJ_TLS_DH_RSA_WITH_AES_256_CBC_SHA = 0x00000037, + PJ_TLS_DHE_DSS_WITH_AES_256_CBC_SHA = 0x00000038, + PJ_TLS_DHE_RSA_WITH_AES_256_CBC_SHA = 0x00000039, + PJ_TLS_DH_DSS_WITH_AES_128_CBC_SHA256 = 0x0000003E, + PJ_TLS_DH_RSA_WITH_AES_128_CBC_SHA256 = 0x0000003F, + PJ_TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 = 0x00000040, + PJ_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 = 0x00000067, + PJ_TLS_DH_DSS_WITH_AES_256_CBC_SHA256 = 0x00000068, + PJ_TLS_DH_RSA_WITH_AES_256_CBC_SHA256 = 0x00000069, + PJ_TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 = 0x0000006A, + PJ_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 = 0x0000006B, + PJ_TLS_DH_anon_WITH_RC4_128_MD5 = 0x00000018, + PJ_TLS_DH_anon_WITH_3DES_EDE_CBC_SHA = 0x0000001B, + PJ_TLS_DH_anon_WITH_AES_128_CBC_SHA = 0x00000034, + PJ_TLS_DH_anon_WITH_AES_256_CBC_SHA = 0x0000003A, + PJ_TLS_DH_anon_WITH_AES_128_CBC_SHA256 = 0x0000006C, + PJ_TLS_DH_anon_WITH_AES_256_CBC_SHA256 = 0x0000006D, + PJ_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 = 0x0000c02c, + PJ_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 = 0x0000c030, + PJ_TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 = 0x000000a3, + PJ_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 = 0x0000009f, + PJ_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 = 0x0000c02b, + PJ_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 = 0x0000c02f, + PJ_TLS_AES_128_GCM_SHA256 = 0x00001301, + PJ_TLS_AES_256_GCM_SHA384 = 0x00001302, + PJ_TLS_CHACHA20_POLY1305_SHA256 = 0x00001303, + PJ_TLS_RSA_EXPORT_WITH_RC4_40_MD5 = 0x00000003, + PJ_TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 = 0x00000006, + PJ_TLS_RSA_WITH_IDEA_CBC_SHA = 0x00000007, + PJ_TLS_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x00000008, + PJ_TLS_RSA_WITH_DES_CBC_SHA = 0x00000009, + PJ_TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA = 0x0000000B, + PJ_TLS_DH_DSS_WITH_DES_CBC_SHA = 0x0000000C, + PJ_TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x0000000E, + PJ_TLS_DH_RSA_WITH_DES_CBC_SHA = 0x0000000F, + PJ_TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA = 0x00000011, + PJ_TLS_DHE_DSS_WITH_DES_CBC_SHA = 0x00000012, + PJ_TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x00000014, + PJ_TLS_DHE_RSA_WITH_DES_CBC_SHA = 0x00000015, + PJ_TLS_DH_anon_EXPORT_WITH_RC4_40_MD5 = 0x00000017, + PJ_TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA = 0x00000019, + PJ_TLS_DH_anon_WITH_DES_CBC_SHA = 0x0000001A, + PJ_SSL_FORTEZZA_KEA_WITH_NULL_SHA = 0x0000001C, + PJ_SSL_FORTEZZA_KEA_WITH_FORTEZZA_CBC_SHA = 0x0000001D, + PJ_SSL_FORTEZZA_KEA_WITH_RC4_128_SHA = 0x0000001E, + PJ_SSL_CK_RC4_128_WITH_MD5 = 0x00010080, + PJ_SSL_CK_RC4_128_EXPORT40_WITH_MD5 = 0x00020080, + PJ_SSL_CK_RC2_128_CBC_WITH_MD5 = 0x00030080, + PJ_SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5 = 0x00040080, + PJ_SSL_CK_IDEA_128_CBC_WITH_MD5 = 0x00050080, + PJ_SSL_CK_DES_64_CBC_WITH_MD5 = 0x00060040, + PJ_SSL_CK_DES_192_EDE3_CBC_WITH_MD5 = 0x000700C0 } pj_ssl_cipher; typedef enum pj_ssl_sock_proto { - PJ_SSL_SOCK_PROTO_DEFAULT = 0, - PJ_SSL_SOCK_PROTO_SSL2 = 1 << 0, - PJ_SSL_SOCK_PROTO_SSL3 = 1 << 1, - PJ_SSL_SOCK_PROTO_TLS1 = 1 << 2, - PJ_SSL_SOCK_PROTO_TLS1_1 = 1 << 3, - PJ_SSL_SOCK_PROTO_TLS1_2 = 1 << 4, - PJ_SSL_SOCK_PROTO_TLS1_3 = 1 << 5, - PJ_SSL_SOCK_PROTO_SSL23 = (1 << 16) - 1, - PJ_SSL_SOCK_PROTO_ALL = (1 << 16) - 1, - PJ_SSL_SOCK_PROTO_DTLS1 = 1 << 16 + PJ_SSL_SOCK_PROTO_DEFAULT = 0, + PJ_SSL_SOCK_PROTO_SSL2 = (1 << 0), + PJ_SSL_SOCK_PROTO_SSL3 = (1 << 1), + PJ_SSL_SOCK_PROTO_TLS1 = (1 << 2), + PJ_SSL_SOCK_PROTO_TLS1_1 = (1 << 3), + PJ_SSL_SOCK_PROTO_TLS1_2 = (1 << 4), + PJ_SSL_SOCK_PROTO_TLS1_3 = (1 << 5), + PJ_SSL_SOCK_PROTO_SSL23 = (1 << 16) - 1, + PJ_SSL_SOCK_PROTO_ALL = (1 << 16) - 1, + PJ_SSL_SOCK_PROTO_DTLS1 = (1 << 16), } pj_ssl_sock_proto; typedef enum pj_ssl_cert_name_type { - PJ_SSL_CERT_NAME_UNKNOWN = 0, - PJ_SSL_CERT_NAME_RFC822, - PJ_SSL_CERT_NAME_DNS, - PJ_SSL_CERT_NAME_URI, - PJ_SSL_CERT_NAME_IP + PJ_SSL_CERT_NAME_UNKNOWN = 0, + PJ_SSL_CERT_NAME_RFC822, + PJ_SSL_CERT_NAME_DNS, + PJ_SSL_CERT_NAME_URI, + PJ_SSL_CERT_NAME_IP } pj_ssl_cert_name_type; typedef enum pj_ssl_cert_verify_flag_t { - PJ_SSL_CERT_ESUCCESS = 0, - PJ_SSL_CERT_EISSUER_NOT_FOUND = 1 << 0, - PJ_SSL_CERT_EUNTRUSTED = 1 << 1, - PJ_SSL_CERT_EVALIDITY_PERIOD = 1 << 2, - PJ_SSL_CERT_EINVALID_FORMAT = 1 << 3, - PJ_SSL_CERT_EINVALID_PURPOSE = 1 << 4, - PJ_SSL_CERT_EISSUER_MISMATCH = 1 << 5, - PJ_SSL_CERT_ECRL_FAILURE = 1 << 6, - PJ_SSL_CERT_EREVOKED = 1 << 7, - PJ_SSL_CERT_ECHAIN_TOO_LONG = 1 << 8, - PJ_SSL_CERT_EWEAK_SIGNATURE = 1 << 9, - PJ_SSL_CERT_EIDENTITY_NOT_MATCH = 1 << 30, - PJ_SSL_CERT_EUNKNOWN = 1 << 31 + PJ_SSL_CERT_ESUCCESS = 0, + PJ_SSL_CERT_EISSUER_NOT_FOUND = (1 << 0), + PJ_SSL_CERT_EUNTRUSTED = (1 << 1), + PJ_SSL_CERT_EVALIDITY_PERIOD = (1 << 2), + PJ_SSL_CERT_EINVALID_FORMAT = (1 << 3), + PJ_SSL_CERT_EINVALID_PURPOSE = (1 << 4), + PJ_SSL_CERT_EISSUER_MISMATCH = (1 << 5), + PJ_SSL_CERT_ECRL_FAILURE = (1 << 6), + PJ_SSL_CERT_EREVOKED = (1 << 7), + PJ_SSL_CERT_ECHAIN_TOO_LONG = (1 << 8), + PJ_SSL_CERT_EWEAK_SIGNATURE = (1 << 9), + PJ_SSL_CERT_EIDENTITY_NOT_MATCH = (1 << 30), + PJ_SSL_CERT_EUNKNOWN = (1 << 31) } pj_ssl_cert_verify_flag_t; typedef enum pj_ssl_cert_lookup_type { - PJ_SSL_CERT_LOOKUP_NONE, - PJ_SSL_CERT_LOOKUP_SUBJECT, - PJ_SSL_CERT_LOOKUP_FINGERPRINT, - PJ_SSL_CERT_LOOKUP_FRIENDLY_NAME + PJ_SSL_CERT_LOOKUP_NONE, + PJ_SSL_CERT_LOOKUP_SUBJECT, + PJ_SSL_CERT_LOOKUP_FINGERPRINT, + PJ_SSL_CERT_LOOKUP_FRIENDLY_NAME } pj_ssl_cert_lookup_type; typedef enum pj_ssl_cert_direct_type { - PJ_SSL_CERT_DIRECT_NONE = 0, - PJ_SSL_CERT_DIRECT_OPENSSL_EVP_PKEY = 1, - PJ_SSL_CERT_DIRECT_OPENSSL_X509_CERT = 2 + PJ_SSL_CERT_DIRECT_NONE = 0, + PJ_SSL_CERT_DIRECT_OPENSSL_EVP_PKEY = 1, + PJ_SSL_CERT_DIRECT_OPENSSL_X509_CERT = 2, } pj_ssl_cert_direct_type; typedef int pj_status_t; enum pj_constants_ { - PJ_SUCCESS = 0, - PJ_TRUE = 1, - PJ_FALSE = 0 + PJ_SUCCESS=0, + PJ_TRUE=1, + PJ_FALSE=0 }; typedef unsigned char pj_uint8_t; @@ -215,724 +214,702 @@ typedef unsigned short pj_uint16_t; typedef enum pj_ice_sess_trickle { - PJ_ICE_SESS_TRICKLE_DISABLED, - PJ_ICE_SESS_TRICKLE_HALF, - PJ_ICE_SESS_TRICKLE_FULL + PJ_ICE_SESS_TRICKLE_DISABLED, + PJ_ICE_SESS_TRICKLE_HALF, + PJ_ICE_SESS_TRICKLE_FULL } pj_ice_sess_trickle; typedef enum pj_stun_nat_type { - PJ_STUN_NAT_TYPE_UNKNOWN, - PJ_STUN_NAT_TYPE_ERR_UNKNOWN, - PJ_STUN_NAT_TYPE_OPEN, - PJ_STUN_NAT_TYPE_BLOCKED, - PJ_STUN_NAT_TYPE_SYMMETRIC_UDP, - PJ_STUN_NAT_TYPE_FULL_CONE, - PJ_STUN_NAT_TYPE_SYMMETRIC, - PJ_STUN_NAT_TYPE_RESTRICTED, - PJ_STUN_NAT_TYPE_PORT_RESTRICTED + PJ_STUN_NAT_TYPE_UNKNOWN, + PJ_STUN_NAT_TYPE_ERR_UNKNOWN, + PJ_STUN_NAT_TYPE_OPEN, + PJ_STUN_NAT_TYPE_BLOCKED, + PJ_STUN_NAT_TYPE_SYMMETRIC_UDP, + PJ_STUN_NAT_TYPE_FULL_CONE, + PJ_STUN_NAT_TYPE_SYMMETRIC, + PJ_STUN_NAT_TYPE_RESTRICTED, + PJ_STUN_NAT_TYPE_PORT_RESTRICTED } pj_stun_nat_type; typedef enum pj_turn_tp_type { - PJ_TURN_TP_UDP = 17, - PJ_TURN_TP_TCP = 6, - PJ_TURN_TP_TLS = 56 + PJ_TURN_TP_UDP = 17, + PJ_TURN_TP_TCP = 6, + PJ_TURN_TP_TLS = 56 } pj_turn_tp_type; typedef enum pjmedia_conf_op_type { - PJMEDIA_CONF_OP_UNKNOWN, - PJMEDIA_CONF_OP_ADD_PORT, - PJMEDIA_CONF_OP_REMOVE_PORT, - PJMEDIA_CONF_OP_CONNECT_PORTS, - PJMEDIA_CONF_OP_DISCONNECT_PORTS + PJMEDIA_CONF_OP_UNKNOWN, + PJMEDIA_CONF_OP_ADD_PORT, + PJMEDIA_CONF_OP_REMOVE_PORT, + PJMEDIA_CONF_OP_CONNECT_PORTS, + PJMEDIA_CONF_OP_DISCONNECT_PORTS } pjmedia_conf_op_type; typedef enum pjmedia_echo_flag { - PJMEDIA_ECHO_DEFAULT = 0, - PJMEDIA_ECHO_SPEEX = 1, - PJMEDIA_ECHO_SIMPLE = 2, - PJMEDIA_ECHO_WEBRTC = 3, - PJMEDIA_ECHO_WEBRTC_AEC3 = 4, - PJMEDIA_ECHO_ALGO_MASK = 15, - PJMEDIA_ECHO_NO_LOCK = 16, - PJMEDIA_ECHO_USE_SIMPLE_FIFO = 32, - PJMEDIA_ECHO_USE_SW_ECHO = 64, - PJMEDIA_ECHO_USE_NOISE_SUPPRESSOR = 128, - PJMEDIA_ECHO_USE_GAIN_CONTROLLER = 256, - PJMEDIA_ECHO_AGGRESSIVENESS_DEFAULT = 0, - PJMEDIA_ECHO_AGGRESSIVENESS_CONSERVATIVE = 0x1000, - PJMEDIA_ECHO_AGGRESSIVENESS_MODERATE = 0x2000, - PJMEDIA_ECHO_AGGRESSIVENESS_AGGRESSIVE = 0x3000, - PJMEDIA_ECHO_AGGRESSIVENESS_MASK = 0xF000 + PJMEDIA_ECHO_DEFAULT= 0, + PJMEDIA_ECHO_SPEEX = 1, + PJMEDIA_ECHO_SIMPLE = 2, + PJMEDIA_ECHO_WEBRTC = 3, + PJMEDIA_ECHO_WEBRTC_AEC3 = 4, + PJMEDIA_ECHO_ALGO_MASK = 15, + PJMEDIA_ECHO_NO_LOCK = 16, + PJMEDIA_ECHO_USE_SIMPLE_FIFO = 32, + PJMEDIA_ECHO_USE_SW_ECHO = 64, + PJMEDIA_ECHO_USE_NOISE_SUPPRESSOR = 128, + PJMEDIA_ECHO_USE_GAIN_CONTROLLER = 256, + PJMEDIA_ECHO_AGGRESSIVENESS_DEFAULT = 0, + PJMEDIA_ECHO_AGGRESSIVENESS_CONSERVATIVE = 0x1000, + PJMEDIA_ECHO_AGGRESSIVENESS_MODERATE = 0x2000, + PJMEDIA_ECHO_AGGRESSIVENESS_AGGRESSIVE = 0x3000, + PJMEDIA_ECHO_AGGRESSIVENESS_MASK = 0xF000 } pjmedia_echo_flag; typedef enum pjmedia_event_type { - PJMEDIA_EVENT_NONE, - PJMEDIA_EVENT_FMT_CHANGED = ((('H' << 24) | ('C' << 16)) | ('M' << 8)) | 'F', - PJMEDIA_EVENT_WND_CLOSING = ((('L' << 24) | ('C' << 16)) | ('N' << 8)) | 'W', - PJMEDIA_EVENT_WND_CLOSED = ((('O' << 24) | ('C' << 16)) | ('N' << 8)) | 'W', - PJMEDIA_EVENT_WND_RESIZED = ((('Z' << 24) | ('R' << 16)) | ('N' << 8)) | 'W', - PJMEDIA_EVENT_MOUSE_BTN_DOWN = ((('N' << 24) | ('D' << 16)) | ('S' << 8)) | 'M', - PJMEDIA_EVENT_KEYFRAME_FOUND = ((('F' << 24) | ('R' << 16)) | ('F' << 8)) | 'I', - PJMEDIA_EVENT_KEYFRAME_MISSING = ((('M' << 24) | ('R' << 16)) | ('F' << 8)) | 'I', - PJMEDIA_EVENT_ORIENT_CHANGED = ((('T' << 24) | ('N' << 16)) | ('R' << 8)) | 'O', - PJMEDIA_EVENT_RX_RTCP_FB = ((('B' << 24) | ('F' << 16)) | ('T' << 8)) | 'R', - PJMEDIA_EVENT_AUD_DEV_ERROR = ((('R' << 24) | ('R' << 16)) | ('E' << 8)) | 'A', - PJMEDIA_EVENT_VID_DEV_ERROR = ((('R' << 24) | ('R' << 16)) | ('E' << 8)) | 'V', - PJMEDIA_EVENT_MEDIA_TP_ERR = ((('R' << 24) | ('R' << 16)) | ('E' << 8)) | 'T', - PJMEDIA_EVENT_CALLBACK = (((' ' << 24) | (' ' << 16)) | ('B' << 8)) | 'C' + PJMEDIA_EVENT_NONE, + PJMEDIA_EVENT_FMT_CHANGED = ( 'H'<<24 | 'C'<<16 | 'M'<<8 | 'F' ), + PJMEDIA_EVENT_WND_CLOSING = ( 'L'<<24 | 'C'<<16 | 'N'<<8 | 'W' ), + PJMEDIA_EVENT_WND_CLOSED = ( 'O'<<24 | 'C'<<16 | 'N'<<8 | 'W' ), + PJMEDIA_EVENT_WND_RESIZED = ( 'Z'<<24 | 'R'<<16 | 'N'<<8 | 'W' ), + PJMEDIA_EVENT_MOUSE_BTN_DOWN = ( 'N'<<24 | 'D'<<16 | 'S'<<8 | 'M' ), + PJMEDIA_EVENT_KEYFRAME_FOUND = ( 'F'<<24 | 'R'<<16 | 'F'<<8 | 'I' ), + PJMEDIA_EVENT_KEYFRAME_MISSING = ( 'M'<<24 | 'R'<<16 | 'F'<<8 | 'I' ), + PJMEDIA_EVENT_ORIENT_CHANGED = ( 'T'<<24 | 'N'<<16 | 'R'<<8 | 'O' ), + PJMEDIA_EVENT_RX_RTCP_FB = ( 'B'<<24 | 'F'<<16 | 'T'<<8 | 'R' ), + PJMEDIA_EVENT_AUD_DEV_ERROR = ( 'R'<<24 | 'R'<<16 | 'E'<<8 | 'A' ), + PJMEDIA_EVENT_VID_DEV_ERROR = ( 'R'<<24 | 'R'<<16 | 'E'<<8 | 'V' ), + PJMEDIA_EVENT_MEDIA_TP_ERR = ( 'R'<<24 | 'R'<<16 | 'E'<<8 | 'T' ), + PJMEDIA_EVENT_CALLBACK = ( ' '<<24 | ' '<<16 | 'B'<<8 | 'C' ) } pjmedia_event_type; typedef enum pjmedia_format_id { - PJMEDIA_FORMAT_L16 = 0, - PJMEDIA_FORMAT_PCM = PJMEDIA_FORMAT_L16, - PJMEDIA_FORMAT_PCMA = ((('W' << 24) | ('A' << 16)) | ('L' << 8)) | 'A', - PJMEDIA_FORMAT_ALAW = PJMEDIA_FORMAT_PCMA, - PJMEDIA_FORMAT_PCMU = ((('W' << 24) | ('A' << 16)) | ('L' << 8)) | 'u', - PJMEDIA_FORMAT_ULAW = PJMEDIA_FORMAT_PCMU, - PJMEDIA_FORMAT_AMR = ((('R' << 24) | ('M' << 16)) | ('A' << 8)) | ' ', - PJMEDIA_FORMAT_G722 = ((('2' << 24) | ('2' << 16)) | ('7' << 8)) | 'G', - PJMEDIA_FORMAT_G729 = ((('9' << 24) | ('2' << 16)) | ('7' << 8)) | 'G', - PJMEDIA_FORMAT_ILBC = ((('C' << 24) | ('B' << 16)) | ('L' << 8)) | 'I', - PJMEDIA_FORMAT_RGB24 = ((('3' << 24) | ('B' << 16)) | ('G' << 8)) | 'R', - PJMEDIA_FORMAT_RGBA = ((('A' << 24) | ('B' << 16)) | ('G' << 8)) | 'R', - PJMEDIA_FORMAT_BGRA = ((('A' << 24) | ('R' << 16)) | ('G' << 8)) | 'B', - PJMEDIA_FORMAT_RGB32 = PJMEDIA_FORMAT_RGBA, - PJMEDIA_FORMAT_DIB = (((' ' << 24) | ('B' << 16)) | ('I' << 8)) | 'D', - PJMEDIA_FORMAT_GBRP = ((('P' << 24) | ('R' << 16)) | ('B' << 8)) | 'G', - PJMEDIA_FORMAT_AYUV = ((('V' << 24) | ('U' << 16)) | ('Y' << 8)) | 'A', - PJMEDIA_FORMAT_YUY2 = ((('2' << 24) | ('Y' << 16)) | ('U' << 8)) | 'Y', - PJMEDIA_FORMAT_UYVY = ((('Y' << 24) | ('V' << 16)) | ('Y' << 8)) | 'U', - PJMEDIA_FORMAT_YVYU = ((('U' << 24) | ('Y' << 16)) | ('V' << 8)) | 'Y', - PJMEDIA_FORMAT_I420 = ((('0' << 24) | ('2' << 16)) | ('4' << 8)) | 'I', - PJMEDIA_FORMAT_IYUV = PJMEDIA_FORMAT_I420, - PJMEDIA_FORMAT_YV12 = ((('2' << 24) | ('1' << 16)) | ('V' << 8)) | 'Y', - PJMEDIA_FORMAT_NV12 = ((('2' << 24) | ('1' << 16)) | ('V' << 8)) | 'N', - PJMEDIA_FORMAT_NV21 = ((('1' << 24) | ('2' << 16)) | ('V' << 8)) | 'N', - PJMEDIA_FORMAT_I422 = ((('2' << 24) | ('2' << 16)) | ('4' << 8)) | 'I', - PJMEDIA_FORMAT_I420JPEG = ((('0' << 24) | ('2' << 16)) | ('4' << 8)) | 'J', - PJMEDIA_FORMAT_I422JPEG = ((('2' << 24) | ('2' << 16)) | ('4' << 8)) | 'J', - PJMEDIA_FORMAT_H261 = ((('1' << 24) | ('6' << 16)) | ('2' << 8)) | 'H', - PJMEDIA_FORMAT_H263 = ((('3' << 24) | ('6' << 16)) | ('2' << 8)) | 'H', - PJMEDIA_FORMAT_H263P = ((('3' << 24) | ('6' << 16)) | ('2' << 8)) | 'P', - PJMEDIA_FORMAT_H264 = ((('4' << 24) | ('6' << 16)) | ('2' << 8)) | 'H', - PJMEDIA_FORMAT_VP8 = ((('0' << 24) | ('8' << 16)) | ('P' << 8)) | 'V', - PJMEDIA_FORMAT_VP9 = ((('0' << 24) | ('9' << 16)) | ('P' << 8)) | 'V', - PJMEDIA_FORMAT_MJPEG = ((('G' << 24) | ('P' << 16)) | ('J' << 8)) | 'M', - PJMEDIA_FORMAT_MPEG1VIDEO = ((('V' << 24) | ('1' << 16)) | ('P' << 8)) | 'M', - PJMEDIA_FORMAT_MPEG2VIDEO = ((('V' << 24) | ('2' << 16)) | ('P' << 8)) | 'M', - PJMEDIA_FORMAT_MPEG4 = ((('4' << 24) | ('G' << 16)) | ('P' << 8)) | 'M', - PJMEDIA_FORMAT_INVALID = 0xFFFFFFF + PJMEDIA_FORMAT_L16 = 0, + PJMEDIA_FORMAT_PCM = PJMEDIA_FORMAT_L16, + PJMEDIA_FORMAT_PCMA = ( 'W'<<24 | 'A'<<16 | 'L'<<8 | 'A' ), + PJMEDIA_FORMAT_ALAW = PJMEDIA_FORMAT_PCMA, + PJMEDIA_FORMAT_PCMU = ( 'W'<<24 | 'A'<<16 | 'L'<<8 | 'u' ), + PJMEDIA_FORMAT_ULAW = PJMEDIA_FORMAT_PCMU, + PJMEDIA_FORMAT_AMR = ( 'R'<<24 | 'M'<<16 | 'A'<<8 | ' ' ), + PJMEDIA_FORMAT_G722 = ( '2'<<24 | '2'<<16 | '7'<<8 | 'G' ), + PJMEDIA_FORMAT_G729 = ( '9'<<24 | '2'<<16 | '7'<<8 | 'G' ), + PJMEDIA_FORMAT_ILBC = ( 'C'<<24 | 'B'<<16 | 'L'<<8 | 'I' ), + PJMEDIA_FORMAT_RGB24 = ( '3'<<24 | 'B'<<16 | 'G'<<8 | 'R' ), + PJMEDIA_FORMAT_RGBA = ( 'A'<<24 | 'B'<<16 | 'G'<<8 | 'R' ), + PJMEDIA_FORMAT_BGRA = ( 'A'<<24 | 'R'<<16 | 'G'<<8 | 'B' ), + PJMEDIA_FORMAT_RGB32 = PJMEDIA_FORMAT_RGBA, + PJMEDIA_FORMAT_DIB = ( ' '<<24 | 'B'<<16 | 'I'<<8 | 'D' ), + PJMEDIA_FORMAT_GBRP = ( 'P'<<24 | 'R'<<16 | 'B'<<8 | 'G' ), + PJMEDIA_FORMAT_AYUV = ( 'V'<<24 | 'U'<<16 | 'Y'<<8 | 'A' ), + PJMEDIA_FORMAT_YUY2 = ( '2'<<24 | 'Y'<<16 | 'U'<<8 | 'Y' ), + PJMEDIA_FORMAT_UYVY = ( 'Y'<<24 | 'V'<<16 | 'Y'<<8 | 'U' ), + PJMEDIA_FORMAT_YVYU = ( 'U'<<24 | 'Y'<<16 | 'V'<<8 | 'Y' ), + PJMEDIA_FORMAT_I420 = ( '0'<<24 | '2'<<16 | '4'<<8 | 'I' ), + PJMEDIA_FORMAT_IYUV = PJMEDIA_FORMAT_I420, + PJMEDIA_FORMAT_YV12 = ( '2'<<24 | '1'<<16 | 'V'<<8 | 'Y' ), + PJMEDIA_FORMAT_NV12 = ( '2'<<24 | '1'<<16 | 'V'<<8 | 'N' ), + PJMEDIA_FORMAT_NV21 = ( '1'<<24 | '2'<<16 | 'V'<<8 | 'N' ), + PJMEDIA_FORMAT_I422 = ( '2'<<24 | '2'<<16 | '4'<<8 | 'I' ), + PJMEDIA_FORMAT_I420JPEG = ( '0'<<24 | '2'<<16 | '4'<<8 | 'J' ), + PJMEDIA_FORMAT_I422JPEG = ( '2'<<24 | '2'<<16 | '4'<<8 | 'J' ), + PJMEDIA_FORMAT_H261 = ( '1'<<24 | '6'<<16 | '2'<<8 | 'H' ), + PJMEDIA_FORMAT_H263 = ( '3'<<24 | '6'<<16 | '2'<<8 | 'H' ), + PJMEDIA_FORMAT_H263P = ( '3'<<24 | '6'<<16 | '2'<<8 | 'P' ), + PJMEDIA_FORMAT_H264 = ( '4'<<24 | '6'<<16 | '2'<<8 | 'H' ), + PJMEDIA_FORMAT_VP8 = ( '0'<<24 | '8'<<16 | 'P'<<8 | 'V' ), + PJMEDIA_FORMAT_VP9 = ( '0'<<24 | '9'<<16 | 'P'<<8 | 'V' ), + PJMEDIA_FORMAT_MJPEG = ( 'G'<<24 | 'P'<<16 | 'J'<<8 | 'M' ), + PJMEDIA_FORMAT_MPEG1VIDEO = ( 'V'<<24 | '1'<<16 | 'P'<<8 | 'M' ), + PJMEDIA_FORMAT_MPEG2VIDEO = ( 'V'<<24 | '2'<<16 | 'P'<<8 | 'M' ), + PJMEDIA_FORMAT_MPEG4 = ( '4'<<24 | 'G'<<16 | 'P'<<8 | 'M' ), + PJMEDIA_FORMAT_INVALID = 0xFFFFFFF } pjmedia_format_id; typedef enum pjmedia_frame_type { - PJMEDIA_FRAME_TYPE_NONE, - PJMEDIA_FRAME_TYPE_AUDIO, - PJMEDIA_FRAME_TYPE_EXTENDED, - PJMEDIA_FRAME_TYPE_VIDEO + PJMEDIA_FRAME_TYPE_NONE, + PJMEDIA_FRAME_TYPE_AUDIO, + PJMEDIA_FRAME_TYPE_EXTENDED, + PJMEDIA_FRAME_TYPE_VIDEO } pjmedia_frame_type; typedef enum pjmedia_jb_discard_algo { - PJMEDIA_JB_DISCARD_NONE = 0, - PJMEDIA_JB_DISCARD_STATIC, - PJMEDIA_JB_DISCARD_PROGRESSIVE + PJMEDIA_JB_DISCARD_NONE = 0, + PJMEDIA_JB_DISCARD_STATIC, + PJMEDIA_JB_DISCARD_PROGRESSIVE } pjmedia_jb_discard_algo; typedef enum pjmedia_rtcp_fb_type { - PJMEDIA_RTCP_FB_ACK, - PJMEDIA_RTCP_FB_NACK, - PJMEDIA_RTCP_FB_TRR_INT, - PJMEDIA_RTCP_FB_OTHER + PJMEDIA_RTCP_FB_ACK, + PJMEDIA_RTCP_FB_NACK, + PJMEDIA_RTCP_FB_TRR_INT, + PJMEDIA_RTCP_FB_OTHER } pjmedia_rtcp_fb_type; -typedef struct pjmedia_tone_digit -{ - char digit; - short on_msec; - short off_msec; - short volume; -} pjmedia_tone_digit; - -typedef struct pjmedia_tone_digit_map -{ - unsigned count; - struct - { - char digit; - short freq1; - short freq2; - } digits[16]; -} pjmedia_tone_digit_map; - -typedef struct pjmedia_tone_desc -{ - short freq1; - short freq2; - short on_msec; - short off_msec; - short volume; - short flags; -} pjmedia_tone_desc; - typedef enum pjmedia_srtp_use { - PJMEDIA_SRTP_DISABLED, - PJMEDIA_SRTP_UNKNOWN = PJMEDIA_SRTP_DISABLED, - PJMEDIA_SRTP_OPTIONAL, - PJMEDIA_SRTP_MANDATORY + PJMEDIA_SRTP_DISABLED, + PJMEDIA_SRTP_UNKNOWN = PJMEDIA_SRTP_DISABLED, + PJMEDIA_SRTP_OPTIONAL, + PJMEDIA_SRTP_MANDATORY } pjmedia_srtp_use; typedef enum pjmedia_srtp_crypto_option { - PJMEDIA_SRTP_NO_ENCRYPTION = 1, - PJMEDIA_SRTP_NO_AUTHENTICATION = 2 + PJMEDIA_SRTP_NO_ENCRYPTION = 1, + PJMEDIA_SRTP_NO_AUTHENTICATION = 2 } pjmedia_srtp_crypto_option; typedef enum pjmedia_srtp_keying_method { - PJMEDIA_SRTP_KEYING_SDES, - PJMEDIA_SRTP_KEYING_DTLS_SRTP, - PJMEDIA_SRTP_KEYINGS_COUNT + PJMEDIA_SRTP_KEYING_SDES, + PJMEDIA_SRTP_KEYING_DTLS_SRTP, + PJMEDIA_SRTP_KEYINGS_COUNT } pjmedia_srtp_keying_method; typedef enum pjmedia_type { - PJMEDIA_TYPE_NONE, - PJMEDIA_TYPE_AUDIO, - PJMEDIA_TYPE_VIDEO, - PJMEDIA_TYPE_TEXT, - PJMEDIA_TYPE_APPLICATION, - PJMEDIA_TYPE_UNKNOWN + PJMEDIA_TYPE_NONE, + PJMEDIA_TYPE_AUDIO, + PJMEDIA_TYPE_VIDEO, + PJMEDIA_TYPE_TEXT, + PJMEDIA_TYPE_APPLICATION, + PJMEDIA_TYPE_UNKNOWN } pjmedia_type; typedef enum pjmedia_dir { - PJMEDIA_DIR_NONE = 0, - PJMEDIA_DIR_ENCODING = 1, - PJMEDIA_DIR_CAPTURE = PJMEDIA_DIR_ENCODING, - PJMEDIA_DIR_DECODING = 2, - PJMEDIA_DIR_PLAYBACK = PJMEDIA_DIR_DECODING, - PJMEDIA_DIR_RENDER = PJMEDIA_DIR_DECODING, - PJMEDIA_DIR_ENCODING_DECODING = 3, - PJMEDIA_DIR_CAPTURE_PLAYBACK = PJMEDIA_DIR_ENCODING_DECODING, - PJMEDIA_DIR_CAPTURE_RENDER = PJMEDIA_DIR_ENCODING_DECODING + PJMEDIA_DIR_NONE = 0, + PJMEDIA_DIR_ENCODING = 1, + PJMEDIA_DIR_CAPTURE = PJMEDIA_DIR_ENCODING, + PJMEDIA_DIR_DECODING = 2, + PJMEDIA_DIR_PLAYBACK = PJMEDIA_DIR_DECODING, + PJMEDIA_DIR_RENDER = PJMEDIA_DIR_DECODING, + PJMEDIA_DIR_ENCODING_DECODING = 3, + PJMEDIA_DIR_CAPTURE_PLAYBACK = PJMEDIA_DIR_ENCODING_DECODING, + PJMEDIA_DIR_CAPTURE_RENDER = PJMEDIA_DIR_ENCODING_DECODING } pjmedia_dir; typedef enum pjmedia_tp_proto { - PJMEDIA_TP_PROTO_NONE = 0, - PJMEDIA_TP_PROTO_UNKNOWN = 1 << 0, - PJMEDIA_TP_PROTO_UDP = 1 << 1, - PJMEDIA_TP_PROTO_RTP = 1 << 2, - PJMEDIA_TP_PROTO_DTLS = 1 << 3, - PJMEDIA_TP_PROFILE_RTCP_FB = 1 << 13, - PJMEDIA_TP_PROFILE_SRTP = 1 << 14, - PJMEDIA_TP_PROFILE_AVP = 1 << 15, - PJMEDIA_TP_PROTO_RTP_AVP = PJMEDIA_TP_PROTO_RTP | PJMEDIA_TP_PROFILE_AVP, - PJMEDIA_TP_PROTO_RTP_SAVP = PJMEDIA_TP_PROTO_RTP_AVP | PJMEDIA_TP_PROFILE_SRTP, - PJMEDIA_TP_PROTO_DTLS_SRTP = PJMEDIA_TP_PROTO_DTLS | PJMEDIA_TP_PROTO_RTP_SAVP, - PJMEDIA_TP_PROTO_RTP_AVPF = PJMEDIA_TP_PROTO_RTP_AVP | PJMEDIA_TP_PROFILE_RTCP_FB, - PJMEDIA_TP_PROTO_RTP_SAVPF = PJMEDIA_TP_PROTO_RTP_SAVP | PJMEDIA_TP_PROFILE_RTCP_FB, - PJMEDIA_TP_PROTO_DTLS_SRTPF = PJMEDIA_TP_PROTO_DTLS_SRTP | PJMEDIA_TP_PROFILE_RTCP_FB + PJMEDIA_TP_PROTO_NONE = 0, + PJMEDIA_TP_PROTO_UNKNOWN = (1 << 0), + PJMEDIA_TP_PROTO_UDP = (1 << 1), + PJMEDIA_TP_PROTO_RTP = (1 << 2), + PJMEDIA_TP_PROTO_DTLS = (1 << 3), + PJMEDIA_TP_PROFILE_RTCP_FB = (1 << 13), + PJMEDIA_TP_PROFILE_SRTP = (1 << 14), + PJMEDIA_TP_PROFILE_AVP = (1 << 15), + PJMEDIA_TP_PROTO_RTP_AVP = (PJMEDIA_TP_PROTO_RTP | + PJMEDIA_TP_PROFILE_AVP), + PJMEDIA_TP_PROTO_RTP_SAVP = (PJMEDIA_TP_PROTO_RTP_AVP | + PJMEDIA_TP_PROFILE_SRTP), + PJMEDIA_TP_PROTO_DTLS_SRTP = (PJMEDIA_TP_PROTO_DTLS | + PJMEDIA_TP_PROTO_RTP_SAVP), + PJMEDIA_TP_PROTO_RTP_AVPF = (PJMEDIA_TP_PROTO_RTP_AVP | + PJMEDIA_TP_PROFILE_RTCP_FB), + PJMEDIA_TP_PROTO_RTP_SAVPF = (PJMEDIA_TP_PROTO_RTP_SAVP | + PJMEDIA_TP_PROFILE_RTCP_FB), + PJMEDIA_TP_PROTO_DTLS_SRTPF = (PJMEDIA_TP_PROTO_DTLS_SRTP | + PJMEDIA_TP_PROFILE_RTCP_FB), } pjmedia_tp_proto; typedef enum pjmedia_orient { - PJMEDIA_ORIENT_UNKNOWN, - PJMEDIA_ORIENT_NATURAL, - PJMEDIA_ORIENT_ROTATE_90DEG, - PJMEDIA_ORIENT_ROTATE_180DEG, - PJMEDIA_ORIENT_ROTATE_270DEG + PJMEDIA_ORIENT_UNKNOWN, + PJMEDIA_ORIENT_NATURAL, + PJMEDIA_ORIENT_ROTATE_90DEG, + PJMEDIA_ORIENT_ROTATE_180DEG, + PJMEDIA_ORIENT_ROTATE_270DEG } pjmedia_orient; typedef enum pjmedia_vid_dev_hwnd_type { - PJMEDIA_VID_DEV_HWND_TYPE_NONE, - PJMEDIA_VID_DEV_HWND_TYPE_WINDOWS, - PJMEDIA_VID_DEV_HWND_TYPE_COCOA, - PJMEDIA_VID_DEV_HWND_TYPE_IOS, - PJMEDIA_VID_DEV_HWND_TYPE_ANDROID + PJMEDIA_VID_DEV_HWND_TYPE_NONE, + PJMEDIA_VID_DEV_HWND_TYPE_WINDOWS, + PJMEDIA_VID_DEV_HWND_TYPE_COCOA, + PJMEDIA_VID_DEV_HWND_TYPE_IOS, + PJMEDIA_VID_DEV_HWND_TYPE_ANDROID } pjmedia_vid_dev_hwnd_type; typedef enum pjmedia_vid_packing { - PJMEDIA_VID_PACKING_UNKNOWN, - PJMEDIA_VID_PACKING_PACKETS = 1, - PJMEDIA_VID_PACKING_WHOLE = 2 + PJMEDIA_VID_PACKING_UNKNOWN, + PJMEDIA_VID_PACKING_PACKETS = 1, + PJMEDIA_VID_PACKING_WHOLE = 2 } pjmedia_vid_packing; typedef enum pjmedia_vid_conf_op_type { - PJMEDIA_VID_CONF_OP_UNKNOWN, - PJMEDIA_VID_CONF_OP_ADD_PORT, - PJMEDIA_VID_CONF_OP_REMOVE_PORT, - PJMEDIA_VID_CONF_OP_CONNECT_PORTS, - PJMEDIA_VID_CONF_OP_DISCONNECT_PORTS, - PJMEDIA_VID_CONF_OP_UPDATE_PORT + PJMEDIA_VID_CONF_OP_UNKNOWN, + PJMEDIA_VID_CONF_OP_ADD_PORT, + PJMEDIA_VID_CONF_OP_REMOVE_PORT, + PJMEDIA_VID_CONF_OP_CONNECT_PORTS, + PJMEDIA_VID_CONF_OP_DISCONNECT_PORTS, + PJMEDIA_VID_CONF_OP_UPDATE_PORT } pjmedia_vid_conf_op_type; typedef enum pjmedia_vid_stream_rc_method { - PJMEDIA_VID_STREAM_RC_NONE = 0, - PJMEDIA_VID_STREAM_RC_SIMPLE_BLOCKING = 1, - PJMEDIA_VID_STREAM_RC_SEND_THREAD = 2 + PJMEDIA_VID_STREAM_RC_NONE = 0, + PJMEDIA_VID_STREAM_RC_SIMPLE_BLOCKING = 1, + PJMEDIA_VID_STREAM_RC_SEND_THREAD = 2 } pjmedia_vid_stream_rc_method; typedef enum pjmedia_ai_event_type { - PJMEDIA_AI_EVENT_CONNECTED, - PJMEDIA_AI_EVENT_DISCONNECTED, - PJMEDIA_AI_EVENT_TRANSCRIPT, - PJMEDIA_AI_EVENT_RESPONSE_START, - PJMEDIA_AI_EVENT_RESPONSE_DONE, - PJMEDIA_AI_EVENT_SPEECH_STARTED, - PJMEDIA_AI_EVENT_SPEECH_STOPPED + PJMEDIA_AI_EVENT_CONNECTED, + PJMEDIA_AI_EVENT_DISCONNECTED, + PJMEDIA_AI_EVENT_TRANSCRIPT, + PJMEDIA_AI_EVENT_RESPONSE_START, + PJMEDIA_AI_EVENT_RESPONSE_DONE, + PJMEDIA_AI_EVENT_SPEECH_STARTED, + PJMEDIA_AI_EVENT_SPEECH_STOPPED } pjmedia_ai_event_type; enum pjmedia_file_writer_option { - PJMEDIA_FILE_WRITE_PCM = 0, - PJMEDIA_FILE_WRITE_ALAW = 1, - PJMEDIA_FILE_WRITE_ULAW = 2 + PJMEDIA_FILE_WRITE_PCM = 0, + PJMEDIA_FILE_WRITE_ALAW = 1, + PJMEDIA_FILE_WRITE_ULAW = 2, }; enum pjmedia_file_player_option { - PJMEDIA_FILE_NO_LOOP = 1, - PJMEDIA_FILE_NO_LOCK = 2 + PJMEDIA_FILE_NO_LOOP = 1, + PJMEDIA_FILE_NO_LOCK = 2 }; typedef enum pjmedia_aud_dev_route { - PJMEDIA_AUD_DEV_ROUTE_DEFAULT = 0, - PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER = 1, - PJMEDIA_AUD_DEV_ROUTE_EARPIECE = 2, - PJMEDIA_AUD_DEV_ROUTE_BLUETOOTH = 4, - PJMEDIA_AUD_DEV_ROUTE_CUSTOM = 128 + PJMEDIA_AUD_DEV_ROUTE_DEFAULT = 0, + PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER = 1, + PJMEDIA_AUD_DEV_ROUTE_EARPIECE = 2, + PJMEDIA_AUD_DEV_ROUTE_BLUETOOTH = 4, + PJMEDIA_AUD_DEV_ROUTE_CUSTOM = 128 } pjmedia_aud_dev_route; typedef enum pjmedia_aud_dev_cap { - PJMEDIA_AUD_DEV_CAP_EXT_FORMAT = 1, - PJMEDIA_AUD_DEV_CAP_INPUT_LATENCY = 2, - PJMEDIA_AUD_DEV_CAP_OUTPUT_LATENCY = 4, - PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING = 8, - PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING = 16, - PJMEDIA_AUD_DEV_CAP_INPUT_SIGNAL_METER = 32, - PJMEDIA_AUD_DEV_CAP_OUTPUT_SIGNAL_METER = 64, - PJMEDIA_AUD_DEV_CAP_INPUT_ROUTE = 128, - PJMEDIA_AUD_DEV_CAP_INPUT_SOURCE = 128, - PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE = 256, - PJMEDIA_AUD_DEV_CAP_EC = 512, - PJMEDIA_AUD_DEV_CAP_EC_TAIL = 1024, - PJMEDIA_AUD_DEV_CAP_VAD = 2048, - PJMEDIA_AUD_DEV_CAP_CNG = 4096, - PJMEDIA_AUD_DEV_CAP_PLC = 8192, - PJMEDIA_AUD_DEV_CAP_MAX = 16384 + PJMEDIA_AUD_DEV_CAP_EXT_FORMAT = 1, + PJMEDIA_AUD_DEV_CAP_INPUT_LATENCY = 2, + PJMEDIA_AUD_DEV_CAP_OUTPUT_LATENCY = 4, + PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING = 8, + PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING = 16, + PJMEDIA_AUD_DEV_CAP_INPUT_SIGNAL_METER = 32, + PJMEDIA_AUD_DEV_CAP_OUTPUT_SIGNAL_METER = 64, + PJMEDIA_AUD_DEV_CAP_INPUT_ROUTE = 128, + PJMEDIA_AUD_DEV_CAP_INPUT_SOURCE = 128, + PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE = 256, + PJMEDIA_AUD_DEV_CAP_EC = 512, + PJMEDIA_AUD_DEV_CAP_EC_TAIL = 1024, + PJMEDIA_AUD_DEV_CAP_VAD = 2048, + PJMEDIA_AUD_DEV_CAP_CNG = 4096, + PJMEDIA_AUD_DEV_CAP_PLC = 8192, + PJMEDIA_AUD_DEV_CAP_MAX = 16384 } pjmedia_aud_dev_cap; typedef pj_int32_t pjmedia_vid_dev_index; enum pjmedia_vid_dev_std_index { - PJMEDIA_VID_DEFAULT_CAPTURE_DEV = -1, - PJMEDIA_VID_DEFAULT_RENDER_DEV = -2, - PJMEDIA_VID_INVALID_DEV = -3 + PJMEDIA_VID_DEFAULT_CAPTURE_DEV = -1, + PJMEDIA_VID_DEFAULT_RENDER_DEV = -2, + PJMEDIA_VID_INVALID_DEV = -3 }; typedef enum pjmedia_vid_dev_cap { - PJMEDIA_VID_DEV_CAP_FORMAT = 1, - PJMEDIA_VID_DEV_CAP_INPUT_SCALE = 2, - PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW = 4, - PJMEDIA_VID_DEV_CAP_OUTPUT_RESIZE = 8, - PJMEDIA_VID_DEV_CAP_OUTPUT_POSITION = 16, - PJMEDIA_VID_DEV_CAP_OUTPUT_HIDE = 32, - PJMEDIA_VID_DEV_CAP_INPUT_PREVIEW = 64, - PJMEDIA_VID_DEV_CAP_ORIENTATION = 128, - PJMEDIA_VID_DEV_CAP_SWITCH = 256, - PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW_FLAGS = 512, - PJMEDIA_VID_DEV_CAP_OUTPUT_FULLSCREEN = 1024, - PJMEDIA_VID_DEV_CAP_MAX = 16384 + PJMEDIA_VID_DEV_CAP_FORMAT = 1, + PJMEDIA_VID_DEV_CAP_INPUT_SCALE = 2, + PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW = 4, + PJMEDIA_VID_DEV_CAP_OUTPUT_RESIZE = 8, + PJMEDIA_VID_DEV_CAP_OUTPUT_POSITION = 16, + PJMEDIA_VID_DEV_CAP_OUTPUT_HIDE = 32, + PJMEDIA_VID_DEV_CAP_INPUT_PREVIEW = 64, + PJMEDIA_VID_DEV_CAP_ORIENTATION = 128, + PJMEDIA_VID_DEV_CAP_SWITCH = 256, + PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW_FLAGS = 512, + PJMEDIA_VID_DEV_CAP_OUTPUT_FULLSCREEN = 1024, + PJMEDIA_VID_DEV_CAP_MAX = 16384 } pjmedia_vid_dev_cap; typedef enum pjmedia_vid_dev_fullscreen_flag { - PJMEDIA_VID_DEV_WINDOWED = 0, - PJMEDIA_VID_DEV_FULLSCREEN = 1, - PJMEDIA_VID_DEV_FULLSCREEN_DESKTOP = 2 + PJMEDIA_VID_DEV_WINDOWED = 0, + PJMEDIA_VID_DEV_FULLSCREEN = 1, + PJMEDIA_VID_DEV_FULLSCREEN_DESKTOP = 2 } pjmedia_vid_dev_fullscreen_flag; typedef enum pjsip_cred_data_type { - PJSIP_CRED_DATA_PLAIN_PASSWD = 0, - PJSIP_CRED_DATA_DIGEST = 1, - PJSIP_CRED_DATA_EXT_AKA = 16 + PJSIP_CRED_DATA_PLAIN_PASSWD=0, + PJSIP_CRED_DATA_DIGEST =1, + PJSIP_CRED_DATA_EXT_AKA =16 } pjsip_cred_data_type; typedef enum pjsip_auth_algorithm_type { - PJSIP_AUTH_ALGORITHM_NOT_SET = 0, - PJSIP_AUTH_ALGORITHM_MD5, - PJSIP_AUTH_ALGORITHM_SHA256, - PJSIP_AUTH_ALGORITHM_SHA512_256, - PJSIP_AUTH_ALGORITHM_AKAV1_MD5, - PJSIP_AUTH_ALGORITHM_AKAV2_MD5, - PJSIP_AUTH_ALGORITHM_COUNT + PJSIP_AUTH_ALGORITHM_NOT_SET = 0, + PJSIP_AUTH_ALGORITHM_MD5, + PJSIP_AUTH_ALGORITHM_SHA256, + PJSIP_AUTH_ALGORITHM_SHA512_256, + PJSIP_AUTH_ALGORITHM_AKAV1_MD5, + PJSIP_AUTH_ALGORITHM_AKAV2_MD5, + PJSIP_AUTH_ALGORITHM_COUNT, } pjsip_auth_algorithm_type; typedef enum pjsip_dialog_cap_status { - PJSIP_DIALOG_CAP_UNSUPPORTED = 0, - PJSIP_DIALOG_CAP_SUPPORTED = 1, - PJSIP_DIALOG_CAP_UNKNOWN = 2 + PJSIP_DIALOG_CAP_UNSUPPORTED = 0, + PJSIP_DIALOG_CAP_SUPPORTED = 1, + PJSIP_DIALOG_CAP_UNKNOWN = 2 } pjsip_dialog_cap_status; typedef enum pjsip_event_id_e { - PJSIP_EVENT_UNKNOWN, - PJSIP_EVENT_TIMER, - PJSIP_EVENT_TX_MSG, - PJSIP_EVENT_RX_MSG, - PJSIP_EVENT_TRANSPORT_ERROR, - PJSIP_EVENT_TSX_STATE, - PJSIP_EVENT_USER + PJSIP_EVENT_UNKNOWN, + PJSIP_EVENT_TIMER, + PJSIP_EVENT_TX_MSG, + PJSIP_EVENT_RX_MSG, + PJSIP_EVENT_TRANSPORT_ERROR, + PJSIP_EVENT_TSX_STATE, + PJSIP_EVENT_USER } pjsip_event_id_e; typedef enum pjsip_status_code { - PJSIP_SC_NULL = 0, - PJSIP_SC_TRYING = 100, - PJSIP_SC_RINGING = 180, - PJSIP_SC_CALL_BEING_FORWARDED = 181, - PJSIP_SC_QUEUED = 182, - PJSIP_SC_PROGRESS = 183, - PJSIP_SC_EARLY_DIALOG_TERMINATED = 199, - PJSIP_SC_OK = 200, - PJSIP_SC_ACCEPTED = 202, - PJSIP_SC_NO_NOTIFICATION = 204, - PJSIP_SC_MULTIPLE_CHOICES = 300, - PJSIP_SC_MOVED_PERMANENTLY = 301, - PJSIP_SC_MOVED_TEMPORARILY = 302, - PJSIP_SC_USE_PROXY = 305, - PJSIP_SC_ALTERNATIVE_SERVICE = 380, - PJSIP_SC_BAD_REQUEST = 400, - PJSIP_SC_UNAUTHORIZED = 401, - PJSIP_SC_PAYMENT_REQUIRED = 402, - PJSIP_SC_FORBIDDEN = 403, - PJSIP_SC_NOT_FOUND = 404, - PJSIP_SC_METHOD_NOT_ALLOWED = 405, - PJSIP_SC_NOT_ACCEPTABLE = 406, - PJSIP_SC_PROXY_AUTHENTICATION_REQUIRED = 407, - PJSIP_SC_REQUEST_TIMEOUT = 408, - PJSIP_SC_CONFLICT = 409, - PJSIP_SC_GONE = 410, - PJSIP_SC_LENGTH_REQUIRED = 411, - PJSIP_SC_CONDITIONAL_REQUEST_FAILED = 412, - PJSIP_SC_REQUEST_ENTITY_TOO_LARGE = 413, - PJSIP_SC_REQUEST_URI_TOO_LONG = 414, - PJSIP_SC_UNSUPPORTED_MEDIA_TYPE = 415, - PJSIP_SC_UNSUPPORTED_URI_SCHEME = 416, - PJSIP_SC_UNKNOWN_RESOURCE_PRIORITY = 417, - PJSIP_SC_BAD_EXTENSION = 420, - PJSIP_SC_EXTENSION_REQUIRED = 421, - PJSIP_SC_SESSION_TIMER_TOO_SMALL = 422, - PJSIP_SC_INTERVAL_TOO_BRIEF = 423, - PJSIP_SC_BAD_LOCATION_INFORMATION = 424, - PJSIP_SC_USE_IDENTITY_HEADER = 428, - PJSIP_SC_PROVIDE_REFERRER_HEADER = 429, - PJSIP_SC_FLOW_FAILED = 430, - PJSIP_SC_ANONIMITY_DISALLOWED = 433, - PJSIP_SC_BAD_IDENTITY_INFO = 436, - PJSIP_SC_UNSUPPORTED_CERTIFICATE = 437, - PJSIP_SC_INVALID_IDENTITY_HEADER = 438, - PJSIP_SC_FIRST_HOP_LACKS_OUTBOUND_SUPPORT = 439, - PJSIP_SC_MAX_BREADTH_EXCEEDED = 440, - PJSIP_SC_BAD_INFO_PACKAGE = 469, - PJSIP_SC_CONSENT_NEEDED = 470, - PJSIP_SC_TEMPORARILY_UNAVAILABLE = 480, - PJSIP_SC_CALL_TSX_DOES_NOT_EXIST = 481, - PJSIP_SC_LOOP_DETECTED = 482, - PJSIP_SC_TOO_MANY_HOPS = 483, - PJSIP_SC_ADDRESS_INCOMPLETE = 484, - PJSIP_AC_AMBIGUOUS = 485, - PJSIP_SC_BUSY_HERE = 486, - PJSIP_SC_REQUEST_TERMINATED = 487, - PJSIP_SC_NOT_ACCEPTABLE_HERE = 488, - PJSIP_SC_BAD_EVENT = 489, - PJSIP_SC_REQUEST_UPDATED = 490, - PJSIP_SC_REQUEST_PENDING = 491, - PJSIP_SC_UNDECIPHERABLE = 493, - PJSIP_SC_SECURITY_AGREEMENT_NEEDED = 494, - PJSIP_SC_INTERNAL_SERVER_ERROR = 500, - PJSIP_SC_NOT_IMPLEMENTED = 501, - PJSIP_SC_BAD_GATEWAY = 502, - PJSIP_SC_SERVICE_UNAVAILABLE = 503, - PJSIP_SC_SERVER_TIMEOUT = 504, - PJSIP_SC_VERSION_NOT_SUPPORTED = 505, - PJSIP_SC_MESSAGE_TOO_LARGE = 513, - PJSIP_SC_PUSH_NOTIFICATION_SERVICE_NOT_SUPPORTED = 555, - PJSIP_SC_PRECONDITION_FAILURE = 580, - PJSIP_SC_BUSY_EVERYWHERE = 600, - PJSIP_SC_DECLINE = 603, - PJSIP_SC_DOES_NOT_EXIST_ANYWHERE = 604, - PJSIP_SC_NOT_ACCEPTABLE_ANYWHERE = 606, - PJSIP_SC_UNWANTED = 607, - PJSIP_SC_REJECTED = 608, - PJSIP_SC_TSX_TIMEOUT = PJSIP_SC_REQUEST_TIMEOUT, - PJSIP_SC_TSX_TRANSPORT_ERROR = PJSIP_SC_SERVICE_UNAVAILABLE, - PJSIP_SC__force_32bit = 0x7FFFFFFF + PJSIP_SC_NULL = 0, + PJSIP_SC_TRYING = 100, + PJSIP_SC_RINGING = 180, + PJSIP_SC_CALL_BEING_FORWARDED = 181, + PJSIP_SC_QUEUED = 182, + PJSIP_SC_PROGRESS = 183, + PJSIP_SC_EARLY_DIALOG_TERMINATED = 199, + PJSIP_SC_OK = 200, + PJSIP_SC_ACCEPTED = 202, + PJSIP_SC_NO_NOTIFICATION = 204, + PJSIP_SC_MULTIPLE_CHOICES = 300, + PJSIP_SC_MOVED_PERMANENTLY = 301, + PJSIP_SC_MOVED_TEMPORARILY = 302, + PJSIP_SC_USE_PROXY = 305, + PJSIP_SC_ALTERNATIVE_SERVICE = 380, + PJSIP_SC_BAD_REQUEST = 400, + PJSIP_SC_UNAUTHORIZED = 401, + PJSIP_SC_PAYMENT_REQUIRED = 402, + PJSIP_SC_FORBIDDEN = 403, + PJSIP_SC_NOT_FOUND = 404, + PJSIP_SC_METHOD_NOT_ALLOWED = 405, + PJSIP_SC_NOT_ACCEPTABLE = 406, + PJSIP_SC_PROXY_AUTHENTICATION_REQUIRED = 407, + PJSIP_SC_REQUEST_TIMEOUT = 408, + PJSIP_SC_CONFLICT = 409, + PJSIP_SC_GONE = 410, + PJSIP_SC_LENGTH_REQUIRED = 411, + PJSIP_SC_CONDITIONAL_REQUEST_FAILED = 412, + PJSIP_SC_REQUEST_ENTITY_TOO_LARGE = 413, + PJSIP_SC_REQUEST_URI_TOO_LONG = 414, + PJSIP_SC_UNSUPPORTED_MEDIA_TYPE = 415, + PJSIP_SC_UNSUPPORTED_URI_SCHEME = 416, + PJSIP_SC_UNKNOWN_RESOURCE_PRIORITY = 417, + PJSIP_SC_BAD_EXTENSION = 420, + PJSIP_SC_EXTENSION_REQUIRED = 421, + PJSIP_SC_SESSION_TIMER_TOO_SMALL = 422, + PJSIP_SC_INTERVAL_TOO_BRIEF = 423, + PJSIP_SC_BAD_LOCATION_INFORMATION = 424, + PJSIP_SC_USE_IDENTITY_HEADER = 428, + PJSIP_SC_PROVIDE_REFERRER_HEADER = 429, + PJSIP_SC_FLOW_FAILED = 430, + PJSIP_SC_ANONIMITY_DISALLOWED = 433, + PJSIP_SC_BAD_IDENTITY_INFO = 436, + PJSIP_SC_UNSUPPORTED_CERTIFICATE = 437, + PJSIP_SC_INVALID_IDENTITY_HEADER = 438, + PJSIP_SC_FIRST_HOP_LACKS_OUTBOUND_SUPPORT = 439, + PJSIP_SC_MAX_BREADTH_EXCEEDED = 440, + PJSIP_SC_BAD_INFO_PACKAGE = 469, + PJSIP_SC_CONSENT_NEEDED = 470, + PJSIP_SC_TEMPORARILY_UNAVAILABLE = 480, + PJSIP_SC_CALL_TSX_DOES_NOT_EXIST = 481, + PJSIP_SC_LOOP_DETECTED = 482, + PJSIP_SC_TOO_MANY_HOPS = 483, + PJSIP_SC_ADDRESS_INCOMPLETE = 484, + PJSIP_AC_AMBIGUOUS = 485, + PJSIP_SC_BUSY_HERE = 486, + PJSIP_SC_REQUEST_TERMINATED = 487, + PJSIP_SC_NOT_ACCEPTABLE_HERE = 488, + PJSIP_SC_BAD_EVENT = 489, + PJSIP_SC_REQUEST_UPDATED = 490, + PJSIP_SC_REQUEST_PENDING = 491, + PJSIP_SC_UNDECIPHERABLE = 493, + PJSIP_SC_SECURITY_AGREEMENT_NEEDED = 494, + PJSIP_SC_INTERNAL_SERVER_ERROR = 500, + PJSIP_SC_NOT_IMPLEMENTED = 501, + PJSIP_SC_BAD_GATEWAY = 502, + PJSIP_SC_SERVICE_UNAVAILABLE = 503, + PJSIP_SC_SERVER_TIMEOUT = 504, + PJSIP_SC_VERSION_NOT_SUPPORTED = 505, + PJSIP_SC_MESSAGE_TOO_LARGE = 513, + PJSIP_SC_PUSH_NOTIFICATION_SERVICE_NOT_SUPPORTED = 555, + PJSIP_SC_PRECONDITION_FAILURE = 580, + PJSIP_SC_BUSY_EVERYWHERE = 600, + PJSIP_SC_DECLINE = 603, + PJSIP_SC_DOES_NOT_EXIST_ANYWHERE = 604, + PJSIP_SC_NOT_ACCEPTABLE_ANYWHERE = 606, + PJSIP_SC_UNWANTED = 607, + PJSIP_SC_REJECTED = 608, + PJSIP_SC_TSX_TIMEOUT = PJSIP_SC_REQUEST_TIMEOUT, + PJSIP_SC_TSX_TRANSPORT_ERROR = PJSIP_SC_SERVICE_UNAVAILABLE, + PJSIP_SC__force_32bit = 0x7FFFFFFF } pjsip_status_code; typedef enum pjsip_hdr_e { - PJSIP_H_ACCEPT, - PJSIP_H_ACCEPT_ENCODING_UNIMP, - PJSIP_H_ACCEPT_LANGUAGE_UNIMP, - PJSIP_H_ALERT_INFO_UNIMP, - PJSIP_H_ALLOW, - PJSIP_H_AUTHENTICATION_INFO_UNIMP, - PJSIP_H_AUTHORIZATION, - PJSIP_H_CALL_ID, - PJSIP_H_CALL_INFO_UNIMP, - PJSIP_H_CONTACT, - PJSIP_H_CONTENT_DISPOSITION_UNIMP, - PJSIP_H_CONTENT_ENCODING_UNIMP, - PJSIP_H_CONTENT_LANGUAGE_UNIMP, - PJSIP_H_CONTENT_LENGTH, - PJSIP_H_CONTENT_TYPE, - PJSIP_H_CSEQ, - PJSIP_H_DATE_UNIMP, - PJSIP_H_ERROR_INFO_UNIMP, - PJSIP_H_EXPIRES, - PJSIP_H_FROM, - PJSIP_H_IN_REPLY_TO_UNIMP, - PJSIP_H_MAX_FORWARDS, - PJSIP_H_MIME_VERSION_UNIMP, - PJSIP_H_MIN_EXPIRES, - PJSIP_H_ORGANIZATION_UNIMP, - PJSIP_H_PRIORITY_UNIMP, - PJSIP_H_PROXY_AUTHENTICATE, - PJSIP_H_PROXY_AUTHORIZATION, - PJSIP_H_PROXY_REQUIRE_UNIMP, - PJSIP_H_RECORD_ROUTE, - PJSIP_H_REPLY_TO_UNIMP, - PJSIP_H_REQUIRE, - PJSIP_H_RETRY_AFTER, - PJSIP_H_ROUTE, - PJSIP_H_SERVER_UNIMP, - PJSIP_H_SUBJECT_UNIMP, - PJSIP_H_SUPPORTED, - PJSIP_H_TIMESTAMP_UNIMP, - PJSIP_H_TO, - PJSIP_H_UNSUPPORTED, - PJSIP_H_USER_AGENT_UNIMP, - PJSIP_H_VIA, - PJSIP_H_WARNING_UNIMP, - PJSIP_H_WWW_AUTHENTICATE, - PJSIP_H_OTHER + PJSIP_H_ACCEPT, + PJSIP_H_ACCEPT_ENCODING_UNIMP, + PJSIP_H_ACCEPT_LANGUAGE_UNIMP, + PJSIP_H_ALERT_INFO_UNIMP, + PJSIP_H_ALLOW, + PJSIP_H_AUTHENTICATION_INFO_UNIMP, + PJSIP_H_AUTHORIZATION, + PJSIP_H_CALL_ID, + PJSIP_H_CALL_INFO_UNIMP, + PJSIP_H_CONTACT, + PJSIP_H_CONTENT_DISPOSITION_UNIMP, + PJSIP_H_CONTENT_ENCODING_UNIMP, + PJSIP_H_CONTENT_LANGUAGE_UNIMP, + PJSIP_H_CONTENT_LENGTH, + PJSIP_H_CONTENT_TYPE, + PJSIP_H_CSEQ, + PJSIP_H_DATE_UNIMP, + PJSIP_H_ERROR_INFO_UNIMP, + PJSIP_H_EXPIRES, + PJSIP_H_FROM, + PJSIP_H_IN_REPLY_TO_UNIMP, + PJSIP_H_MAX_FORWARDS, + PJSIP_H_MIME_VERSION_UNIMP, + PJSIP_H_MIN_EXPIRES, + PJSIP_H_ORGANIZATION_UNIMP, + PJSIP_H_PRIORITY_UNIMP, + PJSIP_H_PROXY_AUTHENTICATE, + PJSIP_H_PROXY_AUTHORIZATION, + PJSIP_H_PROXY_REQUIRE_UNIMP, + PJSIP_H_RECORD_ROUTE, + PJSIP_H_REPLY_TO_UNIMP, + PJSIP_H_REQUIRE, + PJSIP_H_RETRY_AFTER, + PJSIP_H_ROUTE, + PJSIP_H_SERVER_UNIMP, + PJSIP_H_SUBJECT_UNIMP, + PJSIP_H_SUPPORTED, + PJSIP_H_TIMESTAMP_UNIMP, + PJSIP_H_TO, + PJSIP_H_UNSUPPORTED, + PJSIP_H_USER_AGENT_UNIMP, + PJSIP_H_VIA, + PJSIP_H_WARNING_UNIMP, + PJSIP_H_WWW_AUTHENTICATE, + PJSIP_H_OTHER } pjsip_hdr_e; typedef enum pjsip_tsx_state_e { - PJSIP_TSX_STATE_NULL, - PJSIP_TSX_STATE_CALLING, - PJSIP_TSX_STATE_TRYING, - PJSIP_TSX_STATE_PROCEEDING, - PJSIP_TSX_STATE_COMPLETED, - PJSIP_TSX_STATE_CONFIRMED, - PJSIP_TSX_STATE_TERMINATED, - PJSIP_TSX_STATE_DESTROYED, - PJSIP_TSX_STATE_MAX + PJSIP_TSX_STATE_NULL, + PJSIP_TSX_STATE_CALLING, + PJSIP_TSX_STATE_TRYING, + PJSIP_TSX_STATE_PROCEEDING, + PJSIP_TSX_STATE_COMPLETED, + PJSIP_TSX_STATE_CONFIRMED, + PJSIP_TSX_STATE_TERMINATED, + PJSIP_TSX_STATE_DESTROYED, + PJSIP_TSX_STATE_MAX } pjsip_tsx_state_e; typedef enum pjsip_transport_type_e { - PJSIP_TRANSPORT_UNSPECIFIED, - PJSIP_TRANSPORT_UDP, - PJSIP_TRANSPORT_TCP, - PJSIP_TRANSPORT_TLS, - PJSIP_TRANSPORT_DTLS, - PJSIP_TRANSPORT_SCTP, - PJSIP_TRANSPORT_LOOP, - PJSIP_TRANSPORT_LOOP_DGRAM, - PJSIP_TRANSPORT_START_OTHER, - PJSIP_TRANSPORT_IPV6 = 128, - PJSIP_TRANSPORT_UDP6 = PJSIP_TRANSPORT_UDP + PJSIP_TRANSPORT_IPV6, - PJSIP_TRANSPORT_TCP6 = PJSIP_TRANSPORT_TCP + PJSIP_TRANSPORT_IPV6, - PJSIP_TRANSPORT_TLS6 = PJSIP_TRANSPORT_TLS + PJSIP_TRANSPORT_IPV6, - PJSIP_TRANSPORT_DTLS6 = PJSIP_TRANSPORT_DTLS + PJSIP_TRANSPORT_IPV6 + PJSIP_TRANSPORT_UNSPECIFIED, + PJSIP_TRANSPORT_UDP, + PJSIP_TRANSPORT_TCP, + PJSIP_TRANSPORT_TLS, + PJSIP_TRANSPORT_DTLS, + PJSIP_TRANSPORT_SCTP, + PJSIP_TRANSPORT_LOOP, + PJSIP_TRANSPORT_LOOP_DGRAM, + PJSIP_TRANSPORT_START_OTHER, + PJSIP_TRANSPORT_IPV6 = 128, + PJSIP_TRANSPORT_UDP6 = PJSIP_TRANSPORT_UDP + PJSIP_TRANSPORT_IPV6, + PJSIP_TRANSPORT_TCP6 = PJSIP_TRANSPORT_TCP + PJSIP_TRANSPORT_IPV6, + PJSIP_TRANSPORT_TLS6 = PJSIP_TRANSPORT_TLS + PJSIP_TRANSPORT_IPV6, + PJSIP_TRANSPORT_DTLS6 = PJSIP_TRANSPORT_DTLS + PJSIP_TRANSPORT_IPV6 } pjsip_transport_type_e; enum pjsip_transport_flags_e { - PJSIP_TRANSPORT_RELIABLE = 1, - PJSIP_TRANSPORT_SECURE = 2, - PJSIP_TRANSPORT_DATAGRAM = 4 + PJSIP_TRANSPORT_RELIABLE = 1, + PJSIP_TRANSPORT_SECURE = 2, + PJSIP_TRANSPORT_DATAGRAM = 4 }; typedef enum pjsip_transport_state { - PJSIP_TP_STATE_CONNECTED, - PJSIP_TP_STATE_DISCONNECTED, - PJSIP_TP_STATE_SHUTDOWN, - PJSIP_TP_STATE_DESTROY + PJSIP_TP_STATE_CONNECTED, + PJSIP_TP_STATE_DISCONNECTED, + PJSIP_TP_STATE_SHUTDOWN, + PJSIP_TP_STATE_DESTROY, } pjsip_transport_state; typedef enum pjsip_ssl_method { - PJSIP_SSL_UNSPECIFIED_METHOD = 0, - PJSIP_SSLV2_METHOD = 20, - PJSIP_SSLV3_METHOD = 30, - PJSIP_TLSV1_METHOD = 31, - PJSIP_TLSV1_1_METHOD = 32, - PJSIP_TLSV1_2_METHOD = 33, - PJSIP_TLSV1_3_METHOD = 34, - PJSIP_SSLV23_METHOD = 23 + PJSIP_SSL_UNSPECIFIED_METHOD = 0, + PJSIP_SSLV2_METHOD = 20, + PJSIP_SSLV3_METHOD = 30, + PJSIP_TLSV1_METHOD = 31, + PJSIP_TLSV1_1_METHOD = 32, + PJSIP_TLSV1_2_METHOD = 33, + PJSIP_TLSV1_3_METHOD = 34, + PJSIP_SSLV23_METHOD = 23, } pjsip_ssl_method; typedef enum pjsip_role_e { - PJSIP_ROLE_UAC, - PJSIP_ROLE_UAS, - PJSIP_UAC_ROLE = PJSIP_ROLE_UAC, - PJSIP_UAS_ROLE = PJSIP_ROLE_UAS + PJSIP_ROLE_UAC, + PJSIP_ROLE_UAS, + PJSIP_UAC_ROLE = PJSIP_ROLE_UAC, + PJSIP_UAS_ROLE = PJSIP_ROLE_UAS } pjsip_role_e; typedef enum pjsip_redirect_op { - PJSIP_REDIRECT_REJECT, - PJSIP_REDIRECT_ACCEPT, - PJSIP_REDIRECT_ACCEPT_REPLACE, - PJSIP_REDIRECT_PENDING, - PJSIP_REDIRECT_STOP + PJSIP_REDIRECT_REJECT, + PJSIP_REDIRECT_ACCEPT, + PJSIP_REDIRECT_ACCEPT_REPLACE, + PJSIP_REDIRECT_PENDING, + PJSIP_REDIRECT_STOP } pjsip_redirect_op; typedef enum pjsip_evsub_state { - PJSIP_EVSUB_STATE_NULL, - PJSIP_EVSUB_STATE_SENT, - PJSIP_EVSUB_STATE_ACCEPTED, - PJSIP_EVSUB_STATE_PENDING, - PJSIP_EVSUB_STATE_ACTIVE, - PJSIP_EVSUB_STATE_TERMINATED, - PJSIP_EVSUB_STATE_UNKNOWN + PJSIP_EVSUB_STATE_NULL, + PJSIP_EVSUB_STATE_SENT, + PJSIP_EVSUB_STATE_ACCEPTED, + PJSIP_EVSUB_STATE_PENDING, + PJSIP_EVSUB_STATE_ACTIVE, + PJSIP_EVSUB_STATE_TERMINATED, + PJSIP_EVSUB_STATE_UNKNOWN, } pjsip_evsub_state; typedef enum pjrpid_activity { - PJRPID_ACTIVITY_UNKNOWN, - PJRPID_ACTIVITY_AWAY, - PJRPID_ACTIVITY_BUSY + PJRPID_ACTIVITY_UNKNOWN, + PJRPID_ACTIVITY_AWAY, + PJRPID_ACTIVITY_BUSY } pjrpid_activity; typedef enum pjsip_inv_state { - PJSIP_INV_STATE_NULL, - PJSIP_INV_STATE_CALLING, - PJSIP_INV_STATE_INCOMING, - PJSIP_INV_STATE_EARLY, - PJSIP_INV_STATE_CONNECTING, - PJSIP_INV_STATE_CONFIRMED, - PJSIP_INV_STATE_DISCONNECTED + PJSIP_INV_STATE_NULL, + PJSIP_INV_STATE_CALLING, + PJSIP_INV_STATE_INCOMING, + PJSIP_INV_STATE_EARLY, + PJSIP_INV_STATE_CONNECTING, + PJSIP_INV_STATE_CONFIRMED, + PJSIP_INV_STATE_DISCONNECTED, } pjsip_inv_state; enum pjsua_invalid_id_const_ { - PJSUA_INVALID_ID = -1 + PJSUA_INVALID_ID = -1 }; typedef enum pjsua_state { - PJSUA_STATE_NULL, - PJSUA_STATE_CREATED, - PJSUA_STATE_INIT, - PJSUA_STATE_STARTING, - PJSUA_STATE_RUNNING, - PJSUA_STATE_CLOSING + PJSUA_STATE_NULL, + PJSUA_STATE_CREATED, + PJSUA_STATE_INIT, + PJSUA_STATE_STARTING, + PJSUA_STATE_RUNNING, + PJSUA_STATE_CLOSING } pjsua_state; typedef enum pjsua_stun_use { - PJSUA_STUN_USE_DEFAULT, - PJSUA_STUN_USE_DISABLED, - PJSUA_STUN_RETRY_ON_FAILURE + PJSUA_STUN_USE_DEFAULT, + PJSUA_STUN_USE_DISABLED, + PJSUA_STUN_RETRY_ON_FAILURE } pjsua_stun_use; typedef enum pjsua_upnp_use { - PJSUA_UPNP_USE_DEFAULT, - PJSUA_UPNP_USE_DISABLED + PJSUA_UPNP_USE_DEFAULT, + PJSUA_UPNP_USE_DISABLED } pjsua_upnp_use; typedef enum pjsua_call_hold_type { - PJSUA_CALL_HOLD_TYPE_RFC3264, - PJSUA_CALL_HOLD_TYPE_RFC2543 + PJSUA_CALL_HOLD_TYPE_RFC3264, + PJSUA_CALL_HOLD_TYPE_RFC2543 } pjsua_call_hold_type; typedef int pjsua_acc_id; typedef enum pjsua_destroy_flag { - PJSUA_DESTROY_NO_RX_MSG = 1, - PJSUA_DESTROY_NO_TX_MSG = 2, - PJSUA_DESTROY_NO_NETWORK = PJSUA_DESTROY_NO_RX_MSG | PJSUA_DESTROY_NO_TX_MSG + PJSUA_DESTROY_NO_RX_MSG = 1, + PJSUA_DESTROY_NO_TX_MSG = 2, + PJSUA_DESTROY_NO_NETWORK = PJSUA_DESTROY_NO_RX_MSG | + PJSUA_DESTROY_NO_TX_MSG } pjsua_destroy_flag; typedef enum pjsua_100rel_use { - PJSUA_100REL_NOT_USED, - PJSUA_100REL_MANDATORY, - PJSUA_100REL_OPTIONAL + PJSUA_100REL_NOT_USED, + PJSUA_100REL_MANDATORY, + PJSUA_100REL_OPTIONAL } pjsua_100rel_use; typedef enum pjsua_sip_timer_use { - PJSUA_SIP_TIMER_INACTIVE, - PJSUA_SIP_TIMER_OPTIONAL, - PJSUA_SIP_TIMER_REQUIRED, - PJSUA_SIP_TIMER_ALWAYS + PJSUA_SIP_TIMER_INACTIVE, + PJSUA_SIP_TIMER_OPTIONAL, + PJSUA_SIP_TIMER_REQUIRED, + PJSUA_SIP_TIMER_ALWAYS } pjsua_sip_timer_use; typedef enum pjsua_ipv6_use { - PJSUA_IPV6_DISABLED, - PJSUA_IPV6_ENABLED = 1, - PJSUA_IPV6_ENABLED_NO_PREFERENCE = 1, - PJSUA_IPV6_ENABLED_PREFER_IPV4, - PJSUA_IPV6_ENABLED_PREFER_IPV6, - PJSUA_IPV6_ENABLED_USE_IPV6_ONLY + PJSUA_IPV6_DISABLED, + PJSUA_IPV6_ENABLED = 1, + PJSUA_IPV6_ENABLED_NO_PREFERENCE = 1, + PJSUA_IPV6_ENABLED_PREFER_IPV4, + PJSUA_IPV6_ENABLED_PREFER_IPV6, + PJSUA_IPV6_ENABLED_USE_IPV6_ONLY } pjsua_ipv6_use; typedef enum pjsua_nat64_opt { - PJSUA_NAT64_DISABLED, - PJSUA_NAT64_ENABLED + PJSUA_NAT64_DISABLED, + PJSUA_NAT64_ENABLED } pjsua_nat64_opt; typedef enum pjsua_buddy_status { - PJSUA_BUDDY_STATUS_UNKNOWN, - PJSUA_BUDDY_STATUS_ONLINE, - PJSUA_BUDDY_STATUS_OFFLINE + PJSUA_BUDDY_STATUS_UNKNOWN, + PJSUA_BUDDY_STATUS_ONLINE, + PJSUA_BUDDY_STATUS_OFFLINE, } pjsua_buddy_status; typedef enum pjsua_call_media_status { - PJSUA_CALL_MEDIA_NONE, - PJSUA_CALL_MEDIA_ACTIVE, - PJSUA_CALL_MEDIA_LOCAL_HOLD, - PJSUA_CALL_MEDIA_REMOTE_HOLD, - PJSUA_CALL_MEDIA_ERROR + PJSUA_CALL_MEDIA_NONE, + PJSUA_CALL_MEDIA_ACTIVE, + PJSUA_CALL_MEDIA_LOCAL_HOLD, + PJSUA_CALL_MEDIA_REMOTE_HOLD, + PJSUA_CALL_MEDIA_ERROR } pjsua_call_media_status; typedef int pjsua_vid_win_id; @@ -941,86 +918,84 @@ typedef int pjsua_call_id; typedef enum pjsua_med_tp_st { - PJSUA_MED_TP_NULL, - PJSUA_MED_TP_CREATING, - PJSUA_MED_TP_IDLE, - PJSUA_MED_TP_INIT, - PJSUA_MED_TP_RUNNING, - PJSUA_MED_TP_DISABLED + PJSUA_MED_TP_NULL, + PJSUA_MED_TP_CREATING, + PJSUA_MED_TP_IDLE, + PJSUA_MED_TP_INIT, + PJSUA_MED_TP_RUNNING, + PJSUA_MED_TP_DISABLED } pjsua_med_tp_st; typedef enum pjsua_call_vid_strm_op { - PJSUA_CALL_VID_STRM_NO_OP, - PJSUA_CALL_VID_STRM_ADD, - PJSUA_CALL_VID_STRM_REMOVE, - PJSUA_CALL_VID_STRM_CHANGE_DIR, - PJSUA_CALL_VID_STRM_CHANGE_CAP_DEV, - PJSUA_CALL_VID_STRM_START_TRANSMIT, - PJSUA_CALL_VID_STRM_STOP_TRANSMIT, - PJSUA_CALL_VID_STRM_SEND_KEYFRAME + PJSUA_CALL_VID_STRM_NO_OP, + PJSUA_CALL_VID_STRM_ADD, + PJSUA_CALL_VID_STRM_REMOVE, + PJSUA_CALL_VID_STRM_CHANGE_DIR, + PJSUA_CALL_VID_STRM_CHANGE_CAP_DEV, + PJSUA_CALL_VID_STRM_START_TRANSMIT, + PJSUA_CALL_VID_STRM_STOP_TRANSMIT, + PJSUA_CALL_VID_STRM_SEND_KEYFRAME } pjsua_call_vid_strm_op; typedef enum pjsua_vid_req_keyframe_method { - PJSUA_VID_REQ_KEYFRAME_SIP_INFO = 1, - PJSUA_VID_REQ_KEYFRAME_RTCP_PLI = 2 + PJSUA_VID_REQ_KEYFRAME_SIP_INFO = 1, + PJSUA_VID_REQ_KEYFRAME_RTCP_PLI = 2 } pjsua_vid_req_keyframe_method; typedef enum pjsua_call_flag { - PJSUA_CALL_UNHOLD = 1, - PJSUA_CALL_UPDATE_CONTACT = 2, - PJSUA_CALL_INCLUDE_DISABLED_MEDIA = 4, - PJSUA_CALL_NO_SDP_OFFER = 8, - PJSUA_CALL_REINIT_MEDIA = 16, - PJSUA_CALL_UPDATE_VIA = 32, - PJSUA_CALL_UPDATE_TARGET = 64, - PJSUA_CALL_SET_MEDIA_DIR = 128, - PJSUA_CALL_NO_MEDIA_SYNC = 256 + PJSUA_CALL_UNHOLD = 1, + PJSUA_CALL_UPDATE_CONTACT = 2, + PJSUA_CALL_INCLUDE_DISABLED_MEDIA = 4, + PJSUA_CALL_NO_SDP_OFFER = 8, + PJSUA_CALL_REINIT_MEDIA = 16, + PJSUA_CALL_UPDATE_VIA = 32, + PJSUA_CALL_UPDATE_TARGET = 64, + PJSUA_CALL_SET_MEDIA_DIR = 128, + PJSUA_CALL_NO_MEDIA_SYNC = 256 } pjsua_call_flag; typedef enum pjsua_create_media_transport_flag { - PJSUA_MED_TP_CLOSE_MEMBER = 1 + PJSUA_MED_TP_CLOSE_MEMBER = 1 } pjsua_create_media_transport_flag; typedef enum pjsua_snd_dev_id { - PJSUA_SND_DEFAULT_CAPTURE_DEV = -1, - PJSUA_SND_DEFAULT_PLAYBACK_DEV = -2, - PJSUA_SND_NO_DEV = -3, - PJSUA_SND_NULL_DEV = -99 + PJSUA_SND_DEFAULT_CAPTURE_DEV = -1, + PJSUA_SND_DEFAULT_PLAYBACK_DEV = -2, + PJSUA_SND_NO_DEV = -3, + PJSUA_SND_NULL_DEV = -99 } pjsua_snd_dev_id; typedef enum pjsua_snd_dev_mode { - PJSUA_SND_DEV_SPEAKER_ONLY = 1, - PJSUA_SND_DEV_NO_IMMEDIATE_OPEN = 2 + PJSUA_SND_DEV_SPEAKER_ONLY = 1, + PJSUA_SND_DEV_NO_IMMEDIATE_OPEN = 2 } pjsua_snd_dev_mode; -typedef enum pjsua_ip_change_op -{ - PJSUA_IP_CHANGE_OP_NULL, - PJSUA_IP_CHANGE_OP_SHUTDOWN_TP, - PJSUA_IP_CHANGE_OP_RESTART_LIS, - PJSUA_IP_CHANGE_OP_ACC_SHUTDOWN_TP, - PJSUA_IP_CHANGE_OP_ACC_UPDATE_CONTACT, - PJSUA_IP_CHANGE_OP_ACC_HANGUP_CALLS, - PJSUA_IP_CHANGE_OP_ACC_REINVITE_CALLS, - PJSUA_IP_CHANGE_OP_COMPLETED +typedef enum pjsua_ip_change_op { + PJSUA_IP_CHANGE_OP_NULL, + PJSUA_IP_CHANGE_OP_SHUTDOWN_TP, + PJSUA_IP_CHANGE_OP_RESTART_LIS, + PJSUA_IP_CHANGE_OP_ACC_SHUTDOWN_TP, + PJSUA_IP_CHANGE_OP_ACC_UPDATE_CONTACT, + PJSUA_IP_CHANGE_OP_ACC_HANGUP_CALLS, + PJSUA_IP_CHANGE_OP_ACC_REINVITE_CALLS, + PJSUA_IP_CHANGE_OP_COMPLETED } pjsua_ip_change_op; -typedef enum pjsua_dtmf_method -{ - PJSUA_DTMF_METHOD_RFC2833, - PJSUA_DTMF_METHOD_SIP_INFO +typedef enum pjsua_dtmf_method { + PJSUA_DTMF_METHOD_RFC2833, + PJSUA_DTMF_METHOD_SIP_INFO } pjsua_dtmf_method; typedef enum pjsua_sip_siprec_use { - PJSUA_SIP_SIPREC_INACTIVE, - PJSUA_SIP_SIPREC_OPTIONAL, - PJSUA_SIP_SIPREC_MANDATORY + PJSUA_SIP_SIPREC_INACTIVE, + PJSUA_SIP_SIPREC_OPTIONAL, + PJSUA_SIP_SIPREC_MANDATORY, } pjsua_sip_siprec_use; diff --git a/pjsip/src/pjsua2/media.cpp b/pjsip/src/pjsua2/media.cpp index 7ca5a9dae8..6a6671b67f 100644 --- a/pjsip/src/pjsua2/media.cpp +++ b/pjsip/src/pjsua2/media.cpp @@ -584,7 +584,10 @@ void AudioMediaAiPort::disconnect() PJSUA2_THROW(Error) } status = pjmedia_ai_port_disconnect(aiPort); - PJSUA2_CHECK_RAISE_ERROR(status); + /* Ignore PJ_EINVALIDOP (not connected) */ + if (status != PJ_SUCCESS && status != PJ_EINVALIDOP) { + PJSUA2_CHECK_RAISE_ERROR(status); + } } ///////////////////////////////////////////////////////////////////////////////