2005-08-22 04:34:40 +00:00
|
|
|
require 'rex'
|
|
|
|
require 'rex/proto'
|
|
|
|
|
|
|
|
module Rex
|
|
|
|
|
|
|
|
###
|
|
|
|
#
|
|
|
|
# The service module is used to extend classes that are passed into the
|
|
|
|
# service manager start routine. It provides extra methods, such as reference
|
|
|
|
# counting, that are used to track the service instances more uniformly.
|
|
|
|
#
|
|
|
|
###
|
|
|
|
module Service
|
|
|
|
include Ref
|
2005-09-21 04:48:37 +00:00
|
|
|
|
2005-09-29 20:18:24 +00:00
|
|
|
require 'rex/services/local_relay'
|
|
|
|
|
2006-08-08 03:29:26 +00:00
|
|
|
#
|
|
|
|
# Returns the hardcore, as in porno, alias for this service. This is used
|
|
|
|
# by the service manager to manage singleton services.
|
|
|
|
#
|
|
|
|
def self.hardcore_alias(*args)
|
2008-12-19 07:11:08 +00:00
|
|
|
return "__#{args}"
|
2006-08-08 03:29:26 +00:00
|
|
|
end
|
|
|
|
|
2006-12-17 07:12:04 +00:00
|
|
|
def deref
|
|
|
|
rv = super
|
|
|
|
|
|
|
|
# If there's only one reference, then it's the service managers.
|
|
|
|
if @_references == 1
|
|
|
|
Rex::ServiceManager.stop_service(self)
|
|
|
|
end
|
|
|
|
|
|
|
|
rv
|
|
|
|
end
|
|
|
|
|
2005-09-21 04:48:37 +00:00
|
|
|
#
|
|
|
|
# Calls stop on the service once the ref count drops.
|
|
|
|
#
|
|
|
|
def cleanup
|
|
|
|
stop
|
|
|
|
end
|
2005-09-29 20:18:24 +00:00
|
|
|
|
|
|
|
attr_accessor :alias
|
|
|
|
|
2005-08-22 04:34:40 +00:00
|
|
|
end
|
|
|
|
|
2008-10-19 21:03:39 +00:00
|
|
|
end
|