#ifndef _EXCEPTIONS_H
#define _EXCEPTIONS_H
#include <hbaapi.h>
#include "Handle.h"
#include "HBAPort.h"
#include "Trace.h"
#include <string>
class HBAException {
public:
HBAException(HBA_STATUS err) : errorCode(err) {
Trace log("HBAException");
log.debug("Error code: %d", err);
log.stackTrace();
}
HBA_STATUS getErrorCode() { return errorCode; }
private:
HBA_STATUS errorCode;
};
class NotSupportedException : public HBAException {
public:
NotSupportedException() : HBAException(HBA_STATUS_ERROR_NOT_SUPPORTED) { }
};
class InvalidHandleException : public HBAException {
public:
InvalidHandleException() : HBAException(HBA_STATUS_ERROR_INVALID_HANDLE) { }
};
class BadArgumentException : public HBAException {
public:
BadArgumentException() : HBAException(HBA_STATUS_ERROR_ARG) { }
};
class IllegalWWNException : public HBAException {
public:
IllegalWWNException() : HBAException(HBA_STATUS_ERROR_ILLEGAL_WWN) { }
};
class IllegalIndexException : public HBAException {
public:
IllegalIndexException() : HBAException(HBA_STATUS_ERROR_ILLEGAL_INDEX) { }
};
class MoreDataException : public HBAException {
public:
MoreDataException() : HBAException(HBA_STATUS_ERROR_MORE_DATA) { }
};
class StaleDataException : public HBAException {
public:
StaleDataException() : HBAException(HBA_STATUS_ERROR_STALE_DATA) { }
};
class CheckConditionException : public HBAException {
public:
CheckConditionException() : HBAException(HBA_STATUS_SCSI_CHECK_CONDITION) { }
};
class BusyException : public HBAException {
public:
BusyException() : HBAException(HBA_STATUS_ERROR_BUSY) { }
};
class TryAgainException : public HBAException {
public:
TryAgainException() : HBAException(HBA_STATUS_ERROR_TRY_AGAIN) { }
};
class UnavailableException : public HBAException {
public:
UnavailableException() : HBAException(HBA_STATUS_ERROR_UNAVAILABLE) { }
};
class ELSRejectException : public HBAException {
public:
ELSRejectException() : HBAException(HBA_STATUS_ERROR_ELS_REJECT) { }
};
class InvalidLUNException : public HBAException {
public:
InvalidLUNException() : HBAException(HBA_STATUS_ERROR_INVALID_LUN) { }
};
class IncompatibleException : public HBAException {
public:
IncompatibleException() : HBAException(HBA_STATUS_ERROR_INCOMPATIBLE) { }
};
class AmbiguousWWNException : public HBAException {
public:
AmbiguousWWNException() : HBAException(HBA_STATUS_ERROR_AMBIGUOUS_WWN) { }
};
class NotATargetException : public HBAException {
public:
NotATargetException() : HBAException(HBA_STATUS_ERROR_NOT_A_TARGET) { }
};
class UnsupportedFC4Exception : public HBAException {
public:
UnsupportedFC4Exception() : HBAException(HBA_STATUS_ERROR_UNSUPPORTED_FC4) { }
};
class IncapableException : public HBAException {
public:
IncapableException() : HBAException(HBA_STATUS_ERROR_INCAPABLE) { }
};
class IOError : public HBAException {
public:
IOError(std::string message);
IOError(Handle *handle);
IOError(HBAPort *port);
IOError(HBAPort *port, uint64_t target);
IOError(HBAPort *port, uint64_t target, uint64_t lun);
};
class InternalError : public HBAException {
public:
InternalError();
InternalError(std::string message);
};
#endif