use FreeSWITCH::Client; use Data::Dumper; use Term::ReadLine; my $password = "ClueCon"; my $fs = init FreeSWITCH::Client {-password => $password} or die "Error $@"; my $term = new Term::ReadLine "FreeSWITCH CLI"; my $prompt = "FS>"; my $OUT = $term->OUT .. \*STDOUT; my $log = shift; $SIG{CHLD} = sub {$fs->disconnect(); die "done"}; if ($log) { $pid = fork; if (!$pid) { my $fs2 = init FreeSWITCH::Client {-password => $password} or die "Error $@"; $fs2->cmd({ command => "log $log" }); while (1) { my $reply = $fs2->readhash(undef); if ($reply->{socketerror}) { die "socket error"; } if ($reply->{body}) { print $reply->{body} . "\n"; } elsif ($reply->{'reply-text'}) { print $reply->{'reply-text'} . "\n"; } } exit; } } while ( defined ($_ = $term->readline($prompt)) ) { my $reply; if ($_) { my $reply = $fs->cmd({command => "api $_"}); if ($reply->{socketerror}) { $fs2->disconnect(); die "socket error"; } if ($reply->{body}) { print $reply->{body}; } elsif ($reply->{'reply-text'}) { print $reply->{'reply-text'}; } print "\n"; if ($_ =~ /exit/) { last; } } $term->addhistory($_) if /\S/; }