Various tweaks/refactor of new IPAddr class usages or IPv6 related code.

- non-binpac DNS analyzer now also generates dns_a6_reply event
- ExpectedConn class refactored to use IPAddr's
- BinaryExpr::AddrFold simplified
- IP_Hdr src/dst address accessor methods changed to construct IPAddr
  objects on the fly from ip4/ip6 members.

Addresses #770.
This commit is contained in:
Jon Siwek 2012-02-16 11:21:12 -06:00
parent 808f3915e5
commit 93fa116738
5 changed files with 76 additions and 60 deletions

View file

@ -835,22 +835,30 @@ Val* BinaryExpr::StringFold(Val* v1, Val* v2) const
Val* BinaryExpr::AddrFold(Val* v1, Val* v2) const
{
uint32 a1[4];
uint32 a2[4];
v1->AsAddr()->CopyIPv6(a1);
v2->AsAddr()->CopyIPv6(a2);
IPAddr* a1 = v1->AsAddr();
IPAddr* a2 = v2->AsAddr();
int result = 0;
switch ( tag ) {
#undef DO_FOLD
#define DO_FOLD(sense) { result = memcmp(a1, a2, 16) sense 0; break; }
case EXPR_LT: DO_FOLD(<)
case EXPR_LE: DO_FOLD(<=)
case EXPR_EQ: DO_FOLD(==)
case EXPR_NE: DO_FOLD(!=)
case EXPR_GE: DO_FOLD(>=)
case EXPR_GT: DO_FOLD(>)
case EXPR_LT:
result = *a1 < *a2;
break;
case EXPR_LE:
result = *a1 < *a2 || *a1 == *a2;
break;
case EXPR_EQ:
result = *a1 == *a2;
break;
case EXPR_NE:
result = *a1 != *a2;
break;
case EXPR_GE:
result = ! ( *a1 < *a2 );
break;
case EXPR_GT:
result = ( ! ( *a1 < *a2 ) ) && ( *a1 != *a2 );
break;
default:
BadTag("BinaryExpr::AddrFold", expr_name(tag));