lib/rex/service_manager.rb in librex-0.0.68 vs lib/rex/service_manager.rb in librex-0.0.70
- old
+ new
@@ -11,144 +11,144 @@
# used to start HTTP servers and manage them and all that stuff. Yup.
#
###
class ServiceManager < Hash
- #
- # This class is a singleton.
- #
- include Singleton
+ #
+ # This class is a singleton.
+ #
+ include Singleton
- #
- # Calls the instance method to start a service.
- #
- def self.start(klass, *args)
- self.instance.start(klass, *args)
- end
+ #
+ # Calls the instance method to start a service.
+ #
+ def self.start(klass, *args)
+ self.instance.start(klass, *args)
+ end
- #
- # Calls the instance method to stop a service.
- #
- def self.stop(klass, *args)
- self.instance.stop(klass, *args)
- end
+ #
+ # Calls the instance method to stop a service.
+ #
+ def self.stop(klass, *args)
+ self.instance.stop(klass, *args)
+ end
- #
- # Stop a service using the alias that's associated with it.
- #
- def self.stop_by_alias(als)
- self.instance.stop_by_alias(als)
- end
+ #
+ # Stop a service using the alias that's associated with it.
+ #
+ def self.stop_by_alias(als)
+ self.instance.stop_by_alias(als)
+ end
- #
- # Stop the supplied service instance.
- #
- def self.stop_service(service)
- self.instance.stop_service(service)
- end
+ #
+ # Stop the supplied service instance.
+ #
+ def self.stop_service(service)
+ self.instance.stop_service(service)
+ end
- #
- # Starts a service and assigns it a unique name in the service hash.
- #
- def start(klass, *args)
- # Get the hardcore alias.
- hals = "#{klass}" + klass.hardcore_alias(*args)
+ #
+ # Starts a service and assigns it a unique name in the service hash.
+ #
+ def start(klass, *args)
+ # Get the hardcore alias.
+ hals = "#{klass}" + klass.hardcore_alias(*args)
- # Has a service already been constructed for this guy? If so, increment
- # its reference count like it aint no thang.
- if (inst = self[hals])
- inst.ref
- return inst
- end
+ # Has a service already been constructed for this guy? If so, increment
+ # its reference count like it aint no thang.
+ if (inst = self[hals])
+ inst.ref
+ return inst
+ end
- inst = klass.new(*args)
- als = inst.alias
+ inst = klass.new(*args)
+ als = inst.alias
- # Find an alias that isn't taken.
- if (self[als])
- cnt = 1
- cnt += 1 while (self[als + " #{cnt}"])
- als = inst.alias + " #{cnt}"
- end
+ # Find an alias that isn't taken.
+ if (self[als])
+ cnt = 1
+ cnt += 1 while (self[als + " #{cnt}"])
+ als = inst.alias + " #{cnt}"
+ end
- # Extend the instance as a service.
- inst.extend(Rex::Service)
+ # Extend the instance as a service.
+ inst.extend(Rex::Service)
- # Re-aliases the instance.
- inst.alias = als
+ # Re-aliases the instance.
+ inst.alias = als
- # Fire up the engines. If an error occurs an exception will be
- # raised.
- inst.start
+ # Fire up the engines. If an error occurs an exception will be
+ # raised.
+ inst.start
- # Alias associate and initialize reference counting
- self[als] = self[hals] = inst.refinit
+ # Alias associate and initialize reference counting
+ self[als] = self[hals] = inst.refinit
- # Pass the caller a reference
- inst.ref
+ # Pass the caller a reference
+ inst.ref
- inst
- end
+ inst
+ end
- #
- # Stop a service using a given klass and arguments. These should mirror
- # what was originally passed to start exactly. If the reference count of
- # the service drops to zero the service will be destroyed.
- #
- def stop(klass, *args)
- stop_service(hals[hardcore_alias(klass, *args)])
- end
+ #
+ # Stop a service using a given klass and arguments. These should mirror
+ # what was originally passed to start exactly. If the reference count of
+ # the service drops to zero the service will be destroyed.
+ #
+ def stop(klass, *args)
+ stop_service(hals[hardcore_alias(klass, *args)])
+ end
- #
- # Stops a service using the provided alias.
- #
- def stop_by_alias(als)
- stop_service(self[als])
- end
+ #
+ # Stops a service using the provided alias.
+ #
+ def stop_by_alias(als)
+ stop_service(self[als])
+ end
- #
- # Stops a service instance.
- #
- def stop_service(inst)
- # Stop the service and be done wif it, but only if the number of
- # references has dropped to zero
- if (inst)
- # Since the instance may have multiple aliases, scan through
- # all the pairs for matching stuff.
- self.each_pair { |cals, cinst|
- self.delete(cals) if (inst == cinst)
- }
+ #
+ # Stops a service instance.
+ #
+ def stop_service(inst)
+ # Stop the service and be done wif it, but only if the number of
+ # references has dropped to zero
+ if (inst)
+ # Since the instance may have multiple aliases, scan through
+ # all the pairs for matching stuff.
+ self.each_pair { |cals, cinst|
+ self.delete(cals) if (inst == cinst)
+ }
- # Lose the list-held reference to the instance
- inst.deref
+ # Lose the list-held reference to the instance
+ inst.deref
- return true
- end
+ return true
+ end
- # Return false if the service isn't there
- return false
- end
+ # Return false if the service isn't there
+ return false
+ end
- #
- # Overrides the builtin 'each' operator to avoid the following exception on Ruby 1.9.2+
- # "can't add a new key into hash during iteration"
- #
- def each(&block)
- list = []
- self.keys.sort.each do |sidx|
- list << [sidx, self[sidx]]
- end
- list.each(&block)
- end
+ #
+ # Overrides the builtin 'each' operator to avoid the following exception on Ruby 1.9.2+
+ # "can't add a new key into hash during iteration"
+ #
+ def each(&block)
+ list = []
+ self.keys.sort.each do |sidx|
+ list << [sidx, self[sidx]]
+ end
+ list.each(&block)
+ end
protected
- #
- # Returns the alias for a given service instance.
- #
- def hardcore_alias(klass, *args)
- "__#{klass.name}#{args}"
- end
+ #
+ # Returns the alias for a given service instance.
+ #
+ def hardcore_alias(klass, *args)
+ "__#{klass.name}#{args}"
+ end
end
end