From b043365e98cc47795193617ea28864257001497c Mon Sep 17 00:00:00 2001
From: Terry Wilson <twilson@digium.com>
Date: Wed, 13 Oct 2010 22:34:32 +0000
Subject: [PATCH] Merged revisions 291575 via svnmerge from
 https://origsvn.digium.com/svn/asterisk/branches/1.8

........
  r291575 | twilson | 2010-10-13 15:24:44 -0700 (Wed, 13 Oct 2010) | 8 lines

  Add a simple AMI client web page

  This patch uses the XML docs to parse all of the available AMI commands
  and allows you to enter the command name and be presented with a form with
  the available fields. You can then rapidly tab through the fields and submit
  the command and view the response. It is much faster/easier than having to
  use telnet for testing purposes.
........


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@291576 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 Makefile                 |   3 +-
 static-http/mantest.html | 177 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 179 insertions(+), 1 deletion(-)
 create mode 100644 static-http/mantest.html

diff --git a/Makefile b/Makefile
index 613003ed06..61be67f408 100644
--- a/Makefile
+++ b/Makefile
@@ -449,7 +449,7 @@ distclean: $(SUBDIRS_DIST_CLEAN) _clean
 	rm -rf doc/api
 	rm -f build_tools/menuselect-deps
 
-datafiles: _all
+datafiles: _all doc/core-en_US.xml
 	CFLAGS="$(_ASTCFLAGS) $(ASTCFLAGS)" build_tools/mkpkgconfig $(DESTDIR)$(libdir)/pkgconfig;
 # Should static HTTP be installed during make samples or even with its own target ala
 # webvoicemail?  There are portions here that *could* be customized but might also be
@@ -458,6 +458,7 @@ datafiles: _all
 	for x in static-http/*; do \
 		$(INSTALL) -m 644 $$x $(DESTDIR)$(ASTDATADIR)/static-http ; \
 	done
+	$(INSTALL) -m 644 doc/core-en_US.xml $(DESTDIR)$(ASTDATADIR)/static-http;
 	if [ -d doc/tex/asterisk ] ; then \
 		$(INSTALL) -d $(DESTDIR)$(ASTDATADIR)/static-http/docs ; \
 		for n in doc/tex/asterisk/* ; do \
diff --git a/static-http/mantest.html b/static-http/mantest.html
new file mode 100644
index 0000000000..eebac628be
--- /dev/null
+++ b/static-http/mantest.html
@@ -0,0 +1,177 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+	<style type="text/css">
+		#container {
+			margin: 0 auto;
+			width: 100%;
+			height: 100%;
+			background: #fff;
+		}
+		#top {
+			float: left;
+			width: 100%;
+			background: #fff;
+		}
+		#bottom {
+			float: left;
+			width: 100%;
+			background: #fff;
+		}
+		#sender {
+			clear: left;
+			float: left;
+			width: 20%;
+			display: inline;
+			overflow: auto;
+		}
+		#output {
+			float: right;
+			width: 79%;
+			display: inline;
+			overflow: auto;
+			border: thin solid black;
+		}
+		.required {
+			color: red;
+		}
+	</style>
+	<title>Manager Utility</title>
+	<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
+
+	<script type="text/javascript">
+
+$(document).ready(function() {
+	$('#output').height($(document).height() - $('#top').height() - 100);
+	$.ajax({
+		type: "GET",
+		url: "core-en_US.xml",
+		dataType: "xml",
+		success: parseXml
+	});
+
+	$("#login").submit(function() {
+		$("#output").empty();
+		submitCommand($(this));
+		$("#command").focus();
+		return false;
+	});
+
+	$("#search_button").click(function() {
+		var command = $("#command").val();
+		$("#command").val("");
+		$("#output").empty();
+		if (commands) {
+			commands.each(function() {
+				if ($(this).attr("name").toLowerCase() == command.toLowerCase()) {
+					buildCommandForm($(this));
+				}
+			});
+		}
+		$('#output').height($(document).height() - $('#top').height() - 100);
+		return false;
+	});
+	$('#command').keyup(function(event) {
+		if (event.keyCode == '13') {
+			return;
+		}
+		var matches = [];
+		var search = $("#command").val().toLowerCase();
+		$("#output").empty();
+		if (search.length && commands) {
+			commands.each(function() {
+				var com = $(this).attr("name").toLowerCase();
+				if (com.substr(0, search.length) === search) {
+					matches.push(com);
+				}
+			});
+		}
+		if (matches.length) {
+			$("#output").append(matches.sort().join("<br/>"));
+		}
+	});
+});
+
+function parseXml(xml) {
+	commands = $(xml).find("manager")
+}
+
+function buildCommandForm(command) {
+	var name = command.attr("name");
+	var i = 0;
+	$("#sendcommand").empty();
+	$("#sendcommand").unbind('submit');
+	$("#sendcommand").append('<label>Action:&nbsp;</label><input name="action" readonly="readonly" value="'+name+'"/><br />');
+	command.find("parameter").each(function() {
+		var param = $(this).attr("name");
+		if (param != "ActionID") {
+			$("#sendcommand").append('<label for="'+param+'">'+param+':&nbsp;</label><input name="'+param+'" /><br />');
+			if ($(this).attr("required")) {
+				$('label[for='+param+']').addClass("required");
+			}
+			if (i == 0) {
+				$("input[name="+param+"]").focus();
+			}
+			i++;
+		}
+	});
+	$("#sendcommand").append('<button type="submit" id="commandbutton">Send</button>');
+	$("#sendcommand").submit(function() {
+		$("#output").empty();
+		submitCommand($(this));
+		$("#command").focus();
+		return false;
+	});
+
+	// If we don't have any fields to fill in, go ahead and submit!
+	if (i == 0) {
+		$("#sendcommand").submit();
+	}
+}
+
+function submitCommand(form) {
+	$.ajax({
+		type: "GET",
+		url: "../rawman",
+		dataType: "text",
+		data: $(form).serializeArray(),
+		success: displayResponse,
+		failure: function() {alert("Error!");}
+	});
+	return false;
+}
+
+function displayResponse(data) {
+	data = data.replace(/\r\n/g, "<br />");
+	$("#output").append(data);
+	return false;
+}
+
+	</script>
+</head>
+
+<body>
+	<div id="container">
+		<div id="top">
+			<form id="login" name="login">
+				<label for="username">Username:&nbsp;</label><input id="username" name="username" />
+				<label for="secret">Secret:&nbsp;</label><input id="secret" name="secret" type="password"/>
+				<input type="hidden" name="action" value="login" />
+				<button id="login_button" type="submit">Submit</button>
+			</form>
+			<hr />
+			<form id="search" name="search">
+				<label for="txt">Action:&nbsp;</label><input name="command" id="command"/>
+				<button id="search_button">Submit</button>
+			</form>
+		</div>
+		<hr />
+		<div id="bottom">
+			<div id="sender">
+				<form id="sendcommand" name="sendcommand"></form>
+			</div>
+			<div id="output"></div>
+		</div>
+	</div>
+</body>
+</html>
-- 
GitLab