Author: file Date: Mon Mar 23 10:34:41 2015 New Revision: 433304 URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=433304 Log: Fix sorting of SRV records. The code assumed it was pre-sorted based on priority but it is not.
Modified: team/group/dns_srv/main/dns_srv.c Modified: team/group/dns_srv/main/dns_srv.c URL: http://svnview.digium.com/svn/asterisk/team/group/dns_srv/main/dns_srv.c?view=diff&rev=433304&r1=433303&r2=433304 ============================================================================== --- team/group/dns_srv/main/dns_srv.c (original) +++ team/group/dns_srv/main/dns_srv.c Mon Mar 23 10:34:41 2015 @@ -131,13 +131,22 @@ while (AST_LIST_FIRST(&result->records)) { unsigned int random_weight; unsigned int weight_sum; - unsigned short cur_priority = ((struct ast_dns_srv_record *)AST_LIST_FIRST(&result->records))->priority; + unsigned short cur_priority = 0; struct dns_records temp_list = AST_LIST_HEAD_NOLOCK_INIT_VALUE; weight_sum = 0; + /* Find the lowest current priority to work on */ + AST_LIST_TRAVERSE(&result->records, current, list) { + if (!cur_priority || ((struct ast_dns_srv_record *)current)->priority < cur_priority) { + cur_priority = ((struct ast_dns_srv_record *)current)->priority; + } + } + + /* Find all records which match this priority */ AST_LIST_TRAVERSE_SAFE_BEGIN(&result->records, current, list) { - if (((struct ast_dns_srv_record *)current)->priority != cur_priority) - break; + if (((struct ast_dns_srv_record *)current)->priority != cur_priority) { + continue; + } AST_LIST_MOVE_CURRENT(&temp_list, list); } -- _____________________________________________________________________ -- Bandwidth and Colocation Provided by http://www.api-digital.com -- svn-commits mailing list To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/svn-commits