diff --git a/.vscode/settings.json b/.vscode/settings.json index e90f610..d90c214 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,7 +1,3 @@ { "cmake.generator": "Unix Makefiles", - "C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools", - "files.associations": { - "cmath": "cpp" - } } \ No newline at end of file diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..044c93d --- /dev/null +++ b/TODO.md @@ -0,0 +1 @@ +- Reverse engineer FSUIPC .NET onRunway Check \ No newline at end of file diff --git a/file/include/logbook.h b/file/include/logbook.h new file mode 100644 index 0000000..001b5d9 --- /dev/null +++ b/file/include/logbook.h @@ -0,0 +1,38 @@ +#ifndef GERMANAIRLINESVA_GACONNECTOR_LOGBOOK_H +#define GERMANAIRLINESVA_GACONNECTOR_LOGBOOK_H + +#include +#include +#include +#include + +#include "logbookEntry.h" + +namespace germanairlinesva_logbook +{ + /* + * Logbook Header (6) + * CHAR[5] | UINT8 + * --------+-------- + * VGAL | VERSION + * + * Logbook Entries (n) + * LOGBOOKENTRY[] + */ + class Logbook + { + private: + std::ifstream fileStream; + std::vector file{'V', 'G', 'A', 'L', '\0', 1}; + + void fromFile(); + void readVersion1(); + + public: + Logbook(std::ifstream &logbook); + void addEntry(LogbookEntry entry); + void toFile(std::ofstream &logbook); + }; +} // namespace germanairlinesva_logbook + +#endif \ No newline at end of file diff --git a/file/include/logbookEntry.h b/file/include/logbookEntry.h new file mode 100644 index 0000000..63c1aff --- /dev/null +++ b/file/include/logbookEntry.h @@ -0,0 +1,167 @@ +#ifndef GERMANAIRLINESVA_GACONNECTOR_LOGBOOKENTRY_H +#define GERMANAIRLINESVA_GACONNECTOR_LOHBOOKENTRY_H + +#include +#include +#include +#include +#include + +namespace germanairlinesva_logbook +{ + /* + * Preamble (24) + * CHAR[10] | CHAR[4] | CHAR[4] | CHAR[6] + * ---------+---------------+----------+------------- + * DATE | FLIGHT NUMBER | AIRCRAFT | REGISTRATION + + * Departure Airport Name (2...256) + * UINT8 | CHAR[] + * -------+------- + * STRLEN | STRING + + * Departure Gate Name (2...256) + * UINT8 | CHAR[] + * -------+------- + * STRLEN | STRING + + * Departure Runway Name (2...256) + * UINT8 | CHAR[] + * -------+------- + * STRLEN | STRING + + * Arrival Airport Name (2...256) + * UINT8 | CHAR[] + * -------+------- + * STRLEN | STRING + + * Arrival Gate Name (2...256) + * UINT8 | CHAR[] + * -------+------- + * STRLEN | STRING + + * Arrival Runway Name (2...256) + * UINT8 | CHAR[] + * -------+------- + * STRLEN | STRING + + * Times (24) + * CHAR[5] | CHAR[5] | CHAR[5] | CHAR[4] | FLOAT + * ----------+---------------+--------------+---------------+------ + * OFF BLOCK | TAKEOFF (OUT) | LANDING (ON) | ON BLOCK (IN) | TOTAL + + * Fuels (16) + * FLOAT | FLOAT | FLOAT | FLOAT + * ---------+-----------+---------+------ + * TAXI OUT | IN FLIGHT | TAXI IN | TOTAL + + * Distances (16) + * FLOAT | FLOAT | FLOAT |FLOAT + * ---------+-----------+---------+----- + * TAXI OUT | IN FLIGHT | TAXI IN |TOTAL + + * Landing (9) + * FLOAT | CHAR | FLOAT + * ---------+---------- +------------ + * MAX RATE | TOUCHDOWNS | MAX G-FORCE + + * Recording Filename (2...256) + * UINT8 | CHAR[] + * -------+------- + * STRLEN | STRING + + * Postamble (5) + * FLOAT32 | BITFIELD + * --------------+--- + * POINTS | FLAGS + + * Flags Bitfield + * 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 + * ---+---+---+---+---+---+---+----- + * NIL|NIL|NIL|NIL|NIL|NIL|NIL|FILED + */ + class LogbookEntry + { + private: + std::string date; + std::string flightNumber; + std::string aircraftType; + std::string aircraftRegistration; + std::string departureAirport; + std::string departureGate; + std::string departureRunway; + std::string arrivalAirport; + std::string arrivaleGate; + std::string arrivalRunway; + std::string offBlockTime; + std::string outTime; + std::string inTime; + std::string onBlockTime; + float totalFlightTime; + float taxiOutFuel; + float inFlightFuel; + float taxiInFuel; + float totalFuel; + float taxiOutDistance; + float inFlightDistance; + float taxiInDistance; + float totalDistance; + float maxLandingRate; + std::uint8_t touchdowns; + float maxLandingGees; + std::string recordingFilename; + float points; + std::uint8_t flags; + std::vector file; + + public: + LogbookEntry(std::string date, + std::string flightNumber, + std::string aircraftType, + std::string aircraftRegistration, + std::string departureAirport, + std::string departureGate, + std::string departureRunway, + std::string arrivalAirport, + std::string arrivaleGate, + std::string arrivalRunway, + std::string offBlockTime, + std::string outTime, + std::string inTime, + std::string onBlockTime, + float totalFlightTime, + float taxiOutFuel, + float inFlightFuel, + float taxiInFuel, + float totalFuel, + float taxiOutDistance, + float inFlightDistance, + float taxiInDistance, + float totalDistance, + float maxLandingRate, + std::uint8_t touchdowns, + float maxLandingGees, + std::string recordingFilename, + float points, + std::uint8_t flags, + std::vector file); + + inline std::uint8_t *getBinaryData() { return file.data(); } + inline std::size_t getBinaryLength() { return file.size(); } + + std::string to_string() const + { + std::ostringstream str; + // TO STR + return str.str(); + } + + friend inline std::ostream &operator<<(std::ostream &os, + const LogbookEntry &gate) + { + return os << gate.to_string(); + } + }; +} // namespace germanairlinesva_logbook + +#endif \ No newline at end of file diff --git a/file/include/pathRecording.h b/file/include/pathRecording.h index 278e4ac..db21fd1 100644 --- a/file/include/pathRecording.h +++ b/file/include/pathRecording.h @@ -7,29 +7,25 @@ #include "pathSegment.h" -#define CURRENT_VERSION 1 - namespace germanairlinesva_recording { /* - * Header - * + * Path Recording (6 + n * 24) + * HEADER | SEGMENTS + + * Header (6) * CHAR[5] | UINT8 * --------+-------- * VGAR | VERSION - */ - /* - * Path Recording - * + + * Path Segments (n) * PATHSEGMENT[] - * ------------- - * SEGMENTS */ class PathRecording { private: std::uint64_t count = 0; - std::vector file{'V', 'G', 'A', 'R', 0, CURRENT_VERSION}; + std::vector file{'V', 'G', 'A', 'R', '\0', 1}; public: void addSegment(PathSegment segment); diff --git a/file/include/pathSegment.h b/file/include/pathSegment.h index c57670f..0c7b09f 100644 --- a/file/include/pathSegment.h +++ b/file/include/pathSegment.h @@ -10,6 +10,7 @@ namespace germanairlinesva_recording { /* + * Path Segment (24) * UINT32 | UINT16 | UINT16 | POINT * -------+----------+-------------+------------ * TIME | ALTITUDE | GROUNDSPEED | COORDINATES diff --git a/file/pathRecording.cpp b/file/pathRecording.cpp index ad49764..22c5215 100644 --- a/file/pathRecording.cpp +++ b/file/pathRecording.cpp @@ -6,7 +6,7 @@ namespace germanairlinesva_recording { file.resize(file.size() + segment.getBinaryLength()); std::uint8_t *bufPtr = 6 + file.data() + count * segment.getBinaryLength(); - memcpy(bufPtr, segment.getBinaryData(), segment.getBinaryLength()); + std::memcpy(bufPtr, segment.getBinaryData(), segment.getBinaryLength()); count++; } } // namespace germanairlinesva_recording \ No newline at end of file diff --git a/file/pathSegment.cpp b/file/pathSegment.cpp index e4aaf79..47214ef 100644 --- a/file/pathSegment.cpp +++ b/file/pathSegment.cpp @@ -17,12 +17,12 @@ namespace germanairlinesva_recording sizeof(this->groundSpeed) + sizeof(this->coordinates), 0); std::uint8_t *bufPtr = file.data(); - memcpy(bufPtr, &this->time, sizeof(this->time)); + std::memcpy(bufPtr, &this->time, sizeof(this->time)); bufPtr += sizeof(this->time); - memcpy(bufPtr, &this->altitude, sizeof(this->altitude)); + std::memcpy(bufPtr, &this->altitude, sizeof(this->altitude)); bufPtr += sizeof(this->altitude); - memcpy(bufPtr, &this->groundSpeed, sizeof(this->groundSpeed)); + std::memcpy(bufPtr, &this->groundSpeed, sizeof(this->groundSpeed)); bufPtr += sizeof(this->groundSpeed); - memcpy(bufPtr, &this->coordinates, sizeof(this->coordinates)); + std::memcpy(bufPtr, &this->coordinates, sizeof(this->coordinates)); }; } // namespace germanairlinesva_recording \ No newline at end of file diff --git a/openSSL/win64/include/openssl/engine.h b/openSSL/win64/include/openssl/engine.h index d707eae..d642bd8 100644 --- a/openSSL/win64/include/openssl/engine.h +++ b/openSSL/win64/include/openssl/engine.h @@ -9,45 +9,45 @@ */ #ifndef HEADER_ENGINE_H -# define HEADER_ENGINE_H +#define HEADER_ENGINE_H -# include +#include -# ifndef OPENSSL_NO_ENGINE -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# include -# include -# include -# include -# include -# include -# include -# endif -# include -# include -# include -# include -# ifdef __cplusplus +#ifndef OPENSSL_NO_ENGINE +#if OPENSSL_API_COMPAT < 0x10100000L +#include +#include +#include +#include +#include +#include +#include +#include +#endif +#include +#include +#include +#include +#ifdef __cplusplus extern "C" { -# endif +#endif /* * These flags are used to control combinations of algorithm (methods) by * bitwise "OR"ing. */ -# define ENGINE_METHOD_RSA (unsigned int)0x0001 -# define ENGINE_METHOD_DSA (unsigned int)0x0002 -# define ENGINE_METHOD_DH (unsigned int)0x0004 -# define ENGINE_METHOD_RAND (unsigned int)0x0008 -# define ENGINE_METHOD_CIPHERS (unsigned int)0x0040 -# define ENGINE_METHOD_DIGESTS (unsigned int)0x0080 -# define ENGINE_METHOD_PKEY_METHS (unsigned int)0x0200 -# define ENGINE_METHOD_PKEY_ASN1_METHS (unsigned int)0x0400 -# define ENGINE_METHOD_EC (unsigned int)0x0800 +#define ENGINE_METHOD_RSA (unsigned int)0x0001 +#define ENGINE_METHOD_DSA (unsigned int)0x0002 +#define ENGINE_METHOD_DH (unsigned int)0x0004 +#define ENGINE_METHOD_RAND (unsigned int)0x0008 +#define ENGINE_METHOD_CIPHERS (unsigned int)0x0040 +#define ENGINE_METHOD_DIGESTS (unsigned int)0x0080 +#define ENGINE_METHOD_PKEY_METHS (unsigned int)0x0200 +#define ENGINE_METHOD_PKEY_ASN1_METHS (unsigned int)0x0400 +#define ENGINE_METHOD_EC (unsigned int)0x0800 /* Obvious all-or-nothing cases. */ -# define ENGINE_METHOD_ALL (unsigned int)0xFFFF -# define ENGINE_METHOD_NONE (unsigned int)0x0000 +#define ENGINE_METHOD_ALL (unsigned int)0xFFFF +#define ENGINE_METHOD_NONE (unsigned int)0x0000 /* * This(ese) flag(s) controls behaviour of the ENGINE_TABLE mechanism used @@ -55,7 +55,7 @@ extern "C" { * set by ENGINE_set_table_flags(). The "NOINIT" flag prevents attempts to * initialise registered ENGINEs if they are not already initialised. */ -# define ENGINE_TABLE_FLAG_NOINIT (unsigned int)0x0001 +#define ENGINE_TABLE_FLAG_NOINIT (unsigned int)0x0001 /* ENGINE flags that can be set by ENGINE_set_flags(). */ /* Not used */ @@ -67,7 +67,7 @@ extern "C" { * these control commands on behalf of the ENGINE using their "cmd_defns" * data. */ -# define ENGINE_FLAGS_MANUAL_CMD_CTRL (int)0x0002 +#define ENGINE_FLAGS_MANUAL_CMD_CTRL (int)0x0002 /* * This flag is for ENGINEs who return new duplicate structures when found @@ -79,7 +79,7 @@ extern "C" { * ENGINE_by_id() just increments the existing ENGINE's structural reference * count. */ -# define ENGINE_FLAGS_BY_ID_COPY (int)0x0004 +#define ENGINE_FLAGS_BY_ID_COPY (int)0x0004 /* * This flag if for an ENGINE that does not want its methods registered as @@ -87,7 +87,7 @@ extern "C" { * usable as default methods. */ -# define ENGINE_FLAGS_NO_REGISTER_ALL (int)0x0008 +#define ENGINE_FLAGS_NO_REGISTER_ALL (int)0x0008 /* * ENGINEs can support their own command types, and these flags are used in @@ -102,23 +102,23 @@ extern "C" { */ /* accepts a 'long' input value (3rd parameter to ENGINE_ctrl) */ -# define ENGINE_CMD_FLAG_NUMERIC (unsigned int)0x0001 +#define ENGINE_CMD_FLAG_NUMERIC (unsigned int)0x0001 /* * accepts string input (cast from 'void*' to 'const char *', 4th parameter * to ENGINE_ctrl) */ -# define ENGINE_CMD_FLAG_STRING (unsigned int)0x0002 +#define ENGINE_CMD_FLAG_STRING (unsigned int)0x0002 /* * Indicates that the control command takes *no* input. Ie. the control * command is unparameterised. */ -# define ENGINE_CMD_FLAG_NO_INPUT (unsigned int)0x0004 +#define ENGINE_CMD_FLAG_NO_INPUT (unsigned int)0x0004 /* * Indicates that the control command is internal. This control command won't * be shown in any output, and is only usable through the ENGINE_ctrl_cmd() * function. */ -# define ENGINE_CMD_FLAG_INTERNAL (unsigned int)0x0008 +#define ENGINE_CMD_FLAG_INTERNAL (unsigned int)0x0008 /* * NB: These 3 control commands are deprecated and should not be used. @@ -137,23 +137,27 @@ extern "C" { * sense to some engines. In such a case, they do nothing but return the * error ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED. */ -# define ENGINE_CTRL_SET_LOGSTREAM 1 -# define ENGINE_CTRL_SET_PASSWORD_CALLBACK 2 -# define ENGINE_CTRL_HUP 3/* Close and reinitialise - * any handles/connections - * etc. */ -# define ENGINE_CTRL_SET_USER_INTERFACE 4/* Alternative to callback */ -# define ENGINE_CTRL_SET_CALLBACK_DATA 5/* User-specific data, used - * when calling the password - * callback and the user - * interface */ -# define ENGINE_CTRL_LOAD_CONFIGURATION 6/* Load a configuration, - * given a string that - * represents a file name - * or so */ -# define ENGINE_CTRL_LOAD_SECTION 7/* Load data from a given - * section in the already - * loaded configuration */ +#define ENGINE_CTRL_SET_LOGSTREAM 1 +#define ENGINE_CTRL_SET_PASSWORD_CALLBACK 2 +#define ENGINE_CTRL_HUP \ + 3 /* Close and reinitialise \ + * any handles/connections \ + * etc. */ +#define ENGINE_CTRL_SET_USER_INTERFACE 4 /* Alternative to callback */ +#define ENGINE_CTRL_SET_CALLBACK_DATA \ + 5 /* User-specific data, used \ + * when calling the password \ + * callback and the user \ + * interface */ +#define ENGINE_CTRL_LOAD_CONFIGURATION \ + 6 /* Load a configuration, \ + * given a string that \ + * represents a file name \ + * or so */ +#define ENGINE_CTRL_LOAD_SECTION \ + 7 /* Load data from a given \ + * section in the already \ + * loaded configuration */ /* * These control commands allow an application to deal with an arbitrary @@ -175,22 +179,22 @@ extern "C" { * worth checking this first if the caller is trying to "discover" the * engine's capabilities and doesn't want errors generated unnecessarily. */ -# define ENGINE_CTRL_HAS_CTRL_FUNCTION 10 +#define ENGINE_CTRL_HAS_CTRL_FUNCTION 10 /* * Returns a positive command number for the first command supported by the * engine. Returns zero if no ctrl commands are supported. */ -# define ENGINE_CTRL_GET_FIRST_CMD_TYPE 11 +#define ENGINE_CTRL_GET_FIRST_CMD_TYPE 11 /* * The 'long' argument specifies a command implemented by the engine, and the * return value is the next command supported, or zero if there are no more. */ -# define ENGINE_CTRL_GET_NEXT_CMD_TYPE 12 +#define ENGINE_CTRL_GET_NEXT_CMD_TYPE 12 /* * The 'void*' argument is a command name (cast from 'const char *'), and the * return value is the command that corresponds to it. */ -# define ENGINE_CTRL_GET_CMD_FROM_NAME 13 +#define ENGINE_CTRL_GET_CMD_FROM_NAME 13 /* * The next two allow a command to be converted into its corresponding string * form. In each case, the 'long' argument supplies the command. In the @@ -199,23 +203,23 @@ extern "C" { * string buffer large enough, and it will be populated with the name of the * command (WITH a trailing EOL). */ -# define ENGINE_CTRL_GET_NAME_LEN_FROM_CMD 14 -# define ENGINE_CTRL_GET_NAME_FROM_CMD 15 +#define ENGINE_CTRL_GET_NAME_LEN_FROM_CMD 14 +#define ENGINE_CTRL_GET_NAME_FROM_CMD 15 /* The next two are similar but give a "short description" of a command. */ -# define ENGINE_CTRL_GET_DESC_LEN_FROM_CMD 16 -# define ENGINE_CTRL_GET_DESC_FROM_CMD 17 +#define ENGINE_CTRL_GET_DESC_LEN_FROM_CMD 16 +#define ENGINE_CTRL_GET_DESC_FROM_CMD 17 /* * With this command, the return value is the OR'd combination of * ENGINE_CMD_FLAG_*** values that indicate what kind of input a given * engine-specific ctrl command expects. */ -# define ENGINE_CTRL_GET_CMD_FLAGS 18 +#define ENGINE_CTRL_GET_CMD_FLAGS 18 /* * ENGINE implementations should start the numbering of their own control * commands from this value. (ie. ENGINE_CMD_BASE, ENGINE_CMD_BASE + 1, etc). */ -# define ENGINE_CMD_BASE 200 +#define ENGINE_CMD_BASE 200 /* * NB: These 2 nCipher "chil" control commands are deprecated, and their @@ -226,17 +230,17 @@ extern "C" { */ /* Flags specific to the nCipher "chil" engine */ -# define ENGINE_CTRL_CHIL_SET_FORKCHECK 100 - /* - * Depending on the value of the (long)i argument, this sets or - * unsets the SimpleForkCheck flag in the CHIL API to enable or - * disable checking and workarounds for applications that fork(). - */ -# define ENGINE_CTRL_CHIL_NO_LOCKING 101 - /* - * This prevents the initialisation function from providing mutex - * callbacks to the nCipher library. - */ +#define ENGINE_CTRL_CHIL_SET_FORKCHECK 100 +/* + * Depending on the value of the (long)i argument, this sets or + * unsets the SimpleForkCheck flag in the CHIL API to enable or + * disable checking and workarounds for applications that fork(). + */ +#define ENGINE_CTRL_CHIL_NO_LOCKING 101 +/* + * This prevents the initialisation function from providing mutex + * callbacks to the nCipher library. + */ /* * If an ENGINE supports its own specific control commands and wishes the @@ -249,29 +253,32 @@ extern "C" { * has cmd_num set to zero and/or cmd_name set to NULL. */ typedef struct ENGINE_CMD_DEFN_st { - unsigned int cmd_num; /* The command number */ - const char *cmd_name; /* The command name itself */ - const char *cmd_desc; /* A short description of the command */ - unsigned int cmd_flags; /* The input the command expects */ + unsigned int cmd_num; /* The command number */ + const char *cmd_name; /* The command name itself */ + const char *cmd_desc; /* A short description of the command */ + unsigned int cmd_flags; /* The input the command expects */ } ENGINE_CMD_DEFN; /* Generic function pointer */ -typedef int (*ENGINE_GEN_FUNC_PTR) (void); +typedef int (*ENGINE_GEN_FUNC_PTR)(void); /* Generic function pointer taking no arguments */ -typedef int (*ENGINE_GEN_INT_FUNC_PTR) (ENGINE *); +typedef int (*ENGINE_GEN_INT_FUNC_PTR)(ENGINE *); /* Specific control function pointer */ -typedef int (*ENGINE_CTRL_FUNC_PTR) (ENGINE *, int, long, void *, - void (*f) (void)); +typedef int ( + *ENGINE_CTRL_FUNC_PTR)(ENGINE *, int, long, void *, void (*f)(void)); /* Generic load_key function pointer */ -typedef EVP_PKEY *(*ENGINE_LOAD_KEY_PTR)(ENGINE *, const char *, +typedef EVP_PKEY *(*ENGINE_LOAD_KEY_PTR)(ENGINE *, + const char *, UI_METHOD *ui_method, void *callback_data); -typedef int (*ENGINE_SSL_CLIENT_CERT_PTR) (ENGINE *, SSL *ssl, - STACK_OF(X509_NAME) *ca_dn, - X509 **pcert, EVP_PKEY **pkey, - STACK_OF(X509) **pother, - UI_METHOD *ui_method, - void *callback_data); +typedef int (*ENGINE_SSL_CLIENT_CERT_PTR)(ENGINE *, + SSL *ssl, + STACK_OF(X509_NAME) * ca_dn, + X509 **pcert, + EVP_PKEY **pkey, + STACK_OF(X509) * *pother, + UI_METHOD *ui_method, + void *callback_data); /*- * These callback types are for an ENGINE's handler for cipher and digest logic. * These handlers have these prototypes; @@ -287,14 +294,19 @@ typedef int (*ENGINE_SSL_CLIENT_CERT_PTR) (ENGINE *, SSL *ssl, * Returns to a pointer to the array of supported cipher 'nid's. If the * second parameter is non-NULL it is set to the size of the returned array. */ -typedef int (*ENGINE_CIPHERS_PTR) (ENGINE *, const EVP_CIPHER **, - const int **, int); -typedef int (*ENGINE_DIGESTS_PTR) (ENGINE *, const EVP_MD **, const int **, - int); -typedef int (*ENGINE_PKEY_METHS_PTR) (ENGINE *, EVP_PKEY_METHOD **, - const int **, int); -typedef int (*ENGINE_PKEY_ASN1_METHS_PTR) (ENGINE *, EVP_PKEY_ASN1_METHOD **, - const int **, int); +typedef int (*ENGINE_CIPHERS_PTR)(ENGINE *, + const EVP_CIPHER **, + const int **, + int); +typedef int (*ENGINE_DIGESTS_PTR)(ENGINE *, const EVP_MD **, const int **, int); +typedef int (*ENGINE_PKEY_METHS_PTR)(ENGINE *, + EVP_PKEY_METHOD **, + const int **, + int); +typedef int (*ENGINE_PKEY_ASN1_METHS_PTR)(ENGINE *, + EVP_PKEY_ASN1_METHOD **, + const int **, + int); /* * STRUCTURE functions ... all of these functions deal with pointers to * ENGINE structures where the pointers have a "structural reference". This @@ -321,22 +333,20 @@ int ENGINE_remove(ENGINE *e); ENGINE *ENGINE_by_id(const char *id); #if OPENSSL_API_COMPAT < 0x10100000L -# define ENGINE_load_openssl() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_OPENSSL, NULL) -# define ENGINE_load_dynamic() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_DYNAMIC, NULL) -# ifndef OPENSSL_NO_STATIC_ENGINE -# define ENGINE_load_padlock() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_PADLOCK, NULL) -# define ENGINE_load_capi() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CAPI, NULL) -# define ENGINE_load_afalg() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_AFALG, NULL) -# endif -# define ENGINE_load_cryptodev() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CRYPTODEV, NULL) -# define ENGINE_load_rdrand() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_RDRAND, NULL) +#define ENGINE_load_openssl() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_OPENSSL, NULL) +#define ENGINE_load_dynamic() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_DYNAMIC, NULL) +#ifndef OPENSSL_NO_STATIC_ENGINE +#define ENGINE_load_padlock() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_PADLOCK, NULL) +#define ENGINE_load_capi() OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CAPI, NULL) +#define ENGINE_load_afalg() OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_AFALG, NULL) +#endif +#define ENGINE_load_cryptodev() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CRYPTODEV, NULL) +#define ENGINE_load_rdrand() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_RDRAND, NULL) #endif void ENGINE_load_builtin_engines(void); @@ -349,10 +359,10 @@ void ENGINE_set_table_flags(unsigned int flags); /*- Manage registration of ENGINEs per "table". For each type, there are 3 * functions; - * ENGINE_register_***(e) - registers the implementation from 'e' (if it has one) - * ENGINE_unregister_***(e) - unregister the implementation from 'e' - * ENGINE_register_all_***() - call ENGINE_register_***() for each 'e' in the list - * Cleanup is automatically registered from each table when required. + * ENGINE_register_***(e) - registers the implementation from 'e' (if it has + * one) ENGINE_unregister_***(e) - unregister the implementation from 'e' + * ENGINE_register_all_***() - call ENGINE_register_***() for each 'e' in the + * list Cleanup is automatically registered from each table when required. */ int ENGINE_register_RSA(ENGINE *e); @@ -410,7 +420,7 @@ int ENGINE_register_all_complete(void); * commands that require an operational ENGINE, and only use functional * references in such situations. */ -int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f) (void)); +int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)(void)); /* * This function tests if an ENGINE-specific command is usable as a @@ -426,8 +436,12 @@ int ENGINE_cmd_is_executable(ENGINE *e, int cmd); * commands. See the comment on ENGINE_ctrl_cmd_string() for an explanation * on how to use the cmd_name and cmd_optional. */ -int ENGINE_ctrl_cmd(ENGINE *e, const char *cmd_name, - long i, void *p, void (*f) (void), int cmd_optional); +int ENGINE_ctrl_cmd(ENGINE *e, + const char *cmd_name, + long i, + void *p, + void (*f)(void), + int cmd_optional); /* * This function passes a command-name and argument to an ENGINE. The @@ -451,7 +465,9 @@ int ENGINE_ctrl_cmd(ENGINE *e, const char *cmd_name, * applications can work consistently with the same configuration for the * same ENGINE-enabled devices, across applications. */ -int ENGINE_ctrl_cmd_string(ENGINE *e, const char *cmd_name, const char *arg, +int ENGINE_ctrl_cmd_string(ENGINE *e, + const char *cmd_name, + const char *arg, int cmd_optional); /* @@ -476,12 +492,11 @@ int ENGINE_set_destroy_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR destroy_f); int ENGINE_set_init_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR init_f); int ENGINE_set_finish_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR finish_f); int ENGINE_set_ctrl_function(ENGINE *e, ENGINE_CTRL_FUNC_PTR ctrl_f); -int ENGINE_set_load_privkey_function(ENGINE *e, - ENGINE_LOAD_KEY_PTR loadpriv_f); +int ENGINE_set_load_privkey_function(ENGINE *e, ENGINE_LOAD_KEY_PTR loadpriv_f); int ENGINE_set_load_pubkey_function(ENGINE *e, ENGINE_LOAD_KEY_PTR loadpub_f); -int ENGINE_set_load_ssl_client_cert_function(ENGINE *e, - ENGINE_SSL_CLIENT_CERT_PTR - loadssl_f); +int ENGINE_set_load_ssl_client_cert_function( + ENGINE *e, + ENGINE_SSL_CLIENT_CERT_PTR loadssl_f); int ENGINE_set_ciphers(ENGINE *e, ENGINE_CIPHERS_PTR f); int ENGINE_set_digests(ENGINE *e, ENGINE_DIGESTS_PTR f); int ENGINE_set_pkey_meths(ENGINE *e, ENGINE_PKEY_METHS_PTR f); @@ -489,8 +504,8 @@ int ENGINE_set_pkey_asn1_meths(ENGINE *e, ENGINE_PKEY_ASN1_METHS_PTR f); int ENGINE_set_flags(ENGINE *e, int flags); int ENGINE_set_cmd_defns(ENGINE *e, const ENGINE_CMD_DEFN *defns); /* These functions allow control over any per-structure ENGINE data. */ -#define ENGINE_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_ENGINE, l, p, newf, dupf, freef) +#define ENGINE_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_ENGINE, l, p, newf, dupf, freef) int ENGINE_set_ex_data(ENGINE *e, int idx, void *arg); void *ENGINE_get_ex_data(const ENGINE *e, int idx); @@ -499,7 +514,9 @@ void *ENGINE_get_ex_data(const ENGINE *e, int idx); * This function previously cleaned up anything that needs it. Auto-deinit will * now take care of it so it is no longer required to call this function. */ -# define ENGINE_cleanup() while(0) continue +#define ENGINE_cleanup() \ + while (0) \ + continue #endif /* @@ -521,8 +538,7 @@ ENGINE_GEN_INT_FUNC_PTR ENGINE_get_finish_function(const ENGINE *e); ENGINE_CTRL_FUNC_PTR ENGINE_get_ctrl_function(const ENGINE *e); ENGINE_LOAD_KEY_PTR ENGINE_get_load_privkey_function(const ENGINE *e); ENGINE_LOAD_KEY_PTR ENGINE_get_load_pubkey_function(const ENGINE *e); -ENGINE_SSL_CLIENT_CERT_PTR ENGINE_get_ssl_client_cert_function(const ENGINE - *e); +ENGINE_SSL_CLIENT_CERT_PTR ENGINE_get_ssl_client_cert_function(const ENGINE *e); ENGINE_CIPHERS_PTR ENGINE_get_ciphers(const ENGINE *e); ENGINE_DIGESTS_PTR ENGINE_get_digests(const ENGINE *e); ENGINE_PKEY_METHS_PTR ENGINE_get_pkey_meths(const ENGINE *e); @@ -531,12 +547,10 @@ const EVP_CIPHER *ENGINE_get_cipher(ENGINE *e, int nid); const EVP_MD *ENGINE_get_digest(ENGINE *e, int nid); const EVP_PKEY_METHOD *ENGINE_get_pkey_meth(ENGINE *e, int nid); const EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth(ENGINE *e, int nid); -const EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth_str(ENGINE *e, - const char *str, - int len); -const EVP_PKEY_ASN1_METHOD *ENGINE_pkey_asn1_find_str(ENGINE **pe, - const char *str, - int len); +const EVP_PKEY_ASN1_METHOD * + ENGINE_get_pkey_asn1_meth_str(ENGINE *e, const char *str, int len); +const EVP_PKEY_ASN1_METHOD * + ENGINE_pkey_asn1_find_str(ENGINE **pe, const char *str, int len); const ENGINE_CMD_DEFN *ENGINE_get_cmd_defns(const ENGINE *e); int ENGINE_get_flags(const ENGINE *e); @@ -571,14 +585,22 @@ int ENGINE_finish(ENGINE *e); * location, handled by the engine. The storage may be on a card or * whatever. */ -EVP_PKEY *ENGINE_load_private_key(ENGINE *e, const char *key_id, - UI_METHOD *ui_method, void *callback_data); -EVP_PKEY *ENGINE_load_public_key(ENGINE *e, const char *key_id, - UI_METHOD *ui_method, void *callback_data); -int ENGINE_load_ssl_client_cert(ENGINE *e, SSL *s, - STACK_OF(X509_NAME) *ca_dn, X509 **pcert, - EVP_PKEY **ppkey, STACK_OF(X509) **pother, - UI_METHOD *ui_method, void *callback_data); +EVP_PKEY *ENGINE_load_private_key(ENGINE *e, + const char *key_id, + UI_METHOD *ui_method, + void *callback_data); +EVP_PKEY *ENGINE_load_public_key(ENGINE *e, + const char *key_id, + UI_METHOD *ui_method, + void *callback_data); +int ENGINE_load_ssl_client_cert(ENGINE *e, + SSL *s, + STACK_OF(X509_NAME) * ca_dn, + X509 **pcert, + EVP_PKEY **ppkey, + STACK_OF(X509) * *pother, + UI_METHOD *ui_method, + void *callback_data); /* * This returns a pointer for the current ENGINE structure that is (by @@ -638,12 +660,12 @@ void ENGINE_add_conf_module(void); /**************************/ /* Binary/behaviour compatibility levels */ -# define OSSL_DYNAMIC_VERSION (unsigned long)0x00030000 +#define OSSL_DYNAMIC_VERSION (unsigned long)0x00030000 /* * Binary versions older than this are too old for us (whether we're a loader * or a loadee) */ -# define OSSL_DYNAMIC_OLDEST (unsigned long)0x00030000 +#define OSSL_DYNAMIC_OLDEST (unsigned long)0x00030000 /* * When compiling an ENGINE entirely as an external shared library, loadable @@ -656,9 +678,9 @@ void ENGINE_add_conf_module(void); * same static data as the calling application (or library), and thus whether * these callbacks need to be set or not. */ -typedef void *(*dyn_MEM_malloc_fn) (size_t, const char *, int); -typedef void *(*dyn_MEM_realloc_fn) (void *, size_t, const char *, int); -typedef void (*dyn_MEM_free_fn) (void *, const char *, int); +typedef void *(*dyn_MEM_malloc_fn)(size_t, const char *, int); +typedef void *(*dyn_MEM_realloc_fn)(void *, size_t, const char *, int); +typedef void (*dyn_MEM_free_fn)(void *, const char *, int); typedef struct st_dynamic_MEM_fns { dyn_MEM_malloc_fn malloc_fn; dyn_MEM_realloc_fn realloc_fn; @@ -686,19 +708,22 @@ typedef struct st_dynamic_fns { * implementation can be fully instantiated with * IMPLEMENT_DYNAMIC_CHECK_FN(). */ -typedef unsigned long (*dynamic_v_check_fn) (unsigned long ossl_version); -# define IMPLEMENT_DYNAMIC_CHECK_FN() \ - OPENSSL_EXPORT unsigned long v_check(unsigned long v); \ - OPENSSL_EXPORT unsigned long v_check(unsigned long v) { \ - if (v >= OSSL_DYNAMIC_OLDEST) return OSSL_DYNAMIC_VERSION; \ - return 0; } +typedef unsigned long (*dynamic_v_check_fn)(unsigned long ossl_version); +#define IMPLEMENT_DYNAMIC_CHECK_FN() \ + OPENSSL_EXPORT unsigned long v_check(unsigned long v); \ + OPENSSL_EXPORT unsigned long v_check(unsigned long v) \ + { \ + if (v >= OSSL_DYNAMIC_OLDEST) \ + return OSSL_DYNAMIC_VERSION; \ + return 0; \ + } /* * This function is passed the ENGINE structure to initialise with its own * function and command settings. It should not adjust the structural or * functional reference counts. If this function returns zero, (a) the load - * will be aborted, (b) the previous ENGINE state will be memcpy'd back onto - * the structure, and (c) the shared library will be unloaded. So + * will be aborted, (b) the previous ENGINE state will be std::memcpy'd back + * onto the structure, and (c) the shared library will be unloaded. So * implementations should do their own internal cleanup in failure * circumstances otherwise they could leak. The 'id' parameter, if non-NULL, * represents the ENGINE id that the loader is looking for. If this is NULL, @@ -711,21 +736,26 @@ typedef unsigned long (*dynamic_v_check_fn) (unsigned long ossl_version); * returns an int value (zero for failure). 'fn' should have prototype; * [static] int fn(ENGINE *e, const char *id); */ -typedef int (*dynamic_bind_engine) (ENGINE *e, const char *id, - const dynamic_fns *fns); -# define IMPLEMENT_DYNAMIC_BIND_FN(fn) \ - OPENSSL_EXPORT \ - int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns); \ - OPENSSL_EXPORT \ - int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns) { \ - if (ENGINE_get_static_state() == fns->static_state) goto skip_cbs; \ - CRYPTO_set_mem_functions(fns->mem_fns.malloc_fn, \ - fns->mem_fns.realloc_fn, \ - fns->mem_fns.free_fn); \ - OPENSSL_init_crypto(OPENSSL_INIT_NO_ATEXIT, NULL); \ - skip_cbs: \ - if (!fn(e, id)) return 0; \ - return 1; } +typedef int (*dynamic_bind_engine)(ENGINE *e, + const char *id, + const dynamic_fns *fns); +#define IMPLEMENT_DYNAMIC_BIND_FN(fn) \ + OPENSSL_EXPORT \ + int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns); \ + OPENSSL_EXPORT \ + int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns) \ + { \ + if (ENGINE_get_static_state() == fns->static_state) \ + goto skip_cbs; \ + CRYPTO_set_mem_functions(fns->mem_fns.malloc_fn, \ + fns->mem_fns.realloc_fn, \ + fns->mem_fns.free_fn); \ + OPENSSL_init_crypto(OPENSSL_INIT_NO_ATEXIT, NULL); \ + skip_cbs: \ + if (!fn(e, id)) \ + return 0; \ + return 1; \ + } /* * If the loading application (or library) and the loaded ENGINE library @@ -740,13 +770,13 @@ typedef int (*dynamic_bind_engine) (ENGINE *e, const char *id, */ void *ENGINE_get_static_state(void); -# if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) +#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) DEPRECATEDIN_1_1_0(void ENGINE_setup_bsd_cryptodev(void)) -# endif - - -# ifdef __cplusplus -} -# endif -# endif +#endif + + +#ifdef __cplusplus +} +#endif +#endif #endif diff --git a/simdata/gate.cpp b/simdata/gate.cpp index fdfbc0b..a5b49fa 100644 --- a/simdata/gate.cpp +++ b/simdata/gate.cpp @@ -19,11 +19,11 @@ namespace germanairlinesva_simdata static_cast(this->designator.length()), sizeof(std::uint8_t)); bufPtr++; - memcpy(bufPtr, this->designator.c_str(), this->designator.length()); + std::memcpy(bufPtr, this->designator.c_str(), this->designator.length()); bufPtr += this->designator.length() + 1; - memcpy(bufPtr, &this->center, sizeof(this->center)); + std::memcpy(bufPtr, &this->center, sizeof(this->center)); bufPtr += sizeof(this->center); - memcpy(bufPtr, &this->radius, sizeof(this->radius)); + std::memcpy(bufPtr, &this->radius, sizeof(this->radius)); } // From database @@ -43,10 +43,10 @@ namespace germanairlinesva_simdata static_cast(this->designator.length()), sizeof(std::uint8_t)); bufPtr++; - memcpy(bufPtr, this->designator.c_str(), this->designator.length()); + std::memcpy(bufPtr, this->designator.c_str(), this->designator.length()); bufPtr += this->designator.length() + 1; - memcpy(bufPtr, &this->center, sizeof(this->center)); + std::memcpy(bufPtr, &this->center, sizeof(this->center)); bufPtr += sizeof(this->center); - memcpy(bufPtr, &this->radius, sizeof(this->radius)); + std::memcpy(bufPtr, &this->radius, sizeof(this->radius)); } } // namespace germanairlinesva_simdata \ No newline at end of file diff --git a/simdata/include/simulatorDatabase.hpp b/simdata/include/simulatorDatabase.hpp index a8fc785..f167707 100644 --- a/simdata/include/simulatorDatabase.hpp +++ b/simdata/include/simulatorDatabase.hpp @@ -12,8 +12,6 @@ #include "gate.h" #include "runway.h" -#define CURRENT_VERSION 1 - /* * Header * @@ -41,8 +39,8 @@ namespace germanairlinesva_simdata std::uint8_t null = 0; std::ofstream out(file, std::fstream::binary); - // File Header - std::uint8_t header[] = {'V', 'G', 'A', 'S', 0, CURRENT_VERSION}; + // File Header, Last member is version + std::uint8_t header[] = {'V', 'G', 'A', 'S', '\0', 1}; out.write(reinterpret_cast(header), 6); // Num Airports std::uint16_t numAirports = airports.size(); diff --git a/simdata/runway.cpp b/simdata/runway.cpp index aad8055..52feee3 100644 --- a/simdata/runway.cpp +++ b/simdata/runway.cpp @@ -35,15 +35,15 @@ namespace germanairlinesva_simdata static_cast(this->designator.length()), sizeof(std::uint8_t)); bufPtr++; - memcpy(bufPtr, this->designator.c_str(), this->designator.length()); + std::memcpy(bufPtr, this->designator.c_str(), this->designator.length()); bufPtr += this->designator.length() + 1; - memcpy(bufPtr, &this->bounds, sizeof(this->bounds)); + std::memcpy(bufPtr, &this->bounds, sizeof(this->bounds)); bufPtr += sizeof(this->bounds); - memcpy(bufPtr, &this->width, sizeof(this->width)); + std::memcpy(bufPtr, &this->width, sizeof(this->width)); bufPtr += sizeof(this->width); - memcpy(bufPtr, &this->length, sizeof(this->length)); + std::memcpy(bufPtr, &this->length, sizeof(this->length)); bufPtr += sizeof(this->length); - memcpy(bufPtr, &this->trueHeading, sizeof(this->trueHeading)); + std::memcpy(bufPtr, &this->trueHeading, sizeof(this->trueHeading)); } Runway::Runway(std::string designator, @@ -68,14 +68,14 @@ namespace germanairlinesva_simdata static_cast(this->designator.length()), sizeof(std::uint8_t)); bufPtr++; - memcpy(bufPtr, this->designator.c_str(), this->designator.length()); + std::memcpy(bufPtr, this->designator.c_str(), this->designator.length()); bufPtr += this->designator.length() + 1; - memcpy(bufPtr, &this->bounds, sizeof(this->bounds)); + std::memcpy(bufPtr, &this->bounds, sizeof(this->bounds)); bufPtr += sizeof(this->bounds); - memcpy(bufPtr, &this->width, sizeof(this->width)); + std::memcpy(bufPtr, &this->width, sizeof(this->width)); bufPtr += sizeof(this->width); - memcpy(bufPtr, &this->length, sizeof(this->length)); + std::memcpy(bufPtr, &this->length, sizeof(this->length)); bufPtr += sizeof(this->length); - memcpy(bufPtr, &this->trueHeading, sizeof(this->trueHeading)); + std::memcpy(bufPtr, &this->trueHeading, sizeof(this->trueHeading)); } } // namespace germanairlinesva_simdata \ No newline at end of file diff --git a/websocket/include/websocket.h b/websocket/include/websocket.h index a124b46..781afcc 100644 --- a/websocket/include/websocket.h +++ b/websocket/include/websocket.h @@ -12,7 +12,6 @@ #include "types.h" #include "util.hpp" -#include #include #include #include diff --git a/xplugin/include/main.h b/xplugin/include/main.h index e7e2505..cf3a0a9 100644 --- a/xplugin/include/main.h +++ b/xplugin/include/main.h @@ -22,6 +22,7 @@ #include #include #include +#include #include float flightLoop(float elapsedMe, float elapsedSim, int counter, void *refcon); diff --git a/xplugin/main.cpp b/xplugin/main.cpp index 28a86bb..c527fcb 100644 --- a/xplugin/main.cpp +++ b/xplugin/main.cpp @@ -254,7 +254,7 @@ void serverWorker() { const std::lock_guard lock(mutex); - memcpy(©, &toSend, sizeof(germanairlinesva_websocket::data)); + std::memcpy(©, &toSend, sizeof(germanairlinesva_websocket::data)); } connector->sendData(copy); @@ -275,7 +275,7 @@ void recordingWorker() { const std::lock_guard lock(mutex); - memcpy(©, &toSend, sizeof(germanairlinesva_websocket::data)); + std::memcpy(©, &toSend, sizeof(germanairlinesva_websocket::data)); } germanairlinesva_recording::PathSegment currentPath(