亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? agi.pm

?? asterisk用 的voip記費軟件
?? PM
字號:
package Asterisk::AGI;require 5.004;use Asterisk;@ISA = ( 'Asterisk' );=head1 NAMEAsterisk::AGI - Simple Asterisk Gateway Interface Class=head1 SYNOPSISuse Asterisk::AGI;$AGI = new Asterisk::AGI;# pull AGI variables into %input	%input = $AGI->ReadParse();   # say the number 1984	$AGI->say_number(1984);=head1 DESCRIPTIONThis module should make it easier to write scripts that interact with theasterisk open source pbx via AGI (asterisk gateway interface)=head1 AGI COMMANDS=cutsub new {	my ($class, %args) = @_;	my $self = {};	$self->{'callback'} = undef;	$self->{'status'} = undef;	$self->{'lastresponse'} = undef;	bless $self, ref $class || $class;	return $self;}sub ReadParse {	my ($self, $fh) = @_;	my %input = ();	$fh = \*STDIN if (!$fh);	while (<$fh>) {		chomp;		last unless length($_);		if (/^agi_(\w+)\:\s+(.*)$/) {			$input{$1} = $2;		}	}		if (defined($DEBUG)&&($DEBUG>0)) {		print STDERR "AGI Environment Dump:\n";		foreach $i (sort keys %input) {			print STDERR " -- $i = $input{$i}\n";		}	}	return %input;}sub setcallback {	my ($self, $function) = @_;	if (defined($function) && ref($function) eq 'CODE') {		$self->{'callback'} = $function;	} }sub callback {	my ($self, $result) = @_;	if (defined($self->{'callback'}) && ref($self->{'callback'}) eq 'CODE') {		&{$self->{'callback'}}($result);	}}sub execute {	my ($self, $command) = @_;	$self->_execcommand($command);	my $res = $self->_readresponse();	return $self->_checkresult($res);}sub _execcommand {	my ($self, $command, $fh) = @_;	$fh = \*STDOUT if (!$fh);	select ((select ($fh), $| = 1)[0]);	return -1 if (!defined($command));	return print $fh "$command\n";}sub _readresponse {	my ($self, $fh) = @_;	my $response = undef;	$fh = \*STDIN if (!$fh);	$response = <$fh> || return '200 result=-1 (noresponse)';	chomp($response);	return $response;}sub _checkresult {	my ($self, $response) = @_;	return undef if (!defined($response));	my $result = undef;	$self->_lastresponse($response);	if ($response =~ /^200/) {		if ($response =~ /result=(-?[\d*#]+)/) {			$result = $1;		}	} elsif ($response =~ /\(noresponse\)/) {		$self->_status('noresponse');	} else {		print STDERR "Unexpected result '$response'\n" if (defined($DEBUG) && $DEBUG);	}	print STDERR "_checkresult($response) = $result\n" if (defined($DEBUG) && $DEBUG>3);	return $result;				}sub _status {	my ($self, $status) = @_;	if (defined($status)) {		$self->{'status'} = $status;	} else {		return $self->{'status'};	}}sub _lastresponse {	my ($self, $response) = @_;	if (defined($response)) {		$self->{'lastresponse'} = $response;	} else {		return $self->{'lastresponse'};	}}=over 4=item $AGI->stream_file($filename, $digits)Executes AGI Command "STREAM FILE $filename $digits"This command instructs Asterisk to play the given sound file and listen for the given dtmf digits. Thefileextension must not be used in the filename because Asterisk will find the most appropriate filetype.Example: $AGI->stream_file('demo-echotest', '0123');Returns: -1 on error or hangup,0 if playback completes without a digit being pressed,or the ASCII numerical value of the digit if a digit was pressed=cutsub stream_file {	my ($self, $filename, $digits) = @_;	my $ret = 0;	$digits = '""' if (!defined($digits));	return -1 if (!defined($filename));	$ret =  $self->execute("STREAM FILE $filename $digits");	$self->callback($ret) if ($ret == -1);	return $ret;}=item $AGI->send_text($text)Executes AGI Command "SEND TEXT "$text"Sends the given text on a channel.  Most channels do not support the transmission of text.Example: $AGI->send_text('You've got mail!');Returns: -1 on error or hangup,0 if the text was sent or if the channel does not support text transmission.=cutsub send_text {	my ($self, $text) = @_;	my $ret = 0;	return $ret if (!defined($text));	$ret = $self->execute("SEND TEXT \"$text\"");	$self->callback($ret) if ($ret == -1);	return $ret;}=item $AGI->send_image($image)Executes AGI Command "SEND IMAGE $imageSends the given image on a channel.  Most channels do not support the transmission of images.Example: $AGI->send_image('image.png');Returns: -1 on error or hangup,0 if the image was sent or if the channel does not support image transmission.=cutsub send_image {	my ($self, $image) = @_;	my $ret = 0;	return -1 if (!defined($image));	$ret = $self->execute("SEND IMAGE $image");	$self->callback($ret) if ($ret == -1);	return $ret;}=item $AGI->say_number($number, $digits)Executes AGI Command "SAY NUMBER $number $digits"Says the given $number, returning early if any of the $digits are received.Example: $AGI->say_number('98765');Returns: -1 on error or hangup,0 if playback completes without a digit being pressed, or the ASCII numerical value of the digit of one was pressed.=cutsub say_number {	my ($self, $number, $digits) = @_;	my $ret = 0;	$digits = '""' if (!defined($digits));	return -1 if (!defined($number));	$number =~ s/\D//g;	$ret = $self->execute("SAY NUMBER $number $digits");	$self->callback($ret) if ($ret == -1);	return $ret;}=item $AGI->say_digits($number, $digits)Executes AGI Command "SAY DIGITS $number $digits"Says the given digit string $number, returning early if any of the $digits are received.Example: $AGI->say_digits('8675309');Returns: -1 on error or hangup,0 if playback completes without a digit being pressed, or the ASCII numerical value of the digit of one was pressed.=cutsub say_digits {        my ($self, $number, $digits) = @_;	my $ret = 0;	$digits = '""' if (!defined($digits));	return -1 if (!defined($number));	$number =~ s/\D//g;	$ret = $self->execute("SAY DIGITS $number $digits");	$self->callback($ret) if ($ret == -1);	return $ret;}=item $AGI->answer()Executes AGI Command "ANSWER"Answers channel if not already in answer stateExample: $AGI->answer();Returns: -1 on channel failure, or0 if successful=cutsub answer {	my ($self) = @_;	my $ret = 0;	$ret = $self->execute('ANSWER');	$self->callback($ret) if ($ret == -1);	return $ret;}=item $AGI->get_data($filename, $timeout, $maxdigits)Executes AGI Command "GET DATA $filename $timeout $maxdigits"Streams $filename and returns when $maxdigits have been received orwhen $timeout has been reached.  Timeout is specified in msExample: $AGI->get_data('demo-welcome', 15000, 5);=cutsub get_data {	my ($self, $filename, $timeout, $maxdigits) = @_;	my $ret = undef;	return -1 if (!defined($filename));	$ret = $self->execute("GET DATA $filename $timeout $maxdigits");	$self->callback($ret) if ($ret == -1);	return $ret;}=item $AGI->set_callerid($number)Executes AGI Command "SET CALLERID $number"Changes the callerid of the current channel to <number>Example: $AGI->set_callerid('9995551212');Returns: Always returns 1=cutsub set_callerid {	my ($self, $number) = @_;	return if (!defined($number));	return $self->execute("SET CALLERID $number");}=item $AGI->set_context($context)Executes AGI Command "SET CONTEXT $context"Changes the context for continuation upon exiting the agi applicationExample: $AGI->set_context('dialout');Returns: Always returns 0=cutsub set_context {	my ($self, $context) = @_;	return -1 if (!defined($context));	return $self->execute("SET CONTEXT $context");}=item $AGI->set_extension($extension)Executes AGI Command "SET EXTENSION $extension"Changes the extension for continuation upon exiting the agi applicationExample: $AGI->set_extension('7');Returns: Always returns 0=cutsub set_extension {	my ($self, $extension) = @_;	return -1 if (!defined($extension));	return $self->execute("SET EXTENSION $extension");}=item $AGI->set_priority($priority)Executes AGI Command "SET PRIORITY $priority"Changes the priority for continuation upon exiting the agi applicationExample: $AGI->set_priority(1);Returns: Always returns 0=cutsub set_priority {	my ($self, $priority) = @_;	return -1 if (!defined($priority));	return $self->execute("SET PRIORITY $priority");}sub receive_char {	my ($self, $timeout) = @_;	my $ret = 0;#wait forever if timeout is not set. is this the prefered default?	$timeout = 0 if (!defined($timeout));	$ret = $self->execute("RECEIVE CHAR $timeout");	$self->callback($ret) if ($ret == -1);	return $ret;}sub tdd_mode {	my ($self, $mode) = @_;	return 0 if (!defined($mode));	return $self->execute("TDD MODE $mode");}sub wait_for_digit {	my ($self, $timeout) = @_;	my $ret = 0;	$timeout = -1 if (!defined($timeout));	$ret = $self->execute("WAIT FOR DIGIT $timeout");	$self->callback($ret) if ($ret == -1);	return $ret;}sub record_file {	my ($self, $filename, $format, $digits, $timeout, $beep) = @_;	my $ret = 0;	return -1 if (!defined($filename));	$digits = '""' if (!defined($digits));	$ret = $self->execute("RECORD FILE $filename $format $digits $timeout");	$self->callback($ret) if ($ret == -1);	return $ret;}sub set_autohangup {	my ($self, $time) = @_;	$time = 0 if (!defined($time));	return $self->execute("SET AUTOHANGUP $time");}=item $AGI->hangup($channel)Executes AGI Command "HANGUP $channel"Hangs up the passed $channel, or the current channel if $channel is not passed.It is left to the AGI script to exit properly, otherwise you could end up with zombies.Example: $AGI->hangup();Returns: Always returns 1=cutsub hangup {	my ($self, $channel) = @_;	if ($channel) {		return $self->execute("HANGUP $channel");	} else {		return $self->execute("HANGUP");	}}=item $AGI->exec($app, $options)Executes AGI Command "EXEC $app $options"The most powerful AGI command.  Executes the given application passing the given options.Example: $AGI->exec('Dial', 'Zap/g2/8005551212');Returns: -2 on failure to find application, orwhatever the given application returns=cutsub exec {	my ($self, $app, $options) = @_;	return -1 if (!defined($app));	$options = '""' if (!defined($options));	return $self->execute("EXEC $app $options");}sub channel_status {	my ($self, $channel) = @_;	return $self->execute("CHANNEL STATUS $channel");}=item $AGI->set_variable($variable, $value)Executes AGI Command "SET VARIABLE $variable $value"Sets the channel variable <variablename> to <value>Example: $AGI->set_variable('status', 'authorized');Returns: Always returns 1=cutsub set_variable {	my ($self, $variable, $value) = @_;	return $self->execute("SET VARIABLE $variable $value");}=item $AGI->get_variable($variable)Executes AGI Command "GET VARIABLE $variablename"Gets the channel variable <variablename>Example: $AGI->get_variable('status');Returns: The value of the variable, or undef if variable does not exist=cutsub get_variable {	my ($self, $variable) = @_;	my $result = undef;	if ($self->execute("GET VARIABLE $variable")) {		my $tempresult = $self->_lastresponse();		if ($tempresult =~ /\((.*)\)/) {			$result = $1;		}	}	return $result;}=item $AGI->verbose($message, $level)Executes AGI Command "VERBOSE $message $level"Logs $message with verboselevel $levelExample: $AGI->verbose("System Crashed\n", 1);Returns: Always returns 1=cutsub verbose {	my ($self, $message, $level) = @_;	return $self->execute("VERBOSE \"$message\" $level");}=item $AGI->database_get($family, $key)Executes AGI Command "DATABASE GET $family $key"Example: $var = $AGI->database_get('test', 'status');Returns: The value of the variable, or undef if variable does not exist=cutsub database_get {	my ($self, $family, $key) = @_;	my $result = undef;	if ($self->execute("DATABASE GET $family $key")) {		my $tempresult = $self->_lastresponse();		if ($tempresult =~ /\((.*)\)/) {			$result = $1;		}	}	return $result;}=item $AGI->database_put($family, $key, $value)Executes AGI Command "DATABASE PUT $family $key $value"Set/modifes database entry <family>/<key> to <value>Example: $AGI->database_put('test', 'status', 'authorized');Returns: 1 on success, 0 otherwise=cutsub database_put {	my ($self, $family, $key, $value) = @_;	return $self->execute("DATABASE PUT $family $key $value");}=item $AGI->database_del($family, $key)Executes AGI Command "DATABASE DEL $family $key"Removes database entry <family>/<key>Example: $AGI->database_del('test', 'status');Returns: 1 on success, 0 otherwise=cutsub database_del {	my ($self, $family, $key) = @_;	return $self->execute("DATABASE DEL $family $key");}=item $AGI->database_deltree($family, $key)Executes AGI Command "DATABASE DELTREE $family $key"Deletes a family or specific keytree within a family in the Asterisk databaseExample: $AGI->database_deltree('test', 'status'); Example: $AGI->database_deltree('test');Returns: 1 on success, 0 otherwise=cutsub database_deltree {	my ($self, $family, $key) = @_;	return $self->execute("DATABASE DELTREE $family $key");}sub noop {	my ($self) = @_;	return $self->execute("NOOP");}sub set_music {	my ($self, $mode, $class) = @_;	return $self->execute("SET MUSIC $mode $class");}1;__END__=back 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
69堂成人精品免费视频| 成人精品免费看| 国产一区二区毛片| 欧美日本高清视频在线观看| 亚洲精品国久久99热| 国产白丝网站精品污在线入口| 欧美精品一区二区三区视频| 麻豆精品久久精品色综合| 欧美一区永久视频免费观看| 日本成人中文字幕在线视频| 538在线一区二区精品国产| 午夜精品久久久| 7777精品伊人久久久大香线蕉| 日韩高清在线不卡| 日韩精品中文字幕一区二区三区 | 日韩一区二区三区视频在线 | 激情成人午夜视频| 久久久久久久久久久久久夜| 国产精品一区二区x88av| 久久亚区不卡日本| 国产精品正在播放| 国产精品色一区二区三区| 成人av免费在线观看| 亚洲欧洲精品天堂一级| 91色.com| 香蕉成人伊视频在线观看| 欧美喷水一区二区| 久久精品国产亚洲一区二区三区 | 欧美一区二区三区成人| 美女精品自拍一二三四| 欧美日本国产视频| 美女尤物国产一区| 国产日韩欧美电影| 色综合天天综合网天天看片| 亚洲成a人片在线观看中文| 91精品国产麻豆国产自产在线 | 日韩精品专区在线影院重磅| 国产一区二区福利视频| 综合欧美一区二区三区| 欧美三区在线观看| 奇米精品一区二区三区在线观看| 久久婷婷国产综合国色天香 | av一本久道久久综合久久鬼色| 一区二区三区日韩欧美精品| 欧美二区三区的天堂| 国内外成人在线| 一区在线观看视频| 91麻豆精品国产91久久久久久久久| 久久99国产精品成人| 中文字幕免费观看一区| 91黄色免费版| 免费视频最近日韩| 国产精品久久一卡二卡| 欧美日韩精品是欧美日韩精品| 黄色日韩网站视频| 亚洲欧美激情插| 欧美成人aa大片| 91丨porny丨户外露出| 日本成人在线电影网| 国产精品色一区二区三区| 欧美日韩一级二级| 国产精品中文欧美| 亚洲高清在线视频| 久久久久久久久伊人| 在线免费观看日本一区| 久草中文综合在线| 亚洲精品一二三| 久久综合九色综合欧美亚洲| 色婷婷国产精品| 国产一区激情在线| 亚洲亚洲精品在线观看| 久久久久久久久久久99999| 一本一道波多野结衣一区二区| 免费精品视频最新在线| 国产精品国产三级国产aⅴ原创| 91精品国产综合久久久蜜臀粉嫩| 成人中文字幕电影| 日本不卡视频一二三区| 亚洲精品视频自拍| 国产亚洲精品免费| 5月丁香婷婷综合| 91在线视频网址| 激情国产一区二区| 五月婷婷激情综合| 1024成人网| 精品成人在线观看| 制服丝袜亚洲色图| 欧洲日韩一区二区三区| 国产精品一区一区三区| 奇米精品一区二区三区在线观看| 国产精品久久福利| 久久综合色婷婷| 欧美人成免费网站| 色欧美88888久久久久久影院| 国产成人亚洲综合a∨婷婷图片| 视频一区中文字幕| 综合色天天鬼久久鬼色| 国产午夜精品美女毛片视频| 欧美一区二视频| 欧美日韩国产小视频| 91视频www| 成人免费高清在线| 国产又黄又大久久| 久久精品国产77777蜜臀| 午夜电影一区二区| 亚洲午夜av在线| 亚洲欧洲韩国日本视频| 国产在线不卡一区| 久久国产精品区| 日韩电影在线观看电影| 天堂一区二区在线| 亚洲国产精品自拍| 亚洲综合偷拍欧美一区色| 国产精品乱码久久久久久| 国产亚洲美州欧州综合国| 日韩亚洲欧美综合| 成人中文字幕在线| 国产自产2019最新不卡| 日本女优在线视频一区二区| 中文字幕在线一区免费| 国产女同互慰高潮91漫画| 欧美成va人片在线观看| 欧美日韩大陆一区二区| 在线观看视频一区| 99久久综合99久久综合网站| 成人丝袜视频网| 国产成人精品在线看| 精品在线一区二区| 人人超碰91尤物精品国产| 亚洲一区二区三区视频在线播放| 一区二区视频在线| 中文字幕一区二区在线观看| 国产欧美日韩一区二区三区在线观看 | 亚洲成人一区二区| 亚洲主播在线播放| 一区二区不卡在线播放 | 精品国产免费人成在线观看| 在线精品视频一区二区| 欧美三片在线视频观看| 91久久一区二区| 日本韩国欧美在线| 91精彩视频在线| 一本色道a无线码一区v| 91久久精品日日躁夜夜躁欧美| 99re这里只有精品视频首页| 99精品欧美一区二区蜜桃免费| 粉嫩嫩av羞羞动漫久久久| 国产精品一区二区不卡| bt欧美亚洲午夜电影天堂| 成人高清视频免费观看| www.亚洲在线| 97国产精品videossex| 91丝袜高跟美女视频| 91香蕉国产在线观看软件| 99免费精品在线观看| 91美女视频网站| 在线观看www91| 色av一区二区| 欧美一级专区免费大片| 精品99一区二区| 国产亚洲欧美日韩在线一区| 中文字幕不卡的av| 一区二区三区日韩在线观看| 亚洲五码中文字幕| 免播放器亚洲一区| 激情六月婷婷久久| 国产一区美女在线| 99re6这里只有精品视频在线观看| 91国偷自产一区二区三区成为亚洲经典| 一本在线高清不卡dvd| 色综合av在线| 在线观看av一区| 精品三级在线看| 亚洲国产精品传媒在线观看| 亚洲欧美另类综合偷拍| 色综合天天综合| 欧美刺激脚交jootjob| 久久伊人中文字幕| 欧美经典一区二区三区| 亚洲人亚洲人成电影网站色| 亚洲国产欧美在线人成| 精品一区二区三区香蕉蜜桃 | 国产69精品一区二区亚洲孕妇| 成人网页在线观看| 欧美精品v国产精品v日韩精品| 欧美精品一区二区在线播放| 国产精品二三区| 视频一区欧美精品| aaa亚洲精品一二三区| 欧美色图激情小说| 日韩三级免费观看| 中文字幕制服丝袜一区二区三区 | 一二三四社区欧美黄| 免费成人在线视频观看| 成人h动漫精品| 欧美精品一二三| 精品盗摄一区二区三区| 亚洲图片自拍偷拍| 国产一区二区在线观看视频| 91麻豆精品秘密|