bug report: pjsua refuses video-only sessions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,

if setting all audio-codec priorities to '0' by 'Cp' for pjsua
(pjsip-apps/src/pjsua/*) prior to initiating/answering a call, a
video-only session can be attempted.  Though, pjsip later in
SDP-negotiations refuses to negotiate a connection.  A possible fix is
attached.

    Eeri Kask

-------------- next part --------------
--- pjsip/src/pjsua-lib/pjsua_media.c.orig	2014-05-05 08:19:16.000000000 +0200
+++ pjsip/src/pjsua-lib/pjsua_media.c	2014-05-05 08:22:09.000000000 +0200
@@ -1631,12 +1631,6 @@
     if (rem_sdp) {
 	sort_media(rem_sdp, &STR_AUDIO, acc->cfg.use_srtp,
 		   maudidx, &maudcnt, &mtotaudcnt);
-	if (maudcnt==0) {
-	    /* Expecting audio in the offer */
-	    if (sip_err_code) *sip_err_code = PJSIP_SC_NOT_ACCEPTABLE_HERE;
-	    status = PJSIP_ERRNO_FROM_SIP_STATUS(PJSIP_SC_NOT_ACCEPTABLE_HERE);
-	    goto on_error;
-	}
 
 #if PJMEDIA_HAS_VIDEO
 	sort_media(rem_sdp, &STR_VIDEO, acc->cfg.use_srtp,
@@ -1646,6 +1640,13 @@
 	PJ_UNUSED_ARG(STR_VIDEO);
 #endif
 
+	if (maudcnt + mvidcnt == 0) {
+	    /* Expecting audio/video in the offer */
+	    if (sip_err_code) *sip_err_code = PJSIP_SC_NOT_ACCEPTABLE_HERE;
+	    status = PJSIP_ERRNO_FROM_SIP_STATUS(PJSIP_SC_NOT_ACCEPTABLE_HERE);
+	    goto on_error;
+	}
+
 	/* Update media count only when remote add any media, this media count
 	 * must never decrease. Also note that we shouldn't apply the media
 	 * count setting (of the call setting) before the SDP negotiation.
@@ -1672,11 +1673,12 @@
 
 	    sort_media(sdp, &STR_AUDIO, acc->cfg.use_srtp,
 		       maudidx, &maudcnt, &mtotaudcnt);
-	    pj_assert(maudcnt > 0);
 
 	    sort_media(sdp, &STR_VIDEO, acc->cfg.use_srtp,
 		       mvididx, &mvidcnt, &mtotvidcnt);
 
+	    pj_assert(maudcnt + mvidcnt > 0);
+
 	    /* Call setting may add or remove media. Adding media is done by
 	     * enabling any disabled/port-zeroed media first, then adding new
 	     * media whenever needed. Removing media is done by disabling


[Index of Archives]     [Asterisk Users]     [Asterisk App Development]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [Linux API]
  Powered by Linux