#!/usr/bin/perl -w

use strict;
use warnings;

use Net::SIP;

if (! defined $ARGV[0])
{
  print "
Es wird die Zielrufnummer angeklingelt.

Bitte folgende Parameter angeben:
IP-Adresse-Fritzbox Benutzer Kennwort Zielrufnummer

z.B.:
$0 192.168.178.1 624 SeCrEt '**623'

";
  exit 1;
}

my $fritzbox = shift || die "Bitte IP Adresse der FritzBox angeben!\n";
# ohne Port-Angabe geht es nicht
$fritzbox = $fritzbox . ':5060';

my $user     = shift || die "Bitte Benutzer angeben!\n";
my $password = shift || die "Bitte Kennwort angeben!\n";
my $to       = shift || die "Bitte Zielrufnummer angeben!\n";

my $no_answer = 0;

# Create agent
my $ua = Net::SIP::Simple->new(
    outgoing_proxy => $fritzbox,
    registrar      => $fritzbox,
    domain         => $fritzbox,
    from           => $user,
    auth           => [ $user, $password ]
);

# Register
$ua->register;

# invite() ist blocking (außer in früheren Version, aber das ist ein Bug.)
# Mit Hilfe des Net::SIP Autors:
# Das sollte durch einen cb_final Callback zusammen mit einem Timeout für den
# Loop möglich sein. Wenn man einen expliziten cb_final Callback angibt, dann
# wird nämlich nicht der default-Callback ausgeführt.

my $call_created;
my $call = $ua->invite($to, cb_final => \$call_created);
$ua->loop(\$call_created,1); # maximal 1 Sekunde warten

sleep 7;

$call->cancel();
$call->rtp_cleanup();
$call->bye();

exit 0;
