[Asterisk-cvs] asterisk/channels chan_iax2.c,1.128,1.129

markster at lists.digium.com markster at lists.digium.com
Sat Apr 24 11:11:22 CDT 2004


Update of /usr/cvsroot/asterisk/channels
In directory mongoose.digium.com:/tmp/cvs-serv4552/channels

Modified Files:
	chan_iax2.c 
Log Message:
Make sure call is valid when handling mini-frame.


Index: chan_iax2.c
===================================================================
RCS file: /usr/cvsroot/asterisk/channels/chan_iax2.c,v
retrieving revision 1.128
retrieving revision 1.129
diff -u -d -r1.128 -r1.129
--- chan_iax2.c	23 Apr 2004 05:35:12 -0000	1.128
+++ chan_iax2.c	24 Apr 2004 15:16:48 -0000	1.129
@@ -4556,43 +4556,45 @@
 					   drop it, since we don't have a scallno to use for an INVAL */
 					/* Process as a mini frame */
 					f.frametype = AST_FRAME_VOICE;
-					if (iaxs[fr.callno]->voiceformat > 0) {
-						f.subclass = iaxs[fr.callno]->voiceformat;
-						f.datalen = len;
-						if (f.datalen >= 0) {
-							if (f.datalen)
-								f.data = ptr;
-							else
-								f.data = NULL;
-							fr.ts = fix_peerts(peer, fr.callno, ts);
-							/* Don't pass any packets until we're started */
-							if ((iaxs[fr.callno]->state & IAX_STATE_STARTED)) {
-								/* Common things */
-								f.src = "IAX2";
-								f.mallocd = 0;
-								f.offset = 0;
-								if (f.datalen && (f.frametype == AST_FRAME_VOICE)) 
-									f.samples = get_samples(&f);
+					if (iaxs[fr.callno]) {
+						if (iaxs[fr.callno]->voiceformat > 0) {
+							f.subclass = iaxs[fr.callno]->voiceformat;
+							f.datalen = len;
+							if (f.datalen >= 0) {
+								if (f.datalen)
+									f.data = ptr;
 								else
-									f.samples = 0;
-								fr.outoforder = 0;
-								iax_frame_wrap(&fr, &f);
+									f.data = NULL;
+								fr.ts = fix_peerts(peer, fr.callno, ts);
+								/* Don't pass any packets until we're started */
+								if ((iaxs[fr.callno]->state & IAX_STATE_STARTED)) {
+									/* Common things */
+									f.src = "IAX2";
+									f.mallocd = 0;
+									f.offset = 0;
+									if (f.datalen && (f.frametype == AST_FRAME_VOICE)) 
+										f.samples = get_samples(&f);
+									else
+										f.samples = 0;
+									fr.outoforder = 0;
+									iax_frame_wrap(&fr, &f);
 #ifdef BRIDGE_OPTIMIZATION
-								if (iaxs[fr.callno]->bridgecallno) {
-									forward_delivery(&fr);
-								} else {
-									schedule_delivery(iaxfrdup2(&fr), 1, updatehistory);
-								}
+									if (iaxs[fr.callno]->bridgecallno) {
+										forward_delivery(&fr);
+									} else {
+										schedule_delivery(iaxfrdup2(&fr), 1, updatehistory);
+									}
 #else
-								schedule_delivery(iaxfrdup2(&fr), 1, updatehistory);
+									schedule_delivery(iaxfrdup2(&fr), 1, updatehistory);
 #endif
+								}
+							} else {
+								ast_log(LOG_WARNING, "Datalen < 0?\n");
 							}
 						} else {
-							ast_log(LOG_WARNING, "Datalen < 0?\n");
+							ast_log(LOG_WARNING, "Received trunked frame before first full voice frame\n ");
+							iax2_vnak(fr.callno);
 						}
-					} else {
-						ast_log(LOG_WARNING, "Received trunked frame before first full voice frame\n ");
-						iax2_vnak(fr.callno);
 					}
 					ast_mutex_unlock(&iaxsl[fr.callno]);
 				}




More information about the svn-commits mailing list