####################################################################
# Perl interface to CommuniGate Pro CLI.
#
-# Version 2.7.5
+# Version 2.8.0
#
# Original location: <http://www.communigate.com/CGPerl/>
# Revision history: <http://www.communigate.com/CGPerl/History.html>
# [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
# GetForwarder
# FindForwarders
+############################## Named Tasks
+# List[Domain|Account]NamedTasks
+# [Create|Rename|Delete]NamedTask
+# [Get|Update]NamedTask
+
+
############################## Domain commands
# ListDomains
# MainDomainName
# [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
# GetMailboxRights
# SetMailboxClass
-# [Get|Set]AccountSubscription
+# [Get|Set]AccountSubscription *
+# [Get|Set]MailboxSubscription
# [Get|Set]MailboxAliases
############################## Alerts Administration
# ListWebFiles
# GetWebFilesInfo
+# [Read|Write|Rename|Delete]StorageFile
+# ListStorageFiles
+# GetStorageFileInfo
+# [Read|Update]StorageFileAttr
+# [Get|Set]FileSubscription
+
############################## Lists commands
# ListLists
# GetDomainLists
############################## 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
# Route
############################## Monitoring commands
-# GetSNMPElement
+# GetSNMPElement-GetStateElement
+# GetNextStatName
# Shutdown
############################## Statistics commands
# GetCurrentController
# GetTempClientIPs
# [Get|Set]TempBlacklistedIPs
-# RemoveAccountSubset
# List[Domain|Server|Cluster]Telnums
##############################################################
use Digest::MD5;
use vars qw($VERSION);
-($VERSION) = '2.7.5';
+$VERSION = '2.8.0';
$CGP::SECURE_LOGIN = 1;
my ($this) = @_;
$this->{isConnected}=0;
- delete $this->{theSocket};
+ delete $this->{theSocket} if(exists($this->{theSocket}));
$this->{theSocket} = new IO::Socket::INET( %{$this->{connParams}} );
return undef;
};
- if($this->{isSecureLogin} && $this->{errMsg} =~ /(\<.*\@*\>)/) {
+ if($this->{isSecureLogin} && $this->{errMsg} =~ /(\<.*\@.*\>)/) {
my $md5=Digest::MD5->new;
if($md5) {
$md5->add($1.$this->{password});
$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)'
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();
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);
}
$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);
}
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
}
#################################################################
+# 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 {
$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;
$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 ) = @_;
$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)'
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;
}
}
#################################################################
+# 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 {
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;
$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) = @_;
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();
}
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();
}
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();
}
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();
}
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();
}
}
#############################################
+# 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 {
$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');
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);
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();
}
$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();
-}
-
#########################################################################
#########################################################################
}
+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 '/') { # <tag attr="..." />
+ $this->{'span'}=$endPos+1;
+ return;
+ }
+ if(substr($this->{'data'},$this->{'span'},1)=~/[\!\?]/) { # <! or <?
+ $this->{'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();
} elsif($ch eq '(') {
++$this->{'span'};
return $this->readArray();
+ } elsif($ch eq '<') {
+ ++$this->{'span'};
+ return $this->readXML();
} else {
return $this->readWord();
}
return $this->readValue();
}
+
1;
=pod