summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2010-11-03 06:46:27 +0000
committerBenny Prijono <bennylp@teluu.com>2010-11-03 06:46:27 +0000
commitcfc7f58a54dabf0f0f29086c403c393c02d34f81 (patch)
treed8f87a9e85e1c07bf79a9822172f8b060eaaa3ab
parent23acf0bf297edf14814e5e83d7ed6b3ec57ddec5 (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
-rw-r--r--pjmedia/include/pjmedia/endpoint.h39
-rw-r--r--pjmedia/src/pjmedia/endpoint.c70
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 */