Changeset 5471


Ignore:
Timestamp:
Oct 27, 2016 5:47:06 AM (3 years ago)
Author:
ming
Message:

Fixed #1974: Various fixes for DNS IPv6

Location:
pjproject/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjlib-util/src/pjlib-util/resolver.c

    r5464 r5471  
    857857    struct res_key key; 
    858858    struct cached_res *cache; 
    859     pj_dns_async_query *q; 
     859    pj_dns_async_query *q, *p_q = NULL; 
    860860    pj_uint32_t hval; 
    861861    pj_status_t status = PJ_SUCCESS; 
     
    870870    /* Check type */ 
    871871    PJ_ASSERT_RETURN(type > 0 && type < 0xFFFF, PJ_EINVAL); 
    872  
    873     if (p_query) 
    874         *p_query = NULL; 
    875872 
    876873    /* Build resource key for looking up hash tables */ 
     
    992989                   0, q->hbufkey, q); 
    993990 
     991    p_q = q; 
     992 
     993on_return: 
    994994    if (p_query) 
    995         *p_query = q; 
    996  
    997 on_return: 
     995        *p_query = p_q; 
     996 
    998997    pj_mutex_unlock(resolver->mutex); 
    999998    return status; 
  • pjproject/trunk/pjlib-util/src/pjlib-util/srv_resolver.c

    r5349 r5471  
    188188        } 
    189189        if (srv->q_aaaa) { 
    190             pj_dns_resolver_cancel_query(srv->q_aaaa, PJ_FALSE); 
     190            /* Check if it is a dummy query. */ 
     191            if (srv->q_aaaa != (pj_dns_async_query*)0x1) { 
     192                pj_dns_resolver_cancel_query(srv->q_aaaa, PJ_FALSE); 
     193                has_pending = PJ_TRUE; 
     194            } 
    191195            srv->q_aaaa = NULL; 
    192             has_pending = PJ_TRUE; 
    193196        } 
    194197    } 
     
    486489        srv->common_aaaa.type = PJ_DNS_TYPE_AAAA; 
    487490        srv->parent = query_job; 
     491        srv->q_a = NULL; 
     492        srv->q_aaaa = NULL; 
    488493 
    489494        status = PJ_SUCCESS; 
     
    492497        if ((query_job->option & PJ_DNS_SRV_RESOLVE_AAAA_ONLY) == 0) 
    493498        { 
     499            if ((query_job->option & PJ_DNS_SRV_RESOLVE_AAAA) != 0) { 
     500                /* If there will be DNS AAAA query too, let's setup 
     501                 * a dummy one here, otherwise app callback may be called 
     502                 * immediately (before DNS AAAA query is sent) when 
     503                 * DNS A record is available in the cache. 
     504                 */ 
     505                srv->q_aaaa = (pj_dns_async_query*)0x1; 
     506            } 
    494507            status = pj_dns_resolver_start_query(query_job->resolver, 
    495508                                                 &srv->target_name, 
  • pjproject/trunk/pjsip/src/pjsip/sip_resolve.c

    r5425 r5471  
    454454 
    455455        /* Resolve DNS AAAA record if address family is not fixed to IPv4 */ 
    456         if (af != pj_AF_INET()) { 
     456        if (af != pj_AF_INET() && status == PJ_SUCCESS) { 
    457457            status = pj_dns_resolver_start_query(resolver->res,  
    458458                                                 &query->naptr[0].name, 
     
    532532            ++srv->count; 
    533533        } 
    534  
    535     } else { 
    536  
     534    } 
     535     
     536    if (status != PJ_SUCCESS) { 
    537537        char errmsg[PJ_ERR_MSG_SIZE]; 
    538538 
     
    595595            ++srv->count; 
    596596        } 
    597  
    598     } else { 
    599  
     597    } 
     598     
     599    if (status != PJ_SUCCESS) { 
    600600        char errmsg[PJ_ERR_MSG_SIZE]; 
    601601 
Note: See TracChangeset for help on using the changeset viewer.