You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
154 lines
4.0 KiB
Go
154 lines
4.0 KiB
Go
package core
|
|
|
|
// ErrorCode specifies types of errors for later identification
|
|
type ErrorCode int
|
|
|
|
// Core ErrorCodes
|
|
const (
|
|
ConnWriteErr ErrorCode = -1
|
|
ConnReadErr ErrorCode = -2
|
|
ConnCloseErr ErrorCode = -3
|
|
ListenerResolveErr ErrorCode = -4
|
|
ListenerBeginErr ErrorCode = -5
|
|
ListenerAcceptErr ErrorCode = -6
|
|
InvalidIPErr ErrorCode = -7
|
|
InvalidPortErr ErrorCode = -8
|
|
MutexUpgradeErr ErrorCode = -9
|
|
MutexDowngradeErr ErrorCode = -10
|
|
FileOpenErr ErrorCode = -11
|
|
FileStatErr ErrorCode = -12
|
|
FileReadErr ErrorCode = -13
|
|
FileTypeErr ErrorCode = -14
|
|
DirectoryReadErr ErrorCode = -15
|
|
RestrictedPathErr ErrorCode = -16
|
|
InvalidRequestErr ErrorCode = -17
|
|
CGIStartErr ErrorCode = -18
|
|
CGIExitCodeErr ErrorCode = -19
|
|
CGIStatus400Err ErrorCode = -20
|
|
CGIStatus401Err ErrorCode = -21
|
|
CGIStatus403Err ErrorCode = -22
|
|
CGIStatus404Err ErrorCode = -23
|
|
CGIStatus408Err ErrorCode = -24
|
|
CGIStatus410Err ErrorCode = -25
|
|
CGIStatus500Err ErrorCode = -26
|
|
CGIStatus501Err ErrorCode = -27
|
|
CGIStatus503Err ErrorCode = -28
|
|
CGIStatusUnknownErr ErrorCode = -29
|
|
)
|
|
|
|
// Error specifies error interface with identifiable ErrorCode
|
|
type Error interface {
|
|
Code() ErrorCode
|
|
Error() string
|
|
}
|
|
|
|
// getExtendedErrorMessage converts an ErrorCode to string message
|
|
var getExtendedErrorMessage func(ErrorCode) string
|
|
|
|
// getErrorMessage converts an ErrorCode to string message first checking internal codes, next user supplied
|
|
func getErrorMessage(code ErrorCode) string {
|
|
switch code {
|
|
case ConnWriteErr:
|
|
return connWriteErrStr
|
|
case ConnReadErr:
|
|
return connReadErrStr
|
|
case ConnCloseErr:
|
|
return connCloseErrStr
|
|
case ListenerResolveErr:
|
|
return listenerResolveErrStr
|
|
case ListenerBeginErr:
|
|
return listenerBeginErrStr
|
|
case ListenerAcceptErr:
|
|
return listenerAcceptErrStr
|
|
case InvalidIPErr:
|
|
return invalidIPErrStr
|
|
case InvalidPortErr:
|
|
return invalidPortErrStr
|
|
case MutexUpgradeErr:
|
|
return mutexUpgradeErrStr
|
|
case MutexDowngradeErr:
|
|
return mutexDowngradeErrStr
|
|
case FileOpenErr:
|
|
return fileOpenErrStr
|
|
case FileStatErr:
|
|
return fileStatErrStr
|
|
case FileReadErr:
|
|
return fileReadErrStr
|
|
case FileTypeErr:
|
|
return fileTypeErrStr
|
|
case DirectoryReadErr:
|
|
return directoryReadErrStr
|
|
case RestrictedPathErr:
|
|
return restrictedPathErrStr
|
|
case InvalidRequestErr:
|
|
return invalidRequestErrStr
|
|
case CGIStartErr:
|
|
return cgiStartErrStr
|
|
case CGIExitCodeErr:
|
|
return cgiExitCodeErrStr
|
|
case CGIStatus400Err:
|
|
return cgiStatus400ErrStr
|
|
case CGIStatus401Err:
|
|
return cgiStatus401ErrStr
|
|
case CGIStatus403Err:
|
|
return cgiStatus403ErrStr
|
|
case CGIStatus404Err:
|
|
return cgiStatus404ErrStr
|
|
case CGIStatus408Err:
|
|
return cgiStatus408ErrStr
|
|
case CGIStatus410Err:
|
|
return cgiStatus410ErrStr
|
|
case CGIStatus500Err:
|
|
return cgiStatus500ErrStr
|
|
case CGIStatus501Err:
|
|
return cgiStatus501ErrStr
|
|
case CGIStatus503Err:
|
|
return cgiStatus503ErrStr
|
|
case CGIStatusUnknownErr:
|
|
return cgiStatusUnknownErrStr
|
|
default:
|
|
return getExtendedErrorMessage(code)
|
|
}
|
|
}
|
|
|
|
// regularError simply holds an ErrorCode
|
|
type regularError struct {
|
|
code ErrorCode
|
|
}
|
|
|
|
// Error returns the error string for the underlying ErrorCode
|
|
func (e *regularError) Error() string {
|
|
return getErrorMessage(e.code)
|
|
}
|
|
|
|
// Code returns the underlying ErrorCode
|
|
func (e *regularError) Code() ErrorCode {
|
|
return e.code
|
|
}
|
|
|
|
// NewError returns a new Error based on supplied ErrorCode
|
|
func NewError(code ErrorCode) Error {
|
|
return ®ularError{code}
|
|
}
|
|
|
|
// wrappedError wraps an existing error with new ErrorCode
|
|
type wrappedError struct {
|
|
code ErrorCode
|
|
err error
|
|
}
|
|
|
|
// Error returns the error string for underlying error and set ErrorCode
|
|
func (e *wrappedError) Error() string {
|
|
return getErrorMessage(e.code) + " - " + e.err.Error()
|
|
}
|
|
|
|
// Code returns the underlying ErrorCode
|
|
func (e *wrappedError) Code() ErrorCode {
|
|
return e.code
|
|
}
|
|
|
|
// WrapError returns a new Error based on supplied error and ErrorCode
|
|
func WrapError(code ErrorCode, err error) Error {
|
|
return &wrappedError{code, err}
|
|
}
|