]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Add a simple AMI client web page
authorTerry Wilson <twilson@digium.com>
Wed, 13 Oct 2010 22:24:44 +0000 (22:24 +0000)
committerTerry Wilson <twilson@digium.com>
Wed, 13 Oct 2010 22:24:44 +0000 (22:24 +0000)
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/branches/1.8@291575 65c4cc65-6c06-0410-ace0-fbb531ad65f3

Makefile
static-http/mantest.html [new file with mode: 0644]

index 613003ed06d7236fe94cbaddea9e9f8c3d97dcec..61be67f4089a2698774f0c9a18f0705f5dfe4e29 100644 (file)
--- 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 (file)
index 0000000..eebac62
--- /dev/null
@@ -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>