stas 2003/12/17 11:59:47
Modified: t/compat .cvsignore lib/Apache compat.pm Added: t/response/TestCompat conn_rec.pm Log: 2 new overridable compat functions: Apache::Connection::local_addr Apache::Connection::remote_addr + tests Revision Changes Path 1.1 modperl-2.0/t/response/TestCompat/conn_rec.pm Index: conn_rec.pm =================================================================== package TestCompat::conn_rec; use strict; use warnings FATAL => 'all'; use Apache::TestUtil; use Apache::Test; use Apache::compat (); use Socket qw(sockaddr_in inet_ntoa); use Apache::Constants qw(OK); sub handler { my $r = shift; my $c = $r->connection; plan $r, tests => 4; Apache::compat::override_mp2_api('Apache::Connection::local_addr'); my ($local_port, $local_addr) = sockaddr_in($c->local_addr); Apache::compat::restore_mp2_api('Apache::Connection::local_addr'); t_debug inet_ntoa($local_addr) . " :$local_port"; ok $local_port; ok inet_ntoa($local_addr); Apache::compat::override_mp2_api('Apache::Connection::remote_addr'); my ($remote_port, $remote_addr) = sockaddr_in($c->remote_addr); Apache::compat::restore_mp2_api('Apache::Connection::remote_addr'); t_debug inet_ntoa($remote_addr) . " :$remote_port"; ok $remote_port; ok inet_ntoa($remote_addr); OK; } 1; 1.3 +1 -0 modperl-2.0/t/compat/.cvsignore Index: .cvsignore =================================================================== RCS file: /home/cvs/modperl-2.0/t/compat/.cvsignore,v retrieving revision 1.2 retrieving revision 1.3 diff -u -u -r1.2 -r1.3 --- .cvsignore 20 Mar 2003 05:49:11 -0000 1.2 +++ .cvsignore 17 Dec 2003 19:59:47 -0000 1.3 @@ -4,3 +4,4 @@ apache_util.t apache_uri.t request.t +conn_rec.t 1.92 +45 -6 modperl-2.0/lib/Apache/compat.pm Index: compat.pm =================================================================== RCS file: /home/cvs/modperl-2.0/lib/Apache/compat.pm,v retrieving revision 1.91 retrieving revision 1.92 diff -u -u -r1.91 -r1.92 --- compat.pm 17 Dec 2003 18:55:25 -0000 1.91 +++ compat.pm 17 Dec 2003 19:59:47 -0000 1.92 @@ -57,29 +57,68 @@ 'Apache::RequestRec::notes' => <<'EOI', { require Apache::RequestRec; - my $notes_sub = *Apache::RequestRec::notes{CODE}; + my $orig_sub = *Apache::RequestRec::notes{CODE}; *Apache::RequestRec::notes = sub { my $r = shift; return wantarray() - ? ($r->table_get_set(scalar($r->$notes_sub), @_)) - : scalar($r->table_get_set(scalar($r->$notes_sub), @_)); + ? ($r->table_get_set(scalar($r->$orig_sub), @_)) + : scalar($r->table_get_set(scalar($r->$orig_sub), @_)); }; - $notes_sub; + $orig_sub; } EOI 'Apache::RequestRec::finfo' => <<'EOI', { require APR::Finfo; - my $finfo_sub = *APR::Finfo::finfo{CODE}; + my $orig_sub = *APR::Finfo::finfo{CODE}; sub Apache::RequestRec::finfo { my $r = shift; stat $r->filename; \*_; } - $finfo_sub; + $orig_sub; } EOI + + 'Apache::Connection::local_addr' => <<'EOI', +{ + require Apache::Connection; + require Socket; + require APR::SockAddr; + my $orig_sub = *Apache::Connection::local_addr{CODE}; + *Apache::Connection::local_addr = sub { + my $c = shift; + Socket::pack_sockaddr_in($c->$orig_sub->port, + Socket::inet_aton($c->$orig_sub->ip_get)); + }; + $orig_sub; +} +EOI + + 'Apache::Connection::remote_addr' => <<'EOI', +{ + require Apache::Connection; + require APR::SockAddr; + require Socket; + my $orig_sub = *Apache::Connection::remote_addr{CODE}; + *Apache::Connection::remote_addr = sub { + my $c = shift; + if (@_) { + my $addr_in = shift; + my($port, $addr) = Socket::unpack_sockaddr_in($addr_in); + $c->$orig_sub->ip_set($addr); + $c->$orig_sub->port_set($port); + } + else { + Socket::pack_sockaddr_in($c->$orig_sub->port, + Socket::inet_aton($c->$orig_sub->ip_get)); + } + }; + $orig_sub; +} +EOI + ); my %overridden_mp2_api = ();