[asterisk-commits] rmudgett: branch group/issue14068 r172615 - /team/group/issue14068/channels/

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Fri Jan 30 16:25:55 CST 2009


Author: rmudgett
Date: Fri Jan 30 16:25:55 2009
New Revision: 172615

URL: http://svn.digium.com/svn-view/asterisk?view=rev&rev=172615
Log:
Applied patch to work in progress branch asterisk/team/group/issue14068.

(issue #14068)
Reported by: nreinartz
Patches:
      asterisk-issue14068-2009-01-30-colpconp-0.1.5.patch uploaded by nreinartz (license 452)

Modified:
    team/group/issue14068/channels/chan_dahdi.c

Modified: team/group/issue14068/channels/chan_dahdi.c
URL: http://svn.digium.com/svn-view/asterisk/team/group/issue14068/channels/chan_dahdi.c?view=diff&rev=172615&r1=172614&r2=172615
==============================================================================
--- team/group/issue14068/channels/chan_dahdi.c (original)
+++ team/group/issue14068/channels/chan_dahdi.c Fri Jan 30 16:25:55 2009
@@ -11660,27 +11660,6 @@
 									dahdi_queue_frame(pri->pvts[chanpos], &f, pri);
 								}
 							}
-							if (pri->pvts[chanpos]->owner) {
-								char dnid[AST_MAX_EXTENSION];
-								char rdnis[AST_MAX_EXTENSION];
-								if (pri->pvts[chanpos]->owner->exten) {
-									int pos = strlen(pri->pvts[chanpos]->owner->exten);
-									if (pos < sizeof(pri->pvts[chanpos]->owner->exten) - 2)
-										ast_copy_string(&pri->pvts[chanpos]->owner->exten[pos], e->ring.callednum, sizeof(pri->pvts[chanpos]->owner->exten) - strlen(e->ring.callednum));
-								}
-								if (pri->pvts[chanpos]->owner->cid.cid_dnid) {
-									ast_copy_string(dnid, pri->pvts[chanpos]->owner->cid.cid_dnid, sizeof(dnid));
-									strncat (dnid, e->ring.callednum, sizeof(dnid) - strlen(dnid) - 1);
-									ast_free(pri->pvts[chanpos]->owner->cid.cid_dnid);
-									pri->pvts[chanpos]->owner->cid.cid_dnid = ast_strdup(dnid);
-								}
-								if (pri->pvts[chanpos]->owner->cid.cid_rdnis) {
-									ast_copy_string(rdnis, pri->pvts[chanpos]->owner->cid.cid_rdnis, sizeof(rdnis));
-									strncat (rdnis, e->ring.callednum, sizeof(rdnis) - strlen(rdnis) - 1);
-									ast_free(pri->pvts[chanpos]->owner->cid.cid_rdnis);
-									pri->pvts[chanpos]->owner->cid.cid_rdnis = ast_strdup(rdnis);
-								}
-							}
 						}
 						ast_mutex_unlock(&pri->pvts[chanpos]->lock);
 					}
@@ -11707,6 +11686,27 @@
 								{
 									struct ast_frame f = { AST_FRAME_DTMF, digit, };
 									dahdi_queue_frame(pri->pvts[chanpos], &f, pri);
+								}
+							}
+							if (pri->pvts[chanpos]->owner) {
+								char dnid[AST_MAX_EXTENSION];
+								char rdnis[AST_MAX_EXTENSION];
+								if (pri->pvts[chanpos]->owner->exten) {
+									int pos = strlen(pri->pvts[chanpos]->owner->exten);
+									if (pos < sizeof(pri->pvts[chanpos]->owner->exten) - 2)
+										ast_copy_string(&pri->pvts[chanpos]->owner->exten[pos], e->ring.callednum, sizeof(pri->pvts[chanpos]->owner->exten) - strlen(e->ring.callednum));
+								}
+								if (pri->pvts[chanpos]->owner->cid.cid_dnid) {
+									ast_copy_string(dnid, pri->pvts[chanpos]->owner->cid.cid_dnid, sizeof(dnid));
+									strncat (dnid, e->ring.callednum, sizeof(dnid) - strlen(dnid) - 1);
+									ast_free(pri->pvts[chanpos]->owner->cid.cid_dnid);
+									pri->pvts[chanpos]->owner->cid.cid_dnid = ast_strdup(dnid);
+								}
+								if (pri->pvts[chanpos]->owner->cid.cid_rdnis) {
+									ast_copy_string(rdnis, pri->pvts[chanpos]->owner->cid.cid_rdnis, sizeof(rdnis));
+									strncat (rdnis, e->ring.callednum, sizeof(rdnis) - strlen(rdnis) - 1);
+									ast_free(pri->pvts[chanpos]->owner->cid.cid_rdnis);
+									pri->pvts[chanpos]->owner->cid.cid_rdnis = ast_strdup(rdnis);
 								}
 							}
 						}
@@ -12026,9 +12026,8 @@
 						}
 #endif
 
-						if (e->ringing.calledname[0] || e->ringing.callednum[0]) {
+						if ((e->ringing.calledname[0] || e->ringing.callednum[0]) && pri->pvts[chanpos]->owner) {
 							struct ast_party_connected_line connected;
-							struct ast_channel *owner = pri->pvts[chanpos]->owner;
 
 							/* Update the connected line information on the other channel */
 							ast_party_connected_line_init(&connected);
@@ -12037,7 +12036,7 @@
 							connected.id.number_type = e->ringing.calledplan;
 							connected.id.number_presentation = pri_to_ast_presentation(e->ringing.calledpres);
 							connected.source = AST_CONNECTED_LINE_UPDATE_SOURCE_ANSWER;
-							ast_queue_connected_line_update(owner, &connected);
+							ast_queue_connected_line_update(pri->pvts[chanpos]->owner, &connected);
 						}
 
 						ast_mutex_unlock(&pri->pvts[chanpos]->lock);
@@ -12165,44 +12164,48 @@
 							switch (subcmd->cmd) {
 							case CMD_CONNECTEDLINE:
 								{
-									struct ast_party_connected_line connected;
-									cmd_connectedline *cmdcl;
 									struct ast_channel *owner = pri->pvts[chanpos]->owner;
-
-									/* Update the connected line information on the other channel */
-									ast_party_connected_line_init(&connected);
-									cmdcl = &subcmd->connectedline;
-									connected.id.number = cmdcl->connected.id.number;
-									connected.id.name = cmdcl->connected.id.name;
-									connected.id.number_type = cmdcl->connected.id.number_type;
-									connected.id.number_presentation = pri_to_ast_presentation(cmdcl->connected.id.number_presentation);
-									connected.source = pri_to_ast_connected_line_update_source(cmdcl->connected.source);
-									ast_queue_connected_line_update(owner, &connected);
-
-									ast_copy_string(pri->pvts[chanpos]->lastcid_num, cmdcl->connected.id.number, sizeof(pri->pvts[chanpos]->lastcid_num));
-									ast_copy_string(pri->pvts[chanpos]->lastcid_name, cmdcl->connected.id.name, sizeof(pri->pvts[chanpos]->lastcid_name));
-
-									pri->pvts[chanpos]->subs[SUB_REAL].needcallerid =1;
+									if (owner) {
+										struct ast_party_connected_line connected;
+										cmd_connectedline *cmdcl;
+
+										/* Update the connected line information on the other channel */
+										ast_party_connected_line_init(&connected);
+										cmdcl = &subcmd->connectedline;
+										connected.id.number = cmdcl->connected.id.number;
+										connected.id.name = cmdcl->connected.id.name;
+										connected.id.number_type = cmdcl->connected.id.number_type;
+										connected.id.number_presentation = pri_to_ast_presentation(cmdcl->connected.id.number_presentation);
+										connected.source = pri_to_ast_connected_line_update_source(cmdcl->connected.source);
+										ast_queue_connected_line_update(owner, &connected);
+
+										ast_copy_string(pri->pvts[chanpos]->lastcid_num, cmdcl->connected.id.number, sizeof(pri->pvts[chanpos]->lastcid_num));
+										ast_copy_string(pri->pvts[chanpos]->lastcid_name, cmdcl->connected.id.name, sizeof(pri->pvts[chanpos]->lastcid_name));
+
+										pri->pvts[chanpos]->subs[SUB_REAL].needcallerid =1;
+									}
 								}
 								break;
 							case CMD_REDIRECTING:
 								{
-									struct ast_party_redirecting redirecting = {{0,},};
-									cmd_redirecting *cmdr;
 									struct ast_channel *owner = pri->pvts[chanpos]->owner;
-
-									cmdr = &subcmd->redirecting;
-									redirecting.from.number = cmdr->redirecting.from.number;
-									redirecting.from.name = cmdr->redirecting.from.name;
-									redirecting.from.number_type = cmdr->redirecting.from.number_type;
-									redirecting.from.number_presentation = pri_to_ast_presentation(cmdr->redirecting.from.number_presentation);
-									redirecting.to.number = cmdr->redirecting.to.number;
-									redirecting.to.name = cmdr->redirecting.to.name;
-									redirecting.to.number_type = cmdr->redirecting.to.number_type;
-									redirecting.to.number_presentation = pri_to_ast_presentation(cmdr->redirecting.to.number_presentation);
-									redirecting.count = 0;
-									redirecting.reason = pri_to_ast_reason(cmdr->redirecting.reason);
-									ast_queue_redirecting_update(owner, &redirecting);
+									if (owner) {
+										struct ast_party_redirecting redirecting = {{0,},};
+										cmd_redirecting *cmdr;
+
+										cmdr = &subcmd->redirecting;
+										redirecting.from.number = cmdr->redirecting.from.number;
+										redirecting.from.name = cmdr->redirecting.from.name;
+										redirecting.from.number_type = cmdr->redirecting.from.number_type;
+										redirecting.from.number_presentation = pri_to_ast_presentation(cmdr->redirecting.from.number_presentation);
+										redirecting.to.number = cmdr->redirecting.to.number;
+										redirecting.to.name = cmdr->redirecting.to.name;
+										redirecting.to.number_type = cmdr->redirecting.to.number_type;
+										redirecting.to.number_presentation = pri_to_ast_presentation(cmdr->redirecting.to.number_presentation);
+										redirecting.count = 0;
+										redirecting.reason = pri_to_ast_reason(cmdr->redirecting.reason);
+										ast_queue_redirecting_update(owner, &redirecting);
+									}
 								}
 								break;
 							default:
@@ -12227,7 +12230,7 @@
 							PRI_SPAN(e->answer.channel), PRI_CHANNEL(e->answer.channel), pri->span);
 					} else {
 						struct ast_party_connected_line connected;
-						struct ast_channel *owner = pri->pvts[chanpos]->owner;
+						struct ast_channel *owner;
 
 						ast_mutex_lock(&pri->pvts[chanpos]->lock);
 						/* Now we can do call progress detection */
@@ -12267,23 +12270,25 @@
 							dahdi_enable_ec(pri->pvts[chanpos]);
 						}
 
+						owner = pri->pvts[chanpos]->owner;
 #ifdef SUPPORT_USERUSER
 						if (!ast_strlen_zero(e->answer.useruserinfo)) {
-							struct ast_channel *owner = pri->pvts[chanpos]->owner;
 							ast_mutex_unlock(&pri->pvts[chanpos]->lock);
 							pbx_builtin_setvar_helper(owner, "USERUSERINFO", e->answer.useruserinfo);
 							ast_mutex_lock(&pri->pvts[chanpos]->lock);
 						}
 #endif
 
-						/* Update the connected line information on the other channel */
-						ast_party_connected_line_init(&connected);
-						connected.id.name = e->answer.connectedname;
-						connected.id.number = e->answer.connectednum;
-						connected.id.number_type = e->answer.connectedplan;
-						connected.id.number_presentation = pri_to_ast_presentation(e->answer.connectedpres);
-						connected.source = pri_to_ast_connected_line_update_source(e->answer.source);
-						ast_queue_connected_line_update(owner, &connected);
+						if (owner) {
+							/* Update the connected line information on the other channel */
+							ast_party_connected_line_init(&connected);
+							connected.id.name = e->answer.connectedname;
+							connected.id.number = e->answer.connectednum;
+							connected.id.number_type = e->answer.connectedplan;
+							connected.id.number_presentation = pri_to_ast_presentation(e->answer.connectedpres);
+							connected.source = pri_to_ast_connected_line_update_source(e->answer.source);
+							ast_queue_connected_line_update(owner, &connected);
+						}
 
 						ast_mutex_unlock(&pri->pvts[chanpos]->lock);
 					}




More information about the asterisk-commits mailing list