App-MHFS

 view release on metacpan or  search on metacpan

lib/MHFS/HTTP/Server.pm  view on Meta::CPAN


    # leaving Nagle's algorithm enabled for now as sometimes headers are sent without data
    #$sock->setsockopt(IPPROTO_TCP, TCP_NODELAY, 1) or die("Failed to set TCP_NODELAY");

    # linux specific settings. Check in BEGIN?
    if(index($Config{osname}, 'linux') != -1) {
        use Socket qw(TCP_QUICKACK);
        $sock->setsockopt(IPPROTO_TCP, TCP_QUICKACK, 1) or die("Failed to set TCP_QUICKACK");
    }
    my $evp = MHFS::EventLoop::Poll->new;
    my %self = ( 'settings' => $settings, 'routes' => $routes, 'route_default' => sub { $_[0]->SendDirectory($settings->{'DOCUMENTROOT'}); }, 'plugins' => $plugins, 'sock' => $sock, 'evp' => $evp, 'uploaders' => [], 'sesh' =>
    { 'newindex' => 0, 'sessions' => {}}, 'resources' => {}, 'loaded_plugins' => {});
    bless \%self, $class;

    $evp->set($sock, \%self, POLLIN);

    my $fs = MHFS::FS->new($settings->{'SOURCES'});
    if(! $fs) {
        say "failed to open MHFS::FS";
        return undef;
    }

lib/MHFS/HTTP/Server.pm  view on Meta::CPAN

            next;
        };
        next if(defined $settings->{$pluginname}{'enabled'} && (!$settings->{$pluginname}{'enabled'}));
        my $plugin = $pluginname->new($settings, \%self);
        next if(! $plugin);

        foreach my $timer (@{$plugin->{'timers'}}) {
            say __PACKAGE__.': adding '.ref($plugin).' timer';
            $self{'evp'}->add_timer(@{$timer});
        }
        if(my $func = $plugin->{'uploader'}) {
            say __PACKAGE__.': adding '. ref($plugin) .' uploader';
            push (@{$self{'uploaders'}}, $func);
        }
        foreach my $route (@{$plugin->{'routes'}}) {
            say __PACKAGE__.': adding ' . ref($plugin) . ' route ' . $route->[0];
            push @{$self{'routes'}}, $route;
        }
        $plugin->{'server'} = \%self;
        $self{'loaded_plugins'}{$pluginname} = $plugin;
    }

    $evp->run();

lib/MHFS/HTTP/Server/Client/Request.pm  view on Meta::CPAN

            $self->{'on_read_ready'} = undef;
            $handler->($data);
        }
        return 1;
    };
    $self->{'on_read_ready'}->();
}

sub SendFile {
    my ($self, $requestfile) = @_;
    foreach my $uploader (@{$self->{'client'}{'server'}{'uploaders'}}) {
        return if($uploader->($self, $requestfile));
    }
    say "SendFile - SendLocalFile $requestfile";
    return $self->SendLocalFile($requestfile);
}

1;



( run in 0.546 second using v1.01-cache-2.11-cpan-b16cb0d3907 )