// SPDX-License-Identifier: Apache-2.0 // Copyright (C) 2022-2023 chargebyte GmbH // Copyright (C) 2022-2023 Contributors to EVerest #ifndef TOOLS_H #define TOOLS_H #include #include #include #include #include #include #include #include #include #include #include #define MAX_FILE_NAME_LENGTH 100 #define MAX_PKI_CA_LENGTH 4 /* leaf up to root certificate */ #ifndef ARRAY_SIZE #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) #endif #ifndef ROUND_UP #define ROUND_UP(N, S) ((((N) + (S)-1) / (S)) * (S)) #endif #ifndef ROUND_UP_ELEMENTS #define ROUND_UP_ELEMENTS(N, S) (((N) + (S)-1) / (S)) #endif int generate_random_data(void* dest, size_t dest_len); enum Addr6Type { ADDR6_TYPE_UNPSEC = -1, ADDR6_TYPE_GLOBAL = 0, ADDR6_TYPE_LINKLOCAL = 1, }; const char* choose_first_ipv6_interface(); int get_interface_ipv6_address(const char* if_name, enum Addr6Type type, struct sockaddr_in6* addr); void set_normalized_timespec(struct timespec* ts, time_t sec, int64_t nsec); struct timespec timespec_sub(struct timespec lhs, struct timespec rhs); struct timespec timespec_add(struct timespec lhs, struct timespec rhs); void timespec_add_ms(struct timespec* ts, long long msec); long long timespec_to_ms(struct timespec ts); long long int getmonotonictime(void); /*! * \brief calc_physical_value This function calculates the physical value consists on a value and multiplier. * \param value is the value of the physical value * \param multiplier is the multiplier of the physical value * \return Returns the physical value */ double calc_physical_value(const int16_t& value, const int8_t& multiplier); /** * \brief convert the given \p hash_algorithm to type types::iso15118::HashAlgorithm * \param hash_algorithm * \return types::iso15118::HashAlgorithm */ types::iso15118::HashAlgorithm convert_to_hash_algorithm(const types::evse_security::HashAlgorithm hash_algorithm); /** * \brief convert the given \p ocsp_request_data_list to std::vector * \param ocsp_request_data_list * \return std::vector */ std::vector convert_to_certificate_hash_data_info_vector(const types::evse_security::OCSPRequestDataList& ocsp_request_data_list); /** * \brief convert bytes into a colon delimited string * \param[in] ptr - a pointer to the byte array * \param[in] len - the length of the byte array * \returns a string of hex digits separated by : or empty on error */ std::string to_mac_address_str(const uint8_t* ptr, size_t len); /** * \brief Copy the content of \p src to the character array pointed by \p characters. * \param characters The destination buffer (array) * \param size_of_characters The size of the destination (must not be zero) * \param characters_len Pointer to the corresponding string length field in the destination struct. * \param src The source string to use. */ void strncpy_to_v2g(char* characters, size_t size_of_characters, uint16_t* characters_len, const std::string& src); #endif /* TOOLS_H */