Пример #1
0
static int
__bro_list_val_cmp(BroListVal *lv1, BroListVal *lv2)
{
  BroList *l1, *l2;

  D_ENTER;

  if (! lv1 || ! lv2)
    D_RETURN_(FALSE);

  if (lv1->len != lv2->len ||
      lv1->type_tag != lv2->type_tag)
    D_RETURN_(FALSE);

  for (l1 = lv1->list, l2 = lv2->list; l1 && l2;
       l1 = __bro_list_next(l1), l2 = __bro_list_next(l2))
    {
      if (! __bro_sobject_cmp((BroSObject*) __bro_list_data(l1),
			      (BroSObject*) __bro_list_data(l2)))
	D_RETURN_(FALSE);
    }

  if (l1 || l2)
    {
      D(("WARNING -- list length inconsistency.\n"));
      D_RETURN_(FALSE);
    }

  D_RETURN_(TRUE);
}
Пример #2
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);
}
Пример #3
0
static int
__bro_table_val_cmp(BroTableVal *tv1, BroTableVal *tv2)
{
  D_ENTER;

  if (! tv1 || ! tv2)
    D_RETURN_(FALSE);

  if (! __bro_sobject_cmp((BroSObject*) tv1->table_type,
			  (BroSObject*) tv2->table_type))
    D_RETURN_(FALSE);

  if (! __bro_table_cmp(tv1->table, tv2->table))
    D_RETURN_(FALSE);

  D_RETURN_(TRUE);
}
Пример #4
0
int
__bro_vector_cmp(BroVector *vec1, BroVector *vec2)
	{
	int i;

	if ( ! vec1 || ! vec2 )
		D_RETURN_(FALSE);

	if ( vec1->length != vec2->length )
		D_RETURN_(FALSE);

	for ( i = 0; i < vec1->length; ++i )
		if ( ! __bro_sobject_cmp((BroSObject*) vec1->vector[i],
		                         (BroSObject*) vec2->vector[i]) )
			D_RETURN_(FALSE);

	D_RETURN_(TRUE);
	}