//---------- 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; }