]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
chan_dahdi: Fix Caller ID presentation for FXO ports.
authorNaveen Albert <asterisk@phreaknet.org>
Thu, 25 May 2023 23:49:35 +0000 (23:49 +0000)
committerGeorge Joseph <gtjoseph@users.noreply.github.com>
Mon, 5 Jun 2023 18:33:04 +0000 (12:33 -0600)
Currently, the presentation for incoming channels is
always available, because it is never actually set,
meaning the channel presentation can be nonsensical.
If the presentation from the incoming Caller ID spill
is private or unavailable, we now update the channel
presentation to reflect this.

Resolves: #120
ASTERISK-30333
ASTERISK-21741

channels/chan_dahdi.c

index fb860270de2a45c9a5e0258339149fd28e039718..d76e1e602b01f1de933dafa388e44486e2593eff 100644 (file)
@@ -1459,6 +1459,18 @@ static int my_get_callerid(void *pvt, char *namebuf, char *numbuf, enum analog_e
                        if (num)
                                ast_copy_string(numbuf, num, ANALOG_MAX_CID);
 
+                       if (flags & (CID_PRIVATE_NUMBER | CID_UNKNOWN_NUMBER)) {
+                               /* If we got a presentation, we must set it on the channel */
+                               struct ast_channel *chan = analog_p->ss_astchan;
+                               struct ast_party_caller caller;
+
+                               ast_party_caller_set_init(&caller, ast_channel_caller(chan));
+                               caller.id.name.presentation = caller.id.number.presentation = (flags & CID_PRIVATE_NUMBER) ?
+                                       AST_PRES_RESTRICTED | AST_PRES_USER_NUMBER_UNSCREENED : AST_PRES_UNAVAILABLE | AST_PRES_USER_NUMBER_UNSCREENED;
+                               ast_party_caller_set(ast_channel_caller(chan), &caller, NULL);
+                               ast_party_caller_free(&caller);
+                       }
+
                        ast_debug(1, "CallerID number: %s, name: %s, flags=%d\n", num, name, flags);
                        return 0;
                }