Support recursive tables.
authorThomas Lopatic <thomas@lopatic.de>
Tue, 12 Apr 2005 19:57:26 +0000 (19:57 +0000)
committerThomas Lopatic <thomas@lopatic.de>
Tue, 12 Apr 2005 19:57:26 +0000 (19:57 +0000)
lib/tas/data/show.lsp
lib/tas/src/glua_ext.c
lib/tas/src/http.c
lib/tas/src/lib.c
lib/tas/src/lib.h
lib/tas/src/plugin.c

index 7c2d16e..687ec9e 100644 (file)
@@ -102,6 +102,9 @@ end
         <td>
           <b>Willingness</b>
         </td>
+        <td>
+          <b>2-Hop Neighbors</b>
+        </td>
       <tr>
 
 <?lua
@@ -128,6 +131,29 @@ while olsr_state["neighbors"][i] do
         <td>
           <?lua tas.write(olsr_state["neighbors"][i]["willingness"]) ?>
         </td>
+        <td>
+
+          <?lua
+
+           k = 0
+
+           while olsr_state["neighbors"][i]["neighbors2"][k] do
+
+            tas.write(olsr_state["neighbors"][i]["neighbors2"][k])
+
+          ?>
+
+          <br>
+
+          <?lua
+
+            k = k + 1
+
+           end
+
+          ?>
+
+        </td>
       </tr>
 
 <?lua
index b3bacc9..707a055 100644 (file)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: glua_ext.c,v 1.1 2005/04/12 17:17:25 tlopatic Exp $
+ * $Id: glua_ext.c,v 1.2 2005/04/12 19:57:26 tlopatic Exp $
  */
 
 #include "lua/lua.h"
@@ -52,6 +52,8 @@
 #include "glua.h"
 #include "glua_ext.h"
 
+#include <string.h>
+
 static char *getToken(char **point)
 {
   char *localPoint = *point;
@@ -112,11 +114,66 @@ int tasOlsrGetMessage(lua_State *lua)
   return 2;
 }
 
+static void addSubTable(lua_State *lua, char **walker)
+{
+  char *token;
+  unsigned int val;
+
+  token = getToken(walker);
+
+  if (token == NULL)
+  {
+    error("premature end of buffer\n");
+    return;
+  }
+
+  lua_pushstring(lua, token);
+  lua_newtable(lua);
+
+  while (**walker != 0)
+  {
+    token = getToken(walker);
+
+    if (token == NULL)
+    {
+      error("premature end of buffer\n");
+      return;
+    }
+
+    if (strcmp(token, "]") == 0)
+      return;
+
+    if (strcmp(token, "[") == 0)
+      addSubTable(lua, walker);
+
+    else
+    {
+      if (stringToInt(&val, token) < 0)
+        lua_pushstring(lua, token);
+
+      else
+        lua_pushnumber(lua, val);
+
+      token = getToken(walker);
+
+      if (token == NULL)
+      {
+        error("premature end of buffer\n");
+        return;
+      }
+
+      lua_pushstring(lua, token);
+    }
+
+    lua_settable(lua, -3);
+  }
+}
+
 static void addTable(lua_State *lua, char *name, void (*init)(void),
                      int (*next)(char *buff, int len))
 {
   int i;
-  char buff[1024], *walker;
+  char buff[1024], *walker, *token;
 
   lua_pushstring(lua, name);
   lua_newtable(lua);
@@ -134,8 +191,31 @@ static void addTable(lua_State *lua, char *name, void (*init)(void),
 
     while (*walker != 0)
     {
-      lua_pushstring(lua, getToken(&walker));
-      lua_pushstring(lua, getToken(&walker));
+      token = getToken(&walker);
+
+      if (token == NULL)
+      {
+        error("premature end of buffer\n");
+        return;
+      }
+
+      if (strcmp(token, "[") == 0)
+        addSubTable(lua, &walker);
+
+      else
+      {
+        lua_pushstring(lua, token);
+
+        token = getToken(&walker);
+
+        if (token == NULL)
+        {
+          error("premature end of buffer\n");
+          return;
+        }
+
+        lua_pushstring(lua, token);
+      }
 
       lua_settable(lua, -3);
     }
index 52e2b28..fbc7049 100644 (file)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: http.c,v 1.1 2005/04/12 17:17:25 tlopatic Exp $
+ * $Id: http.c,v 1.2 2005/04/12 19:57:26 tlopatic Exp $
  */
 
 #include "link.h"
@@ -281,43 +281,6 @@ static int decBase64(unsigned char *out, char *in)
   return 0;
 }
 
-static char *intToString(char *buff, unsigned int val)
-{
-  int i;
-
-  buff[9] = 0;
-
-  for (i = 8; i >= 0; i--)
-  {
-    buff[i] = (char)(val % 10 + '0');
-
-    val /= 10;
-
-    if (val == 0)
-      break;
-  }
-
-  return buff + i;
-}
-
-static int stringToInt(unsigned int *val, const char *buff)
-{
-  *val = 0;
-
-  while (*buff != 0)
-  {
-    if (*buff < '0' || *buff > '9')
-      return -1;
-
-    else
-      *val = *val * 10 + *buff - '0';
-
-    buff++;
-  }
-
-  return 0;
-}
-
 static void initInOutBuff(struct inOutBuff *buff)
 {
   buff->off = 0;
index 3fd1bee..3a558ec 100644 (file)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: lib.c,v 1.1 2005/04/12 17:17:26 tlopatic Exp $
+ * $Id: lib.c,v 1.2 2005/04/12 19:57:26 tlopatic Exp $
  */
 
 #include "link.h"
@@ -98,3 +98,40 @@ void chomp(char *line, int len)
     line[len] = 0;
   }
 }
+
+char *intToString(char *buff, unsigned int val)
+{
+  int i;
+
+  buff[9] = 0;
+
+  for (i = 8; i >= 0; i--)
+  {
+    buff[i] = (char)(val % 10 + '0');
+
+    val /= 10;
+
+    if (val == 0)
+      break;
+  }
+
+  return buff + i;
+}
+
+int stringToInt(unsigned int *val, const char *buff)
+{
+  *val = 0;
+
+  while (*buff != 0)
+  {
+    if (*buff < '0' || *buff > '9')
+      return -1;
+
+    else
+      *val = *val * 10 + *buff - '0';
+
+    buff++;
+  }
+
+  return 0;
+}
index 2c1fab1..314ac00 100644 (file)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: lib.h,v 1.1 2005/04/12 17:17:26 tlopatic Exp $
+ * $Id: lib.h,v 1.2 2005/04/12 19:57:26 tlopatic Exp $
  */
 
 #define DEBUG_MESSAGE 1
@@ -52,3 +52,5 @@ extern void debug(int facility, char *form, ...);
 extern char *strdupAdd(const char *string, int add);
 extern char *myStrdup(const char *string);
 extern void chomp(char *line, int len);
+extern char *intToString(char *buff, unsigned int val);
+extern int stringToInt(unsigned int *val, const char *buff);
index bd77371..c3b88d3 100644 (file)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: plugin.c,v 1.1 2005/04/12 17:17:26 tlopatic Exp $
+ * $Id: plugin.c,v 1.2 2005/04/12 19:57:26 tlopatic Exp $
  */
 
 #include <string.h>
@@ -160,7 +160,7 @@ int iterNeighTabNext(char *buff, int len)
   if (iterNeighTab == NULL)
     return -1;
 
-  snprintf(buff, len, "main~%s~symmetric~%s~mpr~%s~mprs~%s~willingness~%d~",
+  snprintf(buff, len, "main~%s~symmetric~%s~mpr~%s~mprs~%s~willingness~%d~[~neighbors2~0~1.2.3.4~1~2.3.4.5~]~",
            rawIpAddrToString(&iterNeighTab->neighbor_main_addr, ipAddrLen),
            iterNeighTab->status == SYM ? "true" : "false",
            iterNeighTab->is_mpr != 0 ? "true" : "false",