Server IP : 103.119.228.120 / Your IP : 18.190.160.6 Web Server : Apache System : Linux v8.techscape8.com 3.10.0-1160.119.1.el7.tuxcare.els2.x86_64 #1 SMP Mon Jul 15 12:09:18 UTC 2024 x86_64 User : nobody ( 99) PHP Version : 5.6.40 Disable Function : shell_exec,symlink,system,exec,proc_get_status,proc_nice,proc_terminate,define_syslog_variables,syslog,openlog,closelog,escapeshellcmd,passthru,ocinum cols,ini_alter,leak,listen,chgrp,apache_note,apache_setenv,debugger_on,debugger_off,ftp_exec,dl,dll,myshellexec,proc_open,socket_bind,proc_close,escapeshellarg,parse_ini_filepopen,fpassthru,exec,passthru,escapeshellarg,escapeshellcmd,proc_close,proc_open,ini_alter,popen,show_source,proc_nice,proc_terminate,proc_get_status,proc_close,pfsockopen,leak,apache_child_terminate,posix_kill,posix_mkfifo,posix_setpgid,posix_setsid,posix_setuid,dl,symlink,shell_exec,system,dl,passthru,escapeshellarg,escapeshellcmd,myshellexec,c99_buff_prepare,c99_sess_put,fpassthru,getdisfunc,fx29exec,fx29exec2,is_windows,disp_freespace,fx29sh_getupdate,fx29_buff_prepare,fx29_sess_put,fx29shexit,fx29fsearch,fx29ftpbrutecheck,fx29sh_tools,fx29sh_about,milw0rm,imagez,sh_name,myshellexec,checkproxyhost,dosyayicek,c99_buff_prepare,c99_sess_put,c99getsource,c99sh_getupdate,c99fsearch,c99shexit,view_perms,posix_getpwuid,posix_getgrgid,posix_kill,parse_perms,parsesort,view_perms_color,set_encoder_input,ls_setcheckboxall,ls_reverse_all,rsg_read,rsg_glob,selfURL,dispsecinfo,unix2DosTime,addFile,system,get_users,view_size,DirFiles,DirFilesWide,DirPrintHTMLHeaders,GetFilesTotal,GetTitles,GetTimeTotal,GetMatchesCount,GetFileMatchesCount,GetResultFiles,fs_copy_dir,fs_copy_obj,fs_move_dir,fs_move_obj,fs_rmdir,SearchText,getmicrotime MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/local/ssl/local/ssl/local/ssl/share/perl5/vendor_perl/RPC/PlServer/ |
Upload File : |
# -*- perl -*- # # # PlRPC - Perl RPC, package for writing simple, RPC like clients and # servers # # # Copyright (c) 1997,1998 Jochen Wiedmann # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the Perl README file. # # Author: Jochen Wiedmann # Email: jochen.wiedmann at freenet.de # require 5.004; use strict; require Storable; package RPC::PlServer::Comm; $RPC::PlServer::Comm::VERSION = '0.1003'; ############################################################################ # # Name: new (Class method) # # Purpose: Constructor # # Inputs: $class - This class # $attr - Hash ref of attributes # # Result: Server object for success, error message otherwise # ############################################################################ sub new ($) { my($class, $attr) = @_; my $self = {}; bless($self, (ref($class) || $class)); if (my $comp = $attr->{'compression'}) { if ($comp eq 'off') { $self->{'compression'} = undef; } elsif ($comp eq 'gzip') { require Compress::Zlib; $self->{'compression'} = 'gzip'; } else { die "Unknown compression type ($comp), use 'off' or 'gzip'"; } } if (my $cipher = $attr->{'cipher'}) { $self->{'cipher'} = $cipher; } if (my $maxmessage = $attr->{'maxmessage'}) { $self->{'maxmessage'} = $maxmessage; } $self; } ############################################################################ # # Name: Write # # Purpose: Writing to a PlRPC socket; used by both the client (when # sending a method name and arguments) and the server (for # sending the result list). Communication occurrs in packets. # Each packet is preceeded by 4 bytes with the true packet # size. If encryption happens, then the packet is padded with # NUL bytes to a multiple of blocksize bytes. However, the # stored size remains unchanged. # # Inputs: $self - Instance of RPC::PlServer or RPC::PlClient # $socket - The socket to write to # $args - Reference to array of arguments being sent # # Result: Nothing; dies in case of errors. # ############################################################################ sub Write ($$$) { my($self, $socket, $msg) = @_; my $encodedMsg = Storable::nfreeze($msg); $encodedMsg = Compress::Zlib::compress($encodedMsg) if ($self->{'compression'}); my($encodedSize) = length($encodedMsg); if (my $cipher = $self->{'cipher'}) { my $size = $cipher->blocksize; if (my $addSize = length($encodedMsg) % $size) { $encodedMsg .= chr(0) x ($size - $addSize); } $msg = ''; for (my $i = 0; $i < length($encodedMsg); $i += $size) { $msg .= $cipher->encrypt(substr($encodedMsg, $i, $size)); } $encodedMsg = $msg; } local $\; if (!$socket->print(pack("N", $encodedSize), $encodedMsg) || !$socket->flush()) { die "Error while writing socket: $!"; } } ############################################################################ # # Name: Read # # Purpose: Reading from a PlRPC socket; used by both the client (when # receiving a result list) and the server (for receiving the # method name and arguments). Counterpart of Write, see # above for specs. # # Inputs: $self - Instance of RPC::PlServer or RPC::PlClient # $socket - The socket to read from # # Result: Array ref to result list; dies in case of errors. # ############################################################################ sub Read($$) { my($self, $socket) = @_; my $result; my($encodedSize, $readSize, $blockSize); $readSize = 4; $encodedSize = ''; while ($readSize > 0) { my $result = $socket->read($encodedSize, $readSize, length($encodedSize)); if (!$result) { return undef if defined($result); die "Error while reading socket: $!"; } $readSize -= $result; } $encodedSize = unpack("N", $encodedSize); my $max = $self->getMaxMessage(); die "Maximum message size of $max exceeded, use option 'maxmessage' to" . " increase" if $max && $encodedSize > $max; $readSize = $encodedSize; if ($self->{'cipher'}) { $blockSize = $self->{'cipher'}->blocksize; if (my $addSize = ($encodedSize % $blockSize)) { $readSize += ($blockSize - $addSize); } } my $msg = ''; my $rs = $readSize; while ($rs > 0) { my $result = $socket->read($msg, $rs, length($msg)); if (!$result) { die "Unexpected EOF" if defined $result; die "Error while reading socket: $!"; } $rs -= $result; } if ($self->{'cipher'}) { my $cipher = $self->{'cipher'}; my $encodedMsg = $msg; $msg = ''; for (my $i = 0; $i < $readSize; $i += $blockSize) { $msg .= $cipher->decrypt(substr($encodedMsg, $i, $blockSize)); } $msg = substr($msg, 0, $encodedSize); } $msg = Compress::Zlib::uncompress($msg) if ($self->{'compression'}); Storable::thaw($msg); } ############################################################################ # # Name: Init # # Purpose: Initialize an object for using RPC::PlServer::Comm methods # # Input: $self - Instance # # Returns: The instance in case of success, dies in case of trouble. # ############################################################################ ############################################################################ # # Name: getMaxMessage # # Purpose: Returns the maximum size of a message # # Inputs: None # # Returns: Maximum message size or 65536, if none specified # ############################################################################ sub getMaxMessage() { my $self = shift; return defined($self->{'maxmessage'}) ? $self->{'maxmessage'} : 65536; } 1;