⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 voicemail.pm

📁 asterisk 計費模塊
💻 PM
字号:
package Asterisk::Voicemail;require 5.004;=head1 NAMEAsterisk::Voicemail - Stuff to deal with asterisk voicemail=head1 SYNOPSISThis is not completed yet=head1 DESCRIPTIONdescription=cutuse Asterisk;@ISA = ( 'Asterisk' );$VERSION = '0.01';$DEBUG = 5;sub version { $VERSION; }sub new {	my ($class, %args) = @_;	my $self = {};	bless $self, ref $class || $class;#        while (my ($key,$value) = each %args) { $self->set($key,$value); }	return $self;}sub DESTROY { }sub spooldirectory {	my ($self, $directory) = @_;	if (defined($directory)) {		$self->{'spooldirectory'} = $directory;	} else {		$self->{'spooldirectory'} = '/var/spool/asterisk/vm' if (!defined($self->{'spooldirectory'}));	}	return $self->{'spooldirectory'};}sub sounddirectory {	my ($self, $directory) = @_;	if (defined($directory)) {		$self->{'sounddirectory'} = $directory;	} else {		$self->{'sounddirectory'} = '/var/lib/asterisk/sounds' if (!defined($self->{'sounddirectory'}));	}	return $self->{'sounddirectory'};}sub serveremail {	my ($self, $email) = @_;	$self->{'serveremail'} = $email if (defined($email));	return $self->{'serveremail'};}sub format {	my ($self, @formats) = @_;	if (@formats) {		$self->{'formats'} = @formats;	}	return $self->{'formats'};}sub vmbox {	my ($self, $vmbox, $vmpass, $vmfn, $vmemail) = @_;	if (defined($vmbox) && (defined($vmpass) || defined($vmfn) || defined($vmemail)) ) {		$self->{'vmbox'}{$vmbox}{'pass'} = $vmpass if (defined($vmpass));		$self->{'vmbox'}{$vmbox}{'fn'} = $vmfn if (defined($vmfn));		$self->{'vmbox'}{$vmbox}{'email'} = $vmemail if (defined($vmemail));	} elsif (defined($vmbox)) {		return ($self->{'vmbox'}{$vmbox}{'pass'},			$self->{'vmbox'}{$vmbox}{'fn'},			$self->{'vmbox'}{$vmbox}{'email'} );	}}sub getfolders {	my ($self, $vmbox) = @_;	my @folders = ();        my $spool = $self->spooldirectory();	foreach $file (<$spool/$vmbox/*>) {		if ( -d $file ) {			$file =~ s/$spool\/$vmbox\///;			push(@folders, $file);		}	}	return @folders;}sub configfile {	my ($self, $configfile) = @_;	if (defined($configfile)) {		$self->{'configfile'} = $configfile;	} else {		$self->{'configfile'} = '/etc/asterisk/voicemail.conf' if (!defined($self->{'configfile'}));	}	return $self->{'configfile'};}sub readconfig {	my ($self) = @_;	my $context = '';	my $line = '';	my $configfile = $self->configfile();	open(CF, "<$configfile") || die "Error loading $configfile: $!\n";	while ($line = <CF>) {		chop($line);		$line =~ s/;.*$//;		$line =~ s/\s*$//;		if ($line =~ /^;/) {			next;		} elsif ($line =~ /^\s*$/) {			next;		} elsif ($line =~ /^\[(\w+)\]$/) {			$context = $1;			print STDERR "Context: $context\n" if ($DEBUG>3);		} elsif ($line =~ /^format\s*[=>]+\s*(.*)/) {			my $formats = $1;			$self->format(split(/|/, $formats));		} elsif ($line =~ /^serveremail\s*[=>]+\s*(.*)/) {			$self->serveremail($1);		} elsif ($line =~ /^(\d+)\s*[=>]+\s*(.*)/) {			my $vmbox = $1;			my $vmstr = $2;			my ($vmpass, $vmfn, $vmemail) = split(/,/, $vmstr);			print STDERR "VM BOX ($vmbox)\n" if ($DEBUG>3);			$self->vmbox($vmbox, $vmpass, $vmfn, $vmstr);		} else {			print STDERR "Unknown line: $line\n" if ($DEBUG);		}	}	close(CF);}sub appendsoundfile {	my ($self, $source, $dest) = @_;	open(IN, "<$source") || return 0;	open(OUT, ">>$dest") || return 0;	while (<IN>) {		print OUT $_;	}	close(IN);	close(OUT);	return 1;}sub validmailbox {	my ($self, $vmbox) = @_;	return 1 if ($self->vmbox($vmbox));	return 0;}sub msgcount {	my ($self, $vmbox, $folder) = @_;	my $count = 0;	return $count if (!defined($vmbox) || !defined($folder));	my $spool = $self->spooldirectory() . '/' . $vmbox . '/' . $folder;	if (opendir(DIR, $spool)) {		my @msgs = grep(/^msg.*\.txt$/, readdir(DIR));		$count = $#msgs+1;		closedir(DIR);	}	return $count;}sub msgcountstr {	my ($self, $vmbox, $folder) = @_;	my $count = $self->msgcount($vmbox, $folder);	if ($count > 1) {		return "$count messages";	} elsif ($count > 0) {		return "$count message";	} else {		return "no messages";	}}sub createdefaultmailbox {	my ($self, $vmbox) = @_;	my $spool = $self->spooldirectory();	my $sounddir = $self->sounddirectory();	my $vmdir = "$spool/$vmbox";	if ( -d $vmdir ) {		print STDERR "Directory already exists: $vmdir\n" if ($DEBUG);	} else {		mkdir($vmdir, 0755) || return 0;		mkdir("$vmdir/INBOX", 0755) || return 0;	}	$self->appendsoundfile("$sounddir/vm-theperson.gsm", "$vmdir/unavail.gsm");	$self->appendsoundfile("$sounddir/vm-theperson.gsm", "$vmdir/busy.gsm");	$self->appendsoundfile("$sounddir/vm-extension.gsm", "$vmdir/greet.gsm");	foreach $chr (split(//, $vmbox)) {		$self->appendsoundfile("$sounddir/digits/$chr.gsm", "$vmdir/unavail.gsm");		$self->appendsoundfile("$sounddir/digits/$chr.gsm", "$vmdir/busy.gsm");		$self->appendsoundfile("$sounddir/digits/$chr.gsm", "$vmdir/greet.gsm");	}	$self->appendsoundfile("$sounddir/vm-isunavail.gsm", "$vmdir/unavail.gsm");	$self->appendsoundfile("$sounddir/vm-isonphone.gsm", "$vmdir/busy.gsm");	return 1;}sub messages {	my ($self, $messages, $folder) = @_;        my $path = $self->spooldirectory() . '/' . $mailbox . '/' . $folder;        if (opendir(DIR, $path)) {                my @msgs = sort grep(/^msg....\.txt$/, readdir(DIR));                closedir(DIR);                return map { s/^msg(....)\.txt$/$1/; $_ } @msgs;        }        return ();}1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -