dect
/
asterisk
Archived
13
0
Fork 0

chan_dect: fix calling party name/number presentation

Use information from the connected channel instead of the outgoing channel.

Signed-off-by: Patrick McHardy <kaber@trash.net>
This commit is contained in:
Patrick McHardy 2010-10-11 19:23:36 +02:00
parent 0d578047b2
commit be6c2b706e
1 changed files with 21 additions and 43 deletions

View File

@ -106,11 +106,6 @@ struct dect_pvt {
struct dect_mm_endpoint *mme;
struct dect_call *call;
struct ast_channel *chan;
AST_DECLARE_STRING_FIELDS( AST_STRING_FIELD(cid_num);
AST_STRING_FIELD(cid_name);
AST_STRING_FIELD(display);
);
int timer_id;
};
@ -605,8 +600,6 @@ static int dect_init_call(struct dect_pvt *pvt, enum ast_channel_state state,
struct dect_pt *pt = pvt->pt;
struct ast_channel *chan;
ast_string_field_init(pvt, 512);
chan = ast_channel_alloc(1, state, pt->cid_num, pt->cid_name, "",
exten, pt->context, 0, 0,
"DECT/%s-%08lx", pt->name, (long)pvt);
@ -686,26 +679,30 @@ static void dect_call_auth_cfm(struct dect_mm_pvt *mmp, bool success,
if (!success)
return;
/* Store CallerID for ALERTING state */
ast_string_field_set(pvt, cid_num, chan->caller.id.number.str);
ast_string_field_set(pvt, cid_name, chan->caller.id.name.str);
basic_service.class = DECT_CALL_CLASS_NORMAL;
basic_service.service = DECT_SERVICE_BASIC_SPEECH_DEFAULT;
presentation = ast_party_id_presentation(&chan->caller.id);
calling_party_number.type = DECT_NUMBER_TYPE_UNKNOWN;
calling_party_number.npi = DECT_NPI_UNKNOWN;
calling_party_number.presentation = dect_ast_presentation_to_dect(presentation);
calling_party_number.screening = dect_ast_screening_to_dect(presentation);
calling_party_number.len = strlen(chan->caller.id.number.str);
memcpy(calling_party_number.address, chan->caller.id.number.str, calling_party_number.len);
presentation = ast_party_id_presentation(&chan->connected.id);
if (chan->connected.id.number.valid) {
calling_party_number.type = DECT_NUMBER_TYPE_UNKNOWN;
calling_party_number.npi = DECT_NPI_UNKNOWN;
calling_party_number.presentation = dect_ast_presentation_to_dect(presentation);
calling_party_number.screening = dect_ast_screening_to_dect(presentation);
calling_party_number.len = strlen(chan->connected.id.number.str);
memcpy(calling_party_number.address, chan->connected.id.number.str,
calling_party_number.len);
} else
calling_party_number.len = 0;
calling_party_name.presentation = dect_ast_presentation_to_dect(presentation);
calling_party_name.screening = dect_ast_screening_to_dect(presentation);
calling_party_name.alphabet = DECT_ALPHABET_STANDARD;
calling_party_name.len = strlen(chan->caller.id.name.str);
memcpy(calling_party_name.name, chan->caller.id.name.str, calling_party_name.len);
if (chan->connected.id.name.valid) {
calling_party_name.presentation = dect_ast_presentation_to_dect(presentation);
calling_party_name.screening = dect_ast_screening_to_dect(presentation);
calling_party_name.alphabet = DECT_ALPHABET_STANDARD;
calling_party_name.len = strlen(chan->connected.id.name.str);
memcpy(calling_party_name.name, chan->connected.id.name.str,
calling_party_name.len);
} else
calling_party_name.len = 0;
memset(&param, 0, sizeof(param));
param.basic_service = &basic_service;
@ -1089,10 +1086,8 @@ static void dect_mncc_alert_ind(struct dect_handle *dh, struct dect_call *call,
struct dect_mncc_alert_param *param)
{
struct dect_pvt *pvt = dect_call_priv(call);
struct dect_ie_display display;
struct dect_ie_signal signal;
struct dect_mncc_info_param info = { .signal = &signal, .display = &display};
unsigned int name_len, num_len;
struct dect_mncc_info_param info = { .signal = &signal, };
char pattern[16];
const char *c;
@ -1106,23 +1101,6 @@ static void dect_mncc_alert_ind(struct dect_handle *dh, struct dect_call *call,
signal.code = DECT_SIGNAL_ALERTING_BASE | (atoi(pattern) & 0xf);
}
dect_display_init(&display);
name_len = strlen(pvt->cid_name);
num_len = strlen(pvt->cid_num);
if (name_len > 0 || num_len > 0) {
dect_display_append_char(&display, DECT_C_CLEAR_DISPLAY);
if (name_len > 0) {
dect_display_append(&display, pvt->cid_name, name_len);
dect_display_append(&display, " <", 2);
}
if (num_len > 0)
dect_display_append(&display, pvt->cid_num, num_len);
if (name_len > 0)
dect_display_append(&display, ">", 1);
}
dect_mncc_info_req(dh, call, &info);
ast_queue_control(pvt->chan, AST_CONTROL_RINGING);