[asterisk-commits] mnicholson: branch 1.4 r288412 - /branches/1.4/channels/chan_sip.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Wed Sep 22 12:39:19 CDT 2010


Author: mnicholson
Date: Wed Sep 22 12:39:12 2010
New Revision: 288412

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=288412
Log:
Handle media specific T.38 SDP information

(closes issue #16647)
Reported by: kwemheuer


Modified:
    branches/1.4/channels/chan_sip.c

Modified: branches/1.4/channels/chan_sip.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.4/channels/chan_sip.c?view=diff&rev=288412&r1=288411&r2=288412
==============================================================================
--- branches/1.4/channels/chan_sip.c (original)
+++ branches/1.4/channels/chan_sip.c Wed Sep 22 12:39:12 2010
@@ -5463,9 +5463,11 @@
 	/* Host information */
 	struct ast_hostent audiohp;
 	struct ast_hostent videohp;
+	struct ast_hostent imagehp;
 	struct ast_hostent sessionhp;
 	struct hostent *hp = NULL;	/*!< RTP Audio host IP */
 	struct hostent *vhp = NULL;	/*!< RTP video host IP */
+	struct hostent *ihp = NULL;	/*!< UDPTL host IP */
 	int portno = -1;		/*!< RTP Audio port number */
 	int vportno = -1;		/*!< RTP Video port number */
 	int udptlportno = -1;		/*!< UDPTL Image port number */
@@ -5541,6 +5543,7 @@
 				processed = TRUE;
 				hp = &sessionhp.hp;
 				vhp = hp;
+				ihp = hp;
 			}
 			break;
 		case 'a':
@@ -5675,6 +5678,11 @@
 						processed = TRUE;
 						vhp = &videohp.hp;
 					}
+				} else if (image) {
+					if (process_sdp_c(value, &imagehp)) {
+						processed = TRUE;
+						ihp = &imagehp.hp;
+					}
 				}
 				break;
 			case 'a':
@@ -5709,7 +5717,7 @@
 	}
 
 	/* Sanity checks */
-	if (!hp && !vhp) {
+	if (!hp && !vhp && !ihp) {
 		ast_log(LOG_WARNING, "Insufficient information in SDP (c=)...\n");
 		return -1;
 	}
@@ -5844,7 +5852,7 @@
 						ast_log(LOG_DEBUG, "Peer T.38 UDPTL is set behind NAT and with destination, destination address now %s\n", ast_inet_ntoa(isin.sin_addr));
 				}
 			} else
-				memcpy(&isin.sin_addr, hp->h_addr, sizeof(isin.sin_addr));
+				memcpy(&isin.sin_addr, ihp->h_addr, sizeof(isin.sin_addr));
 			ast_udptl_set_peer(p->udptl, &isin);
 			if (debug)
 				ast_log(LOG_DEBUG,"Peer T.38 UDPTL is at port %s:%d\n",ast_inet_ntoa(isin.sin_addr), ntohs(isin.sin_port));




More information about the asterisk-commits mailing list