ACK fails if hostname is A/AAAA resolvable

AA
Anthony Alba
Fri, Aug 30, 2019 3:13 AM

Using PJSIP 2.9

Using all IPv4 but the hostname is AAAA resolvale.

Processing 200 OK and sending ACK fails because the stack does not try
the IPv4 address after IPv6 address is detected as
PJSIP_EUNSUPTRANSPOR

REGISTER/INVITE/BYE: all will try IPv6(fail) then IPv4 address

For INVITE processing 200 OK to send ACK it does not fall back to IPv4.
I narrowed the cause to sip_util.c:

1119        if (sent == -PJ_EPENDING) {
1120            /* This is the initial process.
1121              * When the process started, this function will be called by
1122              * stateless_send_resolver_callback() with sent
argument set to
1123              * -PJ_EPENDING.
1124              /
1125            cont = PJ_TRUE;
1126        } else {
1127            /
There are two conditions here:
1128              * (1) Message is sent (i.e. sent > 0),
1129              * (2) Failure (i.e. sent <= 0)
1130              */
1131            cont = (sent > 0) ? PJ_FALSE :
1132
(tdata->dest_info.cur_addr<tdata->dest_info.addr.count-1);
1133            if (stateless_data->app_cb) {
1134                (stateless_data->app_cb)(stateless_data, sent, &cont);
1135            } else {
1136                /
Doesn't have application callback.
1137                  * Terminate the process.
1138                  */
1139                cont = PJ_FALSE;
1140            }
1141        }

Sending ACK, cont is set to PJ_FALSE.

Cheers
Anthony

Using PJSIP 2.9 Using all IPv4 but the hostname is AAAA resolvale. Processing 200 OK and sending ACK fails because the stack does not try the IPv4 address after IPv6 address is detected as PJSIP_EUNSUPTRANSPOR REGISTER/INVITE/BYE: all will try IPv6(fail) then IPv4 address For INVITE processing 200 OK to send ACK it does not fall back to IPv4. I narrowed the cause to sip_util.c: 1119 if (sent == -PJ_EPENDING) { 1120 /* This is the initial process. 1121 * When the process started, this function will be called by 1122 * stateless_send_resolver_callback() with sent argument set to 1123 * -PJ_EPENDING. 1124 */ 1125 cont = PJ_TRUE; 1126 } else { 1127 /* There are two conditions here: 1128 * (1) Message is sent (i.e. sent > 0), 1129 * (2) Failure (i.e. sent <= 0) 1130 */ 1131 cont = (sent > 0) ? PJ_FALSE : 1132 (tdata->dest_info.cur_addr<tdata->dest_info.addr.count-1); 1133 if (stateless_data->app_cb) { 1134 (*stateless_data->app_cb)(stateless_data, sent, &cont); 1135 } else { 1136 /* Doesn't have application callback. 1137 * Terminate the process. 1138 */ 1139 cont = PJ_FALSE; 1140 } 1141 } Sending ACK, cont is set to PJ_FALSE. Cheers Anthony
NI
Nanang Izzuddin
Thu, Sep 5, 2019 5:04 AM

Hi Anthony,

Should have just been fixed in SVN trunk, please check
https://trac.pjsip.org/repos/ticket/2227 for more info.

Thank you for the report and the analysis.

BR,
nanang

On Fri, Aug 30, 2019 at 10:14 AM Anthony Alba ascanio.alba7@gmail.com
wrote:

Using PJSIP 2.9

Using all IPv4 but the hostname is AAAA resolvale.

Processing 200 OK and sending ACK fails because the stack does not try
the IPv4 address after IPv6 address is detected as
PJSIP_EUNSUPTRANSPOR

REGISTER/INVITE/BYE: all will try IPv6(fail) then IPv4 address

For INVITE processing 200 OK to send ACK it does not fall back to IPv4.
I narrowed the cause to sip_util.c:

1119        if (sent == -PJ_EPENDING) {
1120            /* This is the initial process.
1121              * When the process started, this function will be
called by
1122              * stateless_send_resolver_callback() with sent
argument set to
1123              * -PJ_EPENDING.
1124              /
1125            cont = PJ_TRUE;
1126        } else {
1127            /
There are two conditions here:
1128              * (1) Message is sent (i.e. sent > 0),
1129              * (2) Failure (i.e. sent <= 0)
1130              */
1131            cont = (sent > 0) ? PJ_FALSE :
1132
(tdata->dest_info.cur_addr<tdata->dest_info.addr.count-1);
1133            if (stateless_data->app_cb) {
1134                (stateless_data->app_cb)(stateless_data, sent,
&cont);
1135            } else {
1136                /
Doesn't have application callback.
1137                  * Terminate the process.
1138                  */
1139                cont = PJ_FALSE;
1140            }
1141        }

Sending ACK, cont is set to PJ_FALSE.

Cheers
Anthony


Visit our blog: http://blog.pjsip.org

pjsip mailing list
pjsip@lists.pjsip.org
http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org

Hi Anthony, Should have just been fixed in SVN trunk, please check https://trac.pjsip.org/repos/ticket/2227 for more info. Thank you for the report and the analysis. BR, nanang On Fri, Aug 30, 2019 at 10:14 AM Anthony Alba <ascanio.alba7@gmail.com> wrote: > Using PJSIP 2.9 > > Using all IPv4 but the hostname is AAAA resolvale. > > Processing 200 OK and sending ACK fails because the stack does not try > the IPv4 address after IPv6 address is detected as > PJSIP_EUNSUPTRANSPOR > > REGISTER/INVITE/BYE: all will try IPv6(fail) then IPv4 address > > For INVITE processing 200 OK to send ACK it does not fall back to IPv4. > I narrowed the cause to sip_util.c: > > 1119 if (sent == -PJ_EPENDING) { > 1120 /* This is the initial process. > 1121 * When the process started, this function will be > called by > 1122 * stateless_send_resolver_callback() with sent > argument set to > 1123 * -PJ_EPENDING. > 1124 */ > 1125 cont = PJ_TRUE; > 1126 } else { > 1127 /* There are two conditions here: > 1128 * (1) Message is sent (i.e. sent > 0), > 1129 * (2) Failure (i.e. sent <= 0) > 1130 */ > 1131 cont = (sent > 0) ? PJ_FALSE : > 1132 > (tdata->dest_info.cur_addr<tdata->dest_info.addr.count-1); > 1133 if (stateless_data->app_cb) { > 1134 (*stateless_data->app_cb)(stateless_data, sent, > &cont); > 1135 } else { > 1136 /* Doesn't have application callback. > 1137 * Terminate the process. > 1138 */ > 1139 cont = PJ_FALSE; > 1140 } > 1141 } > > Sending ACK, cont is set to PJ_FALSE. > > Cheers > Anthony > > _______________________________________________ > Visit our blog: http://blog.pjsip.org > > pjsip mailing list > pjsip@lists.pjsip.org > http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org >