… | |
… | |
473 | $SNMP_PROFILE->set (ASN_APPLICATION, SNMP_UNSIGNED32, BER_TYPE_INT); |
473 | $SNMP_PROFILE->set (ASN_APPLICATION, SNMP_UNSIGNED32, BER_TYPE_INT); |
474 | $SNMP_PROFILE->set (ASN_APPLICATION, SNMP_TIMETICKS , BER_TYPE_INT); |
474 | $SNMP_PROFILE->set (ASN_APPLICATION, SNMP_TIMETICKS , BER_TYPE_INT); |
475 | |
475 | |
476 | # decodes REAL values according to ECMA-63 |
476 | # decodes REAL values according to ECMA-63 |
477 | # this is pretty strict, except it doesn't catch -0. |
477 | # this is pretty strict, except it doesn't catch -0. |
|
|
478 | # I don't have access to ISO 6093 (or BS 6727, or ANSI X.3-42)), so this is all guesswork. |
478 | sub _decode_real_decimal { |
479 | sub _decode_real_decimal { |
479 | my ($format, $val) = @_; |
480 | my ($format, $val) = @_; |
480 | |
481 | |
481 | $val =~ y/,/./; |
482 | $val =~ y/,/./; # probably not in ISO-6093 |
482 | |
483 | |
483 | if ($format == 1) { |
484 | if ($format == 1) { |
484 | $val =~ /^ \ * [+-]? [0-9]+ \z/x |
485 | $val =~ /^ \ * [+-]? [0-9]+ \z/x |
485 | or Carp::croak "BER_TYPE_REAL NR1 value not in NR1 format ($val) (X.690 8.5.8, ECMA-63)"; |
486 | or Carp::croak "BER_TYPE_REAL NR1 value not in NR1 format ($val) (X.690 8.5.8)"; |
486 | } elsif ($format == 2) { |
487 | } elsif ($format == 2) { |
487 | $val =~ /^ \ * [+-]? (?: [0-9]+\.[0-9]* | [0-9]*\.[0-9]+ ) \z/x |
488 | $val =~ /^ \ * [+-]? (?: [0-9]+\.[0-9]* | [0-9]*\.[0-9]+ ) \z/x |
488 | or Carp::croak "BER_TYPE_REAL NR2 value not in NR2 format ($val) (X.690 8.5.8, ECMA-63)"; |
489 | or Carp::croak "BER_TYPE_REAL NR2 value not in NR2 format ($val) (X.690 8.5.8)"; |
489 | } elsif ($format == 3) { |
490 | } elsif ($format == 3) { |
490 | $val =~ /^ \ * [+-] (?: [0-9]+\.[0-9]* | [0-9]*\.[0-9]+ ) E [+-][0-9]+ \z/x |
491 | $val =~ /^ \ * [+-] (?: [0-9]+\.[0-9]* | [0-9]*\.[0-9]+ ) [eE] [+-]? [0-9]+ \z/x |
491 | or Carp::croak "BER_TYPE_REAL NR3 value not in NR3 format ($val) (X.690 8.5.8, ECMA-63)"; |
492 | or Carp::croak "BER_TYPE_REAL NR3 value not in NR3 format ($val) (X.690 8.5.8)"; |
492 | } else { |
493 | } else { |
493 | Carp::croak "BER_TYPE_REAL illegal decimal numerical representation format $format"; |
494 | Carp::croak "BER_TYPE_REAL illegal decimal numerical representation format $format"; |
494 | } |
495 | } |
495 | |
496 | |
496 | $val |
497 | $val |