[asterisk-commits] rmudgett: trunk r190517 - in /trunk: channels/ funcs/
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Fri Apr 24 12:59:04 CDT 2009
Author: rmudgett
Date: Fri Apr 24 12:59:01 2009
New Revision: 190517
URL: http://svn.digium.com/svn-view/asterisk?view=rev&rev=190517
Log:
There is no need to use the struct ast_party_connected_line.source update values.
The messages sent by a technology when a connected line update is received
are best determined by the current call state of the channel. The struct
ast_party_connected_line.source value is really only useful as a possible
tracing aid.
Modified:
trunk/channels/chan_misdn.c
trunk/funcs/func_connectedline.c
Modified: trunk/channels/chan_misdn.c
URL: http://svn.digium.com/svn-view/asterisk/trunk/channels/chan_misdn.c?view=diff&rev=190517&r1=190516&r2=190517
==============================================================================
--- trunk/channels/chan_misdn.c (original)
+++ trunk/channels/chan_misdn.c Fri Apr 24 12:59:01 2009
@@ -6041,7 +6041,6 @@
*/
static void misdn_update_connected_line(struct ast_channel *ast, struct misdn_bchannel *bc, int originator)
{
- int Is_PTMP;
struct chan_list *ch;
misdn_get_connected_line(ast, bc, originator);
@@ -6051,51 +6050,23 @@
bc->redirecting.to = bc->caller;
}
- Is_PTMP = !misdn_lib_is_ptp(bc->port);
- switch (ast->connected.source) {
- case AST_CONNECTED_LINE_UPDATE_SOURCE_TRANSFER:
- case AST_CONNECTED_LINE_UPDATE_SOURCE_ANSWER:
- ch = MISDN_ASTERISK_TECH_PVT(ast);
- if (ch->state == MISDN_CONNECTED
- || originator != ORG_MISDN) {
- if (Is_PTMP) {
- /* Send NOTIFY(transfer-active, redirecting.to data) */
- bc->redirecting.to_changed = 1;
- bc->notify_description_code = mISDN_NOTIFY_CODE_CALL_TRANSFER_ACTIVE;
- misdn_lib_send_event(bc, EVENT_NOTIFY);
-#if defined(AST_MISDN_ENHANCEMENTS)
- } else {
- /* Send EctInform(transfer-active, redirecting.to data) */
- bc->fac_out.Function = Fac_EctInform;
- bc->fac_out.u.EctInform.InvokeID = ++misdn_invoke_id;
- bc->fac_out.u.EctInform.Status = 1;/* active */
- if (bc->redirecting.to.number[0]) {
- misdn_PresentedNumberUnscreened_fill(&bc->fac_out.u.EctInform.Redirection,
- &bc->redirecting.to);
- bc->fac_out.u.EctInform.RedirectionPresent = 1;
- } else {
- bc->fac_out.u.EctInform.RedirectionPresent = 0;
- }
-
- /* Send message */
- print_facility(&bc->fac_out, bc);
- misdn_lib_send_event(bc, EVENT_FACILITY);
-#endif /* defined(AST_MISDN_ENHANCEMENTS) */
- }
- }
- break;
- case AST_CONNECTED_LINE_UPDATE_SOURCE_TRANSFER_ALERTING:
- if (Is_PTMP) {
- /* Send NOTIFY(transfer-alerting, redirecting.to data) */
+ ch = MISDN_ASTERISK_TECH_PVT(ast);
+ if (ch->state == MISDN_CONNECTED
+ || originator != ORG_MISDN) {
+ int is_ptmp;
+
+ is_ptmp = !misdn_lib_is_ptp(bc->port);
+ if (is_ptmp) {
+ /* Send NOTIFY(transfer-active, redirecting.to data) */
bc->redirecting.to_changed = 1;
- bc->notify_description_code = mISDN_NOTIFY_CODE_CALL_TRANSFER_ALERTING;
+ bc->notify_description_code = mISDN_NOTIFY_CODE_CALL_TRANSFER_ACTIVE;
misdn_lib_send_event(bc, EVENT_NOTIFY);
#if defined(AST_MISDN_ENHANCEMENTS)
} else {
- /* Send EctInform(transfer-alerting, redirecting.to data) */
+ /* Send EctInform(transfer-active, redirecting.to data) */
bc->fac_out.Function = Fac_EctInform;
bc->fac_out.u.EctInform.InvokeID = ++misdn_invoke_id;
- bc->fac_out.u.EctInform.Status = 0;/* alerting */
+ bc->fac_out.u.EctInform.Status = 1;/* active */
if (bc->redirecting.to.number[0]) {
misdn_PresentedNumberUnscreened_fill(&bc->fac_out.u.EctInform.Redirection,
&bc->redirecting.to);
@@ -6103,13 +6074,12 @@
} else {
bc->fac_out.u.EctInform.RedirectionPresent = 0;
}
+
+ /* Send message */
print_facility(&bc->fac_out, bc);
misdn_lib_send_event(bc, EVENT_FACILITY);
#endif /* defined(AST_MISDN_ENHANCEMENTS) */
}
- break;
- default:
- break;
}
}
@@ -8829,6 +8799,15 @@
misdn_add_number_prefix(bc->port, party_id.number_type,
party_id.number, sizeof(party_id.number));
+ /*
+ * It would be preferable to update the connected line information
+ * only when the message callStatus is active. However, the
+ * optional redirection number may not be present in the active
+ * message if an alerting message were received earlier.
+ *
+ * The consequences if we wind up sending two updates is benign.
+ * The other end will think that it got transferred twice.
+ */
misdn_queue_connected_line_update(ch->ast, &party_id,
(bc->fac_in.u.EctInform.Status == 0 /* alerting */)
? AST_CONNECTED_LINE_UPDATE_SOURCE_TRANSFER_ALERTING
@@ -10220,6 +10199,15 @@
}
break;
case mISDN_NOTIFY_CODE_CALL_TRANSFER_ALERTING:
+ /*
+ * It would be preferable to update the connected line information
+ * only when the message callStatus is active. However, the
+ * optional redirection number may not be present in the active
+ * message if an alerting message were received earlier.
+ *
+ * The consequences if we wind up sending two updates is benign.
+ * The other end will think that it got transferred twice.
+ */
if (bc->redirecting.to_changed) {
bc->redirecting.to_changed = 0;
if (ch && ch->ast) {
Modified: trunk/funcs/func_connectedline.c
URL: http://svn.digium.com/svn-view/asterisk/trunk/funcs/func_connectedline.c?view=diff&rev=190517&r1=190516&r2=190517
==============================================================================
--- trunk/funcs/func_connectedline.c (original)
+++ trunk/funcs/func_connectedline.c Fri Apr 24 12:59:01 2009
@@ -19,7 +19,7 @@
/*! \file
*
* \brief Connected Line dialplan function
- *
+ *
* \ingroup functions
*/
@@ -41,6 +41,11 @@
#include "asterisk/options.h"
#include "asterisk/callerid.h"
+/*
+ * Do not document the CONNECTEDLINE(source) datatype.
+ * It has turned out to not be needed. The source value is really .
+ * only useful as a possible tracing aid.
+ */
/*** DOCUMENTATION
<function name="CONNECTEDLINE" language="en_US">
<synopsis>
@@ -55,7 +60,6 @@
<enum name = "name" />
<enum name = "ton" />
<enum name = "pres" />
- <enum name = "source" />
</enumlist>
</parameter>
<parameter name="i">
@@ -64,13 +68,7 @@
</parameter>
</syntax>
<description>
- <para>Gets or sets Connected Line data on the channel. Possible values
- for the <replaceable>source</replaceable> datatype are:</para>
- <enumlist>
- <enum name="answer"><para>Normal Call Answering</para></enum>
- <enum name="transfer_alerting"><para>Call Transfer(Alerting)</para></enum>
- <enum name="transfer_active"><para>Call Transfer(Active)</para></enum>
- </enumlist>
+ <para>Gets or sets Connected Line data on the channel.</para>
</description>
</function>
***/
@@ -133,7 +131,7 @@
case 'i':
set_it = ast_channel_set_connected_line;
break;
-
+
default:
ast_log(LOG_ERROR, "Unknown connectedline option '%s'.\n", option);
return 0;
@@ -161,7 +159,7 @@
connected.id.name = ast_strdupa(value);
ast_trim_blanks(connected.id.name);
set_it(chan, &connected);
- } else if (!strncasecmp("num", data, 3)) {
+ } else if (!strncasecmp("num", data, 3)) {
connected.id.number = ast_strdupa(value);
ast_trim_blanks(connected.id.number);
set_it(chan, &connected);
More information about the asterisk-commits
mailing list