Files
metasploit-gs/lib/rex/exceptions.rb
T

308 lines
5.2 KiB
Ruby
Raw Normal View History

# -*- coding: binary -*-
2005-06-04 18:55:20 +00:00
module Rex
###
#
# Base mixin for all exceptions that can be thrown from inside Rex.
#
###
module Exception
end
2005-11-02 23:03:02 +00:00
###
#
2005-11-02 23:03:02 +00:00
# This exception is raised when a timeout occurs.
#
###
2005-06-04 18:55:20 +00:00
class TimeoutError < Interrupt
2013-08-30 16:28:33 -05:00
include Exception
2005-06-04 19:45:47 +00:00
2013-08-30 16:28:33 -05:00
def to_s
"Operation timed out."
end
2005-06-04 18:55:20 +00:00
end
2005-11-02 23:03:02 +00:00
###
#
# This exception is raised when a method is called or a feature is used that
# is not implemented.
#
###
2005-06-04 18:55:20 +00:00
class NotImplementedError < ::NotImplementedError
2013-08-30 16:28:33 -05:00
include Exception
2005-06-04 19:45:47 +00:00
2013-08-30 16:28:33 -05:00
def to_s
"The requested method is not implemented."
end
2005-06-04 18:55:20 +00:00
end
2005-11-02 23:03:02 +00:00
###
#
# This exception is raised when a generalized runtime error occurs.
#
###
2005-06-04 20:40:00 +00:00
class RuntimeError < ::RuntimeError
2013-08-30 16:28:33 -05:00
include Exception
2005-06-04 20:40:33 +00:00
end
2005-06-04 20:40:00 +00:00
2005-11-02 23:03:02 +00:00
###
#
# This exception is raised when an invalid argument is supplied to a method.
#
###
2005-06-04 18:55:20 +00:00
class ArgumentError < ::ArgumentError
2013-08-30 16:28:33 -05:00
include Exception
def initialize(message = nil)
@message = message
end
def to_s
str = 'An invalid argument was specified.'
if @message
str << " #{@message}"
end
str
end
2005-06-04 19:45:47 +00:00
end
2005-11-02 23:03:02 +00:00
###
#
# This exception is raised when an argument that was supplied to a method
# could not be parsed correctly.
#
###
2005-07-10 07:27:50 +00:00
class ArgumentParseError < ::ArgumentError
2013-08-30 16:28:33 -05:00
include Exception
2005-07-10 07:27:50 +00:00
2013-08-30 16:28:33 -05:00
def to_s
"The argument could not be parsed correctly."
end
2005-07-10 07:27:50 +00:00
end
2005-11-02 23:03:02 +00:00
###
#
# This exception is raised when an argument is ambiguous.
#
###
2005-07-14 20:05:41 +00:00
class AmbiguousArgumentError < ::RuntimeError
2013-08-30 16:28:33 -05:00
include Exception
2005-07-14 20:05:41 +00:00
2013-08-30 16:28:33 -05:00
def initialize(name = nil)
@name = name
end
2005-07-14 20:05:41 +00:00
2013-08-30 16:28:33 -05:00
def to_s
"The name #{@name} is ambiguous."
end
2005-07-14 20:05:41 +00:00
end
2005-11-02 23:03:02 +00:00
###
2005-09-29 20:18:24 +00:00
#
# This error is thrown when a stream is detected as being closed.
#
2005-11-02 23:03:02 +00:00
###
2005-09-29 20:18:24 +00:00
class StreamClosedError < ::IOError
2013-08-30 16:28:33 -05:00
include Exception
2005-09-29 20:18:24 +00:00
2013-08-30 16:28:33 -05:00
def initialize(stream)
@stream = stream
end
2005-09-29 20:18:24 +00:00
2013-08-30 16:28:33 -05:00
def stream
@stream
end
2005-09-29 20:18:24 +00:00
2013-08-30 16:28:33 -05:00
def to_s
"Stream #{@stream} is closed."
end
2005-09-29 20:18:24 +00:00
end
2005-06-04 19:45:47 +00:00
##
#
# Socket exceptions
#
##
2005-11-02 23:03:02 +00:00
###
#
# This exception is raised when a general socket error occurs.
#
###
2005-06-04 19:45:47 +00:00
module SocketError
2013-08-30 16:28:33 -05:00
include Exception
2005-06-04 19:45:47 +00:00
2013-08-30 16:28:33 -05:00
def to_s
"A socket error occurred."
end
2005-06-04 19:45:47 +00:00
end
2005-06-04 19:56:54 +00:00
###
#
2005-11-02 23:03:02 +00:00
# This exception is raised when there is some kind of error related to
# communication with a host.
2005-06-04 19:56:54 +00:00
#
###
module HostCommunicationError
2013-08-30 16:28:33 -05:00
def initialize(addr = nil, port = nil)
self.host = addr
self.port = port
end
#
# This method returns a printable address and optional port associated
# with the host that triggered the exception.
#
def addr_to_s
if host and port
"(#{host}:#{port})"
elsif host
"(#{host})"
else
""
end
end
attr_accessor :host, :port
2005-06-04 19:56:54 +00:00
end
2005-11-02 23:03:02 +00:00
###
#
# This is a generic exception for errors that cause a connection to fail.
2005-11-02 23:03:02 +00:00
#
###
class ConnectionError < ::IOError
2013-08-30 16:28:33 -05:00
include SocketError
include HostCommunicationError
end
2005-06-04 19:45:47 +00:00
###
#
# This exception is raised when a connection attempt fails because the remote
# side refused the connection.
#
###
class ConnectionRefused < ConnectionError
2013-08-30 16:28:33 -05:00
def to_s
"The connection was refused by the remote host #{addr_to_s}."
end
end
###
#
# This exception is raised when a connection attempt fails because the remote
# side is unreachable.
#
###
class HostUnreachable < ConnectionError
2013-08-30 16:28:33 -05:00
def to_s
"The host #{addr_to_s} was unreachable."
end
2005-06-04 19:45:47 +00:00
end
2005-11-02 23:03:02 +00:00
###
#
# This exception is raised when a connection attempt times out.
#
###
class ConnectionTimeout < ConnectionError
2013-08-30 16:28:33 -05:00
def to_s
"The connection timed out #{addr_to_s}."
end
2005-06-04 19:56:54 +00:00
end
###
#
# This connection error is raised when an attempt is made to connect
# to a broadcast or network address.
#
###
class InvalidDestination < ConnectionError
include SocketError
include HostCommunicationError
def to_s
"The destination is invalid: #{addr_to_s}."
end
end
2005-11-02 23:03:02 +00:00
###
#
# This exception is raised when an attempt to use an address or port that is
# already in use or onot available occurs. such as binding to a host on a
# given port that is already in use, or when a bind address is specified that
# is not available to the host.
2005-11-02 23:03:02 +00:00
#
###
class BindFailed < ::ArgumentError
include SocketError
include HostCommunicationError
def to_s
"The address is already in use or unavailable: #{addr_to_s}."
end
end
##
#
# This exception is listed for backwards compatibility. We had been
# using AddressInUse as the exception for both bind errors and connection
# errors triggered by connection attempts to broadcast and network addresses.
# The two classes above have split this into their respective sources, but
# callers may still expect the old behavior.
#
##
class AddressInUse < ConnectionError
2013-08-30 16:28:33 -05:00
include SocketError
include HostCommunicationError
2005-06-04 19:45:47 +00:00
2013-08-30 16:28:33 -05:00
def to_s
"The address is already in use or unavailable: #{addr_to_s}."
2013-08-30 16:28:33 -05:00
end
2005-06-04 18:55:20 +00:00
end
2005-11-02 23:03:02 +00:00
###
#
# This exception is raised when an unsupported internet protocol is specified.
#
###
2005-06-04 20:38:49 +00:00
class UnsupportedProtocol < ::ArgumentError
2013-08-30 16:28:33 -05:00
include SocketError
2005-06-04 20:38:49 +00:00
2013-08-30 16:28:33 -05:00
def initialize(proto = nil)
self.proto = proto
end
2005-06-04 20:38:49 +00:00
2013-08-30 16:28:33 -05:00
def to_s
"The protocol #{proto} is not supported."
end
2005-06-04 20:38:49 +00:00
2013-08-30 16:28:33 -05:00
attr_accessor :proto
2005-06-04 20:38:49 +00:00
end
###
#
# This exception is raised when a proxy fails to pass a connection
#
###
class ConnectionProxyError < ConnectionError
2013-08-30 16:28:33 -05:00
def initialize(host,port,ptype,reason)
super(host,port)
self.ptype = ptype
self.reason = reason
end
2013-08-30 16:28:33 -05:00
def to_s
self.ptype + ": " + self.reason
end
2013-08-30 16:28:33 -05:00
attr_accessor :ptype, :reason
end
end