Sha256: 01f7d5f1aa8f6778eae7e52255a0536f65953bc4218ad806fe41a54dcb88c37c

Contents?: true

Size: 1.1 KB

Versions: 2

Compression:

Stored size: 1.1 KB

Contents

# -*- coding: binary -*-
require 'erb'

module Rex
module Proto
module Http

###
#
# This class is used to wrapper the calling of a procedure when a request
# arrives.
#
###
class Handler::Proc < Handler

	#
	# Initializes the proc handler with the supplied procedure
	#
	def initialize(server, procedure, virt_dir = false)
		super(server)

		self.procedure = procedure
		self.virt_dir  = virt_dir || false
	end

	#
	# Returns true if the procedure is representing a virtual directory.
	#
	def relative_resource_required?
		virt_dir	
	end

	#
	# Called when a request arrives.
	#
	def on_request(cli, req)
		begin
			procedure.call(cli, req)
		rescue Errno::EPIPE
			elog("Proc::on_request: Client closed connection prematurely", LogSource)
		rescue
			elog("Proc::on_request: #{$!.class}: #{$!}\n\n#{$@.join("\n")}", LogSource)
			if self.server and self.server.context
				exploit = self.server.context['MsfExploit']
				if exploit
					exploit.print_error("Exception handling request: #{$!}")
				end
			end
		end
	end

protected

	attr_accessor :procedure # :nodoc:
	attr_accessor :virt_dir  # :nodoc:

end

end
end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
librex-0.0.68 lib/rex/proto/http/handler/proc.rb
librex-0.0.66 lib/rex/proto/http/handler/proc.rb