The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# Declare our package
package POE::Component::Server::SimpleHTTP::Connection;

# Standard stuff to catch errors
use strict qw(subs vars refs);				# Make sure we can't mess up
use warnings FATAL => 'all';				# Enable warnings to catch errors

# Initialize our version
# $Revision: 1181 $
our $VERSION = '1.05';

# Get some things we need
use Socket qw( inet_ntoa unpack_sockaddr_in );

# Creates a new instance!
sub new {
	# Get rid of the class
	my $class = shift;

	# Create the hash
	my $self = {
		# Did the socket die?
		'DIED'		=>	0,

		# SSLification status
		'SSLified'	=>	0,

		# SSL cipher in use
		'SSLCipher'	=>	undef,
	};

	# Get the stuff
	my $socket = shift;

	# Figure out everything!
	eval {
		( $self->{'remote_port'}, $self->{'remote_addr'} ) = unpack_sockaddr_in( getpeername( $socket ) );
		$self->{'remote_ip'} = inet_ntoa( $self->{'remote_addr'} );

		( $self->{'local_port'}, $self->{'local_addr'} ) = unpack_sockaddr_in( getsockname( $socket ) );
		$self->{'local_ip'} = inet_ntoa( $self->{'local_addr'} );
	};

	# Check for errors!
	if ( $@ ) {
		# Just ignore this socket and return nothing!
		return undef;
	}

	# Bless ourself!
	bless( $self, 'POE::Component::Server::SimpleHTTP::Connection' );

	# All done!
	return $self;
}

# Gets the remote_ip
sub remote_ip {
	return shift->{'remote_ip'};
}

# Gets the remote_port
sub remote_port {
	return shift->{'remote_port'};
}

# Gets the remote_addr
sub remote_addr {
	return shift->{'remote_addr'};
}

# Gets the local_addr
sub local_addr {
	return shift->{'local_addr'};
}

# Gets the local_ip
sub local_ip {
	return shift->{'local_ip'};
}

# Gets the local_port
sub local_port {
	return shift->{'local_port'};
}

# Boolean accessor to check if the socket is dead
sub dead {
	return shift->{'DIED'};
}

# Are we SSLified?
sub ssl {
	return shift->{'SSLified'};
}

# What ssl cipher is in use?
sub sslcipher {
	return shift->{'SSLCipher'};
}

# End of module
1;

__END__
=head1 NAME

POE::Component::Server::SimpleHTTP::Connection - Stores connection information for SimpleHTTP

=head1 SYNOPSIS

	use POE::Component::Server::SimpleHTTP::Connection;
	my $connection = POE::Component::Server::SimpleHTTP::Connection->new( $socket );

	# Print some stuff
	print $connection->remote_port;

=head1 DESCRIPTION

	This module simply holds some information from a SimpleHTTP connection.

=head2 METHODS

	my $connection = POE::Component::Server::SimpleHTTP::Connection->new( $socket );

	$connection->remote_ip();	# Returns remote ip in dotted quad format ( 1.1.1.1 )
	$connection->remote_port();	# Returns remote port
	$connection->remote_addr();	# Returns true remote address, consult the L<Socket> POD
	$connection->local_addr();	# Returns true local address, same as above
	$connection->local_ip();	# Returns local ip in dotted quad format ( 1.1.1.1 )
	$connection->local_port();	# Returns local port
	$connection->dead();		# Returns a boolean value whether the socket is closed or not
	$connection->ssl();		# Returns a boolean value whether the socket is SSLified or not
	$connection->sslcipher();	# Returns the SSL Cipher type or undef if not SSL

=head2 EXPORT

Nothing.

=head1 SEE ALSO

	L<POE::Component::Server::SimpleHTTP>

	L<POE::Component::Server::SimpleHTTP::Response>

=head1 AUTHOR

Apocalypse E<lt>apocal@cpan.orgE<gt>

=head1 COPYRIGHT AND LICENSE

Copyright 2006 by Apocalypse

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

=cut