summaryrefslogtreecommitdiff
path: root/lib/XXV/OUTPUT
diff options
context:
space:
mode:
authorAndreas Brachold <vdr07@deltab.de>2009-05-04 18:30:04 +0000
committerAndreas Brachold <vdr07@deltab.de>2009-05-04 18:30:04 +0000
commitb54b6c95d599b4e0febff69ba47ed7ac9ca7e639 (patch)
tree15961904a3c11105da22dbd30a2368647ec8f1f4 /lib/XXV/OUTPUT
parent04f030980f950eb8b8684d324d535ac06b539cbe (diff)
downloadxxv-b54b6c95d599b4e0febff69ba47ed7ac9ca7e639.tar.gz
xxv-b54b6c95d599b4e0febff69ba47ed7ac9ca7e639.tar.bz2
* WML: Backport changes from module HTTPD
Diffstat (limited to 'lib/XXV/OUTPUT')
-rw-r--r--lib/XXV/OUTPUT/Wml.pm81
1 files changed, 57 insertions, 24 deletions
diff --git a/lib/XXV/OUTPUT/Wml.pm b/lib/XXV/OUTPUT/Wml.pm
index d2852d4..2168737 100644
--- a/lib/XXV/OUTPUT/Wml.pm
+++ b/lib/XXV/OUTPUT/Wml.pm
@@ -116,7 +116,6 @@ sub parseTemplate {
my $data = shift || return error('No data defined!');
my $params = shift || {};
- my $t = $self->{tt};
my $u = main::getModule('USER');
# you can use two templates, first is a user defined template
@@ -171,8 +170,8 @@ sub parseTemplate {
}
},
};
- $t->process($widget, $vars, \$output)
- or return error($t->error());
+ $self->{tt}->process($widget, $vars, \$output)
+ or return error($self->{tt}->error());
return $output;
}
@@ -185,14 +184,13 @@ sub out {
my $type = shift || 'text/vnd.wap.wml';
my %args = @_;
- my $q = $self->{cgi};
unless(defined $self->{header}) {
# HTTP Header
- $self->{handle}->print(
- $self->header($type, \%args)
- );
+ my $header = $self->header($type, \%args);
+ $self->{sendbytes}+= length($header);
+ $self->{handle}->print($header );
}
-
+ $self->{sendbytes}+= length($text)+ 2;
$self->{handle}->print( $text,"\r\n" );
}
@@ -203,7 +201,7 @@ sub header {
my $typ = shift || return error ('No Type!' );
my $arg = shift || {};
- $self->{header} = 1;
+ $self->{header} = 200;
return $self->{cgi}->header(
-type => $typ,
-status => "200 OK",
@@ -217,24 +215,60 @@ sub header {
sub statusmsg {
# ------------------
my $self = shift || return error('No object defined!');
- my $msg = shift || return error ('No Msg!');
- my $status = shift || return error ('No Status!');
+ my $state = shift || return error('No state defined!');
+ my $msg = shift;
+ my $title = shift;
+ my $typ = shift || 'text/vnd.wap.wml';
unless(defined $self->{header}) {
$self->{nopack} = 1;
- $self->{header} = 1;
+
+ my $s = {
+ 200 => '200 OK',
+ 204 => '204 No Response',
+ 301 => '301 Moved Permanently',
+ 302 => '302 Found',
+ 303 => '303 See Other',
+ 304 => '304 Not Modified',
+ 307 => '307 Temporary Redirect',
+ 400 => '400 Bad Request',
+ 401 => '401 Unauthorized',
+ 403 => '403 Forbidden',
+ 404 => '404 Not Found',
+ 405 => '405 Not Allowed',
+ 408 => '408 Request Timed Out',
+ 500 => '500 Internal Server Error',
+ 503 => '503 Service Unavailable',
+ 504 => '504 Gateway Timed Out',
+ };
+ my $status = $s->{200};
+ $status = $s->{$state}
+ if(exists $s->{$state});
+
+ my $arg = {};
+
+ $arg->{'Location'} = $msg
+ if($state == 301);
+
+ $arg->{'WWW-Authenticate'} = "Basic realm=\"xxvd\""
+ if($state == 401);
+
+ $arg->{'expires'} = (($state != 304) || (defined $self->{nocache} && $self->{nocache})) ? "now" : "+7d";
+
+ $self->{header} = $state;
my $data = $self->{cgi}->header(
- -type => 'text/vnd.wap.wml',
+ -type => $typ,
-status => $status,
- -expires => "now",
+ -charset => $self->{charset},
+ %{$arg},
);
$self->out($data);
}
-
- my @title = split ('\n', $status);
- $self->start(undef,{ title => $title[0] });
- $self->err($msg);
- $self->footer();
+ if($msg && $title) {
+ $self->start(undef,{ title => $title });
+ $self->err($msg);
+ $self->footer();
+ }
}
# ------------------
@@ -244,7 +278,7 @@ sub login {
my $self = shift || return error('No object defined!');
my $msg = shift || '';
- $self->statusmsg($msg,"401 Authorization Required\nWWW-Authenticate: Basic realm=\"xxvd\"");
+ $self->statusmsg(401,$msg,gettext("Authorization required"));
}
# ------------------
@@ -254,7 +288,7 @@ sub status403 {
my $self = shift || return error('No object defined!');
my $msg = shift || '';
- $self->statusmsg($msg,"403 Forbidden");
+ $self->statusmsg(403,$msg,gettext("Forbidden"));
}
@@ -266,11 +300,10 @@ sub status404 {
my $file = shift || return error('No file defined!');
my $why = shift || "";
- lg sprintf("Couldn't open file '%s' : %s!",$file,$why);
-
$file =~ s/$self->{wmldir}\///g; # Don't post wml root, avoid spy out
- $self->statusmsg(sprintf(gettext("Couldn't open file '%s' : %s!"),$file,$why),"404 File not found");
+ $self->statusmsg(404,sprintf(gettext("Couldn't open file '%s' : %s!"),$file,$why),
+ gettext("Not found"));
}
# ------------------