#!/usr/local/bin/perl -w

use strict;
use POSIX "setsid";
use IO::Socket::INET;
use Net::OSCAR;
use Data::Dumper;

my $sn = "tehimtarweb";
my $pw = "scrub";
my $port = 17520;

sub dmesg {
	my $msg = shift;
	IO::Socket::INET
		->new(PeerPort=>$port+1,Proto=>'udp',PeerAddr=>'lglan.net')
		->send($msg);
}


# setup server socket
my $udp = IO::Socket::INET->new(LocalPort => $port, Proto => 'udp', Blocking => 0, MultiHomed => 1)
	or die "socket in use";

# connect to aim
dmesg("*connecting*\n");
my $aim = Net::OSCAR->new();

$aim->set_callback_im_in( sub {
	my($oscar, $sender, $message, $is_away) = @_;
	dmesg("$sender: $message\n");
});

print "Connecting to AIM server... ";
$aim->signon(screenname=>$sn,password=>$pw)
	or die "run: cannot connect";
print "done.\n";

print "Running.\n";

# daemonize
umask 0;
#chdir "/" or die $!;
close STDIN;
close STDOUT;
close STDERR;
fork and exit;
setsid or die $!;
dmesg("*running, pid: $$*\n");

#  loop forever
do {
	sleep 1;
	$aim->do_one_loop();

	# get all waiting packets
	my $packet;	
	do {
		$udp->recv($packet,576);
		my ($magic, $dest, @lines) = split /\n/, $packet;
		my $msg = join "\n", @lines;
		if($magic and $magic eq 'ITSNO') {
			# send the message
			$aim->send_im($dest, $msg);
			dmesg("*dispatched $dest*\n$msg\n");
		}
	}

} while(1);

