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;