2005-05-31 12:56:36 +00:00
|
|
|
#!/usr/bin/ruby
|
|
|
|
|
|
|
|
require 'socket'
|
|
|
|
|
|
|
|
module Rex
|
|
|
|
module IO
|
|
|
|
|
|
|
|
###
|
|
|
|
#
|
|
|
|
# This class provides an abstraction to a stream based
|
|
|
|
# connection through the use of a streaming socketpair.
|
|
|
|
#
|
|
|
|
###
|
|
|
|
module StreamAbstraction
|
|
|
|
|
2005-07-19 04:21:15 +00:00
|
|
|
#
|
2005-11-15 05:22:13 +00:00
|
|
|
# This method creates a streaming socket pair and initializes it.
|
2005-07-19 04:21:15 +00:00
|
|
|
#
|
2005-05-31 12:56:36 +00:00
|
|
|
def initialize_abstraction
|
|
|
|
self.lsock, self.rsock = ::Socket.pair(::Socket::AF_UNIX,
|
|
|
|
::Socket::SOCK_STREAM, 0)
|
2005-09-27 05:31:48 +00:00
|
|
|
|
|
|
|
self.lsock.extend(Rex::IO::Stream)
|
|
|
|
self.rsock.extend(Rex::IO::Stream)
|
2005-05-31 12:56:36 +00:00
|
|
|
end
|
|
|
|
|
2005-07-26 04:08:01 +00:00
|
|
|
#
|
2005-11-15 05:22:13 +00:00
|
|
|
# This method cleans up the abstraction layer.
|
2005-07-26 04:08:01 +00:00
|
|
|
#
|
|
|
|
def cleanup_abstraction
|
|
|
|
self.lsock.close if (self.lsock)
|
|
|
|
self.rsock.close if (self.rsock)
|
|
|
|
|
|
|
|
self.lsock = nil
|
|
|
|
self.rsock = nil
|
|
|
|
end
|
|
|
|
|
2005-11-15 05:22:13 +00:00
|
|
|
#
|
|
|
|
# The left side of the stream.
|
|
|
|
#
|
|
|
|
attr_reader :lsock
|
|
|
|
#
|
|
|
|
# The right side of the stream.
|
|
|
|
#
|
|
|
|
attr_reader :rsock
|
2005-05-31 12:56:36 +00:00
|
|
|
protected
|
2005-11-15 05:22:13 +00:00
|
|
|
attr_writer :lsock, :rsock # :nodoc:
|
2005-05-31 12:56:36 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
end; end
|