require 'msf/core'

module Msf

###
#
# This class acts as the base class for all nop generators.
#
###
class Nop < Msf::Module

	#
	# Returns MODULE_NOP to indicate that this is a NOP module.
	#
	def self.type
		return MODULE_NOP
	end

	#
	# Returns MODULE_NOP to indicate that this is a NOP module.
	#
	def type
		return MODULE_NOP
	end

	#
	# Initializes the NOP generator, defaulting it to being usable on all
	# platforms.
	#
	def initialize(info = {})
		super({
				'Platform' => '' # All platforms by default
			}.update(info))
	end

	#
	# Stub method for generating a sled with the provided arguments.  Derived
	# Nop implementations must supply a length and can supply one or more of
	# the following options:
	#
	#   - Random (true/false)
	#     Indicates that the caller desires random NOPs (if supported).
	#   - SaveRegisters (array)
	#     The list of registers that should not be clobbered by the NOP
	#     generator.
	#   - BadChars (string)
	#     The list of characters that should be avoided by the NOP 
	#     generator.
	#
	def generate_sled(length, opts)
		return nil
	end

	#
	# Default repetition threshold when finding nop characters.
	#
	def nop_repeat_threshold
		return 10000
	end

end

end
