Beispiel #1
0
//---------- Begin of function Weather::snow_scale ----------//
//
short Weather::snow_scale()
{
	short t = temp_c();
	if( t > 0)
		return 0;

	if( t <= -15)
	{
		if( t <= -30)
			return 8;
		if( t <= -25)
			return 7;
		if( t <= -20)
			return 6;
		return 5;
	}
	else
	{
		if(t <= -10)
			return 4;
		if( t <= -5)
			return 3;
		if( t <= -2)
			return 2;
		return 1;
	}
}
UBool PathFinder::LookFor(const ULong & flags, const ULong & f, const EERIE_3D & pos, const Float & radius, SLong * rstep, UWord ** rlist)
{
    Void * ptr;
    ULong step_c, to, last, next;
    SLong temp_c(0), path_c(0);
    UWord * temp_d = NULL, *path_d = NULL;

    Clean();
    //Check if params are valid
    if (!rlist || !rstep)
    {
        Clean();
        *rstep = 0;
        return UFALSE;
    }

    if (radius <= MIN_RADIUS)
    {
        *rlist = (UWord *)malloc(sizeof(UWord));
        ** rlist = (UWord)f;
        *rstep = 1;
        Clean();
        return UTRUE;
    }

    to = GetNearestNode(pos);

    last = f;

    step_c = Random() % 5 + 5;

    for (ULong i(0); i < step_c; i++)
    {
        EERIE_3D pos;

        pos.x = map_d[to].pos.x + radius * frnd();
        pos.y = map_d[to].pos.y + radius * frnd();
        pos.z = map_d[to].pos.z + radius * frnd();
        next = GetNearestNode(pos);

        if (Move(flags, last, next, &temp_c, &temp_d) && temp_c)
        {
            if ((path_c + temp_c - 1) <= 0)
            {
                if (temp_d)
                {
                    free(temp_d);
                    temp_d = NULL;
                }

                if (path_d)
                {
                    free(path_d);
                    path_d = NULL;
                }

                Clean();
                *rstep = 0;
                return UFALSE;
            }

            if (!(ptr = realloc(path_d, sizeof(UWord) * (path_c + temp_c - 1))))
            {
                if (temp_d)
                {
                    free(temp_d);
                    temp_d = NULL;
                }

                Clean();
                *rstep = 0;
                return UFALSE;
            }

            //Add temp path to wander around path
            path_d = (UWord *)ptr;
            memcpy(&path_d[path_c], temp_d, sizeof(UWord) *(temp_c - 1));
            path_c += temp_c - 1;

            //Free temp path
            free(temp_d), temp_d = NULL, temp_c = 0;
        }
        else i--;

        last = next;
    }

    //Close wander around path (return to start position)
    if (!path_c)
    {
        Clean(); // Cyril
        *rstep = 0;
        return UFALSE;
    }

    *rlist = path_d;
    *rstep = path_c;
    Clean(); // Cyril
    return UTRUE;
}
static void fillRow(Row& r, X509* cert) {
  std::vector<char> temp(256, 0x0);
  auto temp_size = static_cast<int>(temp.size());

  // set certificate subject information
  auto subject_name = X509_get_subject_name(cert);
  auto ret = X509_NAME_get_text_by_NID(
      subject_name, NID_commonName, temp.data(), temp_size);
  if (ret != -1) {
    r["common_name"] = std::string(temp.data());
  }

  ret = X509_NAME_get_text_by_NID(
      subject_name, NID_organizationName, temp.data(), temp_size);
  if (ret != -1) {
    r["organization"] = std::string(temp.data());
  }

  ret = X509_NAME_get_text_by_NID(
      subject_name, NID_organizationalUnitName, temp.data(), temp_size);
  if (ret != -1) {
    r["organization_unit"] = std::string(temp.data());
  }

  auto serial = X509_get_serialNumber(cert);
  auto bn = ASN1_INTEGER_to_BN(serial, nullptr);
  auto dec_str = BN_bn2hex(bn);
  if (dec_str != nullptr) {
    r["serial_number"] = std::string(dec_str);
    OPENSSL_free(dec_str);
  }

  BN_free(bn);

  // set certificate issuer information
  auto issuer_name = X509_get_issuer_name(cert);
  ret = X509_NAME_get_text_by_NID(
      issuer_name, NID_commonName, temp.data(), temp_size);
  if (ret != -1) {
    r["issuer_common_name"] = std::string(temp.data());
  }

  ret = X509_NAME_get_text_by_NID(
      issuer_name, NID_organizationName, temp.data(), temp_size);
  if (ret != -1) {
    r["issuer_organization"] = std::string(temp.data());
  }

  ret = X509_NAME_get_text_by_NID(
      issuer_name, NID_organizationalUnitName, temp.data(), temp_size);
  if (ret != -1) {
    r["issuer_organization_unit"] = std::string(temp.data());
  }

  // set period of validity
  auto valid_from = X509_get_notBefore(cert);
  auto valid_to = X509_get_notAfter(cert);
  auto b = BIO_new(BIO_s_mem());
  if (b != nullptr) {
    ASN1_TIME_print(b, valid_from);
    ret = BIO_gets(b, temp.data(), temp_size);
    if (ret != 0) {
      r["valid_from"] = std::string(temp.data());
    }

    ASN1_TIME_print(b, valid_to);
    ret = BIO_gets(b, temp.data(), temp_size);
    if (ret != 0) {
      r["valid_to"] = std::string(temp.data());
    }
    BIO_free(b);
  }

  // set SHA256 and SHA1 fingerprint
  std::vector<unsigned char> temp_c(256, 0x0);
  unsigned int len = 0;
  auto digest = const_cast<EVP_MD*>(EVP_sha256());
  ret = X509_digest(cert, digest, temp_c.data(), &len);

  std::stringstream ss;
  if (ret != 0) {
    for (size_t i = 0; i < len; i++) {
      ss << std::hex << std::setfill('0') << std::setw(2)
         << static_cast<unsigned>(temp_c[i]);
    }

    r["sha256_fingerprint"] = ss.str();
  }

  temp_c.clear();
  digest = const_cast<EVP_MD*>(EVP_sha1());
  ret = X509_digest(cert, digest, temp_c.data(), &len);

  if (ret != 0) {
    ss.str("");
    for (size_t i = 0; i < len; i++) {
      ss << std::hex << std::setfill('0') << std::setw(2)
         << static_cast<unsigned>(temp_c[i]);
    }

    r["sha1_fingerprint"] = ss.str();
  }
}
UBool PathFinder::WanderAround(const ULong & flags, const ULong & f, const Float & rad, SLong * rstep, UWord ** rlist)
{

    Void * ptr;
    ULong step_c, last, next;
    SLong temp_c(0), path_c(0);
    UWord * temp_d = NULL, *path_d = NULL;

    Clean();
    //Check if params are valid
    if (!rlist || !rstep) return UFALSE;

    if (!map_d[f].nblinked)
    {
        *rstep = 0;
        return UFALSE;
    }

    if (rad <= MIN_RADIUS)
    {
        *rlist = (UWord *)malloc(sizeof(UWord));
        ** rlist = (UWord)f;
        *rstep = 1;
        return UTRUE;
    }

    last = f;

    step_c = Random() % 5 + 5;

    for (ULong i(0); i < step_c; i++)
    {
        ULong nb = ULong(rad * rnd() * DIV50);
        long _current = f;

        while (nb)
        {
            if ((map_d[_current].nblinked)
               )
            {

                long notfinished = 4;

                while (notfinished--)
                {
                    ULong r = ULong(rnd() * (Float)map_d[_current].nblinked);

                    if (r >= (ULong)map_d[_current].nblinked)
                        r = ULong(map_d[_current].nblinked - 1);

                    if ((!(map_d[map_d[_current].linked[r]].flags & ANCHOR_FLAG_BLOCKED))
                            &&	(map_d[map_d[_current].linked[r]].nblinked)
                            &&	(map_d[map_d[_current].linked[r]].height <= height)
                            &&	(map_d[map_d[_current].linked[r]].radius >= radius))
                    {
                        _current = map_d[_current].linked[r];
                        notfinished = 0;
                    }
                }
            }

            nb--;
        }

        if (_current < 0) continue;

        next = nb = _current;

        if (Move(flags, last, next, &temp_c, &temp_d) && temp_c)
        {
            if (!(ptr = realloc(path_d, sizeof(UWord) * (path_c + temp_c))))
            {
                free(temp_d);
                free(path_d);
                Clean();
                *rstep = 0;
                return UFALSE;
            }

            //Add temp path to wander around path
            path_d = (UWord *)ptr;
            memcpy(&path_d[path_c], temp_d, sizeof(UWord) * temp_c);
            path_c += temp_c;

            //Free temp path
            free(temp_d), temp_d = NULL, temp_c = 0;
        }
        else i--;

        last = next;
    }

    //Close wander around path (return to start position)
    if (!path_c || !Move(flags, last, f, &temp_c, &temp_d))
    {
        *rstep = 0;
        return UFALSE;
    }

    if (!(ptr = realloc(path_d, sizeof(UWord) * (path_c + temp_c))))
    {
        free(temp_d);
        free(path_d);
        Clean();
        *rstep = 0;
        return UFALSE;
    }

    //Add temp path to wander around path
    path_d = (UWord *)ptr;
    memcpy(&path_d[path_c], temp_d, sizeof(UWord) * temp_c);
    path_c += temp_c;

    free(temp_d);

    *rlist = path_d;
    *rstep = path_c;
    Clean();
    return UTRUE;
}