58 lines
1.8 KiB
Go
58 lines
1.8 KiB
Go
package stomp
|
|
|
|
import (
|
|
"github.com/go-stomp/stomp/v3/frame"
|
|
)
|
|
|
|
// Error values
|
|
var (
|
|
ErrInvalidCommand = newErrorMessage("invalid command")
|
|
ErrInvalidFrameFormat = newErrorMessage("invalid frame format")
|
|
ErrUnsupportedVersion = newErrorMessage("unsupported version")
|
|
ErrCompletedTransaction = newErrorMessage("transaction is completed")
|
|
ErrNackNotSupported = newErrorMessage("NACK not supported in STOMP 1.0")
|
|
ErrNotReceivedMessage = newErrorMessage("cannot ack/nack a message, not from server")
|
|
ErrCannotNackAutoSub = newErrorMessage("cannot send NACK for a subscription with ack:auto")
|
|
ErrCompletedSubscription = newErrorMessage("subscription is unsubscribed")
|
|
ErrClosedUnexpectedly = newErrorMessage("connection closed unexpectedly")
|
|
ErrAlreadyClosed = newErrorMessage("connection already closed")
|
|
ErrMsgSendTimeout = newErrorMessage("msg send timeout")
|
|
ErrMsgReceiptTimeout = newErrorMessage("msg receipt timeout")
|
|
ErrDisconnectReceiptTimeout = newErrorMessage("disconnect receipt timeout")
|
|
ErrNilOption = newErrorMessage("nil option")
|
|
)
|
|
|
|
// StompError implements the Error interface, and provides
|
|
// additional information about a STOMP error.
|
|
type Error struct {
|
|
Message string
|
|
Frame *frame.Frame
|
|
}
|
|
|
|
func (e Error) Error() string {
|
|
return e.Message
|
|
}
|
|
|
|
func missingHeader(name string) Error {
|
|
return newErrorMessage("missing header: " + name)
|
|
}
|
|
|
|
func newErrorMessage(msg string) Error {
|
|
return Error{Message: msg}
|
|
}
|
|
|
|
func newError(f *frame.Frame) Error {
|
|
e := Error{Frame: f}
|
|
|
|
if f.Command == frame.ERROR {
|
|
if message := f.Header.Get(frame.Message); message != "" {
|
|
e.Message = message
|
|
} else {
|
|
e.Message = "ERROR frame, missing message header"
|
|
}
|
|
} else {
|
|
e.Message = "Unexpected frame: " + f.Command
|
|
}
|
|
return e
|
|
}
|