The following patch with updates for trunk. Works much better in trunk.
[asterisk/asterisk.git] / main / rtp.c
index afaf428..87630f6 100644 (file)
@@ -1939,23 +1939,36 @@ void ast_rtp_set_m_type(struct ast_rtp* rtp, int pt)
        rtp_bridge_unlock(rtp);
 } 
 
+/*! \brief remove setting from payload type list if the rtpmap header indicates
+    an unknown media type */
+void ast_rtp_unset_m_type(struct ast_rtp* rtp, int pt) 
+{
+       rtp_bridge_lock(rtp);
+       rtp->current_RTP_PT[pt].isAstFormat = 0;
+       rtp->current_RTP_PT[pt].code = 0;
+       rtp_bridge_unlock(rtp);
+}
+
 /*! \brief Make a note of a RTP payload type (with MIME type) that was seen in
  * an SDP "a=rtpmap:" line.
+ * \return 0 if the MIME type was found and set, -1 if it wasn't found
  */
-void ast_rtp_set_rtpmap_type(struct ast_rtp *rtp, int pt,
+int ast_rtp_set_rtpmap_type(struct ast_rtp *rtp, int pt,
                             char *mimeType, char *mimeSubtype,
                             enum ast_rtp_options options)
 {
        unsigned int i;
+       int found = 0;
 
        if (pt < 0 || pt > MAX_RTP_PT) 
-               return; /* bogus payload type */
+               return -1; /* bogus payload type */
        
        rtp_bridge_lock(rtp);
 
        for (i = 0; i < sizeof(mimeTypes)/sizeof(mimeTypes[0]); ++i) {
                if (strcasecmp(mimeSubtype, mimeTypes[i].subtype) == 0 &&
                    strcasecmp(mimeType, mimeTypes[i].type) == 0) {
+                       found = 1;
                        rtp->current_RTP_PT[pt] = mimeTypes[i].payloadType;
                        if ((mimeTypes[i].payloadType.code == AST_FORMAT_G726) &&
                            mimeTypes[i].payloadType.isAstFormat &&
@@ -1967,7 +1980,7 @@ void ast_rtp_set_rtpmap_type(struct ast_rtp *rtp, int pt,
 
        rtp_bridge_unlock(rtp);
 
-       return;
+       return (found ? 0 : -1);
 } 
 
 /*! \brief Return the union of all of the codecs that were set by rtp_set...() calls