| 
									
										
										
										
											2012-10-13 15:14:51 +00:00
										 |  |  | <!--
 | 
					
						
							|  |  |  |  Asterisk -- An open source telephony toolkit. | 
					
						
							|  |  |  |   | 
					
						
							|  |  |  |  Copyright (C) 1999 - 2012, Digium, Inc. | 
					
						
							|  |  |  |   | 
					
						
							|  |  |  |  Mark Spencer <markster@digium.com> | 
					
						
							|  |  |  |   | 
					
						
							|  |  |  |  See http://www.asterisk.org for more information about | 
					
						
							|  |  |  |  the Asterisk project. Please do not directly contact | 
					
						
							|  |  |  |  any of the maintainers of this project for assistance; | 
					
						
							|  |  |  |  the project provides a web site, mailing lists and IRC | 
					
						
							|  |  |  |  channels for your use. | 
					
						
							|  |  |  |  This program is free software, distributed under the terms of | 
					
						
							|  |  |  |  the GNU General Public License Version 2. See the LICENSE file | 
					
						
							|  |  |  |  at the top of the source tree. | 
					
						
							|  |  |  | --> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-01 08:49:54 +00:00
										 |  |  | <script src="prototype.js"></script> | 
					
						
							|  |  |  | <script src="astman.js"></script> | 
					
						
							|  |  |  | <link href="astman.css" media="all" rel="Stylesheet" type="text/css" /> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <script> | 
					
						
							|  |  |  | 	var logins = new Object; | 
					
						
							|  |  |  | 	var logoffs = new Object; | 
					
						
							|  |  |  | 	var channels = new Object; | 
					
						
							|  |  |  | 	var pongs = new Object; | 
					
						
							| 
									
										
										
										
											2006-05-07 00:04:12 +00:00
										 |  |  | 	var loggedon = -1; | 
					
						
							| 
									
										
										
										
											2006-04-01 08:49:54 +00:00
										 |  |  | 	var selectedchan = null; | 
					
						
							|  |  |  | 	var hungupchan = ""; | 
					
						
							|  |  |  | 	var transferedchan = ""; | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	var demo = new Object; | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	function loggedOn() { | 
					
						
							| 
									
										
										
										
											2006-05-07 00:04:12 +00:00
										 |  |  | 		if (loggedon == 1) | 
					
						
							| 
									
										
										
										
											2006-04-01 08:49:54 +00:00
										 |  |  | 			return; | 
					
						
							|  |  |  | 		loggedon = 1; | 
					
						
							|  |  |  | 		updateButtons(); | 
					
						
							|  |  |  | 		$('statusbar').innerHTML = "<i>Retrieving channel status...</i>"; | 
					
						
							|  |  |  | 		astmanEngine.pollEvents(); | 
					
						
							|  |  |  | 		astmanEngine.sendRequest('action=status', demo.channels); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	function clearChannelList() { | 
					
						
							|  |  |  | 		$('channellist').innerHTML = "<i class='light'>Not connected</i>"; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	function loggedOff() { | 
					
						
							| 
									
										
										
										
											2006-05-07 00:04:12 +00:00
										 |  |  | 		if (loggedon == 0) | 
					
						
							| 
									
										
										
										
											2006-04-01 08:49:54 +00:00
										 |  |  | 			return; | 
					
						
							|  |  |  | 		loggedon = 0; | 
					
						
							|  |  |  | 		selectedchan = null; | 
					
						
							|  |  |  | 		updateButtons(); | 
					
						
							|  |  |  | 		astmanEngine.channelClear(); | 
					
						
							|  |  |  | 	 	clearChannelList(); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	function updateButtons() | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		if ($(selectedchan)) { | 
					
						
							|  |  |  | 			$('transfer').disabled = 0; | 
					
						
							|  |  |  | 			$('hangup').disabled = 0; | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			$('transfer').disabled = 1; | 
					
						
							|  |  |  | 			$('hangup').disabled = 1; | 
					
						
							|  |  |  | 			selectedchan = null; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		if (loggedon) { | 
					
						
							| 
									
										
										
										
											2006-04-03 01:48:59 +00:00
										 |  |  | 			$('username').disabled = 1; | 
					
						
							|  |  |  | 			$('secret').disabled = 1; | 
					
						
							| 
									
										
										
										
											2006-04-01 08:49:54 +00:00
										 |  |  | 			$('logoff').disabled = 0; | 
					
						
							|  |  |  | 			$('login').disabled = 1; | 
					
						
							|  |  |  | 			$('refresh').disabled = 0; | 
					
						
							|  |  |  | 		} else { | 
					
						
							| 
									
										
										
										
											2006-04-03 01:48:59 +00:00
										 |  |  | 			$('username').disabled = 0; | 
					
						
							|  |  |  | 			$('secret').disabled = 0; | 
					
						
							| 
									
										
										
										
											2006-04-01 08:49:54 +00:00
										 |  |  | 			$('logoff').disabled = 1; | 
					
						
							|  |  |  | 			$('login').disabled = 0; | 
					
						
							|  |  |  | 			$('refresh').disabled = 1; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	demo.channelCallback = function(target) { | 
					
						
							|  |  |  | 		selectedchan = target; | 
					
						
							|  |  |  | 		updateButtons(); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	demo.channels = function(msgs) { | 
					
						
							|  |  |  | 		resp = msgs[0].headers['response']; | 
					
						
							|  |  |  | 		if (resp == "Success") { | 
					
						
							|  |  |  | 			loggedOn(); | 
					
						
							|  |  |  | 		} else | 
					
						
							|  |  |  | 			loggedOff(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		for (i=1;i<msgs.length - 1;i++)  | 
					
						
							|  |  |  | 			astmanEngine.channelUpdate(msgs[i]); | 
					
						
							|  |  |  | 		$('channellist').innerHTML = astmanEngine.channelTable(demo.channelCallback); | 
					
						
							|  |  |  | 		$('statusbar').innerHTML = "Ready"; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	demo.logins = function(msgs) { | 
					
						
							|  |  |  | 		$('statusbar').innerHTML = msgs[0].headers['message']; | 
					
						
							|  |  |  | 		resp = msgs[0].headers['response']; | 
					
						
							|  |  |  | 		if (resp == "Success") | 
					
						
							|  |  |  | 			loggedOn(); | 
					
						
							|  |  |  | 		else | 
					
						
							|  |  |  | 			loggedOff(); | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	demo.logoffs = function(msgs) { | 
					
						
							|  |  |  | 		$('statusbar').innerHTML = msgs[0].headers['message']; | 
					
						
							|  |  |  | 		loggedOff(); | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	demo.hungup = function(msgs) { | 
					
						
							|  |  |  | 		$('statusbar').innerHTML = "Hungup " + hungupchan; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	demo.transferred = function(msgs) { | 
					
						
							|  |  |  | 		$('statusbar').innerHTML = "Transferred " + transferredchan; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	function doHangup() { | 
					
						
							|  |  |  | 		hungupchan = selectedchan; | 
					
						
							|  |  |  | 		astmanEngine.sendRequest('action=hangup&channel=' + selectedchan, demo.hungup); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	function doStatus() { | 
					
						
							|  |  |  | 		$('statusbar').innerHTML = "<i>Updating channel status...</i>"; | 
					
						
							|  |  |  | 		astmanEngine.channelClear(); | 
					
						
							|  |  |  | 		astmanEngine.sendRequest('action=status', demo.channels); | 
					
						
							|  |  |  | 	}	 | 
					
						
							|  |  |  | 		 | 
					
						
							|  |  |  | 	function doLogin() { | 
					
						
							|  |  |  | 		$('statusbar').innerHTML = "<i>Logging in...</i>"; | 
					
						
							|  |  |  | 		astmanEngine.sendRequest('action=login&username=' + $('username').value + "&secret=" + $('secret').value, demo.logins); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	function doTransfer() { | 
					
						
							|  |  |  | 		var channel = astmanEngine.channelInfo(selectedchan); | 
					
						
							|  |  |  | 		var exten = prompt("Enter new extension for " + selectedchan); | 
					
						
							|  |  |  | 		var altchan; | 
					
						
							|  |  |  | 		if (exten) { | 
					
						
							|  |  |  | 			if (channel.link) { | 
					
						
							|  |  |  | 				if (confirm("Transfer " + channel.link + " too?")) | 
					
						
							|  |  |  | 					altchan = channel.link; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			if (altchan) { | 
					
						
							|  |  |  | 				transferredchan = selectedchan + " and " + altchan + " to " + exten; | 
					
						
							|  |  |  | 				astmanEngine.sendRequest('action=redirect&channel=' + selectedchan + "&priority=1&extrachannel=" + altchan + "&exten=" + exten, demo.transferred); | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 				transferredchan = selectedchan + " to " + exten; | 
					
						
							|  |  |  | 				astmanEngine.sendRequest('action=redirect&channel=' + selectedchan + "&priority=1&exten=" + exten, demo.transferred); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	function doLogoff() { | 
					
						
							|  |  |  | 		$('statusbar').innerHTML = "<i>Logging off...</i>"; | 
					
						
							|  |  |  | 		astmanEngine.sendRequest('action=logoff', demo.logoffs); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	demo.pongs  = function(msgs) { | 
					
						
							|  |  |  | 		resp = msgs[0].headers['response']; | 
					
						
							|  |  |  | 		if (resp == "Pong") { | 
					
						
							|  |  |  | 			$('statusbar').innerHTML = "<i>Already connected...</i>"; | 
					
						
							|  |  |  | 			loggedOn(); | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			$('statusbar').innerHTML = "<i>Please login...</i>"; | 
					
						
							|  |  |  | 			loggedOff(); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	demo.eventcb = function(msgs) { | 
					
						
							|  |  |  | 		var x; | 
					
						
							|  |  |  | 		if (loggedon) { | 
					
						
							|  |  |  | 			for (i=1;i<msgs.length - 1;i++) { | 
					
						
							|  |  |  | 				astmanEngine.channelUpdate(msgs[i]); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			$('channellist').innerHTML = astmanEngine.channelTable(demo.channelCallback); | 
					
						
							|  |  |  | 			astmanEngine.pollEvents(); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		updateButtons(); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	function localajaminit() { | 
					
						
							|  |  |  | 		astmanEngine.setURL('../rawman'); | 
					
						
							|  |  |  | 		astmanEngine.setEventCallback(demo.eventcb); | 
					
						
							|  |  |  | 		//astmanEngine.setDebug($('ditto')); | 
					
						
							|  |  |  | 		clearChannelList(); | 
					
						
							|  |  |  | 		astmanEngine.sendRequest('action=ping', demo.pongs); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | </script> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <title>Asterisk™ AJAM Demo</title> | 
					
						
							|  |  |  | <body onload="localajaminit()"> | 
					
						
							|  |  |  | <table align="center" width=600> | 
					
						
							|  |  |  | <tr valign="top"><td> | 
					
						
							|  |  |  | <table align="left"> | 
					
						
							|  |  |  | <tr><td colspan="2"><h2>Asterisk™ AJAM Demo</h2></td> | 
					
						
							|  |  |  | <tr><td>Username:</td><td><input id="username"></td></tr> | 
					
						
							|  |  |  | <tr><td>Secret:</td><td><input type="password" id="secret"></td></tr> | 
					
						
							|  |  |  | 	<tr><td colspan=2 align="center"> | 
					
						
							|  |  |  | 	  <div id="statusbar"> | 
					
						
							|  |  |  | 		<span style="margin-left: 4px;font-weight:bold"> </span> | 
					
						
							|  |  |  | 	  </div> | 
					
						
							|  |  |  | 	</td></tr> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	<tr><td><input type="submit" id="login" value="Login" onClick="doLogin()"></td> | 
					
						
							|  |  |  | 	<td><input type="submit" id="logoff" value="Logoff" disabled=1 onClick="doLogoff()"></td></tr> | 
					
						
							|  |  |  | </table> | 
					
						
							|  |  |  | </td><td valign='bottom'> | 
					
						
							|  |  |  | <table> | 
					
						
							|  |  |  | <div style="margin-left:10;margin-right:50;margin-top:10;margin-bottom:20"> | 
					
						
							|  |  |  | <i>This is a demo of the Asynchronous Javascript Asterisk Manager interface.  You can login with a | 
					
						
							|  |  |  | valid, appropriately permissioned manager username and secret.</i> | 
					
						
							|  |  |  | </div> | 
					
						
							|  |  |  | <tr> | 
					
						
							|  |  |  | 	<td><input type="submit" onClick="doStatus()" id="refresh" value="Refresh"></td> | 
					
						
							|  |  |  | 	<td><input type="submit" onClick="doTransfer()" id="transfer" value="Transfer..."></td> | 
					
						
							|  |  |  | 	<td><input type="submit" onClick="doHangup()" id="hangup" value="Hangup"></td> | 
					
						
							|  |  |  | </tr> | 
					
						
							|  |  |  | </table> | 
					
						
							|  |  |  | </td></tr> | 
					
						
							|  |  |  | <tr><td colspan=2> | 
					
						
							|  |  |  | 		<div id="channellist" class="chanlist"> | 
					
						
							|  |  |  | 		</div> | 
					
						
							|  |  |  | 	</td></tr> | 
					
						
							|  |  |  | <tr><td align="center" colspan=2> | 
					
						
							|  |  |  | 	<font size=-1><i> | 
					
						
							|  |  |  | 		Copyright (C) 2006 Digium, Inc.  Asterisk and Digium are trademarks of Digium, Inc. | 
					
						
							|  |  |  | 	</i></font> | 
					
						
							|  |  |  | </td></tr> | 
					
						
							|  |  |  | </table> | 
					
						
							|  |  |  | </body> |