aboutsummaryrefslogtreecommitdiffstats
path: root/channels
diff options
context:
space:
mode:
Diffstat (limited to 'channels')
-rwxr-xr-xchannels/chan_iax2.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c
index eb7aa8f3e..827f587ec 100755
--- a/channels/chan_iax2.c
+++ b/channels/chan_iax2.c
@@ -2330,8 +2330,13 @@ static int iax2_call(struct ast_channel *c, char *dest, int timeout)
/* Request auto answer */
iax_ie_append(&ied, IAX_IE_AUTOANSWER);
}
- if (l)
+ if (l) {
iax_ie_append_str(&ied, IAX_IE_CALLING_NUMBER, l);
+ iax_ie_append_byte(&ied, IAX_IE_CALLINGPRES, c->cid.cid_pres);
+ } 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_short(&ied, IAX_IE_CALLINGTNS, c->cid.cid_tns);
if (n)
iax_ie_append_str(&ied, IAX_IE_CALLING_NAME, n);
if (iaxs[callno]->sendani && c->cid.cid_ani) {
@@ -2732,6 +2737,9 @@ static struct ast_channel *ast_iax2_new(int callno, int state, int capability)
strncpy(tmp->language, i->language, sizeof(tmp->language)-1);
if (!ast_strlen_zero(i->dnid))
tmp->cid.cid_dnid = strdup(i->dnid);
+ tmp->cid.cid_pres = i->calling_pres;
+ tmp->cid.cid_ton = i->calling_ton;
+ tmp->cid.cid_tns = i->calling_tns;
if (!ast_strlen_zero(i->accountcode))
strncpy(tmp->accountcode, i->accountcode, sizeof(tmp->accountcode)-1);
if (i->amaflags)
@@ -3720,7 +3728,12 @@ static int check_access(int callno, struct sockaddr_in *sin, struct iax_ies *ies
if (user->hascallerid) {
strncpy(iaxs[callno]->cid_num, user->cid_num, sizeof(iaxs[callno]->cid_num)-1);
strncpy(iaxs[callno]->cid_name, user->cid_name, sizeof(iaxs[callno]->cid_name)-1);
+ iaxs[callno]->calling_pres = 0;
+ } else {
+ iaxs[callno]->calling_pres = AST_PRES_NUMBER_NOT_AVAILABLE;
}
+ iaxs[callno]->calling_tns = 0;
+ iaxs[callno]->calling_ton = 0;
strncpy(iaxs[callno]->ani, user->cid_num, sizeof(iaxs[callno]->ani)-1);
}
if (!ast_strlen_zero(user->accountcode))