Mercurial > hg > freeDiameter
diff libfreeDiameter/dictionary.c @ 602:0b5d21c87855
Added new AVP search criteria in the dictionary: AVP_BY_NAME_ALL_VENDORS
author | Sebastien Decugis <sdecugis@nict.go.jp> |
---|---|
date | Thu, 25 Nov 2010 16:27:54 +0900 |
parents | 66f58cecf3cd |
children |
line wrap: on
line diff
--- a/libfreeDiameter/dictionary.c Fri Nov 19 17:36:52 2010 +0900 +++ b/libfreeDiameter/dictionary.c Thu Nov 25 16:27:54 2010 +0900 @@ -591,11 +591,11 @@ int __cmp; \ struct fd_list * __li; \ ret = 0; \ - for (__li = (sentinel); __li->next != (sentinel); __li = __li->next) { \ - __cmp = strcmp(__str, _O(__li->next->o)->data. datafield ); \ + for (__li = (sentinel)->next; __li != (sentinel); __li = __li->next) { \ + __cmp = strcmp(__str, _O(__li->o)->data. datafield ); \ if (__cmp == 0) { \ if (result) \ - *result = _O(__li->next->o); \ + *result = _O(__li->o); \ goto end; \ } \ if ((isindex) && (__cmp < 0)) \ @@ -973,6 +973,20 @@ } break; + case AVP_BY_NAME_ALL_VENDORS: + { + struct fd_list * li; + + /* First, search for vendor 0 */ + SEARCH_string( what, &dict->dict_vendors.list[2], avp.avp_name, 1); + + /* If not found, loop for all vendors, until found */ + for (li = dict->dict_vendors.list[0].next; li != &dict->dict_vendors.list[0]; li = li->next) { + SEARCH_string( what, &_O(li->o)->list[2], avp.avp_name, 1); + } + } + break; + default: /* Invalid criteria */ CHECK_PARAMS( criteria = 0 );