[asterisk-bugs] [JIRA] (ASTERISK-24346) Using "r" option on Dial() command prevents Remote-party-ID from reaching caller

Dennis Buteyn (JIRA) noreply at issues.asterisk.org
Sun Sep 21 03:53:29 CDT 2014


Dennis Buteyn created ASTERISK-24346:
----------------------------------------

             Summary: Using "r" option on Dial() command prevents Remote-party-ID from reaching caller
                 Key: ASTERISK-24346
                 URL: https://issues.asterisk.org/jira/browse/ASTERISK-24346
             Project: Asterisk
          Issue Type: Bug
      Security Level: None
          Components: Applications/app_dial
    Affects Versions: 11.11.0
         Environment: Reproduced on generic CentOS 6.5 and Elastix 2.4.
            Reporter: Dennis Buteyn
            Severity: Minor


Background:

Customer was trying to use RPID in a two-PBX configuration with intra-company SIP trunk to provide caller with called party name. Upon testing customer found that RPID information was received by callee but caller display showed dialed number.

Configuration used to reproduce issue:

Extension A <-SIP-> PBX-A <-SIP-> PBX-B <-SIP-> Extension B

Options sendrpid=yes, trustrpid=yes defined where applicable.

Wireshark trace showed that due to Dial() command to extension B with "r" option, PBX-B sent early RINGING notification without RPID header to PBX-A. Second RINGING notification was sent to PBX-A after PBX-B received RINGING notification from Extension B. PBX-A only propagated first RINGING notification to Extension A, second RINGING notification was ignored by PBX-A.

Disabling "r" option on both systems allowed conforming SIP flow and RPID information was propagated properly to caller.

Code in question that appears to be responsible in apps/app_dial.c:

static struct ast_channel *wait_for_answer(struct ast_channel *in,
        struct dial_head *out_chans, int *to, struct ast_flags64 *peerflags,
        char *opt_args[],
        struct privacy_args *pa,
        const struct cause_args *num_in, int *result, char *dtmf_progress,
        const int ignore_cc,
        struct ast_party_id *forced_clid, struct ast_party_id *stored_clid)
{
  ...

  looping over frames
  ...

                        switch (f->frametype) {
                        case AST_FRAME_CONTROL:
                                switch (f->subclass.integer) {
  ...
                                case AST_CONTROL_RINGING:
                                        ++num_ringing;
                                        if (ignore_cc || cc_frame_received || num_ringing == numlines) {
                                                ast_verb(3, "%s is ringing\n", ast_channel_name(c));
                                                /* Setup early media if appropriate */
                                                if (single && !caller_entertained
                                                        && CAN_EARLY_BRIDGE(peerflags, in, c)) {
                                                        ast_channel_early_bridge(in, c);
                                                }
                                                if (!(pa->sentringing) && !ast_test_flag64(outgoing, OPT_MUSICBACK) && ast_strlen_zero(opt_args[OPT_ARG_RINGBACK])) {
                                                        ast_indicate(in, AST_CONTROL_RINGING);
                                                        pa->sentringing++;
                                                }
                                        }
                                        break;




--
This message was sent by Atlassian JIRA
(v6.2#6252)



More information about the asterisk-bugs mailing list