[asterisk-commits] mmichelson: branch mmichelson/correct_sdp_answer r206498 - /team/mmichelson/c...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Tue Jul 14 12:18:23 CDT 2009
Author: mmichelson
Date: Tue Jul 14 12:18:18 2009
New Revision: 206498
URL: http://svn.asterisk.org/svn-view/asterisk?view=rev&rev=206498
Log:
Added some notes while looking over the SDP parsing and generating functions.
Modified:
team/mmichelson/correct_sdp_answer/channels/chan_sip.c
Modified: team/mmichelson/correct_sdp_answer/channels/chan_sip.c
URL: http://svn.asterisk.org/svn-view/asterisk/team/mmichelson/correct_sdp_answer/channels/chan_sip.c?view=diff&rev=206498&r1=206497&r2=206498
==============================================================================
--- team/mmichelson/correct_sdp_answer/channels/chan_sip.c (original)
+++ team/mmichelson/correct_sdp_answer/channels/chan_sip.c Tue Jul 14 12:18:18 2009
@@ -5308,6 +5308,11 @@
numberofports = 1;
len = -1;
+ /* XXX MCM It appears that if we come across multiple audio streams, then the final one
+ * we parse is the one that will actually be answered in the answering SDP.
+ *
+ * Same appears to apply to video and image streams, too.
+ */
if ((sscanf(m, "audio %d/%d RTP/AVP %n", &x, &numberofports, &len) == 2 && len > 0) ||
(sscanf(m, "audio %d RTP/AVP %n", &x, &len) == 1 && len > 0)) {
audio = TRUE;
@@ -5324,6 +5329,11 @@
ast_verbose("Found RTP audio format %d\n", codec);
ast_rtp_set_m_type(newaudiortp, codec);
}
+ /* XXX MCM It appears that video streams are parsed on incoming offers no matter whether video
+ * support is enabled or not. This is a good thing with regards to this branch. The information
+ * is stored in the "newvideortp" structure. I'll need to check down below to see what is actually
+ * done with this info...
+ */
} else if ((sscanf(m, "video %d/%d RTP/AVP %n", &x, &numberofports, &len) == 2 && len > 0) ||
(sscanf(m, "video %d RTP/AVP %n", &x, &len) == 1 && len >= 0)) {
/* If it is not audio - is it video ? */
@@ -5739,6 +5749,16 @@
p->jointnoncodeccapability = newnoncodeccapability; /* DTMF capabilities */
ast_rtp_pt_copy(p->rtp, newaudiortp);
+ /* XXX MCM. Ah cripes, so even though we're storing the video information in the newvideortp
+ * structure, we don't actually store anything about it on p unless there is a vrtp. vrtp's existence
+ * is predicated on "videosupport" being enabled in sip.conf.
+ *
+ * So something needs to be added to this function so we can store a simple boolean on p telling if
+ * video was offered. That way, in add_sdp, we can use this info to tell if we need to add an m= line
+ * for video even if video support is not enabled.
+ *
+ * Similar measures need to be taken for image and audio streams as well.
+ */
if (p->vrtp)
ast_rtp_pt_copy(p->vrtp, newvideortp);
@@ -6746,6 +6766,10 @@
/* Ok, we need video. Let's add what we need for video and set codecs.
Video is handled differently than audio since we can not transcode. */
+ /* XXX MCM To simplify matters, a good idea would probably be to use whatever boolean was stored
+ * on p to set the 'needvideo' variable. Then, within this block, we can just set vdest.sin_port to
+ * 0.
+ */
if (needvideo) {
/* Determine video destination */
if (p->vredirip.sin_addr.s_addr) {
@@ -6809,6 +6833,9 @@
}
/* Now send any other common audio and video codecs, and non-codec formats: */
+ /* XXX MCM Will need to make sure that we don't actually start adding video codecs if
+ * video is not supported.
+ */
for (x = 1; x <= (needvideo ? AST_FORMAT_MAX_VIDEO : AST_FORMAT_MAX_AUDIO); x <<= 1) {
if (!(capability & x)) /* Codec not requested */
continue;
@@ -6859,6 +6886,11 @@
ast_build_string(&m_video_next, &m_video_left, "\r\n");
}
+ /* XXX MCM the 'add_t38' variable is determined by the caller of the function and will be set true
+ * if we wish to offer/answer t38 for this stream. We need to be prepared to place t38 streams with
+ * port set to 0 even if the caller of this function is not going to request t38 be added if the offer
+ * we are answering had t38 in it.
+ */
if (add_t38 && p->udptl) {
struct sockaddr_in udptlsin;
struct sockaddr_in udptldest = { 0, };
More information about the asterisk-commits
mailing list