#!/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;