#include "error.h"
#include <sstream>
#include <string>
using namespace std;
Nxt_exception::Nxt_exception(string function_name, string class_name, unsigned int error_code, string description){
this->function_name = function_name;
this->class_name = class_name;
this_error_code = error_code;
this->description = description;
}
Nxt_exception::~Nxt_exception() throw(){
}
unsigned int Nxt_exception::error_code(){
return this_error_code;
}
const char* Nxt_exception::what() const throw(){
if(description.empty()){
return (error_info(this_error_code));
}
else{
return description.c_str();
}
}
const std::string Nxt_exception::who(){
return ("Function \"" +function_name + "\" in class \"" + class_name + "\"");
}
Error_type Nxt_exception::error_type(){
if(this_error_code >= SERVER_ERROR_LOW && this_error_code <= SERVER_ERROR_HIGH){
return SERVER_ERROR;
}
if(this_error_code >= NXT_ERROR_LOW && this_error_code <= NXT_ERROR_HIGH){
return NXT_ERROR;
}
if(this_error_code >= BT_ERROR_LOW && this_error_code <= BT_ERROR_HIGH){
return BT_ERROR;
}
if(this_error_code >= PC_FILE_ERROR_LOW && this_error_code <= PC_FILE_ERROR_HIGH){
return PC_FILE_ERROR;
}
if(this_error_code >= NETWORK_ERROR_LOW && this_error_code <= NETWORK_ERROR_HIGH){
return NETWORK_ERROR;
}
//default
return UNKNOWN_ERROR;
}
const char * Nxt_exception::error_info(unsigned int error_code) const{
//can not use a switch .-)
if(error_code == SERVER_BANNED){
return SERVER_BANNED_TEXT;
}
if(error_code == SERVER_BT_BUSSY){
return SERVER_BT_BUSSY_TEXT;
}
if(error_code == SERVER_PASSWORD_FAIL){
return SERVER_PASSWORD_FAIL_TEXT;
}
if(error_code == SERVER_BT_ERROR){
return SERVER_BT_ERROR_TEXT;
}
if(error_code == SERVER_BT_NOT_ENOUGH_BYTES){
return SERVER_BT_NOT_ENOUGH_BYTES_TEXT;
}
if(error_code == NETWORK_COM_ERROR){
return NETWORK_COM_ERROR_TEXT;
}
if(error_code == SERVER_LOST_NXT){
return SERVER_LOST_NXT_TEXT;
}
if(error_code == SERVER_FULL){
return SERVER_FULL_TEXT;
}
if(error_code == BT_INVALID_COM_PORT){
return BT_INVALID_COM_PORT_TEXT;
}
if(error_code == BT_ERROR_WRITING_COM_PORT){
return BT_ERROR_WRITING_COM_PORT_TEXT;
}
if(error_code == BT_ERROR_READING_COM_PORT){
return BT_ERROR_READING_COM_PORT_TEXT;
}
if(error_code == BT_NO_REPLY){
return BT_NO_REPLY_TEXT;
}
if(error_code == BT_UNABLE_TO_CONNECT ){
return BT_UNABLE_TO_CONNECT_TEXT;
}
if(error_code == BT_NOT_ENOUGH_BYTES){
return BT_NOT_ENOUGH_BYTES_TEXT;
}
if(error_code == NXT_PENDING_COMMUNICATION){
return NXT_PENDING_COMMUNICATION_TEXT;
}
if(error_code == NXT_MAILBOX_QUEUE_EMPTY){
return NXT_MAILBOX_QUEUE_EMPTY_TEXT;
}
if(error_code == NXT_REQUEST_FAILED){
return NXT_REQUEST_FAILED_TEXT;
}
if(error_code == NXT_UNKNOW_COMMAND){
return NXT_UNKNOW_COMMAND_TEXT;
}
if(error_code == NXT_INSANE_PACKET){
return NXT_INSANE_PACKET_TEXT;
}
if(error_code == NXT_DATA_OUT_OF_RANGE){
return NXT_DATA_OUT_OF_RANGE_TEXT;
}
if(error_code == NXT_COMMUNICATION_BUS_ERROR){
return NXT_COMMUNICATION_BUS_ERROR_TEXT;
}
if(error_code == NXT_BUFFER_FULL){
return NXT_BUFFER_FULL_TEXT;
}
if(error_code == NXT_INVALID_CHANNEL){
return NXT_INVALID_CHANNEL_TEXT;
}
if(error_code == NXT_CHANNEL_BUSY){
return NXT_CHANNEL_BUSY_TEXT;
}
if(error_code == NXT_NO_ACTIVE_PROGRAM){
return NXT_NO_ACTIVE_PROGRAM_TEXT;
}
if(error_code == NXT_ILLEGAL_SIZE){
return NXT_ILLEGAL_SIZE_TEXT;
}
if(error_code == NXT_INVALID_MAILBOX_QUEUE){
return NXT_INVALID_MAILBOX_QUEUE_TEXT;
}
if(error_code == NXT_INVALID_FIELD){
return NXT_INVALID_FIELD_TEXT;
}
if(error_code == NXT_BAD_INPUT_OUTPUT){
return NXT_BAD_INPUT_OUTPUT_TEXT;
}
if(error_code == NXT_OUT_OF_MEMORY){
return NXT_OUT_OF_MEMORY_TEXT;
}
if(error_code == NXT_BAD_ARGUMENTS){
return NXT_BAD_ARGUMENTS_TEXT;
}
if(error_code == NXT_I2C_TIMEOUT){
return NXT_I2C_TIMEOUT_TEXT;
}
if(error_code == NXT_NO_MORE_HANDLES){
return NXT_NO_MORE_HANDLES_TEXT;
}
if(error_code == NXT_NO_SPACE){
return NXT_NO_SPACE_TEXT;
}
if(error_code == NXT_NO_MORE_FILES){
return NXT_NO_MORE_FILES_TEXT;
}
if(error_code == NXT_END_OF_FILE_EXPECTED){
return NXT_END_OF_FILE_EXPECTED_TEXT;
}
if(error_code == NXT_END_OF_FILE){
return NXT_END_OF_FILE_TEXT;
}
if(error_code == NXT_NOT_A_LINEAR_FILE){
return NXT_NOT_A_LINEAR_FILE_TEXT;
}
if(error_code == NXT_FILE_NOT_FOUND){
return NXT_FILE_NOT_FOUND_TEXT;
}
if(error_code == NXT_HANDLE_ALREADY_CLOSED){
return NXT_HANDLE_ALREADY_CLOSED_TEXT;
}
if(error_code == NXT_NO_LINEAR_SPACE){
return NXT_NO_LINEAR_SPACE_TEXT;
}
if(error_code == NXT_UNDEFINED_FILE_ERROR){
return NXT_UNDEFINED_FILE_ERROR_TEXT;
}
if(error_code == NXT_FILE_BUSY){
return NXT_FILE_BUSY_TEXT;
}
if(error_code == NXT_NO_WRITE_BUFFERS){
return NXT_NO_WRITE_BUFFERS_TEXT;
}
if(error_code == NXT_APPEND_NOT_POSSIBLE){
return NXT_APPEND_NOT_POSSIBLE_TEXT;
}
if(error_code == NXT_FILE_IS_FULL){
return NXT_FILE_IS_FULL_TEXT;
}
if(error_code == NXT_FILE_EXISTS){
return NXT_FILE_EXISTS_TEXT;
}
if(error_code == NXT_MODULE_NOT_FOUND){
return NXT_MODULE_NOT_FOUND_TEXT;
}
if(error_code == NXT_OUT_OF_BOUNDARY){
return NXT_OUT_OF_BOUNDARY_TEXT;
}
if(error_code == NXT_ILLEGAL_FILE_NAME){
return NXT_ILLEGAL_FILE_NAME_TEXT;
}
if(error_code == NXT_ILLEGAL_HANDLE){
return NXT_ILLEGAL_HANDLE_TEXT;
}
if(error_code == PC_FILE_IO_ERROR){
return PC_FILE_IO_ERROR_TEXT;
}
//default
return "Unknown error";
}