Ejemplo n.º 1
0
static int
__bro_val_cmp(BroVal *val1, BroVal *val2)
{
  int i;
  D_ENTER;

  if (! val1 || ! val2)
    D_RETURN_(FALSE);

  if (! __bro_sobject_cmp((BroSObject*) val1->val_type,
			  (BroSObject*) val2->val_type))
    D_RETURN_(FALSE);

  switch (val1->val_type->internal_tag)
    {
    case BRO_INTTYPE_INT:
    case BRO_INTTYPE_UNSIGNED:
      if (val1->val_int64 != val2->val_int64)
	D_RETURN_(FALSE);
      break;
    case BRO_INTTYPE_IPADDR:
      for (i = 3; i >= 0; --i)
        if (val1->val_addr.addr[i] != val2->val_addr.addr[i])
          D_RETURN_(FALSE);
      break;

    case BRO_INTTYPE_DOUBLE:
      if (val1->val_double != val2->val_double)
	D_RETURN_(FALSE);
      break;

    case BRO_INTTYPE_STRING:
      if (! __bro_ht_str_cmp(val1->val_str.str_val, val2->val_str.str_val))
	D_RETURN_(FALSE);
      break;

    case BRO_INTTYPE_SUBNET:
      for (i = 3; i >= 0; --i)
        if (val1->val_subnet.sn_net.addr[i] != val2->val_subnet.sn_net.addr[i])
          D_RETURN_(FALSE);

      if (val1->val_subnet.sn_width != val2->val_subnet.sn_width)
        D_RETURN_(FALSE);
      break;

    case BRO_INTTYPE_OTHER:
      D(("WARNING -- __bro_val_cmp() invoked on derived type.\n"));
      break;

    default:
      D(("Unknown internal type tag: %i\n", val1->val_type->internal_tag));
      break;
    }

  D_RETURN_(TRUE);
}
Ejemplo n.º 2
0
int
__bro_id_cmp(BroID *id1, BroID *id2)
{
  D_ENTER;

  if (! id1 || ! id2)
    D_RETURN_(FALSE);

  D_RETURN_(__bro_ht_str_cmp(id1->name.str_val, id2->name.str_val));
}