diff options
Diffstat (limited to 'channels')
-rw-r--r-- | channels/chan_misdn.c | 42 |
1 files changed, 19 insertions, 23 deletions
diff --git a/channels/chan_misdn.c b/channels/chan_misdn.c index db1eb557a..44e096d3d 100644 --- a/channels/chan_misdn.c +++ b/channels/chan_misdn.c @@ -6052,9 +6052,11 @@ static void misdn_update_connected_line(struct ast_channel *ast, struct misdn_bc } switch (bc->outgoing_colp) { case 1:/* restricted */ - case 2:/* blocked */ bc->redirecting.to.presentation = 1;/* restricted */ break; + case 2:/* blocked */ + /* Don't tell the remote party that the call was transferred. */ + return; default: break; } @@ -6079,14 +6081,6 @@ static void misdn_update_connected_line(struct ast_channel *ast, struct misdn_bc bc->fac_out.u.EctInform.RedirectionPresent = 1;/* Must be present when status is active */ misdn_PresentedNumberUnscreened_fill(&bc->fac_out.u.EctInform.Redirection, &bc->redirecting.to); - switch (bc->outgoing_colp) { - case 2:/* blocked */ - /* Block the number going out */ - bc->fac_out.u.EctInform.Redirection.Type = 1;/* presentationRestricted */ - break; - default: - break; - } /* Send message */ print_facility(&bc->fac_out, bc); @@ -6179,9 +6173,11 @@ static void misdn_update_redirecting(struct ast_channel *ast, struct misdn_bchan misdn_copy_redirecting_from_ast(bc, ast); switch (bc->outgoing_colp) { case 1:/* restricted */ - case 2:/* blocked */ bc->redirecting.to.presentation = 1;/* restricted */ break; + case 2:/* blocked */ + /* Don't tell the remote party that the call was redirected. */ + return; default: break; } @@ -6211,14 +6207,6 @@ static void misdn_update_redirecting(struct ast_channel *ast, struct misdn_bchan bc->fac_out.u.DivertingLegInformation1.SubscriptionOption = 2;/* notificationWithDivertedToNr */ bc->fac_out.u.DivertingLegInformation1.DivertedToPresent = 1; misdn_PresentedNumberUnscreened_fill(&bc->fac_out.u.DivertingLegInformation1.DivertedTo, &bc->redirecting.to); - switch (bc->outgoing_colp) { - case 2:/* blocked */ - /* Block the number going out */ - bc->fac_out.u.DivertingLegInformation1.DivertedTo.Type = 1;/* presentationRestricted */ - break; - default: - break; - } print_facility(&bc->fac_out, bc); misdn_lib_send_event(bc, EVENT_FACILITY); } @@ -6405,13 +6393,13 @@ static int misdn_call(struct ast_channel *ast, char *dest, int timeout) } #if defined(AST_MISDN_ENHANCEMENTS) if (newbc->redirecting.from.number[0] && misdn_lib_is_ptp(port)) { + if (newbc->redirecting.count < 1) { + newbc->redirecting.count = 1; + } + /* Create DivertingLegInformation2 facility */ newbc->fac_out.Function = Fac_DivertingLegInformation2; newbc->fac_out.u.DivertingLegInformation2.InvokeID = ++misdn_invoke_id; - newbc->fac_out.u.DivertingLegInformation2.DiversionCounter = - newbc->redirecting.count; - newbc->fac_out.u.DivertingLegInformation2.DiversionReason = - misdn_to_diversion_reason(newbc->redirecting.reason); newbc->fac_out.u.DivertingLegInformation2.DivertingPresent = 1; misdn_PresentedNumberUnscreened_fill( &newbc->fac_out.u.DivertingLegInformation2.Diverting, @@ -6420,12 +6408,20 @@ static int misdn_call(struct ast_channel *ast, char *dest, int timeout) case 2:/* blocked */ /* Block the number going out */ newbc->fac_out.u.DivertingLegInformation2.Diverting.Type = 1;/* presentationRestricted */ + + /* Don't tell about any previous diversions or why for that matter. */ + newbc->fac_out.u.DivertingLegInformation2.DiversionCounter = 1; + newbc->fac_out.u.DivertingLegInformation2.DiversionReason = 0;/* unknown */ break; default: + newbc->fac_out.u.DivertingLegInformation2.DiversionCounter = + newbc->redirecting.count; + newbc->fac_out.u.DivertingLegInformation2.DiversionReason = + misdn_to_diversion_reason(newbc->redirecting.reason); break; } newbc->fac_out.u.DivertingLegInformation2.OriginalCalledPresent = 0; - if (1 < newbc->redirecting.count) { + if (1 < newbc->fac_out.u.DivertingLegInformation2.DiversionCounter) { newbc->fac_out.u.DivertingLegInformation2.OriginalCalledPresent = 1; newbc->fac_out.u.DivertingLegInformation2.OriginalCalled.Type = 2;/* numberNotAvailableDueToInterworking */ } |