diff options
author | Benny Prijono <bennylp@teluu.com> | 2010-11-03 06:46:27 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2010-11-03 06:46:27 +0000 |
commit | cfc7f58a54dabf0f0f29086c403c393c02d34f81 (patch) | |
tree | d8f87a9e85e1c07bf79a9822172f8b060eaaa3ab /pjmedia | |
parent | 23acf0bf297edf14814e5e83d7ed6b3ec57ddec5 (diff) |
Fixed #1154 (Run-time option to disable telephone-event in outgoing SDP offer (thanks Marcus Froeschl for the suggestion))
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3360 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia')
-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 */ |