Module: Rex::Socket::Comm

Included in:
Local
Defined in:
lib/rex/socket/comm.rb,
lib/rex/socket.rb

Overview

This mixin provides the basic interface that a derived class must implement in order to be a compatible comm class. The base comm class also supports registering event handlers that can be notified when sockets are being created and have been created. This allows code to extend sockets on creation from the single point that they are created.

Defined Under Namespace

Modules: Events Classes: Local

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.create(param) ⇒ Object

Creates a compatible socket based on the supplied uniform parameters.



47
48
49
# File 'lib/rex/socket/comm.rb', line 47

def self.create(param)
	raise NotImplementedError
end

Instance Method Details

#chainable?Boolean

Indicates whether or not this comm can be chained with other chainable comms. This is particularly important for things like Proxy Comms that can be proxied through one another. The semantics of this are currently undefined and will probably need some more thought.

Returns:

  • (Boolean)


57
58
59
# File 'lib/rex/socket/comm.rb', line 57

def chainable?
	false
end

#deregister_event_handler(handler) ⇒ Object

Deregisters a previously registered event handler.



77
78
79
80
81
# File 'lib/rex/socket/comm.rb', line 77

def deregister_event_handler(handler)
	if (handlers)
		handlers.delete(handler)
	end
end

#each_event_handler(&block) ⇒ Object

Enumerates each registered event handler so that they can be notified of an event.



87
88
89
90
91
# File 'lib/rex/socket/comm.rb', line 87

def each_event_handler(&block)
	if (handlers)
		handlers.each(&block)
	end
end

#notify_before_socket_create(comm, param) ⇒ Object

Notifies handlers of the before socket create event.



96
97
98
99
100
# File 'lib/rex/socket/comm.rb', line 96

def notify_before_socket_create(comm, param)
	each_event_handler() { |handler|
		handler.on_before_socket_create(comm, param)
	}
end

#notify_socket_created(comm, sock, param) ⇒ Object

Notifies handlers of the socket created event.



105
106
107
108
109
# File 'lib/rex/socket/comm.rb', line 105

def notify_socket_created(comm, sock, param)
	each_event_handler() { |handler|
		handler.on_socket_created(comm, sock, param)
	}
end

#register_event_handler(handler) ⇒ Object

Registers an event handler that implements the Rex::Socket::Comm::Event interface in at least some fashion. Event handlers are notified when sockets are created through the Comm instance that they register against.



66
67
68
69
70
71
72
# File 'lib/rex/socket/comm.rb', line 66

def register_event_handler(handler)
	if (handlers == nil)
		self.handlers        = []
	end

	self.handlers << handler
end