| 1 |
|
|---|
| 2 |
|
|---|
| 3 |
|
|---|
| 4 |
|
|---|
| 5 |
use strict; |
|---|
| 6 |
use warnings; |
|---|
| 7 |
use Carp (); |
|---|
| 8 |
|
|---|
| 9 |
use HoneyClient::Agent; |
|---|
| 10 |
use HoneyClient::Util::SOAP qw(getClientHandle); |
|---|
| 11 |
use Data::Dumper; |
|---|
| 12 |
use MIME::Base64 qw(decode_base64 encode_base64); |
|---|
| 13 |
use Storable qw(thaw nfreeze); |
|---|
| 14 |
|
|---|
| 15 |
our ($stub, $som); |
|---|
| 16 |
our $URL = HoneyClient::Agent->init(); |
|---|
| 17 |
|
|---|
| 18 |
our $agentState = undef; |
|---|
| 19 |
my $tempState = undef; |
|---|
| 20 |
|
|---|
| 21 |
print "URL: " . $URL. "\n"; |
|---|
| 22 |
|
|---|
| 23 |
sub _watchdogFaultHandler { |
|---|
| 24 |
|
|---|
| 25 |
|
|---|
| 26 |
my ($class, $res) = @_; |
|---|
| 27 |
|
|---|
| 28 |
|
|---|
| 29 |
|
|---|
| 30 |
|
|---|
| 31 |
my $errMsg = $class->transport->status; |
|---|
| 32 |
|
|---|
| 33 |
if (ref $res) { |
|---|
| 34 |
$errMsg = $res->faultcode . ": ". $res->faultstring . "\n"; |
|---|
| 35 |
} |
|---|
| 36 |
|
|---|
| 37 |
print "Watchdog fault detected, recovering Agent daemon.\n"; |
|---|
| 38 |
|
|---|
| 39 |
|
|---|
| 40 |
|
|---|
| 41 |
|
|---|
| 42 |
|
|---|
| 43 |
|
|---|
| 44 |
HoneyClient::Agent->destroy(); |
|---|
| 45 |
|
|---|
| 46 |
$URL = HoneyClient::Agent->init(); |
|---|
| 47 |
|
|---|
| 48 |
|
|---|
| 49 |
$som = $stub->updateState(encode_base64(nfreeze($agentState))); |
|---|
| 50 |
} |
|---|
| 51 |
|
|---|
| 52 |
$stub = getClientHandle(address => 'localhost', |
|---|
| 53 |
namespace => 'HoneyClient::Agent', |
|---|
| 54 |
fault_handler => \&_watchdogFaultHandler); |
|---|
| 55 |
|
|---|
| 56 |
for (;;) { |
|---|
| 57 |
|
|---|
| 58 |
sleep (5); |
|---|
| 59 |
$som = $stub->getState(); |
|---|
| 60 |
if (defined($som) and (ref($som) eq "SOAP::SOM")) { |
|---|
| 61 |
$tempState = $som->result(); |
|---|
| 62 |
if (defined($tempState)) { |
|---|
| 63 |
|
|---|
| 64 |
eval { |
|---|
| 65 |
$tempState = thaw(decode_base64($tempState)); |
|---|
| 66 |
}; |
|---|
| 67 |
if (!$@) { |
|---|
| 68 |
$agentState = $tempState; |
|---|
| 69 |
} |
|---|
| 70 |
} |
|---|
| 71 |
} |
|---|
| 72 |
} |
|---|
| 73 |
|
|---|
| 74 |
HoneyClient::Agent->destroy(); |
|---|