The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#!perl -w -Ilib

# $Id: StartManager.pl 769 2007-07-26 18:44:38Z kindlund $

use strict;
use warnings;
use Carp ();

use Data::Dumper;

# Include Hash Serialization Utility Libraries
use Storable qw(nfreeze thaw);

# Include Base64 Libraries
use MIME::Base64 qw(encode_base64 decode_base64);

# Include Getopt Parser
use Getopt::Long;

use HoneyClient::Manager;

# We expect that the user will supply a single argument to this script.
# Namely, the initial URL that they want the Agent to use.
# They can however supply multiple urls which will be processed in order

# Change to 'HoneyClient::Agent::Driver::Browser::IE' or
#           'HoneyClient::Agent::Driver::Browser::FF'
my $driver = "HoneyClient::Agent::Driver::Browser::IE";
my $config = undef;
my $maxrel = -1;
my $nexturl = "";
my $urllist= "";

# TODO: Need --help option, along with sanity checking.
# TODO: Also need a decent POD for this code.
GetOptions('driver=s'             => \$driver,
           'master_vm_config=s'   => \$config,
           'url_list=s'           => \$urllist,
           'max_relative_links:i' => \$maxrel);

# Go through the list of urls to create the array
# Anything not associated with an option is a URL
# Grab those first and then get the ones from the file specified
my @urls;
push( @urls, @ARGV ); 
if( -e $urllist ){
    open URL, $urllist;
    push(@urls, <URL>);
}

# Get the first url from the list
# Create a hashtable in the form: url => 1 for links_to_visit 
chomp @urls;
my $firsturl = shift @urls;
my %remaining_urls;
foreach(@urls){
    # We assign our initial list of URLs a priority of 1000, so that
    # they'll be (likely to be) selected first, before going to any other
    # external URLs found from subsequent drive operations.
    $remaining_urls{$_} = 1000;
}

my $agentState = HoneyClient::Manager->run(
                    driver           => $driver,
                    master_vm_config => $config,
                    agent_state      => encode_base64(nfreeze({
                        $driver => {
                            next_link_to_visit => $firsturl,
                            max_relative_links_to_visit => $maxrel,
                            links_to_visit => \%remaining_urls,
                         },
                    })), 
                 );