Merged revisions 105674 via svnmerge from
[asterisk/asterisk.git] / main / rtp.c
index f5e22a9..5eed322 100644 (file)
@@ -175,6 +175,8 @@ struct ast_rtp {
 
        enum strict_rtp_state strict_rtp_state; /*!< Current state that strict RTP protection is in */
        struct sockaddr_in strict_rtp_address;  /*!< Remote address information for strict RTP purposes */
 
        enum strict_rtp_state strict_rtp_state; /*!< Current state that strict RTP protection is in */
        struct sockaddr_in strict_rtp_address;  /*!< Remote address information for strict RTP purposes */
+
+       int set_marker_bit:1;           /*!< Whether to set the marker bit or not */
 };
 
 /* Forward declarations */
 };
 
 /* Forward declarations */
@@ -2324,6 +2326,12 @@ int ast_rtp_setqos(struct ast_rtp *rtp, int tos, int cos, char *desc)
        return ast_netsock_set_qos(rtp->s, tos, cos, desc);
 }
 
        return ast_netsock_set_qos(rtp->s, tos, cos, desc);
 }
 
+void ast_rtp_new_source(struct ast_rtp *rtp)
+{
+       rtp->set_marker_bit = 1;
+       return;
+}
+
 void ast_rtp_set_peer(struct ast_rtp *rtp, struct sockaddr_in *them)
 {
        rtp->them.sin_port = them->sin_port;
 void ast_rtp_set_peer(struct ast_rtp *rtp, struct sockaddr_in *them)
 {
        rtp->them.sin_port = them->sin_port;
@@ -3036,6 +3044,13 @@ static int ast_rtp_raw_write(struct ast_rtp *rtp, struct ast_frame *f, int codec
                        }
                }
        }
                        }
                }
        }
+
+       /* If we have been explicitly told to set the marker bit do so */
+       if (rtp->set_marker_bit) {
+               mark = 1;
+               rtp->set_marker_bit = 0;
+       }
+
        /* If the timestamp for non-digit packets has moved beyond the timestamp
           for digits, update the digit timestamp.
        */
        /* If the timestamp for non-digit packets has moved beyond the timestamp
           for digits, update the digit timestamp.
        */