Gerald Richter dijo [Mon, Dec 11, 2006 at 05:25:58AM +0100]:
> Embperl::exit is the right thing to do, but normaly you should not see this
> message, because it's internaly catched by Embperl.
> 
> From where do you call this code in your module?

Ok, seems I'll have to explain my probably twisted logic :)

First of all, the application is an Embperl::Object app, using the
following Apache configuration:

<Location /smb>
    PerlSetVar SMBGATE_INSTANCE smbgate
    PerlSetVar SMBGATE_YAMLCONF /etc/smbgate.yaml

    EMBPERL_OBJECT_APP base.pm
    EMBPERL_APPNAME smbgate
    EMBPERL_OBJECT_FALLBACK index.html
    EMBPERL_ESCMODE 0
    EMBPERL_OPTIONS 16
    EMBPERL_DEBUG 0

    SetHandler perl-script
    PerlHandler Embperl::Object

    Options ExecCGI FollowSymLinks

    RewriteEngine On
    RewriteRule /file/(.*) file?file=$1
    RewriteRule /dir/(.*) ?dir=$1
</Location>

Now, I tried to split the application into logic modules, so from
base.pm I include (use) some modules, among which is
SmbGate::Embperl::WebClient. I am attaching the module as it is now -
of course, it lacks any documentation, but should be just
readable. Now, what triggers this message? For example, when calling
logout.html, which is:

[$ var $dummy $]
[- # Just clear the user session information to leave cleanly, inform
   # the user he has logged out, and redirect to the login screen
   delete $udat{login};
   delete $udat{passwd};
   $epreq->{warnings}->add_msg('Su sesi&oacute;n ha finalizado');
   $epreq->{webclient}->redirect('login.html');
-]

(of course, $epreq->{webclient} is an instantiated
SmbGate::Embperl::WebClient, invoked at base.pm's init)

You will notice I'm using $epreq to hold my various objects so they
are available along the way - I lack a better way of doing this, you
might also point me out to another way of doing this :)

Thanks,

-- 
Gunnar Wolf - [EMAIL PROTECTED] - (+52-55)5623-0154 / 1451-2244
PGP key 1024D/8BB527AF 2001-10-23
Fingerprint: 0C79 D2D1 2C4E 9CE4 5973  F800 D80E F35A 8BB5 27AF
use strict;
use warnings;

=head1 NAME

SmbGate::Embperl::Webclient - 

=head1 SYNOPSIS

=head1 REQUIRES

=head1 SEE ALSO

=head1 AUTHOR

Gunnar Wolf, [EMAIL PROTECTED]
Instituto de Investigaciones Económicas, UNAM

=head1 COPYRIGHT

Copyright 2006 Gunnar Wolf

This library is free software, you can redistribute it and/or modify it
under the terms of the GPL version 2 or later.

=cut

package SmbGate::Embperl::WebClient;

sub new {
    my ($class, $self);
    $class = shift;
    $self = {epreq => shift, headers => shift, udat => shift};
    return bless $self, $class;
}

sub redirect {
    # Redirect the request to a new page inside the system (preceded by
    # $epreq->{conf}{base_url}) - and stop processing before doing any
    # further harm
    my ($self, $to);
    $self = shift;
    $to = $self->{epreq}->{conf}->base_url . '/' . shift;

    $to =~ s!/+!/!g;

    $self->{headers}{Location} = $to;
    exit(301);
}

sub content_type {
    my ($self, $type);
    $self = shift;
    $type = shift;

    $self->{headers}{'Content-Type'} = $type;
}

sub set_header {
    my ($self, $header, $data);
    $self = shift;
    $header = shift;
    $data = shift;

    $self->{headers}{$header} = $data;
}

sub user_agent {
    return $ENV{HTTP_USER_AGENT};
}

sub set_debug {
    my $self = shift;
    ###### PENDING: Who has rights to set debug?
#    # Only an administrative user may set the debug flag
#    return undef unless (defined $self->{epreq}{person} and
#			 $self->{epreq}{person}->get_admin_tasks);
    $self->{udat}{debug} = 1;
}

sub unset_debug {
    my $self = shift;
    # If debug is turned on, just let anybody switch it off.
    $self->{udat}{debug} = 0;
}

1;

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to