50 lines
865 B
Ruby
50 lines
865 B
Ruby
# -*- coding: binary -*-
|
|
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
|
|
|
|
require 'rex/services/local_relay'
|
|
|
|
#
|
|
# 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)
|
|
return "__#{args}"
|
|
end
|
|
|
|
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
|
|
|
|
#
|
|
# Calls stop on the service once the ref count drops.
|
|
#
|
|
def cleanup
|
|
stop
|
|
end
|
|
|
|
attr_accessor :alias
|
|
|
|
end
|
|
|
|
end
|