#!/usr/bin/perl

die "usage: ctd.pl FROM TO PASSWORD\n" if @ARGV!=3;
($CALLER,$CALLEE,$PASS) = @ARGV;

$DOMAIN="sulfur.ct.net:5060";
$OPERATOR="operator";
$SIPSAKCMD="/home/wacek/tmp/sipsak-0.9.1/sipsak -S -v -l 34999 -u $OPERATOR -a $PASS -G -f - -s sip:$CALLER\@$DOMAIN";

$callid = rand(1);

$pid = open(SIPSAK, "-|");
if(!$pid) {
	open(PROC,"|$SIPSAKCMD") 
		|| die "Can't fork sipsak\n"; 
	printf PROC <<EOF;
INVITE sip:$CALLER\@$DOMAIN SIP/2.0
From: <sip:$OPERATOR\@$DOMAIN>;tag=$callid
To: <sip:$CALLER\@$DOMAIN>
Contact: <sip:$OPERATOR\@\$srchost\$:\$port\$>
Call-ID: CTD\@$callid
CSeq: 1 INVITE
User-Agent: CTOKAdmin
Content-Type: application/sdp
Content-Length: 46

v=0
c=IN IP4 0.0.0.0
m=audio 0 RTP/AVP 2 8
EOF
	exit;
}

@response = <SIPSAK>;
close(SIPSAK) || die "sipsak error\n".join("\n",@response);

my $status, $statusmsg, $to, $contact;
for (@response) {
	print ">>".$_;
	($status,$statusmsg) = ($1,$2)	if /^SIP\/2\.0 (\d\d\d) (.*)/;
	$to = $2	if /(^To: |^t: ).*;tag=([^\s;]*)/;
	$contact = $2	if /(^Contact: |^m: ).*(sip:[^\s>]*)/;
	last		if $status && $to && $contact;
}

print "Status: ".$status." ".$statusmsg."\nTo tag: ".$to."\nContact: ".$contact."\n";
die "INVITE failed" if $status > 299;

$pid = open(SIPSAK,"-|");
if(!$pid) {
	open(PROC,"|$SIPSAKCMD") 
		|| die "Can't fork sipsak\n"; 
	printf PROC <<EOF;
REFER $contact SIP/2.0
From: <sip:$OPERATOR\@$DOMAIN>;tag=$callid
To: <sip:$CALLER\@$DOMAIN>;tag=$to
Contact: <sip:$OPERATOR\@\$srchost\$:\$port\$>
Call-ID: CTD\@$callid
CSeq: 5 REFER
User-Agent: CTOKAdmin
Refer-To: <sip:$CALLEE\@$DOMAIN>

EOF
	exit;
}

@response = <SIPSAK>;
close(SIPSAK) || die "sipsak error\n".join("\n",@response);

print "REFER success\n".join("\n",@response);

$pid = open(SIPSAK,"-|");
if(!$pid) {
	open(PROC,"|$SIPSAKCMD") 
		|| die "Can't fork sipsak\n"; 
	printf PROC <<EOF;
BYE $contact SIP/2.0
From: <sip:$OPERATOR\@$DOMAIN>;tag=$callid
To: <sip:$CALLER\@$DOMAIN>;tag=$to
Contact: <sip:$OPERATOR\@\$srchost\$:\$port\$>
Call-ID: CTD\@$callid
CSeq: 10 BYE
User-Agent: CTOKAdmin

EOF
	exit;
}

@response = <SIPSAK>;
close(SIPSAK) || die "sipsak error\n".join("\n",@response);

print "BYE success\n".join("\n",@response);

