Navigation


Changeset 280:3019f6220122 in freeDiameter


Ignore:
Timestamp:
Apr 27, 2010, 10:44:43 AM (14 years ago)
Author:
Sebastien Decugis <sdecugis@nict.go.jp>
Branch:
default
Phase:
public
Message:

Provide more useful debug information for non-ABNF-compliant messages

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libfreeDiameter/messages.c

    r258 r280  
    18731873        int count, first, last, min;
    18741874        struct parserules_data * pr_data = data;
     1875        char * avp_name = "<unresolved name>";
    18751876       
    18761877        TRACE_ENTRY("%p %p", data, rule);
     
    18791880        parserules_stat_avps( rule->rule_avp, pr_data->sentinel, &count, &first, &last);
    18801881       
    1881         if (TRACE_BOOL(ANNOYING))
     1882        if (TRACE_BOOL(INFO))
    18821883        {
    18831884                struct dict_avp_data avpdata;
    18841885                int ret;
    18851886                ret = fd_dict_getval(rule->rule_avp, &avpdata);
     1887                if (ret == 0)
     1888                        avp_name = avpdata.avp_name;
    18861889               
    18871890                TRACE_DEBUG(ANNOYING, "Checking rule: p:%d(%d) m/M:%2d/%2d. Counted %d (first: %d, last:%d) of AVP '%s'",
     
    18931896                                        first,
    18941897                                        last,
    1895                                         (ret == 0) ? avpdata.avp_name : "???"
     1898                                        avp_name
    18961899                                );
    18971900        }
     
    19071910        }
    19081911        if (count < min) {
    1909                 TRACE_DEBUG(INFO, "Conflicting rule: the number of occurences (%d) is < the rule min (%d).", count, min);
     1912                TRACE_DEBUG(INFO, "Conflicting rule: the number of occurences (%d) is < the rule min (%d) for '%s'.", count, min, avp_name);
    19101913                if (pr_data->pei) {
    19111914                        pr_data->pei->pei_errcode = "DIAMETER_MISSING_AVP";
     
    19171920        /* Check the "max" value */
    19181921        if ((rule->rule_max != -1) && (count > rule->rule_max)) {
    1919                 TRACE_DEBUG(INFO, "Conflicting rule: the number of occurences (%d) is > the rule max (%d).", count, rule->rule_max);
     1922                TRACE_DEBUG(INFO, "Conflicting rule: the number of occurences (%d) is > the rule max (%d) for '%s'.", count, rule->rule_max, avp_name);
    19201923                if (pr_data->pei) {
    19211924                        if (rule->rule_max == 0)
     
    19381941                        /* Since "0*1<fixed>" is a valid rule specifier, we only reject cases where the AVP appears *after* its fixed position */
    19391942                        if (first > rule->rule_order) {
    1940                                 TRACE_DEBUG(INFO, "Conflicting rule: the FIXED_HEAD AVP appears first in (%d) position, the rule requires (%d).", first, rule->rule_order);
     1943                                TRACE_DEBUG(INFO, "Conflicting rule: the FIXED_HEAD AVP appears first in (%d) position, the rule requires (%d) for '%s'.", first, rule->rule_order, avp_name);
    19411944                                if (pr_data->pei) {
    19421945                                        pr_data->pei->pei_errcode = "DIAMETER_MISSING_AVP";
     
    19511954                        /* Since "0*1<fixed>" is a valid rule specifier, we only reject cases where the AVP appears *before* its fixed position */
    19521955                        if (last > rule->rule_order) {  /* We have a ">" here because we count in reverse order (i.e. from the end) */
    1953                                 TRACE_DEBUG(INFO, "Conflicting rule: the FIXED_TAIL AVP appears last in (%d) position, the rule requires (%d).", last, rule->rule_order);
     1956                                TRACE_DEBUG(INFO, "Conflicting rule: the FIXED_TAIL AVP appears last in (%d) position, the rule requires (%d) for '%s'.", last, rule->rule_order, avp_name);
    19541957                                if (pr_data->pei) {
    19551958                                        pr_data->pei->pei_errcode = "DIAMETER_MISSING_AVP";
Note: See TracChangeset for help on using the changeset viewer.