package Sys::Hostname::FQDN;

#use 5.006;
use strict;
#use warnings;
use Carp;

use vars qw($VERSION @ISA @EXPORT_OK);

$VERSION = do { my @r = (q$Revision: 0.07 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };

require Exporter;
require DynaLoader;
#use AutoLoader;

@ISA = qw(Exporter DynaLoader);

@EXPORT_OK = qw (
	asciihostinfo
	gethostinfo
	inet_ntoa
	inet_aton
	fqdn
	short
);

bootstrap Sys::Hostname::FQDN $VERSION;

# Preloaded methods go here.

sub DESTROY {};

# Autoload methods go after =cut, and are processed by the autosplit program.

sub short {
  return (split(/\./,&usually_short))[0];
}

sub fqdn {
  return (gethostbyname(&usually_short))[0];
}

sub gethostinfo {
  return gethostbyname(&usually_short);
}

sub asciihostinfo {
  my ($name,$aliases,$addrtype,$length,@addrs) = gethostbyname(&usually_short);
  for(0..$#addrs) {
    $addrs[$_] = inet_ntoa($addrs[$_]);
  }
  return ($name,$aliases,$addrtype,$length,@addrs);
}

=head1 NAME

  Sys::Hostname::FQDN - Get the short or long hostname

=cut

1;
__END__

=head1 SYNOPSIS

  use Sys::Hostname::FQDN qw(
	asciihostinfo
	gethostinfo
	inet_ntoa
	inet_aton
	fqdn
	short
  );

  $host = short();
  $fqdn = fqdn();
  ($name,$aliases,$addrtype,$length,@addrs)=gethostinfo();
  ($name,$aliases,$addrtype,$length,@addrs)=asciihostinfo();
  $dotquad = inet_ntoa($netaddr);
  $netaddr = inet_aton($dotquad);

=head1 INSTALLATION

To install this module type the following:

  perl Makefile.PL
  make
  make test
  make install

Solaris users, see the 'hints' subdirectory if you have problems with the
build.

=head1 DESCRIPTION

B<Sys::Hostname::FQDN> uses the host 'C' library to discover the (usually)
short host name, then uses (perl) gethostbyname to extract the real
hostname. 

The results from gethostbyname are exported as B<gethostinfo> and
B<asciihostinfo> as a convenience since they are available. Similarly, the
'C' library functions B<inet_ntoa> and B<inet_aton> are exported.

=over 4

=item $host = short();

  returns the host part of this host's FQDN.

=item $fqdn = fqdn();

  returns the fully qualified host name of this host.

=item ($name,$aliases,$addrtype,$length,@addrs)=gethostinfo();

  returns:
    $name	fully qualifed host name of this host.
    $aliases	alternate names for this host.
    $addrtype	The type of address; always AF_INET at present.
    $length	The length of the address in bytes.
    @addrs	array of network addresses for this host 
		in network byte order.

=item ($name,$aliases,$addrtype,$length,@addrs)=asciihostinfo();

  returns:
    $name	fully qualifed host name of this host.
    $aliases	alternate names for this host.
    $addrtype	The type of address; always AF_INET at present.
    $length	The length of the address in bytes.
    @addrs	array of dot quad IP addresses for this host.

=item $dotquad = inet_ntoa($netaddr);

  input:	packed network address in network byte order.
  returns:	dot quad IP address.

=item $netaddr = inet_aton($dotquad);

  input:	dot quad IP address.
  returns:	packed network address in network byte order.

=back

=head1 DEPENDENCIES

  none

=head1 EXPORT

  None by default

=head1 EXPORT_OK

  asciihostinfo
  gethostinfo
  inet_ntoa
  inet_aton
  fqdn
  short

=head1 ACKNOWLEDGEMENTS

The workaround for systems that do not have 'inet_aton' is taken directly
from Socket.xs in the Perl 5 kit for perl-5.8.0 by Larry Wall, copyright
1989-2002. Thank you Larry for making PERL possible for all of us.

=head1 AUTHOR

Michael Robinton <michael@bizsystems.com>

=head1 COPYRIGHT AND LICENCE

  Copyright 2003, Michael Robinton <michael@bizsystems.com>
 
  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 

=cut


syntax highlighted by Code2HTML, v. 0.9.1