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:
parent
0d578047b2
commit
be6c2b706e
|
@ -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(¶m, 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);
|
||||
|
|
Reference in New Issue