Initial addittion of experimental admin interface
authorAndreas Tonnesen <andreto@olsr.org>
Wed, 5 Jan 2005 20:39:50 +0000 (20:39 +0000)
committerAndreas Tonnesen <andreto@olsr.org>
Wed, 5 Jan 2005 20:39:50 +0000 (20:39 +0000)
lib/httpinfo/Makefile
lib/httpinfo/README_HTTPINFO
lib/httpinfo/src/html.h
lib/httpinfo/src/olsrd_httpinfo.c
lib/httpinfo/src/olsrd_plugin.h

index d244645..c295d2e 100644 (file)
@@ -30,6 +30,11 @@ INSTALL_LIB =        cp $(NAME) ../..
 endif
 endif
 
+ifneq ($(INCLUDE_SETTINGS), )
+#@echo '\nWARNING - BUILDING WITH ADMIN INTERFACE!\n\n'
+CFLAGS += -DINCLUDE_SETTINGS
+endif
+
 #Sourcefiles
 #add yours here
 SRCS=  src/olsrd_plugin.c src/olsrd_httpinfo.c
index e9a1ea1..fddde71 100644 (file)
@@ -38,6 +38,18 @@ and 80.23.53.22 and the networks 10.0.0.0/8 and
 192.168.0.0/16.
 access is always allowed from 127.0.0.1(localhost).
 
+ EXPERIMENTAL ADMIN INTERFACE
+
+The plugin can be compiled with a experimental 
+adminitrator interface. This is a web page that will
+let the user change olsrd settings in realtime.
+To compile with this feature pass INCLUDE_SETTINGS=1
+as an argument to make(eg. make INCLUDE_SETTINGS=1)
+
+As of now the admin page is not making any changes to
+olsrd - it is only a HTML form with no effect.
+But it will be usable eventually :) However there
+are _tons_ of security related issues here.
 
 NOTE!
 If running olsrd 0.4.8, the plugin will not be able
index 0676d2c..9ad75a5 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: html.h,v 1.1 2005/01/02 20:29:38 kattemat Exp $
+ * $Id: html.h,v 1.2 2005/01/05 20:39:50 kattemat Exp $
  */
 
 /*
@@ -71,6 +71,14 @@ static const char *httpinfo_css[] =
   "#tabnav a:link.active, #tabnav a:visited.active\n{\nborder-bottom: 1px solid #fff;\n",
   "background: #ffffff;\ncolor: #000;\n}\n",
   "#tabnav a:hover\n{\nbackground: #777777;\ncolor: #ffffff;\n}\n",
+  ".input_text\n{\nbackground: #E5E5E5;\nmargin-left: 5px; margin-top: 0px;\n",
+  "text-align: left;\n\nwidth: 100px;\npadding: 0px;\ncolor: #000000;\n",
+  "text-decoration: none;\nfont-family: verdana;\nfont-size: 12px;\n",
+  "border: 1px solid #ccc;\n}\n", 
+  ".input_button\n{\nbackground: #B5D1EE;\nmargin-left: 5px;\nmargin-top: 0px;\n",
+  "text-align: center;\nwidth: 120px;\npadding: 0px;\ncolor: #000000;\n",
+  "text-decoration: none;\nfont-family: verdana;\nfont-size: 12px;\n",
+  "border: 1px solid #000;\n}\n",
   NULL
 };
 
@@ -135,8 +143,13 @@ static const char *http_ok_tail[] =
 
 static const char *about_frame[] =
 {
-    "<b>Httpinfo olsrd plugin version 0.1</b><br>\n"
-    "by Andreas T&oslash;nnesen (C)2005.<hr>\n",
+    "<b>" PLUGIN_NAME " version " PLUGIN_VERSION "</b><br>\n"
+    "by Andreas T&oslash;nnesen (C)2005.<br>\n",
+#ifdef INCLUDE_SETTINGS
+    "Compiled <i>with experimental admin interface</i> " __DATE__ "<hr>\n"
+#else
+    "Compiled " __DATE__ "<hr>\n"
+#endif
     "This plugin implements a HTTP server that supplies\n",
     "the client with various dynamic web pages representing\n",
     "the current olsrd status.<br>The different pages include:\n",
@@ -156,6 +169,13 @@ static const char *about_frame[] =
     "<li><b>All</b> - Here all the previous pages are displayed as one.\n",
     "This is to make all information available as easy as possible(for example\n",
     "for a script) and using as few resources as possible.</li>\n",
+#ifdef INCLUDE_SETTINGS
+    "<li><b>Admin</b> - This page is highly experimental(and unsecure)!\n",
+    "As of now it is not working at all but it provides a impression of\n",
+    "the future possibilities of httpinfo. This is to be a interface to\n",
+    "changing olsrd settings in realtime. These settings include various\n"
+    "\"basic\" settings and local HNA settings.\n",
+#endif
     "<li><b>About</b> - this help page.</li>\n</ul>",
     "<hr>\n",
     "Send questions or comments to\n",
@@ -176,4 +196,43 @@ static const char *http_frame[] =
 };
 
 
+#ifdef INCLUDE_SETTINGS
+static const char *admin_frame[] =
+  {
+    "<b>Administrator interface</b><hr>\n"
+    "<h2>Change basic settings</h2>\n",
+    "<form action=\"set_values\" method=\"post\">\n",
+    "<table width=\"100%%\">\n",
+    "<!-- BASICSETTINGS -->\n",
+    "</table>\n<br>\n",
+    "<center><input type=\"submit\" value=\"Submit\" class=\"input_button\">\n",
+    "<input type=\"reset\" value=\"Reset\" class=\"input_button\"></center>\n",
+    "</form>\n",
+    "<h2>Add/remove local HNA entries</h2>\n",
+    "<form action=\"set_values\" method=\"post\">\n",
+    "<center><b>Network:</b>\n",
+    "<input type=\"text\" name=\"foo\" maxlength=\"100\" class=\"input_text\">\n",
+    "<b>Netmask/Prefix:</b>\n",
+    "<input type=\"text\" name=\"foo\" maxlength=\"16\" class=\"input_text\">\n",
+    "<input type=\"submit\" value=\"Add entry\" class=\"input_button\">\n",
+    "</center><hr>\n",
+    "<form action=\"set_values\" method=\"post\">\n",
+    "<table width=\"100%%\">\n",
+    "<tr><th width=50 halign=\"middle\">Delete</th><th>Network</th><th>Netmask</th></tr>\n",
+    "<!-- HNAENTRIES -->\n",
+    "<tr><td><input type=\"checkbox\" name=\"foo\" class=\"input_checkbox\"></td><td>%s</td><td>%s</td></tr>\n",
+    "</table>\n<br>\n",
+    "<center><input type=\"submit\" value=\"Delete selected\" class=\"input_button\"></center>\n",
+    "</form>\n",
+
+    NULL
+};
+
+
+static char admin_basic_setting_int[] = "<td><b>%s</b></td>\n<td> <input type=\"text\" name=\"%s\" maxlength=\"%d\" class=\"input_text\" value=\"%d\"></td>\n";
+static char admin_basic_setting_float[] = "<td><b>%s</b></td>\n<td> <input type=\"text\" name=\"%s\" maxlength=\"%d\" class=\"input_text\" value=\"%0.2f\"></td>\n";
+static char admin_basic_setting_string[] = "<td><b>%s</b></td>\n<td> <input type=\"text\" name=\"%s\" maxlength=\"%d\" class=\"input_text\" value=\"%s\"></td>\n";
+
+#endif
+
 #endif
index 5fa6d9d..52ce9eb 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: olsrd_httpinfo.c,v 1.35 2005/01/03 21:04:02 kattemat Exp $
+ * $Id: olsrd_httpinfo.c,v 1.36 2005/01/05 20:39:50 kattemat Exp $
  */
 
 /*
@@ -135,6 +135,11 @@ build_all_body(char *, olsr_u32_t);
 int
 build_about_body(char *, olsr_u32_t);
 
+#ifdef INCLUDE_SETTINGS
+int
+build_admin_body(char *, olsr_u32_t);
+#endif
+
 char *
 sockaddr_to_string(struct sockaddr *);
 
@@ -155,6 +160,9 @@ struct tab_entry tab_entries[] =
     {"Routes", "routes", build_routes_body},
     {"Links/Topology", "nodes", build_nodes_body},
     {"All", "all", build_all_body},
+#ifdef INCLUDE_SETTINGS
+    {"Admin", "admin", build_admin_body},
+#endif
     {"About", "about", build_about_body},
     {NULL, NULL, NULL}
   };
@@ -1081,6 +1089,95 @@ build_about_body(char *buf, olsr_u32_t bufsize)
   return size;
 }
 
+
+#ifdef INCLUDE_SETTINGS
+int
+build_admin_body(char *buf, olsr_u32_t bufsize)
+{
+  int size = 0, i = 0;
+
+  while(admin_frame[i] && strcmp(admin_frame[i], "<!-- BASICSETTINGS -->\n"))
+    {
+      size += sprintf(&buf[size], admin_frame[i]);
+      i++;
+    }
+  
+  if(!admin_frame[i])
+    return size;
+  
+  size += sprintf(&buf[size], "<tr>\n");
+
+  size += sprintf(&buf[size], admin_basic_setting_int,
+                 "Debug level:", "debug_level", 2, cfg->debug_level);
+  size += sprintf(&buf[size], admin_basic_setting_float,
+                 "Pollrate:", "pollrate", 4, cfg->pollrate);
+  size += sprintf(&buf[size], admin_basic_setting_string,
+                 "TOS:", "tos", 6, "TBD");
+
+  size += sprintf(&buf[size], "</tr>\n");
+  size += sprintf(&buf[size], "<tr>\n");
+
+  size += sprintf(&buf[size], admin_basic_setting_int,
+                 "TC redundancy:", "tc_redundancy", 1, cfg->tc_redundancy);
+  size += sprintf(&buf[size], admin_basic_setting_int,
+                 "MPR coverage:", "mpr_coverage", 1, cfg->mpr_coverage);
+  size += sprintf(&buf[size], admin_basic_setting_int,
+                 "Willingness:", "willingness", 1, cfg->willingness);
+
+  size += sprintf(&buf[size], "</tr>\n");
+  size += sprintf(&buf[size], "<tr>\n");
+
+  size += sprintf(&buf[size], "</tr>\n");
+  
+  i++;
+
+  while(admin_frame[i] && strcmp(admin_frame[i], "<!-- HNAENTRIES -->\n"))
+    {
+      size += sprintf(&buf[size], admin_frame[i]);
+      i++;
+    }
+
+  if(!admin_frame[i] || !admin_frame[i+1])
+    return size;
+
+  i++;
+
+  if((cfg->ip_version == AF_INET) && (cfg->hna4_entries))
+    {
+      struct hna4_entry *hna4;
+      
+      for(hna4 = cfg->hna4_entries; hna4; hna4 = hna4->next)
+       {
+         size += sprintf(&buf[size], admin_frame[i], 
+                         olsr_ip_to_string((union olsr_ip_addr *)&hna4->net),
+                         olsr_ip_to_string((union olsr_ip_addr *)&hna4->netmask));
+       }
+    }
+  else if((cfg->ip_version == AF_INET6) && (cfg->hna6_entries))
+    {
+      struct hna6_entry *hna6;
+       
+      for(hna6 = cfg->hna6_entries; hna6; hna6 = hna6->next)
+       {
+         size += sprintf(&buf[size], admin_frame[i], 
+                         olsr_ip_to_string((union olsr_ip_addr *)&hna6->net),
+                         "TBD"/*hna6->prefix_len*/);
+       }
+    }
+  
+  i++;
+
+  while(admin_frame[i])
+    {
+      size += sprintf(&buf[size], admin_frame[i]);
+      i++;
+    }
+  
+  return size;
+}
+#endif
+
+
 olsr_bool
 check_allowed_ip(union olsr_ip_addr *addr)
 {
index dc5f52b..3065109 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: olsrd_plugin.h,v 1.8 2004/12/29 19:55:54 kattemat Exp $
+ * $Id: olsrd_plugin.h,v 1.9 2005/01/05 20:39:50 kattemat Exp $
  */
 
 /*
  *                       ALTER THIS TO YOUR OWN NEED                         *
  *****************************************************************************/
 
-#define PLUGIN_NAME    "OLSRD HTTP info plugin"
+#define PLUGIN_NAME    "Httpinfo olsrd plugin"
 #define PLUGIN_VERSION "0.1"
 #define PLUGIN_AUTHOR   "Andreas T√łnnesen"
 #define MOD_DESC PLUGIN_NAME " " PLUGIN_VERSION " by " PLUGIN_AUTHOR
 #define PLUGIN_INTERFACE_VERSION 2
 
-struct in_addr ipc_accept_ip;
 int http_port;
 
 /****************************************************************************