[asterisk-commits] rmudgett: branch group/v14_colp r146248 - in /team/group/v14_colp: apps/ chan...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Fri Oct 3 18:05:31 CDT 2008
Author: rmudgett
Date: Fri Oct 3 18:05:30 2008
New Revision: 146248
URL: http://svn.digium.com/view/asterisk?view=rev&rev=146248
Log:
Initial merge from issue8824 branch back to 1.4 code level.
Only missing merge of chan_sip.c.
Added:
team/group/v14_colp/funcs/func_connectedline.c
- copied, changed from r145912, team/group/issue8824/funcs/func_connectedline.c
team/group/v14_colp/funcs/func_redirecting.c
- copied, changed from r145914, team/group/issue8824/funcs/func_redirecting.c
Modified:
team/group/v14_colp/apps/app_dial.c
team/group/v14_colp/apps/app_queue.c
team/group/v14_colp/channels/chan_agent.c
team/group/v14_colp/channels/chan_dahdi.c
team/group/v14_colp/channels/chan_features.c
team/group/v14_colp/channels/chan_h323.c
team/group/v14_colp/channels/chan_iax2.c
team/group/v14_colp/channels/chan_local.c
team/group/v14_colp/channels/chan_mgcp.c
team/group/v14_colp/channels/chan_misdn.c
team/group/v14_colp/channels/chan_phone.c
team/group/v14_colp/channels/chan_skinny.c
team/group/v14_colp/channels/misdn/chan_misdn_config.h
team/group/v14_colp/channels/misdn/isdn_lib.c
team/group/v14_colp/channels/misdn/isdn_lib.h
team/group/v14_colp/channels/misdn/isdn_lib_intern.h
team/group/v14_colp/channels/misdn/isdn_msg_parser.c
team/group/v14_colp/channels/misdn_config.c
team/group/v14_colp/configs/misdn.conf.sample
team/group/v14_colp/configs/sip.conf.sample
team/group/v14_colp/funcs/func_callerid.c
team/group/v14_colp/include/asterisk/callerid.h
team/group/v14_colp/include/asterisk/channel.h
team/group/v14_colp/include/asterisk/frame.h
team/group/v14_colp/main/callerid.c
team/group/v14_colp/main/channel.c
team/group/v14_colp/main/dial.c
team/group/v14_colp/main/rtp.c
team/group/v14_colp/res/res_features.c
Modified: team/group/v14_colp/apps/app_dial.c
URL: http://svn.digium.com/view/asterisk/team/group/v14_colp/apps/app_dial.c?view=diff&rev=146248&r1=146247&r2=146248
==============================================================================
--- team/group/v14_colp/apps/app_dial.c (original)
+++ team/group/v14_colp/apps/app_dial.c Fri Oct 3 18:05:30 2008
@@ -115,10 +115,9 @@
" DTMF string is sent to the called party, and the 'calling' DTMF\n"
" string is sent to the calling party. Both parameters can be used\n"
" alone.\n"
-" f - Force the callerid of the *calling* channel to be set as the\n"
-" extension associated with the channel using a dialplan 'hint'.\n"
-" For example, some PSTNs do not allow CallerID to be set to anything\n"
-" other than the number assigned to the caller.\n"
+" f(x) - Force the outgoing callerid to 'x'\n"
+" F(context^exten^pri) - When the caller hangs up, transfer the called party\n"
+" to the specified context and extension and continue execution.\n"
" g - Proceed with dialplan execution at the current extension if the\n"
" destination channel hangs up.\n"
" G(context^exten^pri) - If the call is answered, transfer the calling party to\n"
@@ -130,6 +129,8 @@
" H - Allow the calling party to hang up by hitting the '*' DTMF digit.\n"
" i - Asterisk will ignore any forwarding requests it may receive on this\n"
" dial attempt.\n"
+" I - Asterisk will ignore any connected line update requests it may receive\n"
+" on this dial attempt.\n"
" j - Jump to priority n+101 if all of the requested channels were busy.\n"
" k - Allow the called party to enable parking of the call by sending\n"
" the DTMF sequence defined for call parking in features.conf.\n"
@@ -220,38 +221,39 @@
"to the Dial application.\n";
enum {
- OPT_ANNOUNCE = (1 << 0),
- OPT_RESETCDR = (1 << 1),
- OPT_DTMF_EXIT = (1 << 2),
- OPT_SENDDTMF = (1 << 3),
- OPT_FORCECLID = (1 << 4),
- OPT_GO_ON = (1 << 5),
- OPT_CALLEE_HANGUP = (1 << 6),
- OPT_CALLER_HANGUP = (1 << 7),
- OPT_PRIORITY_JUMP = (1 << 8),
- OPT_DURATION_LIMIT = (1 << 9),
- OPT_MUSICBACK = (1 << 10),
- OPT_CALLEE_MACRO = (1 << 11),
- OPT_SCREEN_NOINTRO = (1 << 12),
- OPT_SCREEN_NOCLID = (1 << 13),
- OPT_ORIGINAL_CLID = (1 << 14),
- OPT_SCREENING = (1 << 15),
- OPT_PRIVACY = (1 << 16),
- OPT_RINGBACK = (1 << 17),
- OPT_DURATION_STOP = (1 << 18),
- OPT_CALLEE_TRANSFER = (1 << 19),
- OPT_CALLER_TRANSFER = (1 << 20),
- OPT_CALLEE_MONITOR = (1 << 21),
- OPT_CALLER_MONITOR = (1 << 22),
- OPT_GOTO = (1 << 23),
- OPT_OPERMODE = (1 << 24),
- OPT_CALLEE_PARK = (1 << 25),
- OPT_CALLER_PARK = (1 << 26),
+ OPT_ANNOUNCE = (1 << 0),
+ OPT_RESETCDR = (1 << 1),
+ OPT_DTMF_EXIT = (1 << 2),
+ OPT_SENDDTMF = (1 << 3),
+ OPT_FORCE_CALLERID = (1 << 4),
+ OPT_GO_ON = (1 << 5),
+ OPT_CALLEE_HANGUP = (1 << 6),
+ OPT_CALLER_HANGUP = (1 << 7),
+ OPT_PRIORITY_JUMP = (1 << 8),
+ OPT_DURATION_LIMIT = (1 << 9),
+ OPT_MUSICBACK = (1 << 10),
+ OPT_CALLEE_MACRO = (1 << 11),
+ OPT_SCREEN_NOINTRO = (1 << 12),
+ OPT_SCREEN_NOCALLERID = (1 << 13),
+ OPT_IGNORE_CONNECTEDLINE = (1 << 14),
+ OPT_SCREENING = (1 << 15),
+ OPT_PRIVACY = (1 << 16),
+ OPT_RINGBACK = (1 << 17),
+ OPT_DURATION_STOP = (1 << 18),
+ OPT_CALLEE_TRANSFER = (1 << 19),
+ OPT_CALLER_TRANSFER = (1 << 20),
+ OPT_CALLEE_MONITOR = (1 << 21),
+ OPT_CALLER_MONITOR = (1 << 22),
+ OPT_GOTO = (1 << 23),
+ OPT_OPERMODE = (1 << 24),
+ OPT_CALLEE_PARK = (1 << 25),
+ OPT_CALLER_PARK = (1 << 26),
OPT_IGNORE_FORWARDING = (1 << 27),
} dial_exec_option_flags;
#define DIAL_STILLGOING (1 << 30)
#define DIAL_NOFORWARDHTML (1 << 31)
+#define DIAL_NOCONNECTEDLINE (1 << 29) /* 33 on trunk */
enum {
OPT_ARG_ANNOUNCE = 0,
@@ -263,6 +265,7 @@
OPT_ARG_PRIVACY,
OPT_ARG_DURATION_STOP,
OPT_ARG_OPERMODE,
+ OPT_ARG_FORCE_CALLERID,
/* note: this entry _MUST_ be the last one in the enum */
OPT_ARG_ARRAY_SIZE,
} dial_exec_option_args;
@@ -272,12 +275,13 @@
AST_APP_OPTION('C', OPT_RESETCDR),
AST_APP_OPTION('d', OPT_DTMF_EXIT),
AST_APP_OPTION_ARG('D', OPT_SENDDTMF, OPT_ARG_SENDDTMF),
- AST_APP_OPTION('f', OPT_FORCECLID),
+ AST_APP_OPTION_ARG('f', OPT_FORCE_CALLERID, OPT_ARG_FORCE_CALLERID),
AST_APP_OPTION('g', OPT_GO_ON),
AST_APP_OPTION_ARG('G', OPT_GOTO, OPT_ARG_GOTO),
AST_APP_OPTION('h', OPT_CALLEE_HANGUP),
AST_APP_OPTION('H', OPT_CALLER_HANGUP),
AST_APP_OPTION('i', OPT_IGNORE_FORWARDING),
+ AST_APP_OPTION('I', OPT_IGNORE_CONNECTEDLINE),
AST_APP_OPTION('j', OPT_PRIORITY_JUMP),
AST_APP_OPTION('k', OPT_CALLEE_PARK),
AST_APP_OPTION('K', OPT_CALLER_PARK),
@@ -285,8 +289,7 @@
AST_APP_OPTION_ARG('m', OPT_MUSICBACK, OPT_ARG_MUSICBACK),
AST_APP_OPTION_ARG('M', OPT_CALLEE_MACRO, OPT_ARG_CALLEE_MACRO),
AST_APP_OPTION('n', OPT_SCREEN_NOINTRO),
- AST_APP_OPTION('N', OPT_SCREEN_NOCLID),
- AST_APP_OPTION('o', OPT_ORIGINAL_CLID),
+ AST_APP_OPTION('N', OPT_SCREEN_NOCALLERID),
AST_APP_OPTION_ARG('O', OPT_OPERMODE,OPT_ARG_OPERMODE),
AST_APP_OPTION('p', OPT_SCREENING),
AST_APP_OPTION_ARG('P', OPT_PRIVACY, OPT_ARG_PRIVACY),
@@ -356,6 +359,14 @@
} \
} while (0)
+/*! \brief free the buffer if allocated, and set the pointer to the second arg */
+#define S_REPLACE(s, new_val) \
+ do { \
+ if (s) { \
+ ast_free(s); \
+ } \
+ s = (new_val); \
+ } while (0)
static int onedigit_goto(struct ast_channel *chan, const char *context, char exten, int pri)
{
@@ -373,15 +384,6 @@
}
}
return 0;
-}
-
-
-static const char *get_cid_name(char *name, int namelen, struct ast_channel *chan)
-{
- const char *context = S_OR(chan->macrocontext, chan->context);
- const char *exten = S_OR(chan->macroexten, chan->exten);
-
- return ast_get_hint(NULL, 0, name, namelen, chan, context, exten) ? name : "";
}
static void senddialevent(struct ast_channel *src, struct ast_channel *dst)
@@ -408,13 +410,22 @@
int orig = *to;
struct ast_channel *peer = NULL;
/* single is set if only one destination is enabled */
- int single = outgoing && !outgoing->next && !ast_test_flag(outgoing, OPT_MUSICBACK | OPT_RINGBACK);
-
+ int single = outgoing && !outgoing->next;
+ struct ast_party_connected_line connected_caller;
+
if (single) {
/* Turn off hold music, etc */
- ast_deactivate_generator(in);
+ if (!ast_test_flag(outgoing, OPT_MUSICBACK | OPT_RINGBACK))
+ ast_deactivate_generator(in);
+
/* If we are calling a single channel, make them compatible for in-band tone purpose */
ast_channel_make_compatible(outgoing->chan, in);
+
+ if (!ast_test_flag(peerflags, OPT_IGNORE_CONNECTEDLINE) && !ast_test_flag(outgoing, DIAL_NOCONNECTEDLINE)) {
+ ast_party_connected_line_collect_caller(&connected_caller, &outgoing->chan->cid);
+ connected_caller.source = AST_CONNECTED_LINE_UPDATE_SOURCE_ANSWER;
+ ast_connected_line_update(in, &connected_caller);
+ }
}
@@ -462,6 +473,11 @@
if (!peer) {
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "%s answered %s\n", c->name, in->name);
+ if (!single && !ast_test_flag(peerflags, OPT_IGNORE_CONNECTEDLINE) && !ast_test_flag(o, DIAL_NOCONNECTEDLINE)) {
+ ast_party_connected_line_collect_caller(&connected_caller, &c->cid);
+ connected_caller.source = AST_CONNECTED_LINE_UPDATE_SOURCE_ANSWER;
+ ast_connected_line_update(in, &connected_caller);
+ }
peer = c;
ast_copy_flags(peerflags, o,
OPT_CALLEE_TRANSFER | OPT_CALLER_TRANSFER |
@@ -478,6 +494,8 @@
continue;
if (!ast_strlen_zero(c->call_forward)) {
char tmpchan[256];
+ struct ast_party_redirecting *apr = &o->chan->redirecting;
+ struct ast_party_connected_line *apc = &o->chan->connected;
char *stuff;
char *tech;
int cause;
@@ -516,32 +534,20 @@
HANDLE_CAUSE(cause, in);
} else {
ast_rtp_make_compatible(c, in, single);
- if (c->cid.cid_num)
- free(c->cid.cid_num);
- c->cid.cid_num = NULL;
- if (c->cid.cid_name)
- free(c->cid.cid_name);
- c->cid.cid_name = NULL;
-
- if (ast_test_flag(o, OPT_FORCECLID)) {
- c->cid.cid_num = ast_strdup(S_OR(in->macroexten, in->exten));
- ast_string_field_set(c, accountcode, winner->accountcode);
- c->cdrflags = winner->cdrflags;
- } else {
- c->cid.cid_num = ast_strdup(in->cid.cid_num);
- c->cid.cid_name = ast_strdup(in->cid.cid_name);
- ast_string_field_set(c, accountcode, in->accountcode);
- c->cdrflags = in->cdrflags;
- }
-
- if (in->cid.cid_ani) {
- if (c->cid.cid_ani)
- free(c->cid.cid_ani);
- c->cid.cid_ani = ast_strdup(in->cid.cid_ani);
- }
- if (c->cid.cid_rdnis)
- free(c->cid.cid_rdnis);
- c->cid.cid_rdnis = ast_strdup(S_OR(in->macroexten, in->exten));
+
+ ast_string_field_set(c, accountcode, in->accountcode);
+ c->cdrflags = in->cdrflags;
+
+ ast_party_redirecting_copy(&o->chan->redirecting, apr);
+
+ S_REPLACE(c->cid.cid_rdnis, ast_strdup(S_OR(in->macroexten, in->exten)));
+ c->cid.cid_tns = in->cid.cid_tns;
+
+ ast_party_caller_copy(&c->cid, &in->cid);
+ ast_party_connected_line_copy(&c->connected, apc);
+
+ ast_redirecting_update(in, apr);
+
if (ast_call(c, tmpchan, 0)) {
ast_log(LOG_NOTICE, "Failed to dial on local channel for call forward to '%s'\n", tmpchan);
ast_clear_flag(o, DIAL_STILLGOING);
@@ -550,11 +556,6 @@
numnochan++;
} else {
senddialevent(in, c);
- /* After calling, set callerid to extension */
- if (!ast_test_flag(peerflags, OPT_ORIGINAL_CLID)) {
- char cidname[AST_MAX_EXTENSION] = "";
- ast_set_callerid(c, S_OR(in->macroexten, in->exten), get_cid_name(cidname, sizeof(cidname), in), NULL);
- }
}
}
/* Hangup the original channel now, in case we needed it */
@@ -577,6 +578,11 @@
if (!peer) {
if (option_verbose > 2)
ast_verbose( VERBOSE_PREFIX_3 "%s answered %s\n", c->name, in->name);
+ if (!single && !ast_test_flag(peerflags, OPT_IGNORE_CONNECTEDLINE) && !ast_test_flag(o, DIAL_NOCONNECTEDLINE)) {
+ ast_party_connected_line_collect_caller(&connected_caller, &c->cid);
+ connected_caller.source = AST_CONNECTED_LINE_UPDATE_SOURCE_ANSWER;
+ ast_connected_line_update(in, &connected_caller);
+ }
peer = c;
if (peer->cdr) {
peer->cdr->answer = ast_tvnow();
@@ -646,6 +652,21 @@
ast_verbose (VERBOSE_PREFIX_3 "%s requested a source update, passing it to %s\n", c->name, in->name);
ast_indicate(in, AST_CONTROL_SRCUPDATE);
break;
+ case AST_CONTROL_CONNECTED_LINE:
+ if (!single || ast_test_flag(peerflags, OPT_IGNORE_CONNECTEDLINE)) {
+ if (option_verbose > 2)
+ ast_verbose (VERBOSE_PREFIX_3 "Connected line update to %s prevented.\n", in->name);
+ } else {
+ if (option_verbose > 2)
+ ast_verbose (VERBOSE_PREFIX_3 "%s connected line has changed, passing it to %s\n", c->name, in->name);
+ ast_indicate_data(in, AST_CONTROL_CONNECTED_LINE, f->data, f->datalen);
+ }
+ break;
+ case AST_CONTROL_REDIRECTING:
+ if (option_verbose > 2)
+ ast_verbose (VERBOSE_PREFIX_3 "%s redirecting info has changed, passing it to %s\n", c->name, in->name);
+ ast_indicate_data(in, AST_CONTROL_REDIRECTING, f->data, f->datalen);
+ break;
case AST_CONTROL_PROCEEDING:
if (option_verbose > 2)
ast_verbose (VERBOSE_PREFIX_3 "%s is proceeding passing it to %s\n", c->name, in->name);
@@ -757,7 +778,9 @@
((f->subclass == AST_CONTROL_HOLD) ||
(f->subclass == AST_CONTROL_UNHOLD) ||
(f->subclass == AST_CONTROL_VIDUPDATE) ||
- (f->subclass == AST_CONTROL_SRCUPDATE))) {
+ (f->subclass == AST_CONTROL_SRCUPDATE) ||
+ (f->subclass == AST_CONTROL_CONNECTED_LINE) ||
+ (f->subclass == AST_CONTROL_REDIRECTING))) {
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "%s requested special control %d, passing it to %s\n", in->name, f->subclass, outgoing->chan->name);
ast_indicate_data(outgoing->chan, f->subclass, f->data, f->datalen);
@@ -837,7 +860,7 @@
int numnochan = 0;
int cause;
char numsubst[256];
- char cidname[AST_MAX_EXTENSION] = "";
+ char *cid_num = NULL, *cid_name = NULL;
int privdb_val = 0;
unsigned int calldurationlimit = 0;
long timelimit = 0;
@@ -993,6 +1016,8 @@
}
}
+ if (ast_test_flag(&opts, OPT_FORCE_CALLERID) && !ast_strlen_zero(opt_args[OPT_ARG_FORCE_CALLERID]))
+ ast_callerid_parse(opt_args[OPT_ARG_FORCE_CALLERID], &cid_name, &cid_num);
if (ast_test_flag(&opts, OPT_RESETCDR) && chan->cdr)
ast_cdr_reset(chan->cdr, NULL);
if (ast_test_flag(&opts, OPT_PRIVACY) && ast_strlen_zero(opt_args[OPT_ARG_PRIVACY]))
@@ -1032,12 +1057,13 @@
ast_copy_string(privcid,l,sizeof(privcid));
- if( strncmp(privcid,"NOCALLERID",10) != 0 && ast_test_flag(&opts, OPT_SCREEN_NOCLID) ) { /* if callerid is set, and ast_test_flag(&opts, OPT_SCREEN_NOCLID) is set also */
+ if (strncmp(privcid, "NOCALLERID", 10) != 0 && ast_test_flag(&opts, OPT_SCREEN_NOCALLERID)) {
+ /* if callerid is set and OPT_SCREEN_NOCALLERID is set also */
if (option_verbose > 2)
ast_verbose( VERBOSE_PREFIX_3 "CallerID set (%s); N option set; Screening should be off\n", privcid);
privdb_val = AST_PRIVACY_ALLOW;
}
- else if(ast_test_flag(&opts, OPT_SCREEN_NOCLID) && strncmp(privcid,"NOCALLERID",10) == 0 ) {
+ else if (ast_test_flag(&opts, OPT_SCREEN_NOCALLERID) && strncmp(privcid, "NOCALLERID", 10) == 0) {
if (option_verbose > 2)
ast_verbose( VERBOSE_PREFIX_3 "CallerID blank; N option set; Screening should happen; dbval is %d\n", privdb_val);
}
@@ -1123,7 +1149,7 @@
outbound_group = pbx_builtin_getvar_helper(chan, "OUTBOUND_GROUP");
}
- ast_copy_flags(peerflags, &opts, OPT_DTMF_EXIT | OPT_GO_ON | OPT_ORIGINAL_CLID | OPT_CALLER_HANGUP | OPT_IGNORE_FORWARDING);
+ ast_copy_flags(peerflags, &opts, OPT_DTMF_EXIT | OPT_GO_ON | OPT_CALLER_HANGUP | OPT_IGNORE_FORWARDING | OPT_IGNORE_CONNECTEDLINE | OPT_FORCE_CALLERID);
/* Create datastore for channel dial features for caller */
if (!(ds_caller_features = ast_channel_datastore_alloc(&dial_features_info, NULL))) {
@@ -1165,11 +1191,11 @@
goto out;
if (opts.flags) {
ast_copy_flags(tmp, &opts,
- OPT_CALLEE_TRANSFER | OPT_CALLER_TRANSFER |
- OPT_CALLEE_HANGUP | OPT_CALLER_HANGUP |
- OPT_CALLEE_MONITOR | OPT_CALLER_MONITOR |
- OPT_CALLEE_PARK | OPT_CALLER_PARK |
- OPT_RINGBACK | OPT_MUSICBACK | OPT_FORCECLID);
+ OPT_CALLEE_TRANSFER | OPT_CALLER_TRANSFER |
+ OPT_CALLEE_HANGUP | OPT_CALLER_HANGUP |
+ OPT_CALLEE_MONITOR | OPT_CALLER_MONITOR |
+ OPT_CALLEE_PARK | OPT_CALLER_PARK |
+ OPT_RINGBACK | OPT_MUSICBACK);
ast_set2_flag(tmp, args.url, DIAL_NOFORWARDHTML);
}
ast_copy_string(numsubst, number, sizeof(numsubst));
@@ -1259,17 +1285,34 @@
tmp->chan->data = "(Outgoing Line)";
tmp->chan->whentohangup = 0;
- if (tmp->chan->cid.cid_num)
- free(tmp->chan->cid.cid_num);
- tmp->chan->cid.cid_num = ast_strdup(chan->cid.cid_num);
-
- if (tmp->chan->cid.cid_name)
- free(tmp->chan->cid.cid_name);
- tmp->chan->cid.cid_name = ast_strdup(chan->cid.cid_name);
-
- if (tmp->chan->cid.cid_ani)
- free(tmp->chan->cid.cid_ani);
- tmp->chan->cid.cid_ani = ast_strdup(chan->cid.cid_ani);
+ /* If the new channel has no callerid, try to guess what it should be */
+ if (ast_strlen_zero(tmp->chan->cid.cid_num)) {
+ if (!ast_strlen_zero(chan->connected.id.number)) {
+ ast_set_callerid(tmp->chan, chan->connected.id.number, chan->connected.id.name, chan->connected.ani);
+ } else if (!ast_strlen_zero(chan->cid.cid_dnid)) {
+ ast_set_callerid(tmp->chan, chan->cid.cid_dnid, NULL, NULL);
+ } else if (!ast_strlen_zero(S_OR(chan->macroexten, chan->exten))) {
+ ast_set_callerid(tmp->chan, S_OR(chan->macroexten, chan->exten), NULL, NULL);
+ }
+ ast_set_flag(tmp, DIAL_NOCONNECTEDLINE);
+ }
+
+ if (ast_test_flag(peerflags, OPT_FORCE_CALLERID)) {
+ struct ast_party_connected_line connected;
+
+ ast_party_connected_line_set_init(&connected, &tmp->chan->connected);
+ connected.id.number = cid_num;
+ connected.id.name = cid_name;
+ connected.id.number_presentation = AST_PRES_ALLOWED_USER_NUMBER_PASSED_SCREEN;
+ ast_set_connected_line(tmp->chan, &connected);
+ } else {
+ ast_copy_caller_to_connected(&tmp->chan->connected, &chan->cid);
+ }
+
+ S_REPLACE(tmp->chan->cid.cid_rdnis, ast_strdup(chan->cid.cid_rdnis));
+ ast_party_redirecting_copy(&tmp->chan->redirecting, &chan->redirecting);
+
+ tmp->chan->cid.cid_tns = chan->cid.cid_tns;
/* Copy language from incoming to outgoing */
ast_string_field_set(tmp->chan, language, chan->language);
@@ -1277,17 +1320,9 @@
tmp->chan->cdrflags = chan->cdrflags;
if (ast_strlen_zero(tmp->chan->musicclass))
ast_string_field_set(tmp->chan, musicclass, chan->musicclass);
- /* XXX don't we free previous values ? */
- tmp->chan->cid.cid_rdnis = ast_strdup(chan->cid.cid_rdnis);
- /* Pass callingpres setting */
- tmp->chan->cid.cid_pres = chan->cid.cid_pres;
- /* Pass type of number */
- tmp->chan->cid.cid_ton = chan->cid.cid_ton;
- /* Pass type of tns */
- tmp->chan->cid.cid_tns = chan->cid.cid_tns;
- /* Presense of ADSI CPE on outgoing channel follows ours */
+
+ /* Pass ADSI CPE and transfer capability */
tmp->chan->adsicpe = chan->adsicpe;
- /* Pass the transfer capability */
tmp->chan->transfercapability = chan->transfercapability;
/* If we have an outbound group, set this peer channel to it */
@@ -1347,8 +1382,6 @@
senddialevent(chan, tmp->chan);
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Called %s\n", numsubst);
- if (!ast_test_flag(peerflags, OPT_ORIGINAL_CLID))
- ast_set_callerid(tmp->chan, S_OR(chan->macroexten, chan->exten), get_cid_name(cidname, sizeof(cidname), chan), NULL);
}
/* Put them in the list of outgoing thingies... We're ready now.
XXX If we're forcibly removed, these outgoing calls won't get
Modified: team/group/v14_colp/apps/app_queue.c
URL: http://svn.digium.com/view/asterisk/team/group/v14_colp/apps/app_queue.c?view=diff&rev=146248&r1=146247&r2=146248
==============================================================================
--- team/group/v14_colp/apps/app_queue.c (original)
+++ team/group/v14_colp/apps/app_queue.c Fri Oct 3 18:05:30 2008
@@ -98,6 +98,7 @@
#include "asterisk/stringfields.h"
#include "asterisk/astobj2.h"
#include "asterisk/global_datastores.h"
+#include "asterisk/callerid.h"
/* Please read before modifying this file.
* There are three locks which are regularly used
@@ -162,6 +163,8 @@
" go to the next step.\n"
" 'i' -- ignore call forward requests from queue members and do nothing\n"
" when they are requested.\n"
+" 'I' -- Asterisk will ignore any connected line update requests it may receive\n"
+" on this dial attempt.\n"
" 'r' -- ring instead of playing MOH\n"
" 't' -- allow the called user transfer the calling user\n"
" 'T' -- to allow the calling user to transfer the call.\n"
@@ -316,6 +319,7 @@
int oldstatus;
time_t lastcall;
struct member *member;
+ int update_connectedline;
};
@@ -1851,15 +1855,28 @@
tmp->chan->appl = "AppQueue";
tmp->chan->data = "(Outgoing Line)";
tmp->chan->whentohangup = 0;
- if (tmp->chan->cid.cid_num)
- free(tmp->chan->cid.cid_num);
- tmp->chan->cid.cid_num = ast_strdup(qe->chan->cid.cid_num);
- if (tmp->chan->cid.cid_name)
- free(tmp->chan->cid.cid_name);
- tmp->chan->cid.cid_name = ast_strdup(qe->chan->cid.cid_name);
- if (tmp->chan->cid.cid_ani)
- free(tmp->chan->cid.cid_ani);
- tmp->chan->cid.cid_ani = ast_strdup(qe->chan->cid.cid_ani);
+
+ /* If the new channel has no callerid, try to guess what it should be */
+ if (ast_strlen_zero(tmp->chan->cid.cid_num)) {
+ if (!ast_strlen_zero(qe->chan->connected.id.number)) {
+ ast_set_callerid(tmp->chan, qe->chan->connected.id.number, qe->chan->connected.id.name, qe->chan->connected.ani);
+ tmp->chan->cid.cid_pres = qe->chan->connected.id.number_presentation;
+ } else if (!ast_strlen_zero(qe->chan->cid.cid_dnid)) {
+ ast_set_callerid(tmp->chan, qe->chan->cid.cid_dnid, NULL, NULL);
+ } else if (!ast_strlen_zero(S_OR(qe->chan->macroexten, qe->chan->exten))) {
+ ast_set_callerid(tmp->chan, S_OR(qe->chan->macroexten, qe->chan->exten), NULL, NULL);
+ }
+ tmp->update_connectedline = 0;
+ }
+
+ if (tmp->chan->cid.cid_rdnis)
+ ast_free(tmp->chan->cid.cid_rdnis);
+ tmp->chan->cid.cid_rdnis = ast_strdup(qe->chan->cid.cid_rdnis);
+ ast_party_redirecting_copy(&tmp->chan->redirecting, &qe->chan->redirecting);
+
+ tmp->chan->cid.cid_tns = qe->chan->cid.cid_tns;
+
+ ast_copy_caller_to_connected(&tmp->chan->connected, &qe->chan->cid);
/* Inherit specially named variables from parent channel */
ast_channel_inherit_variables(qe->chan, tmp->chan);
@@ -2084,7 +2101,7 @@
* \param[in] caller_disconnect if the 'H' option is used when calling Queue(), this is used to detect if the caller pressed * to disconnect the call
* \param[in] forwardsallowed used to detect if we should allow call forwarding, based on the 'i' option to Queue()
*/
-static struct callattempt *wait_for_answer(struct queue_ent *qe, struct callattempt *outgoing, int *to, char *digit, int prebusies, int caller_disconnect, int forwardsallowed)
+static struct callattempt *wait_for_answer(struct queue_ent *qe, struct callattempt *outgoing, int *to, char *digit, int prebusies, int caller_disconnect, int forwardsallowed, int update_connectedline)
{
char *queue = qe->parent->name;
struct callattempt *o, *start = NULL, *prev = NULL;
@@ -2101,6 +2118,7 @@
char membername[80] = "";
long starttime = 0;
long endtime = 0;
+ struct ast_party_connected_line connected_caller;
starttime = (long) time(NULL);
@@ -2149,6 +2167,11 @@
if (!peer) {
if (option_verbose > 2)
ast_verbose( VERBOSE_PREFIX_3 "%s answered %s\n", o->chan->name, in->name);
+ if (update_connectedline && o->update_connectedline) {
+ ast_party_connected_line_collect_caller(&connected_caller, &o->chan->cid);
+ connected_caller.source = AST_CONNECTED_LINE_UPDATE_SOURCE_ANSWER;
+ ast_connected_line_update(in, &connected_caller);
+ }
peer = o;
}
} else if (o->chan && (o->chan == winner)) {
@@ -2164,6 +2187,8 @@
winner = NULL;
continue;
} else if (!ast_strlen_zero(o->chan->call_forward)) {
+ struct ast_party_redirecting *apr = &o->chan->redirecting;
+ struct ast_party_connected_line *apc = &o->chan->connected;
char tmpchan[256];
char *stuff;
char *tech;
@@ -2189,25 +2214,23 @@
} else {
ast_channel_inherit_variables(in, o->chan);
ast_channel_datastore_inherit(in, o->chan);
- if (o->chan->cid.cid_num)
- free(o->chan->cid.cid_num);
- o->chan->cid.cid_num = ast_strdup(in->cid.cid_num);
-
- if (o->chan->cid.cid_name)
- free(o->chan->cid.cid_name);
- o->chan->cid.cid_name = ast_strdup(in->cid.cid_name);
ast_string_field_set(o->chan, accountcode, in->accountcode);
o->chan->cdrflags = in->cdrflags;
- if (in->cid.cid_ani) {
- if (o->chan->cid.cid_ani)
- free(o->chan->cid.cid_ani);
- o->chan->cid.cid_ani = ast_strdup(in->cid.cid_ani);
- }
+ ast_party_redirecting_copy(&o->chan->redirecting, apr);
+
if (o->chan->cid.cid_rdnis)
- free(o->chan->cid.cid_rdnis);
+ ast_free(o->chan->cid.cid_rdnis);
o->chan->cid.cid_rdnis = ast_strdup(S_OR(in->macroexten, in->exten));
+
+ o->chan->cid.cid_tns = in->cid.cid_tns;
+
+ ast_party_caller_copy(&o->chan->cid, &in->cid);
+ ast_party_connected_line_copy(&o->chan->connected, apc);
+
+ ast_redirecting_update(in, apr);
+
if (ast_call(o->chan, tmpchan, 0)) {
ast_log(LOG_NOTICE, "Failed to dial on local channel for call forward to '%s'\n", tmpchan);
do_hang(o);
@@ -2227,6 +2250,11 @@
if (!peer) {
if (option_verbose > 2)
ast_verbose( VERBOSE_PREFIX_3 "%s answered %s\n", o->chan->name, in->name);
+ if (update_connectedline && o->update_connectedline) {
+ ast_party_connected_line_collect_caller(&connected_caller, &o->chan->cid);
+ connected_caller.source = AST_CONNECTED_LINE_UPDATE_SOURCE_ANSWER;
+ ast_connected_line_update(in, &connected_caller);
+ }
peer = o;
}
break;
@@ -2269,8 +2297,24 @@
case AST_CONTROL_OFFHOOK:
/* Ignore going off hook */
break;
+ case AST_CONTROL_CONNECTED_LINE:
+ if (!update_connectedline) {
+ if (option_verbose > 2)
+ ast_verbose(VERBOSE_PREFIX_3 "Connected line update to %s prevented.\n", in->name);
+ } else {
+ if (option_verbose > 2)
+ ast_verbose(VERBOSE_PREFIX_3 "%s connected line has changed, passing it to %s\n", o->chan->name, in->name);
+ ast_indicate_data(in, AST_CONTROL_CONNECTED_LINE, f->data, f->datalen);
+ }
+ break;
+ case AST_CONTROL_REDIRECTING:
+ if (option_verbose > 2)
+ ast_verbose(VERBOSE_PREFIX_3 "%s redirecting info has changed, passing it to %s\n", o->chan->name, in->name);
+ ast_indicate_data(in, AST_CONTROL_REDIRECTING, f->data, f->datalen);
+ break;
default:
ast_log(LOG_DEBUG, "Dunno what to do with control type %d\n", f->subclass);
+ break;
}
}
ast_frfree(f);
@@ -2710,6 +2754,7 @@
char *p;
char vars[2048];
int forwardsallowed = 1;
+ int update_connectedline = 1;
int callcompletedinsl;
struct ao2_iterator memi;
struct ast_datastore *datastore;
@@ -2763,6 +2808,9 @@
case 'i':
forwardsallowed = 0;
break;
+ case 'I':
+ update_connectedline = 0;
+ break;
}
/* Hold the lock while we setup the outgoing calls */
@@ -2856,6 +2904,7 @@
tmp->member = cur;
tmp->oldstatus = cur->status;
tmp->lastcall = cur->lastcall;
+ tmp->update_connectedline = 1;
ast_copy_string(tmp->interface, cur->interface, sizeof(tmp->interface));
/* Special case: If we ring everyone, go ahead and ring them, otherwise
just calculate their metric for the appropriate strategy */
@@ -2882,7 +2931,7 @@
ring_one(qe, outgoing, &numbusies);
if (use_weight)
AST_LIST_UNLOCK(&queues);
- lpeer = wait_for_answer(qe, outgoing, &to, &digit, numbusies, ast_test_flag(&(bridge_config.features_caller), AST_FEATURE_DISCONNECT), forwardsallowed);
+ lpeer = wait_for_answer(qe, outgoing, &to, &digit, numbusies, ast_test_flag(&(bridge_config.features_caller), AST_FEATURE_DISCONNECT), forwardsallowed, update_connectedline);
/* The ast_channel_datastore_remove() function could fail here if the
* datastore was moved to another channel during a masquerade. If this is
* the case, don't free the datastore here because later, when the channel
Modified: team/group/v14_colp/channels/chan_agent.c
URL: http://svn.digium.com/view/asterisk/team/group/v14_colp/channels/chan_agent.c?view=diff&rev=146248&r1=146247&r2=146248
==============================================================================
--- team/group/v14_colp/channels/chan_agent.c (original)
+++ team/group/v14_colp/channels/chan_agent.c Fri Oct 3 18:05:30 2008
@@ -721,8 +721,7 @@
/* Call on this agent */
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "outgoing agentcall, to agent '%s', on '%s'\n", p->agent, p->chan->name);
- ast_set_callerid(p->chan,
- ast->cid.cid_num, ast->cid.cid_name, NULL);
+ ast_set_connected_line(p->chan, &ast->connected);
ast_channel_inherit_variables(ast, p->chan);
res = ast_call(p->chan, p->loginchan, 0);
CLEANUP(ast,p);
Modified: team/group/v14_colp/channels/chan_dahdi.c
URL: http://svn.digium.com/view/asterisk/team/group/v14_colp/channels/chan_dahdi.c?view=diff&rev=146248&r1=146247&r2=146248
==============================================================================
--- team/group/v14_colp/channels/chan_dahdi.c (original)
+++ team/group/v14_colp/channels/chan_dahdi.c Fri Oct 3 18:05:30 2008
@@ -1877,7 +1877,7 @@
}
p->callwaitcas = 0;
if ((p->cidspill = ast_malloc(MAX_CALLERID_SIZE))) {
- p->cidlen = ast_callerid_generate(p->cidspill, ast->cid.cid_name, ast->cid.cid_num, AST_LAW(p));
+ p->cidlen = ast_callerid_generate(p->cidspill, ast->connected.id.name, ast->connected.id.number, AST_LAW(p));
p->cidpos = 0;
send_callerid(p);
}
@@ -1918,12 +1918,12 @@
} else {
/* Call waiting call */
p->callwaitrings = 0;
- if (ast->cid.cid_num)
- ast_copy_string(p->callwait_num, ast->cid.cid_num, sizeof(p->callwait_num));
+ if (ast->connected.id.number)
+ ast_copy_string(p->callwait_num, ast->connected.id.number, sizeof(p->callwait_num));
else
p->callwait_num[0] = '\0';
- if (ast->cid.cid_name)
- ast_copy_string(p->callwait_name, ast->cid.cid_name, sizeof(p->callwait_name));
+ if (ast->connected.id.name)
+ ast_copy_string(p->callwait_name, ast->connected.id.name, sizeof(p->callwait_name));
else
p->callwait_name[0] = '\0';
/* Call waiting tone instead */
@@ -1936,8 +1936,8 @@
ast_log(LOG_WARNING, "Unable to generate call-wait ring-back on channel %s\n", ast->name);
}
- n = ast->cid.cid_name;
- l = ast->cid.cid_num;
+ n = ast->connected.id.name;
+ l = ast->connected.id.number;
if (l)
ast_copy_string(p->lastcid_num, l, sizeof(p->lastcid_num));
else
@@ -2003,14 +2003,14 @@
switch (mysig) {
case SIG_FEATD:
- l = ast->cid.cid_num;
+ l = ast->connected.id.number;
if (l)
snprintf(p->dop.dialstr, sizeof(p->dop.dialstr), "T*%s*%s*", l, c);
else
snprintf(p->dop.dialstr, sizeof(p->dop.dialstr), "T**%s*", c);
break;
case SIG_FEATDMF:
- l = ast->cid.cid_num;
+ l = ast->connected.id.number;
if (l)
snprintf(p->dop.dialstr, sizeof(p->dop.dialstr), "M*00%s#*%s#", l, c);
else
@@ -2117,9 +2117,9 @@
n = NULL;
if (!p->hidecallerid) {
- l = ast->cid.cid_num;
+ l = ast->connected.id.number;
if (!p->hidecalleridname) {
- n = ast->cid.cid_name;
+ n = ast->connected.id.name;
}
}
@@ -2219,7 +2219,7 @@
}
}
pri_sr_set_caller(sr, l ? (l + ldp_strip) : NULL, n, prilocaldialplan,
- p->use_callingpres ? ast->cid.cid_pres : (l ? PRES_ALLOWED_USER_NUMBER_PASSED_SCREEN : PRES_NUMBER_NOT_AVAILABLE));
+ p->use_callingpres ? ast->connected.id.number_presentation : (l ? PRES_ALLOWED_USER_NUMBER_PASSED_SCREEN : PRES_NUMBER_NOT_AVAILABLE));
if ((rr_str = pbx_builtin_getvar_helper(ast, "PRIREDIRECTREASON"))) {
if (!strcasecmp(rr_str, "UNKNOWN"))
redirect_reason = 0;
Modified: team/group/v14_colp/channels/chan_features.c
URL: http://svn.digium.com/view/asterisk/team/group/v14_colp/channels/chan_features.c?view=diff&rev=146248&r1=146247&r2=146248
==============================================================================
--- team/group/v14_colp/channels/chan_features.c (original)
+++ team/group/v14_colp/channels/chan_features.c Fri Oct 3 18:05:30 2008
@@ -345,12 +345,11 @@
ast_mutex_lock(&p->lock);
x = indexof(p, ast, 0);
if (!x && p->subchan) {
- p->subchan->cid.cid_num = ast_strdup(p->owner->cid.cid_num);
- p->subchan->cid.cid_name = ast_strdup(p->owner->cid.cid_name);
p->subchan->cid.cid_rdnis = ast_strdup(p->owner->cid.cid_rdnis);
- p->subchan->cid.cid_ani = ast_strdup(p->owner->cid.cid_ani);
-
- p->subchan->cid.cid_pres = p->owner->cid.cid_pres;
+ ast_party_redirecting_copy(&p->subchan->redirecting, &p->owner->redirecting);
+
+ ast_party_caller_copy(&p->subchan->cid, &p->owner->cid);
+
ast_string_field_set(p->subchan, language, p->owner->language);
ast_string_field_set(p->subchan, accountcode, p->owner->accountcode);
p->subchan->cdrflags = p->owner->cdrflags;
Modified: team/group/v14_colp/channels/chan_h323.c
URL: http://svn.digium.com/view/asterisk/team/group/v14_colp/channels/chan_h323.c?view=diff&rev=146248&r1=146247&r2=146248
==============================================================================
--- team/group/v14_colp/channels/chan_h323.c (original)
+++ team/group/v14_colp/channels/chan_h323.c Fri Oct 3 18:05:30 2008
@@ -614,18 +614,18 @@
/* make sure null terminated */
called_addr[sizeof(called_addr) - 1] = '\0';
- if (c->cid.cid_num)
- ast_copy_string(pvt->options.cid_num, c->cid.cid_num, sizeof(pvt->options.cid_num));
-
- if (c->cid.cid_name)
- ast_copy_string(pvt->options.cid_name, c->cid.cid_name, sizeof(pvt->options.cid_name));
+ if (c->connected.id.number)
+ ast_copy_string(pvt->options.cid_num, c->connected.id.number, sizeof(pvt->options.cid_num));
+
+ if (c->connected.id.name)
+ ast_copy_string(pvt->options.cid_name, c->connected.id.name, sizeof(pvt->options.cid_name));
if (c->cid.cid_rdnis) {
ast_copy_string(pvt->options.cid_rdnis, c->cid.cid_rdnis, sizeof(pvt->options.cid_rdnis));
}
- pvt->options.presentation = c->cid.cid_pres;
- pvt->options.type_of_number = c->cid.cid_ton;
+ pvt->options.presentation = c->connected.id.number_presentation;
+ pvt->options.type_of_number = c->connected.id.number_type;
if ((addr = pbx_builtin_getvar_helper(c, "PRIREDIRECTREASON"))) {
if (!strcasecmp(addr, "UNKNOWN"))
Modified: team/group/v14_colp/channels/chan_iax2.c
URL: http://svn.digium.com/view/asterisk/team/group/v14_colp/channels/chan_iax2.c?view=diff&rev=146248&r1=146247&r2=146248
==============================================================================
--- team/group/v14_colp/channels/chan_iax2.c (original)
+++ team/group/v14_colp/channels/chan_iax2.c Fri Oct 3 18:05:30 2008
@@ -239,7 +239,7 @@
struct iax2_context *next;
};
-enum {
+enum iax2_flags {
IAX_HASCALLERID = (1 << 0), /*!< CallerID has been specified */
IAX_DELME = (1 << 1), /*!< Needs to be deleted */
IAX_TEMPONLY = (1 << 2), /*!< Temporary (realtime) */
@@ -269,7 +269,10 @@
response, so that we've achieved a three-way handshake with
them before sending voice or anything else*/
IAX_ALLOWFWDOWNLOAD = (1 << 26), /*!< Allow the FWDOWNL command? */
-} iax2_flags;
+ /* IAX_NOKEYROTATE = (1 << 27), / * !< Disable key rotation with encryption */
+ IAX_SENDCONNECTEDLINE = (1 << 28), /*!< Allow sending of connected line updates */
+ IAX_RECVCONNECTEDLINE = (1 << 29), /*!< Allow receiving of connected line updates */
+};
static int global_rtautoclear = 120;
@@ -1659,7 +1662,7 @@
iaxs[x]->pingid = iax2_sched_add(sched, ping_time * 1000, send_ping, (void *)(long)x);
iaxs[x]->lagid = iax2_sched_add(sched, lagrq_time * 1000, send_lagrq, (void *)(long)x);
iaxs[x]->amaflags = amaflags;
- ast_copy_flags(iaxs[x], (&globalflags), IAX_NOTRANSFER | IAX_TRANSFERMEDIA | IAX_USEJITTERBUF | IAX_FORCEJITTERBUF);
+ ast_copy_flags(iaxs[x], (&globalflags), IAX_NOTRANSFER | IAX_TRANSFERMEDIA | IAX_USEJITTERBUF | IAX_FORCEJITTERBUF | IAX_SENDCONNECTEDLINE | IAX_RECVCONNECTEDLINE);
ast_string_field_set(iaxs[x], accountcode, accountcode);
ast_string_field_set(iaxs[x], mohinterpret, mohinterpret);
@@ -3046,6 +3049,8 @@
char outkey[80];
char timezone[80];
char prefs[32];
+ char cid_num[80];
+ char cid_name[80];
char context[AST_MAX_CONTEXT];
char peercontext[AST_MAX_CONTEXT];
char mohinterpret[MAX_MUSICCLASS];
@@ -3095,7 +3100,7 @@
if (peer->maxms && ((peer->lastms > peer->maxms) || (peer->lastms < 0)))
goto return_unref;
- ast_copy_flags(cai, peer, IAX_SENDANI | IAX_TRUNK | IAX_NOTRANSFER | IAX_TRANSFERMEDIA | IAX_USEJITTERBUF | IAX_FORCEJITTERBUF);
+ ast_copy_flags(cai, peer, IAX_SENDANI | IAX_TRUNK | IAX_NOTRANSFER | IAX_TRANSFERMEDIA | IAX_USEJITTERBUF | IAX_FORCEJITTERBUF | IAX_SENDCONNECTEDLINE | IAX_RECVCONNECTEDLINE);
cai->maxtime = peer->maxms;
cai->capability = peer->capability;
cai->encmethods = peer->encmethods;
@@ -3113,6 +3118,8 @@
ast_copy_string(cai->username, peer->username, sizeof(cai->username));
ast_copy_string(cai->timezone, peer->zonetag, sizeof(cai->timezone));
ast_copy_string(cai->outkey, peer->outkey, sizeof(cai->outkey));
+ ast_copy_string(cai->cid_num, peer->cid_num, sizeof(cai->cid_num));
+ ast_copy_string(cai->cid_name, peer->cid_name, sizeof(cai->cid_name));
ast_copy_string(cai->mohinterpret, peer->mohinterpret, sizeof(cai->mohinterpret));
ast_copy_string(cai->mohsuggest, peer->mohsuggest, sizeof(cai->mohsuggest));
if (ast_strlen_zero(peer->dbsecret)) {
@@ -3317,8 +3324,8 @@
if (pds.port)
sin.sin_port = htons(atoi(pds.port));
- l = c->cid.cid_num;
- n = c->cid.cid_name;
+ l = c->connected.id.number;
+ n = c->connected.id.name;
/* Now build request */
memset(&ied, 0, sizeof(ied));
@@ -3335,21 +3342,21 @@
if (l) {
iax_ie_append_str(&ied, IAX_IE_CALLING_NUMBER, l);
- iax_ie_append_byte(&ied, IAX_IE_CALLINGPRES, c->cid.cid_pres);
+ iax_ie_append_byte(&ied, IAX_IE_CALLINGPRES, c->connected.id.number_presentation);
} else {
if (n)
- iax_ie_append_byte(&ied, IAX_IE_CALLINGPRES, c->cid.cid_pres);
+ iax_ie_append_byte(&ied, IAX_IE_CALLINGPRES, c->connected.id.number_presentation);
else
iax_ie_append_byte(&ied, IAX_IE_CALLINGPRES, AST_PRES_NUMBER_NOT_AVAILABLE);
}
- iax_ie_append_byte(&ied, IAX_IE_CALLINGTON, c->cid.cid_ton);
+ iax_ie_append_byte(&ied, IAX_IE_CALLINGTON, c->connected.id.number_type);
iax_ie_append_short(&ied, IAX_IE_CALLINGTNS, c->cid.cid_tns);
if (n)
iax_ie_append_str(&ied, IAX_IE_CALLING_NAME, n);
- if (ast_test_flag(iaxs[callno], IAX_SENDANI) && c->cid.cid_ani)
- iax_ie_append_str(&ied, IAX_IE_CALLING_ANI, c->cid.cid_ani);
+ if (ast_test_flag(iaxs[callno], IAX_SENDANI) && c->connected.ani)
[... 8010 lines stripped ...]
More information about the asterisk-commits
mailing list