Projects/3BIT/winter-semester/ISA/include/error.h
2026-04-14 19:28:46 +02:00

144 lines
5.3 KiB
C

/*
* ==================================================================================
* Error Handling Header - Error management system
*
* ISA Project - ICMP Covert Channel File Transfer System
* Author: Roman Necas (xnecasr00)
* Date: 13. October 2025
*
* This module provides a minimal, production-ready error handling system.
* All error messages are output to stderr for user visibility.
* ==================================================================================
*/
#ifndef ERROR_H
#define ERROR_H
#include "common.h"
/*
* Error Code Enumeration
* -----------------------
* Defines all possible error conditions that can occur in the application.
* Each error code maps to a specific failure scenario for precise error reporting.
*/
typedef enum {
ERR_SUCCESS = 0, /* Operation completed successfully */
ERR_INVALID_ARGS = 1, /* Invalid command-line arguments or function parameters */
ERR_MEMORY_ALLOC = 2, /* Memory allocation failure */
ERR_FILE_NOT_FOUND = 3, /* Requested file does not exist */
ERR_FILE_ACCESS = 4, /* Permission denied or file inaccessible */
ERR_FILE_READ = 5, /* File read operation failed */
ERR_FILE_WRITE = 6, /* File write operation failed */
ERR_NETWORK_INIT = 7, /* Network initialization/socket creation failed */
ERR_NETWORK_SEND = 8, /* Network packet transmission failed */
ERR_NETWORK_RECV = 9, /* Network packet reception failed */
ERR_NETWORK_TIMEOUT = 10, /* Network operation timeout */
ERR_CRYPTO_INIT = 11, /* Cryptographic initialization failed */
ERR_CRYPTO_ENCRYPT = 12, /* Encryption operation failed */
ERR_CRYPTO_DECRYPT = 13, /* Decryption operation failed */
ERR_CRYPTO_KEY_DERIVE = 14, /* Key derivation (PBKDF2) failed */
ERR_PROTOCOL_INVALID = 15, /* Invalid protocol packet received */
ERR_PROTOCOL_SEQUENCE = 16, /* Packet sequence number error */
ERR_PROTOCOL_CHECKSUM = 17, /* CRC32 checksum validation failed */
ERR_STATE_MACHINE = 18, /* Invalid state machine transition */
ERR_SESSION_INVALID = 19, /* Invalid or expired session */
ERR_PERMISSION_DENIED = 20, /* Insufficient privileges (e.g., need root) */
ERR_RESOURCE_LIMIT = 21, /* System resource limit exceeded */
ERR_INTERRUPTED = 22, /* Operation interrupted by signal */
ERR_UNKNOWN = 23 /* Unknown or unclassified error */
} error_code_t;
/*
* Error Context Structure
* -----------------------
* Stores detailed information about the most recent error for diagnostic purposes.
* Thread-local storage ensures thread-safe error tracking.
*/
typedef struct {
error_code_t code; /* Error code identifying the error type */
const char *message; /* Human-readable error description */
const char *function; /* Function where error occurred (for debugging) */
const char *file; /* Source file where error occurred */
int line; /* Line number where error occurred */
int system_errno; /* System errno value at time of error */
time_t timestamp; /* Time when error occurred */
} error_context_t;
/*
* Error Handling Macros
* ---------------------
* Convenience macros for setting error context and performing error checks.
*/
/* Set error context with current location information */
#define ERROR_SET(code, msg) \
error_set_context(code, msg, __FUNCTION__, __FILE__, __LINE__, errno)
/* Check condition and return -1 if false, setting error context */
#define ERROR_CHECK(expr, code, msg) do { \
if (!(expr)) { \
ERROR_SET(code, msg); \
return -1; \
} \
} while(0)
/* Check condition and jump to label if false, setting error context */
#define ERROR_CHECK_GOTO(expr, code, msg, label) do { \
if (!(expr)) { \
ERROR_SET(code, msg); \
goto label; \
} \
} while(0)
/*
* Function Declarations
* ---------------------
*/
/* Initialize the error handling system */
void error_init(void);
/* Clean up error handling resources */
void error_cleanup(void);
/*
* Set the current error context with detailed information
*
* @param code: Error code from error_code_t enum
* @param message: Human-readable error description
* @param function: Name of function where error occurred
* @param file: Source file where error occurred
* @param line: Line number where error occurred
* @param system_errno: System errno value at time of error
*/
void error_set_context(error_code_t code, const char *message,
const char *function, const char *file,
int line, int system_errno);
/*
* Print the last error that occurred to stderr
* Outputs a formatted error message with timestamp and context
*/
void error_print_last(void);
/*
* Get the error code of the last error
* @return: error_code_t value
*/
error_code_t error_get_last_code(void);
/*
* Get the error message of the last error
* @return: Pointer to error message string
*/
const char *error_get_last_message(void);
/*
* Convert error code to human-readable string
* @param code: Error code to convert
* @return: Pointer to error description string
*/
const char *error_code_to_string(error_code_t code);
#endif /* ERROR_H */