144 lines
5.3 KiB
C
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 */
|