diff options
-rw-r--r-- | pjmedia/include/pjmedia/endpoint.h | 39 | ||||
-rw-r--r-- | pjmedia/src/pjmedia/endpoint.c | 70 |
2 files changed, 93 insertions, 16 deletions
diff --git a/pjmedia/include/pjmedia/endpoint.h b/pjmedia/include/pjmedia/endpoint.h index 2cc386f5..725c9756 100644 --- a/pjmedia/include/pjmedia/endpoint.h +++ b/pjmedia/include/pjmedia/endpoint.h @@ -43,6 +43,21 @@ PJ_BEGIN_DECL +/** + * This enumeration describes various flags that can be set or retrieved in + * the media endpoint, by using pjmedia_endpt_set_flag() and + * pjmedia_endpt_get_flag() respectively. + */ +typedef enum pjmedia_endpt_flag +{ + /** + * This flag controls whether telephony-event should be offered in SDP. + * Value is boolean. + */ + PJMEDIA_ENDPT_HAS_TELEPHONE_EVENT_FLAG + +} pjmedia_endpt_flag; + /** * Create an instance of media endpoint. @@ -73,7 +88,31 @@ PJ_DECL(pj_status_t) pjmedia_endpt_create( pj_pool_factory *pf, */ PJ_DECL(pj_status_t) pjmedia_endpt_destroy(pjmedia_endpt *endpt); +/** + * Change the value of a flag. + * + * @param endpt Media endpoint. + * @param flag The flag. + * @param value Pointer to the value to be set. + * + * @reurn PJ_SUCCESS on success. + */ +PJ_DECL(pj_status_t) pjmedia_endpt_set_flag(pjmedia_endpt *endpt, + pjmedia_endpt_flag flag, + const void *value); +/** + * Retrieve the value of a flag. + * + * @param endpt Media endpoint. + * @param flag The flag. + * @param value Pointer to store the result. + * + * @return PJ_SUCCESS on success. + */ +PJ_DECL(pj_status_t) pjmedia_endpt_get_flag(pjmedia_endpt *endpt, + pjmedia_endpt_flag flag, + void *value); /** * Get the ioqueue instance of the media endpoint. diff --git a/pjmedia/src/pjmedia/endpoint.c b/pjmedia/src/pjmedia/endpoint.c index 616fef6a..8f781796 100644 --- a/pjmedia/src/pjmedia/endpoint.c +++ b/pjmedia/src/pjmedia/endpoint.c @@ -87,6 +87,9 @@ struct pjmedia_endpt /** To signal polling thread to quit. */ pj_bool_t quit_flag; + + /** Is telephone-event enable */ + pj_bool_t has_telephone_event; }; /** @@ -120,6 +123,7 @@ PJ_DEF(pj_status_t) pjmedia_endpt_create(pj_pool_factory *pf, endpt->pf = pf; endpt->ioqueue = ioqueue; endpt->thread_cnt = worker_cnt; + endpt->has_telephone_event = PJ_TRUE; /* Sound */ status = pjmedia_aud_subsys_init(pf); @@ -221,6 +225,39 @@ PJ_DEF(pj_status_t) pjmedia_endpt_destroy (pjmedia_endpt *endpt) return PJ_SUCCESS; } +PJ_DEF(pj_status_t) pjmedia_endpt_set_flag( pjmedia_endpt *endpt, + pjmedia_endpt_flag flag, + const void *value) +{ + PJ_ASSERT_RETURN(endpt, PJ_EINVAL); + + switch (flag) { + case PJMEDIA_ENDPT_HAS_TELEPHONE_EVENT_FLAG: + endpt->has_telephone_event = *(pj_bool_t*)value; + break; + default: + return PJ_EINVAL; + } + + return PJ_SUCCESS; +} + +PJ_DEF(pj_status_t) pjmedia_endpt_get_flag( pjmedia_endpt *endpt, + pjmedia_endpt_flag flag, + void *value) +{ + PJ_ASSERT_RETURN(endpt, PJ_EINVAL); + + switch (flag) { + case PJMEDIA_ENDPT_HAS_TELEPHONE_EVENT_FLAG: + *(pj_bool_t*)value = endpt->has_telephone_event; + break; + default: + return PJ_EINVAL; + } + + return PJ_SUCCESS; +} /** * Get the ioqueue instance of the media endpoint. @@ -489,25 +526,26 @@ PJ_DEF(pj_status_t) pjmedia_endpt_create_sdp( pjmedia_endpt *endpt, #if defined(PJMEDIA_RTP_PT_TELEPHONE_EVENTS) && \ PJMEDIA_RTP_PT_TELEPHONE_EVENTS != 0 - /* * Add support telephony event */ - m->desc.fmt[m->desc.fmt_count++] = - pj_str(PJMEDIA_RTP_PT_TELEPHONE_EVENTS_STR); - - /* Add rtpmap. */ - attr = PJ_POOL_ZALLOC_T(pool, pjmedia_sdp_attr); - attr->name = pj_str("rtpmap"); - attr->value = pj_str(PJMEDIA_RTP_PT_TELEPHONE_EVENTS_STR - " telephone-event/8000"); - m->attr[m->attr_count++] = attr; - - /* Add fmtp */ - attr = PJ_POOL_ZALLOC_T(pool, pjmedia_sdp_attr); - attr->name = pj_str("fmtp"); - attr->value = pj_str(PJMEDIA_RTP_PT_TELEPHONE_EVENTS_STR " 0-15"); - m->attr[m->attr_count++] = attr; + if (endpt->has_telephone_event) { + m->desc.fmt[m->desc.fmt_count++] = + pj_str(PJMEDIA_RTP_PT_TELEPHONE_EVENTS_STR); + + /* Add rtpmap. */ + attr = PJ_POOL_ZALLOC_T(pool, pjmedia_sdp_attr); + attr->name = pj_str("rtpmap"); + attr->value = pj_str(PJMEDIA_RTP_PT_TELEPHONE_EVENTS_STR + " telephone-event/8000"); + m->attr[m->attr_count++] = attr; + + /* Add fmtp */ + attr = PJ_POOL_ZALLOC_T(pool, pjmedia_sdp_attr); + attr->name = pj_str("fmtp"); + attr->value = pj_str(PJMEDIA_RTP_PT_TELEPHONE_EVENTS_STR " 0-15"); + m->attr[m->attr_count++] = attr; + } #endif /* Done */ |