From 69dd6ea979481dcfe58511da6afcde2d5ad07ed9 Mon Sep 17 00:00:00 2001 From: ivan Date: Tue, 16 Feb 2010 21:33:37 +0000 Subject: [PATCH] upstream 2.8.0 --- lib/CGP/CLI.pm | 581 +++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 542 insertions(+), 39 deletions(-) diff --git a/lib/CGP/CLI.pm b/lib/CGP/CLI.pm index e19fffd..596ff6b 100644 --- a/lib/CGP/CLI.pm +++ b/lib/CGP/CLI.pm @@ -1,7 +1,7 @@ #################################################################### # Perl interface to CommuniGate Pro CLI. # -# Version 2.7.5 +# Version 2.8.0 # # Original location: # Revision history: @@ -40,18 +40,17 @@ # [Get|Set]AccountRules # [Get|Set]Account[Mail|Signal]Rules # UpdateAccount[Mail|Signal]Rule +# [Get|Set]Account[RPOPs|SIPs]; # SetAccountRules -# GetAccountRPOP -# SetAccountRPOP # GetAccountRights # SetAccountRights # GetAccountInfo # [Get|Set|Update]AccountPrefs -# GetEffectiveaAccountPrefs +# GetAccountEffectivePrefs # KillAccountSessions # [Get|Set]AccountACL # GetAccountACLRights - +# GetAccountPresence ############################## Group Commands # ListGroups # CreateGroup @@ -68,6 +67,12 @@ # GetForwarder # FindForwarders +############################## Named Tasks +# List[Domain|Account]NamedTasks +# [Create|Rename|Delete]NamedTask +# [Get|Update]NamedTask + + ############################## Domain commands # ListDomains # MainDomainName @@ -96,7 +101,7 @@ # [Get|Update|Set]AccountDefaults # [Get|Update|Set]ClusterAccountDefaults # [Get|Set|Update]AccountDefaultPrefs -# [Get|Set][Server|Cluster]AccountPrefs +# [Get|Set|Update][Server|Cluster]AccountPrefs # [Get|Update|Set]AccountTemplate ############################## Mailbox Administration @@ -108,7 +113,8 @@ # GetMailboxRights # SetMailboxClass -# [Get|Set]AccountSubscription +# [Get|Set]AccountSubscription * +# [Get|Set]MailboxSubscription # [Get|Set]MailboxAliases ############################## Alerts Administration @@ -125,6 +131,12 @@ # ListWebFiles # GetWebFilesInfo +# [Read|Write|Rename|Delete]StorageFile +# ListStorageFiles +# GetStorageFileInfo +# [Read|Update]StorageFileAttr +# [Get|Set]FileSubscription + ############################## Lists commands # ListLists # GetDomainLists @@ -170,15 +182,29 @@ ############################## Web Interface Integration # [Create|Get|Kill|Find]WebUserSession +# CreateXIMSSSession +# FindAccountSession +# [Get|Kill]Session ############################## Real-Time Application Administration # Create[Domain|Server|Cluster]PBX # List[Domain|Server|Cluster]PBXFiles # [Read|Store|Delete][Domain|Server|Cluster]PBXFile +############################## Real-Time Application Control +# StartPBXTask +# SendTaskEvent +# KillNode +# ReadNodeStatus + +############################## Account Services +# RemoveAccountSubset +# Roster +# Balance + ############################## Server commands # [Get|Update|Set]Module - +# [Get|Set][Queue|Signal|Session|Cluster|MediaServer]Settings # [Get|Set]LANIPs # [Get|Set]BlacklistedIPs # [Get|Set]ClientIPs @@ -206,7 +232,8 @@ # Route ############################## Monitoring commands -# GetSNMPElement +# GetSNMPElement-GetStateElement +# GetNextStatName # Shutdown ############################## Statistics commands @@ -221,7 +248,6 @@ # GetCurrentController # GetTempClientIPs # [Get|Set]TempBlacklistedIPs -# RemoveAccountSubset # List[Domain|Server|Cluster]Telnums ############################################################## @@ -239,7 +265,7 @@ use IO::Socket; use Digest::MD5; use vars qw($VERSION); -($VERSION) = '2.7.5'; +$VERSION = '2.8.0'; $CGP::SECURE_LOGIN = 1; @@ -263,7 +289,7 @@ sub connect { my ($this) = @_; $this->{isConnected}=0; - delete $this->{theSocket}; + delete $this->{theSocket} if(exists($this->{theSocket})); $this->{theSocket} = new IO::Socket::INET( %{$this->{connParams}} ); @@ -278,7 +304,7 @@ sub connect { return undef; }; - if($this->{isSecureLogin} && $this->{errMsg} =~ /(\<.*\@*\>)/) { + if($this->{isSecureLogin} && $this->{errMsg} =~ /(\<.*\@.*\>)/) { my $md5=Digest::MD5->new; if($md5) { $md5->add($1.$this->{password}); @@ -662,6 +688,40 @@ sub UpdateAccountSignalRule { $this->_parseResponse(); } +sub GetAccountRPOPs { + my ($this, $accountName) = @_; + croak 'usage CGP::CLI->GetAccountRPOPs($accountName)' + unless defined $accountName; + $this->send('GetAccountRPOPs '.$accountName); + return undef unless $this->_parseResponse(); + $this->parseWords($this->getWords); +} + +sub SetAccountRPOPs { + my ($this, $accountName, $newRecords) = @_; + croak 'usage CGP::CLI->SetAccountRPOPs($accountName, \@newRecords)' + unless defined $accountName && defined $newRecords; + $this->send('SetAccountRPOPs '.$accountName.' '.$this->printWords($newRecords)); + $this->_parseResponse(); +} + +sub GetAccountRSIPs { + my ($this, $accountName) = @_; + croak 'usage CGP::CLI->GetAccountRSIPs($accountName)' + unless defined $accountName; + $this->send('GetAccountRSIPs '.$accountName); + return undef unless $this->_parseResponse(); + $this->parseWords($this->getWords); +} + +sub SetAccountRSIPs { + my ($this, $accountName, $newRecords) = @_; + croak 'usage CGP::CLI->SetAccountRPSIs($accountName, \@newRecords)' + unless defined $accountName && defined $newRecords; + $this->send('SetAccountRSIPs '.$accountName.' '.$this->printWords($newRecords)); + $this->_parseResponse(); +} + sub GetAccountRPOP { my ($this, $accountName) = @_; croak 'usage CGP::CLI->GetAccountRPOP($accountName)' @@ -673,7 +733,7 @@ sub GetAccountRPOP { sub SetAccountRPOP { my ($this, $accountName, $newRecords) = @_; - croak 'usage CGP::CLI->SetAccountAliases($accountName, \@newRecords)' + croak 'usage CGP::CLI->SetAccountRPOP($accountName, \@newRecords)' unless defined $accountName && defined $newRecords; $this->send('SetAccountRPOP '.$accountName.' '.$this->printWords($newRecords)); $this->_parseResponse(); @@ -700,9 +760,17 @@ sub SetAccountRights { sub GetAccountInfo { my ($this, $account, $key) = @_; - croak 'usage CGP::CLI->GetAccountInfo($account,$key)' - unless defined $account && defined $key; - $this->send('GetAccountInfo '.$account.' Key '.$this->printWords($key)); + croak 'usage CGP::CLI->GetAccountInfo($account[,$key | ($key1,...)])' + unless defined $account; + my $line='GetAccountInfo '.$account; + if(defined $key) { + if(ref($key) eq 'ARRAY') { + $line.=' '.$this->printWords($key); + } else { + $line.=' Key '.$this->printWords($key); + } + } + $this->send($line); return undef unless $this->_parseResponse(); $this->parseWords($this->getWords); } @@ -765,11 +833,11 @@ sub GetEffectiveWebUser { $this->parseWords($this->getWords); } -sub GetEffectiveAccountPrefs { +sub GetAccountEffectivePrefs { my ($this, $account) = @_; - croak 'usage CGP::CLI->GetEffectiveAccountPrefs($account)' + croak 'usage CGP::CLI->GetAccountEffectivePrefs($account)' unless defined $account; - $this->send('GetEffectiveAccountPrefs '.$account); + $this->send('GetAccountEffectivePrefs '.$account); return undef unless $this->_parseResponse(); $this->parseWords($this->getWords); } @@ -816,7 +884,16 @@ sub GetAccountACLRights { return undef unless $this->_parseResponse(); $this->parseWords($this->getWords); } +sub GetAccountPresence { + my ($this, $account) = @_; + croak 'usage CGP::CLI->GetAccountPresence($accountName)' + unless (defined $account); + my $line = 'GetAccountPresence '.$account; + $this->send($line); + return undef unless $this->_parseResponse(); + $this->parseWords($this->getWords); +} ################################################################# # Group managent commands @@ -926,6 +1003,67 @@ sub FindForwarders { } ################################################################# +# Named Tasks managent commands + +sub ListDomainNamedTasks { + my ($this, $domainName) = @_; + my $line = 'ListDomainNamedTasks'; + $line .= ' ' .$domainName if $domainName; + $this->send($line); + return undef unless $this->_parseResponse(); + $this->parseWords($this->getWords); +} +sub ListAccountNamedTasks { + my ($this, $accountName) = @_; + croak 'usage CGP::CLI->ListAccountNamedTasks($account)' + unless defined $accountName; + $this->send('ListAccountNamedTasks '.$accountName); + return undef unless $this->_parseResponse(); + $this->parseWords($this->getWords); +} + +sub CreateNamedTask { + my ($this, $taskName, $account) = @_; + croak 'usage CGP::CLI->CreateNamedTask($taskName, $accountName)' + unless defined $taskName && defined $account; + $this->send('CreateNamedTask '.$taskName.' FOR '.$account); + $this->_parseResponse(); +} +sub RenameNamedTask { + my ($this, $taskName, $newName) = @_; + croak 'usage CGP::CLI->RenameNamedTask($taskName, $newName)' + unless defined $taskName && defined $newName; + $this->send('RenameNamedTask '.$taskName.' into '.$newName); + $this->_parseResponse(); +} + +sub DeleteNamedTask { + my ($this, $taskName) = @_; + croak 'usage CGP::CLI->DeleteNamedTask($taskName)' + unless defined $taskName; + $this->send('DeleteNamedTask '.$taskName); + $this->_parseResponse(); +} + +sub GetNamedTask { + my ($this, $taskName) = @_; + croak 'usage CGP::CLI->GetNamedTask($taskName)' + unless defined $taskName; + $this->send('GetNamedTask '.$taskName); + return undef unless $this->_parseResponse(); + $this->parseWords($this->getWords); +} + +sub UpdateNamedTask { + my ($this, $taskName, $settings) = @_; + croak 'usage CGP::CLI->UpdateNamedTask($taskName, \%settings)' + unless defined $taskName && defined $settings; + my $line = 'UpdateNamedTask '.$taskName.' '.$this->printWords($settings); + $this->send($line); + $this->_parseResponse(); +} + +################################################################# # Domain managent commands sub ListDomains { @@ -1368,6 +1506,11 @@ sub SetServerAccountPrefs { $this->send('SetServerAccountPrefs '.$this->printWords($dict)); $this->_parseResponse(); } +sub UpdateServerAccountPrefs { + my ( $this, $dict ) = @_; + $this->send('UpdateServerAccountPrefs '.$this->printWords($dict)); + $this->_parseResponse(); +} sub GetClusterWebUserDefaults { my $this = shift; @@ -1391,6 +1534,11 @@ sub SetClusterAccountPrefs { $this->send('SetClusterAccountPrefs '.$this->printWords($dict)); $this->_parseResponse(); } +sub UpdateClusterAccountPrefs { + my ( $this, $dict ) = @_; + $this->send('UpdateClusterAccountPrefs '.$this->printWords($dict)); + $this->_parseResponse(); +} sub GetDomainLocation { my ( $this, $account ) = @_; @@ -1768,6 +1916,25 @@ sub SetAccountSubscription { $this->_parseResponse(); } +sub GetMailboxSubscription { + my ($this,$accountName) = @_; + croak 'usage CGP::CLI->GetMailboxSubscription(accountName)' + unless defined $accountName; + + $this->send('GetMailboxSubscription '.$accountName); + return undef unless $this->_parseResponse(); + $this->parseWords($this->getWords); +} + +sub SetMailboxSubscription { + my ($this,$accountName,$newSubscription) = @_; + croak 'usage CGP::CLI->SetMailboxSubscription(accountName,\%newSubscription)' + unless (defined $accountName && defined $newSubscription); + + $this->send('SetMailboxSubscription '.$accountName.' '.$this->printWords($newSubscription)); + $this->_parseResponse(); +} + sub GetMailboxAliases { my ($this,$accountName) = @_; croak 'usage CGP::CLI->GetMailboxAliases(accountName)' @@ -1943,9 +2110,11 @@ sub PutWebFile { unless (defined $accountName && defined $fileName && defined $data); my $line='PutWebFile '.$accountName.' FILE '.$this->printWords($fileName); $line .= ' OFFSET '. $position if(defined $position && $position!=0); - - $line .= ' DATA ['.$data.']'; - + if($data=~/\[.*\]$/) { + $line .= ' DATA '.$data; + } else { + $line .= ' DATA ['.$data.']'; + } $this->send($line); $this->_parseResponse; } @@ -1991,6 +2160,133 @@ sub GetWebFilesInfo { } ################################################################# +# File Storage Administration + +sub ReadStorageFile { + my ($this,$accountName,$fileName,$position,$sliceSize,$authAccountName) = @_; + + croak 'usage CGP::CLI->ReadStorageFile(accountName,fileName[,position,sliceSize[,authAccountName]])' + unless (defined $accountName && defined $fileName); + my $line='ReadStorageFile '.$accountName.' FILE '.$this->printWords($fileName); + $line .= ' OFFSET '. $position if(defined $position && $position!=0); + $line .= ' SIZE '. $sliceSize if(defined $sliceSize); + $line .= ' AUTH '. $authAccountName if(defined $authAccountName); + + $this->send($line); + return undef unless $this->_parseResponse; + $this->parseWords($this->getWords); +} + +sub WriteStorageFile { + my ($this,$accountName,$fileName,$data,$position,$authAccountName) = @_; + + croak 'usage CGP::CLI->WriteStorageFile(accountName,fileName,data [,position[,authAccountName]])' + unless (defined $accountName && defined $fileName && defined $data); + my $line='WriteStorageFile '.$accountName.' FILE '.$this->printWords($fileName); + $line .= ' OFFSET '. $position if(defined $position && $position!=0); + if($data=~/\[.*\]$/) { + $line .= ' DATA '.$data; + } else { + $line .= ' DATA ['.$data.']'; + } + $line .= ' AUTH '. $authAccountName if(defined $authAccountName); + $this->send($line); + $this->_parseResponse; +} + +sub RenameStorageFile { + my ($this,$accountName,$oldFileName,$newFileName,$authAccountName) = @_; + + croak 'usage CGP::CLI->RenameStorageFile(accountName,oldFileName,newFileName[,authAccountName])' + unless (defined $accountName && defined $oldFileName && defined $newFileName); + my $line='RenameStorageFile '.$accountName.' FILE '.$this->printWords($oldFileName).' INTO '.$this->printWords($newFileName); + $line .= ' AUTH '. $authAccountName if(defined $authAccountName); + $this->send($line); + $this->_parseResponse; +} + +sub DeleteStorageFile { + my ($this,$accountName,$fileName,$authAccountName) = @_; + + croak 'usage CGP::CLI->DeleteStorageFile(accountName,fileName[,authAccountName])' + unless (defined $accountName && defined $fileName); + my $line='DeleteStorageFile '.$accountName.' FILE '.$this->printWords($fileName); + $line .= ' AUTH '. $authAccountName if(defined $authAccountName); + $this->send($line); + $this->_parseResponse; +} + +sub ListStorageFiles { + my ($this,$accountName,$filePath,$authAccountName) = @_; + + croak 'usage CGP::CLI->ListStorageFiles(accountName [,filePath[,authAccountName]])' + unless defined $accountName; + my $line = 'ListStorageFiles '.$accountName; + $line .= ' PATH '.$this->printWords($filePath) if $filePath; + $line .= ' AUTH '. $authAccountName if(defined $authAccountName); + $this->send($line); + return undef unless $this->_parseResponse; + $this->parseWords($this->getWords); +} + +sub GetStorageFileInfo { + my ($this,$accountName,$filePath,$authAccountName) = @_; + + croak 'usage CGP::CLI->GetStorageFileInfo(accountName[,filePath[,authAccountName])' + unless defined $accountName; + my $line='GetStorageFileInfo '.$accountName; + $line .= ' PATH '.$this->printWords($filePath) if $filePath; + $line .= ' AUTH '. $authAccountName if(defined $authAccountName); + $this->send($line); + + return undef unless $this->_parseResponse; + $this->parseWords($this->getWords); +} + +sub ReadStorageFileAttr { + my ($this,$accountName,$fileName,$atributes,$authAccountName) = @_; + + croak 'usage CGP::CLI->ReadStorageFileAttr(accountName,fileName[,attributes[,authAccountName]])' + unless (defined $accountName && defined $fileName); + my $line='ReadStorageFileAttr '.$accountName.' FILE '.$this->printWords($fileName); + $line .= $atributes if(defined $atributes); + $line .= ' AUTH '. $authAccountName if(defined $authAccountName); + + $this->send($line); + return undef unless $this->_parseResponse; + $this->parseWords($this->getWords); +} + +sub UpdateStorageFileAttr { + my ($this,$accountName,$fileName,$attributes,$authAccountName) = @_; + + croak 'usage CGP::CLI->UpdateStorageFileAttr(accountName,fileName,attributes[,authAccountName])' + unless (defined $accountName && defined $fileName && defined $attributes); + my $line='UpdateStorageFileAttr '.$accountName.' FILE '.$this->printWords($fileName).' '.$attributes; + $line .= ' AUTH '. $authAccountName if(defined $authAccountName); + $this->send($line); + $this->_parseResponse; +} + +sub GetFileSubscription { + my ($this, $accountName) = @_; + croak 'usage CGP::CLI->GetFileSubscription($accountName)' + unless defined $accountName; + $this->send('GetFileSubscription '.$accountName); + return undef unless $this->_parseResponse(); + $this->parseWords($this->getWords); +} + +sub SetFileSubscription { + my ($this, $accountName, $newSubscription) = @_; + croak 'usage CGP::CLI->SetFileSubscription($accountName, \@newSubscription)' + unless defined $accountName && defined $newSubscription; + $this->send('SetFileSubscription '.$accountName.' '.$this->printWords($newSubscription)); + $this->_parseResponse(); +} + + +################################################################# # List management commands sub ListLists { @@ -2448,6 +2744,22 @@ sub GetWebUserSession { return undef unless $this->_parseResponse(); $this->parseWords($this->getWords); } + +sub FindAccountSession { + my ($this, $accountName,$address,$proxiedAddress,$protocol,$transport,$client) = @_; + croak 'usage CGP::CLI->FindAccountSession($accountName [,$address,$proxiedAddress,$protocol,$transport,$client])' unless defined $accountName; + + my $line='FindAccountSession '.$accountName; + $line .= ' ADDRESS '.$address if($address); + $line .= ' FOR '.$proxiedAddress if($proxiedAddress); + $line .= ' PROTOCOL '.$protocol if($protocol); + $line .= ' TRANSPORT '.$transport if($transport); + $line .= ' CLIENT '.$client if($client); + $this->send($line); + return undef unless $this->_parseResponse(); + $this->parseWords($this->getWords); +} + sub GetSession { my ($this, $sessionID,$domain) = @_; croak 'usage CGP::CLI->GetSession($sessionID [,$domain])' unless defined $sessionID; @@ -2494,6 +2806,15 @@ sub CreateDomainPBX { $this->send($line); $this->_parseResponse(); } +sub DeleteDomainPBX { + my ( $this, $domain, $language ) = @_; + croak 'usage CGP::CLI->Deleref($ret)teDomainPBX($domainName,$language)' + unless defined $domain && defined $language; + my $line = 'DeleteDomainPBX '.$domain . ' FILE '.$this->printWords($language); + + $this->send($line); + $this->_parseResponse(); +} sub ListDomainPBXFiles { my ($this, $domain,$language) = @_; @@ -2520,7 +2841,8 @@ sub StoreDomainPBXFile { my ( $this, $domain, $fileName,$base64data ) = @_; croak 'usage CGP::CLI->StoreDomainPBXFile($domainName,$fileName,$base64data)' unless defined $domain && defined $fileName && defined $base64data; - $this->send('StoreDomainPBXFile '.$domain.' FILE '.$this->printWords($fileName).' DATA ['.$base64data.']'); + $base64data='['.$base64data.']' unless($base64data=~/^\[.*\]$/); + $this->send('StoreDomainPBXFile '.$domain.' FILE '.$this->printWords($fileName).' DATA '.$base64data); $this->_parseResponse(); } @@ -2537,8 +2859,17 @@ sub DeleteDomainPBXFile { sub CreateServerPBX { my ( $this, $language ) = @_; - my $line = 'CreateServerPBX'; - $line .= $this->printWords($language) if($language); + croak 'usage CGP::CLI->CreateServerPBX($language)' + unless defined $language; + my $line = 'CreateServerPBX '.$this->printWords($language); + $this->send($line); + $this->_parseResponse(); +} +sub DeleteServerPBX { + my ( $this, $language ) = @_; + croak 'usage CGP::CLI->DeleteServerPBX($language)' + unless defined $language; + my $line = 'DeleteServerPBX ' .$this->printWords($language); $this->send($line); $this->_parseResponse(); } @@ -2567,7 +2898,8 @@ sub StoreServerPBXFile { my ( $this, $fileName,$base64data ) = @_; croak 'usage CGP::CLI->StoreServerPBXFile($fileName,$base64data)' unless defined $fileName && defined $base64data; - $this->send('StoreServerPBXFile ' .$this->printWords($fileName).' DATA ['.$base64data.']'); + $base64data='['.$base64data.']' unless($base64data=~/^\[.*\]$/); + $this->send('StoreServerPBXFile ' .$this->printWords($fileName).' DATA '.$base64data); $this->_parseResponse(); } @@ -2584,8 +2916,17 @@ sub DeleteServerPBXFile { sub CreateClusterPBX { my ( $this, $language ) = @_; - my $line = 'CreateClusterPBX'; - $line .= $this->printWords($language) if($language); + croak 'usage CGP::CLI->CreateClusterPBX($language)' + unless defined $language; + my $line = 'CreateClusterPBX ' .$this->printWords($language); + $this->send($line); + $this->_parseResponse(); +} +sub DeleteClusterPBX { + my ( $this, $language ) = @_; + croak 'usage CGP::CLI->DeleteClusterPBX($language)' + unless defined $language; + my $line = 'DeleteClusterPBX ' .$this->printWords($language); $this->send($line); $this->_parseResponse(); } @@ -2614,7 +2955,8 @@ sub StoreClusterPBXFile { my ( $this, $fileName,$base64data ) = @_; croak 'usage CGP::CLI->StoreClusterPBXFile($fileName,$base64data)' unless defined $fileName && defined $base64data; - $this->send('StoreClusterPBXFile ' .$this->printWords($fileName).' DATA ['.$base64data.']'); + $base64data='['.$base64data.']' unless($base64data=~/^\[.*\]$/); + $this->send('StoreClusterPBXFile ' .$this->printWords($fileName).' DATA '.$base64data); $this->_parseResponse(); } @@ -2628,6 +2970,79 @@ sub DeleteClusterPBXFile { } ############################################# +# Real-Time Application Control + +sub StartPBXTask { + my ($this, $account,$program,$entry,$param) = @_; + croak 'usage CGP::CLI->StartPBXTask($account,$program[,$entryName,$param])' + unless (defined $account && defined $program); + my $line = "StartPBXTask $account PROGRAM $program"; + $line .= ' ENTRY '.$entry if($entry); + $line .= ' PARAM '.$param if($param); + $this->send($line); + return undef unless $this->_parseResponse(); + $this->parseWords($this->getWords); +} + +sub SendTaskEvent { + my ($this, $taskID,$eventName,$param) = @_; + croak 'usage CGP::CLI->SendTaskEvent($taskID,$eventName[,$param])' + unless (defined $taskID && defined $eventName); + my $line = "SendTaskEvent $taskID EVENT ".$this->printWords($eventName); + $line .= ' PARAM '.$param if($param); + $this->send($line); + return undef unless $this->_parseResponse(); + $this->parseWords($this->getWords); +} +sub KillNode { + my ($this, $taskID) = @_; + croak 'usage CGP::CLI->KillNode($taskID)' + unless (defined $taskID); + my $line = "KillNode $taskID"; + $this->send($line); + $this->_parseResponse(); +} + +sub ReadNodeStatus { + my ($this, $taskID) = @_; + croak 'usage CGP::CLI->ReadNodeStatus($taskID)' + unless (defined $taskID); + my $line = "ReadNodeStatus $taskID"; + $this->send($line); + return undef unless $this->_parseResponse(); + $this->parseWords($this->getWords); +} + +############################################# +# Account Services + +sub RemoveAccountSubset { + my ($this, $account, $subset) = @_; + croak 'usage CGP::CLI->RemoveAccountSubset($account,$subset)' + unless defined $account && defined $subset; + $this->send('RemoveAccountSubset '.$account.' SUBSET '.$this->printWords($subset)); + return undef unless $this->_parseResponse(); +} + +sub Roster { + my ($this, $account, $params) = @_; + croak 'usage CGP::CLI->Roster($account,\%params)' + unless defined $account && defined $params; + $this->send('Roster '.$account.' '.$this->printWords($params)); + return undef unless $this->_parseResponse(); + $this->parseWords($this->getWords); +} + +sub Balance { + my ($this, $account, $params) = @_; + croak 'usage CGP::CLI->Balance($account,\%params)' + unless defined $account && defined $params; + $this->send('Balance '.$account.' '.$this->printWords($params)); + return undef unless $this->_parseResponse(); + $this->parseWords($this->getWords); +} + +############################################# # Server Settings sub GetModule { @@ -2680,6 +3095,35 @@ sub SetSignalSettings { $this->send ('SetSignalSettings '.$this->printWords($newSettings) ); $this->_parseResponse(); } +sub GetMediaServerSettings { + my ( $this ) = @_; + $this->send('GetMediaServerSettings'); + return undef unless $this->_parseResponse(); + $this->parseWords($this->getWords); +} +sub SetMediaServerSettings { + my ( $this, $newSettings ) = @_; + croak 'usage CGP::CLI->SetMediaServerSettings(\%newSettings)' + unless defined $newSettings; + $this->send ('SetMediaServerSettings '.$this->printWords($newSettings) ); + $this->_parseResponse(); +} + +sub GetSessionSettings { + my ( $this ) = @_; + $this->send('GetSessionSettings'); + return undef unless $this->_parseResponse(); + $this->parseWords($this->getWords); +} +sub SetSessionSettings { + my ( $this, $newSettings ) = @_; + croak 'usage CGP::CLI->SetSessionSettings(\%newSettings)' + unless defined $newSettings; + $this->send ('SetSessionSettings '.$this->printWords($newSettings) ); + $this->_parseResponse(); +} + + sub GetClusterSettings { my ( $this ) = @_; $this->send('GetClusterSettings'); @@ -3172,6 +3616,19 @@ sub GetSNMPElement { return undef unless $this->_parseResponse(); $this->parseWords($this->getWords); } +sub GetStatElement { + my ($this, $element) = @_; + $this->send('GetStatElement '.$element); + return undef unless $this->_parseResponse(); + $this->parseWords($this->getWords); +} +sub GetNextStatName { + my ($this, $element) = @_; + $this->send('GetNextStatName '.$element); + return undef unless $this->_parseResponse(); + $this->parseWords($this->getWords); +} + sub GetDialogInfo { my ($this, $dialogID) = @_; $this->send('GetDialogInfo '.$dialogID); @@ -3252,7 +3709,7 @@ sub RejectQueueMessage { croak 'usage CGP::CLI->RejectQueueMessage($msgID [,$errorText])' unless defined $msg; my $line = 'RejectQueueMessage '.$msg; - $line .= $this->printWords($text) if $text; + $line .= " ".$this->printWords($text) if $text; $this->send($line); $this->_parseResponse(); } @@ -3292,14 +3749,6 @@ sub SetTempBlacklistedIPs { $this->_parseResponse(); } -sub RemoveAccountSubset { - my ($this, $account, $subset) = @_; - croak 'usage CGP::CLI->RemoveAccountSubset($account,$subset)' - unless defined $account && defined $subset; - $this->send('RemoveAccountSubset '.$account.' SUBSET '.$this->printWords($subset)); - return undef unless $this->_parseResponse(); -} - ######################################################################### ######################################################################### @@ -3518,6 +3967,56 @@ sub readKey() { } +sub readXML { + my $this = shift; + my $startSpan=$this->{'span'}; + for(;;) { + $this->readXMLElem(); + if(substr($this->{'data'},$this->{'span'},1) ne '<') { + last; + } else { + $this->{'span'}++; + } + } + return substr($this->{'data'},$startSpan-1,$this->{'span'}-$startSpan+1); +} + +sub readXMLElem { + my $this = shift; + + my $element=undef; + my $endPos=index($this->{'data'},'>',$this->{'span'}); + if($endPos<$this->{'span'}-1) { + croak "XML parsing error:",substr($this->{'data'},$this->{'span'}-1,100); + } + if(substr($this->{'data'},$endPos-1,1) eq '/') { # + $this->{'span'}=$endPos+1; + return; + } + if(substr($this->{'data'},$this->{'span'},1)=~/[\!\?]/) { # {'span'}=$endPos+1; + return; + } + unless(substr($this->{'data'},$this->{'span'},$endPos - $this->{'span'}+1) =~/(.+?)[ \>]/) { + croak "XML reading error:",substr($this->{'data'},$this->{'span'}-1,100); + } + $element=$1; +#print "endElement=$1\n"; + $this->{'span'}=$endPos+1; +#print "parsed=".substr($this->{'data'},$this->{'span'},10)."\n"; + $this->{'span'}++ while($this->{'span'} < $this->{'len'} && substr($this->{'data'},$this->{'span'},1) ne '<'); + while($this->{'span'} < $this->{'len'}) { + if(substr($this->{'data'},$this->{'span'},$this->{'len'} - $this->{'span'})=~/^\<\/$element\>/) { #found closing element + my $endPos=index($this->{'data'},'>',$this->{'span'}+1); + $this->{'span'}=$endPos+1; + return; + } + $this->{'span'}++; + $this->readXMLElem(); + } +} + + sub readValue() { my $this = shift; $this->skipSpaces(); @@ -3528,6 +4027,9 @@ sub readValue() { } elsif($ch eq '(') { ++$this->{'span'}; return $this->readArray(); + } elsif($ch eq '<') { + ++$this->{'span'}; + return $this->readXML(); } else { return $this->readWord(); } @@ -3587,6 +4089,7 @@ sub parseWords { return $this->readValue(); } + 1; =pod -- 2.11.0