MIME::Parser
SOAP::Lite
####
mod_perl
####
ServerName sieve.net
ServerAlias www.sieve.net
DocumentRoot /web/sieve.net/htdocs
ErrorLog /var/log/httpd/sieve.net_error_log
TransferLog /var/log/httpd/sieve.net_access_log
Options +ExecCGI
AddHandler cgi-script .cgi .pl .html
SetHandler perl-script
PerlHandler ModPerl::Registry
PerlSendHeader On
DirectoryIndex index.phtml index.htm index.html index.pl
####
#!/usr/bin/perl
use strict;
use SOAP::Lite;
use SOAP::Transport::HTTP;
use lib "/web/sieve.net/htdocs";
use Sieve;
use threads;
use Thread::Queue;
my $soap = SOAP::Transport::HTTP::CGI->new(
dispatch_to => 'manageSieve'
);
$soap->handle();
package manageSieve;
sub updateSieveFilter {
my ($package, $client_id) = @_;
my @users = ({
'Password' => 'test',
'Login' => 'test1@example.in'
},
{
'Password' => 'test',
'Login' => 'test2@example.in'
},
{
'Password' => 'test',
'Login' => 'test3@example.in'
},
{
'Password' => 'test',
'Login' => 'test4@example.in'
},
{
'Password' => 'test',
'Login' => 'test5@example.in'
},
);
if(@users) {
my $THREADS = 30;
my $Qwork = new Thread::Queue;
my $Qresults = new Thread::Queue;
# If i return any value from here it wokrs.
## Create the pool of workers
my @pool = map{
threads->create( \&updateClientUsersSieve, $Qwork, $Qresults )
} 1 .. $THREADS;
# Does not return any value from here.
foreach my $user (@users){
$Qwork->enqueue( $user );
if( $counter % 100 == 0){
sleep 1;
}
$counter++;
}
$Qwork->enqueue( (undef) x $THREADS );
## Process the results as they become available
for ( 1 .. $THREADS ) {
while( $result = $Qresults->dequeue ) {
#print $result;
}
}
# Clean up the threads
$_->join for @pool;
return 1;
}
return 0;
}
sub updateClientUsersSieve {
my $tid = threads->tid;
my $result = 1;
my( $Qwork, $Qresults ) = @_;
my ($login, $password);
while( my $user = $Qwork->dequeue ) {
($login, $password) = ($user->{'Login'}, $user->{'Password'});
my $sieveObj = new Sieve($login, $password);
$result = $sieveObj->sieveLogin();
$Qresults->enqueue( $result );
}
$Qresults->enqueue( undef ); ## Signal this thread is finished
}
1;
####
#!/usr/bin/perl
package Sieve;
use Net::ManageSieve;
use strict;
sub new {
my $class = shift;
my $self = {
_username => shift,
_password => shift,
_sieve => undef,
};
bless $self, $class;
return $self;
}
sub sieveLogin {
my ($self) = @_;
my $sieveServer = 'localhost';
my $sievePort = 2000;
my $authType = 'PLAIN';
my $username = $self->{_username};
my $password = $self->{_password};
my $capabilities = "require [";
my $activescript = "";
my $script_name = "sievephp_testscript";
my $error = undef;
$self->{_sieve} = Net::ManageSieve->new("$sieveServer:$sievePort");
if(!$self->{_sieve}->login($username, $password)){
return 0;
}
$capabilities = $self->{_sieve}->capabilities->{sieve};
$capabilities =~ s/\s/\",\"/g;
$capabilities = 'require ["'.$capabilities.'"];'."\n";
$activescript = $capabilities;
$activescript .= "\n";
$activescript .= "if allof (size :over 1000K ){ reject text: Your mail Has been rejected due to mailsize control\n\n.;";
$activescript .= "stop;}";
$self->{_sieve}->putscript($script_name, $activescript);
$self->{_sieve}->logout;
return 1;
}
1;
####
WSDL File for HelloService
####
use SOAP::Lite;
my $client = SOAP::Lite->service("http://sieve.net/sieve.wsdl");
my $result = $client->updateSieveFilter(17);
print $result;