App-MHFS

 view release on metacpan or  search on metacpan

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

        $sdata .= $self->{'client'}{'inbuf'};
        my $dlength = length($sdata);
        if($dlength >= $contentlength) {
            say 'PUTBuf datalength ' . $dlength;
            my $data;
            if($dlength > $contentlength) {
                $data = substr($sdata, 0, $contentlength);
                $self->{'client'}{'inbuf'} = substr($sdata, $contentlength);
                $dlength = length($data)
            }
            else {
                $data = $sdata;
                $self->{'client'}{'inbuf'} = '';
            }
            $self->{'on_read_ready'} = undef;
            $handler->($data);
        }
        else {
            $self->{'client'}{'inbuf'} = '';
        }
        #return '';
        return 1;
    };
    $self->{'on_read_ready'}->();
}

sub PUTBuf {
    my ($self, $handler) = @_;
    if($self->{'header'}{'Content-Length'} > 20000000) {
        say "PUTBuf too big";
        $self->{'client'}->SetEvents(POLLIN | MHFS::EventLoop::Poll->ALWAYSMASK );
        $self->{'on_read_ready'} = sub { return undef };
        return;
    }
    if(length($self->{'client'}{'inbuf'}) < $self->{'header'}{'Content-Length'}) {
        $self->{'client'}->SetEvents(POLLIN | MHFS::EventLoop::Poll->ALWAYSMASK );
    }
    $self->{'on_read_ready'} = sub {
        my $contentlength = $self->{'header'}{'Content-Length'};
        my $dlength = length($self->{'client'}{'inbuf'});
        if($dlength >= $contentlength) {
            say 'PUTBuf datalength ' . $dlength;
            my $data;
            if($dlength > $contentlength) {
                $data = substr($self->{'client'}{'inbuf'}, 0, $contentlength, '');
            }
            else {
                $data = $self->{'client'}{'inbuf'};
                $self->{'client'}{'inbuf'} = '';
            }
            $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 1.148 second using v1.01-cache-2.11-cpan-b16cb0d3907 )