[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