Class: Rex::Post::Meterpreter::PacketResponseWaiter
- Inherits:
-
Object
- Object
- Rex::Post::Meterpreter::PacketResponseWaiter
- Defined in:
- lib/rex/post/meterpreter/packet_response_waiter.rb
Overview
This class handles waiting for a response to a given request and the subsequent response association.
Instance Attribute Summary collapse
-
#completion_param ⇒ Object
:nodoc:.
-
#completion_routine ⇒ Object
:nodoc:.
-
#done ⇒ Object
:nodoc:.
-
#response ⇒ Object
:nodoc:.
-
#rid ⇒ Object
:nodoc:.
Instance Method Summary collapse
-
#initialize(rid, completion_routine = nil, completion_param = nil) ⇒ PacketResponseWaiter
constructor
Initializes a response waiter instance for the supplied request identifier.
-
#notify(response) ⇒ Object
Notifies the waiter that the supplied response packet has arrived.
-
#wait(interval) ⇒ Object
Waits for a given time interval for the response packet to arrive.
-
#waiting_for?(packet) ⇒ Boolean
Checks to see if this waiter instance is waiting for the supplied packet based on its request identifier.
Constructor Details
#initialize(rid, completion_routine = nil, completion_param = nil) ⇒ PacketResponseWaiter
Initializes a response waiter instance for the supplied request identifier.
22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/rex/post/meterpreter/packet_response_waiter.rb', line 22 def initialize(rid, completion_routine = nil, completion_param = nil) self.rid = rid.dup self.response = nil if (completion_routine) self.completion_routine = completion_routine self.completion_param = completion_param else self.done = false end end |
Instance Attribute Details
#completion_param ⇒ Object
:nodoc:
79 80 81 |
# File 'lib/rex/post/meterpreter/packet_response_waiter.rb', line 79 def completion_param @completion_param end |
#completion_routine ⇒ Object
:nodoc:
79 80 81 |
# File 'lib/rex/post/meterpreter/packet_response_waiter.rb', line 79 def completion_routine @completion_routine end |
#done ⇒ Object
:nodoc:
78 79 80 |
# File 'lib/rex/post/meterpreter/packet_response_waiter.rb', line 78 def done @done end |
#response ⇒ Object
:nodoc:
78 79 80 |
# File 'lib/rex/post/meterpreter/packet_response_waiter.rb', line 78 def response @response end |
#rid ⇒ Object
:nodoc:
78 79 80 |
# File 'lib/rex/post/meterpreter/packet_response_waiter.rb', line 78 def rid @rid end |
Instance Method Details
#notify(response) ⇒ Object
Notifies the waiter that the supplied response packet has arrived.
45 46 47 48 49 50 51 52 53 |
# File 'lib/rex/post/meterpreter/packet_response_waiter.rb', line 45 def notify(response) self.response = response if (self.completion_routine) self.completion_routine.call(response, self.completion_param) else self.done = true end end |
#wait(interval) ⇒ Object
Waits for a given time interval for the response packet to arrive. If the interval is -1 we can wait forever.
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/rex/post/meterpreter/packet_response_waiter.rb', line 59 def wait(interval) if( interval and interval == -1 ) while(not self.done) ::IO.select(nil, nil, nil, 0.1) end else begin Timeout.timeout(interval) { while(not self.done) ::IO.select(nil, nil, nil, 0.1) end } rescue Timeout::Error self.response = nil end end return self.response end |
#waiting_for?(packet) ⇒ Boolean
Checks to see if this waiter instance is waiting for the supplied packet based on its request identifier.
38 39 40 |
# File 'lib/rex/post/meterpreter/packet_response_waiter.rb', line 38 def waiting_for?(packet) return (packet.rid == rid) end |