--- /dev/null
+#!/usr/bin/perl
+
+use IO::Socket::INET;
+use Getopt::Long;
+
+my $help = 0;
+
+my $host;
+my $port = '6001';
+
+my $login_user_id;
+my $login_password;
+my $location_code;
+
+my $patron_identifier;
+my $patron_password;
+
+GetOptions(
+ "a|address|host|hostaddress=s" => \$host, # sip server ip
+ "p|port=s" => \$port, # sip server port
+ "su|sip_user=s" => \$login_user_id, # sip user
+ "sp|sip_pass=s" => \$login_password, # sip password
+ "l|location|location_code=s" => \$location_code, # sip location code
+
+ "patron=s" => \$patron_identifier, # patron cardnumber or login
+ "password=s" => \$patron_password, # patron's password
+
+ 'h|help|?' => \$help
+);
+
+if ( $help
+ || !$host
+ || !$login_user_id
+ || !$login_password
+ || !$location_code
+ || !$patron_identifier
+ || !$patron_password )
+{
+ print help();
+ exit();
+}
+
+my ( $sec, $min, $hour, $day, $month, $year ) = localtime(time);
+$year += 1900;
+my $transaction_date = "$year$month$day $hour$min$sec";
+
+my $institution_id = $location_code;
+my $terminal_password = $login_password;
+
+$socket = IO::Socket::INET->new("$host:$port")
+ or die "ERROR in Socket Creation host=$host port=$port : $!\n";
+
+my $login_command = "9300CN$login_user_id|CO$login_password|CP$location_code|";
+
+print "\nOUTBOUND: $login_command\n";
+print $socket $login_command . "\r";
+
+$data = <$socket>;
+
+print "\nINBOUND: $data\n";
+
+if ( $data =~ '^941' ) { ## we are logged in
+
+ ## Patron Status Request
+ print "\nTrying 'Patron Status Request'\n";
+ my $patron_status_request = "23001"
+ . $transaction_date
+ . "AO" . $institution_id
+ . "|AA" . $patron_identifier
+ . "|AC" . $terminal_password
+ . "|AD" . $patron_password;
+
+ print "\nOUTBOUND: $patron_status_request\n";
+ print $socket $patron_status_request . "\r";
+
+ $data = <$socket>;
+
+ print "\nINBOUND: $data\n";
+
+ ## Patron Information
+ print "\nTrying 'Patron Information'\n";
+ my $summary = " ";
+ my $patron_status_request = "63001"
+ . $transaction_date
+ . $summary
+ . "AO" . $institution_id
+ . "|AA" . $patron_identifier
+ . "|AC" . $terminal_password
+ . "|AD" . $patron_password;
+
+ print "\nOUTBOUND: $patron_status_request\n";
+ print $socket $patron_status_request . "\r";
+
+ $data = <$socket>;
+
+ print "\nINBOUND: $data\n";
+
+}
+else {
+ print "\nLogin Failed!\n";
+}
+
+sub help() {
+ print
+q/
+sip_cli_emulator.pl - SIP command line emulator
+
+ Usage:
+ sip_cli_emulator.pl --address localhost -port 6001 --sip_user myuser --sip_pass mypass --location MYLOCATION --patron 70000003 --password Patr0nP@ssword
+
+ Options:
+ --help brief help message
+
+ -a --address SIP server ip address or host name
+ -p --port SIP server port
+
+ -su --sip_user SIP server login username
+ -sp --sip_pass SIP server login password
+
+ -l --location SIP location code
+
+ --patron ILS patron cardnumber or username
+ --password ILS patron password
+
+sip_cli_emulator.pl will make requests for information about the given user from the given server via SIP2.
+
+/
+
+}