#!/usr/bin/perl
#
# 16 Dec 2000      Brent Baccala     baccala@freesoft.org
#
# Simple script to query a NetMeeting LDAP server and display all the clients
# registered there in a GUI window.

use Net::LDAP qw(:all);
use Net::LDAP::Entry;
use Tk;
use Tk::Table;

sub call {
    my ($ipaddr, $alias) = @_;

    system "ohphone -n --listenport 0 $ipaddr/$alias &";
}

if ($#ARGV != 0) {
    print "Usage: $0 directory-server\n";
    exit 1;
}

$server = $ARGV[0];

$ldap = Net::LDAP->new($server) or die "Can't connect to $server\n";

$mesg = $ldap->bind() or die "Can't bind to $server\n";
$mesg->code && die $mesg->error;

$mesg = $ldap->search(base=>'objectclass=rtperson',
		      filter=>'(&(cn=%)(objectclass=rtperson))');

die "Empty directory on $server" if ($mesg->code == LDAP_NO_SUCH_OBJECT);

$mesg->code && die $mesg->error;



$top = new MainWindow;

#$menu = $top->Menubar;
#$filemenu = $menu->Menubutton(-text => "File");
#$filemenu->command(-label => "Quit", -command => sub {$top->destroy});
#$top->configure(-menu => $menu);

$table = $top->Table(-borderwidth => 3,
		     -scrollbars => 'eo', -rows => 10, -fixedrows => 1);

$titlerelief = "raised";

#$table->Create(0, 0, 'Label', -text => "Options", -relief => $titlerelief);
$table->Create(0, 1, 'Label', -text => "Last Name", -relief => $titlerelief);
$table->Create(0, 2, 'Label', -text => "First Name", -relief => $titlerelief);
$table->Create(0, 3, 'Label', -text => "E-mail Address", -relief => $titlerelief);
$table->Create(0, 4, 'Label', -text => "IP address", -relief => $titlerelief);
$table->Create(0, 5, 'Label', -text => "Alias", -relief => $titlerelief);
$table->Create(0, 6, 'Label', -text => "Location", -relief => $titlerelief);
$table->Create(0, 7, 'Label', -text => "Comment", -relief => $titlerelief);

$table->pack(-side => 'top', -fill => both);

$table_row = 1;

foreach $entry ($mesg->all_entries) {
    $alias = join(' ', $entry->get_value('cn'));
    $surname = join(' ', $entry->get_value('surname'));
    $givenname = join(' ', $entry->get_value('givenname'));
    $email = join(' ', $entry->get_value('rfc822mailbox'));
    $location = join(' ', $entry->get_value('location'));
    $comment = join(' ', $entry->get_value('comment'));

    $sipaddress = join(' ', $entry->get_value('sipaddress'));
    $packedipaddr = pack 'V', $sipaddress;
    $ipaddress = join '.', unpack('C4',$packedipaddr);

    $table->Create($table_row, 0, 'Button', -text => "Call",
		   -command => [\&call, $ipaddress, $alias]);
    $table->Create($table_row, 1, 'Label', -anchor => w,
		   -text => $surname);
    $table->Create($table_row, 2, 'Label', -anchor => w,
		   -text => $givenname);
    $table->Create($table_row, 3, 'Label', -anchor => w,
		   -text => $email);
    $table->Create($table_row, 4, 'Label', -anchor => w,
		   -text => $ipaddress);
    $table->Create($table_row, 5, 'Label', -anchor => w,
		   -text => $alias);
    $table->Create($table_row, 6, 'Label', -anchor => w,
		   -text => $location);
    $table->Create($table_row, 7, 'Label', -anchor => w,
		   -text => $comment);
    $table_row++;
}

MainLoop;
