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 = ();