Two-hop neighbours are accessible. Take care of clocks that go backward.
authorThomas Lopatic <thomas@lopatic.de>
Wed, 13 Apr 2005 22:10:23 +0000 (22:10 +0000)
committerThomas Lopatic <thomas@lopatic.de>
Wed, 13 Apr 2005 22:10:23 +0000 (22:10 +0000)
lib/tas/src/http.c
lib/tas/src/os_unix.c
lib/tas/src/os_unix.h
lib/tas/src/plugin.c

index fbc7049..ab03c50 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.2 2005/04/12 19:57:26 tlopatic Exp $
+ * $Id: http.c,v 1.3 2005/04/13 22:10:22 tlopatic Exp $
  */
 
 #include "link.h"
@@ -444,7 +444,7 @@ void httpInit(void)
   confMessTime = DEF_CONFIG_MESS_TIME;
   confMessLimit = DEF_CONFIG_MESS_LIMIT;
 
-  memset(cookieStruct.key, 0, 16);
+  getRandomBytes(cookieStruct.key, 16);
 }
 
 int httpSetAddress(const char *addrStr)
@@ -1587,10 +1587,11 @@ static int serviceConn(struct connInfo *info)
     currSess = NULL;
 
     for (head = info->firstHead; head != NULL; head = head->next)
-      if (memcmp(head->name, "cookie", 7) == 0)
+      if (memcmp(head->name, "cookie", 7) == 0 &&
+          cookieToSession(&sessId, head->value) >= 0)
         break;
 
-    if (head != NULL && cookieToSession(&sessId, head->value) >= 0)
+    if (head != NULL)
     {
       debug(DEBUG_SESSION, "looking for existing session\n");
 
@@ -1601,6 +1602,8 @@ static int serviceConn(struct connInfo *info)
         debug(DEBUG_SESSION, "existing session found\n");
 
         currSess = sess[i];
+
+        now(&currSess->time);
       }
     }
 
index a89dc24..722744b 100644 (file)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: os_unix.c,v 1.1 2005/04/12 17:17:26 tlopatic Exp $
+ * $Id: os_unix.c,v 1.2 2005/04/13 22:10:23 tlopatic Exp $
  */
 
 #if defined linux
 
 static int mainSocket;
 
+// XXX - insecure
+
+void getRandomBytes(unsigned char *buff, int len)
+{
+  memset(buff, 0, len);
+
+  buff[0] = (unsigned char)getpid();
+}
+
 int addrLen(int family)
 {
   return (family == AF_INET) ? sizeof (struct in_addr) :
@@ -92,9 +101,21 @@ int timedOut(struct timeStamp *timeStamp, int sec)
 unsigned int getMicro(void)
 {
   struct timeval timeVal;
+  static struct timeval timeValPrev;
+  static int firstTime = 1;
 
   gettimeofday(&timeVal, NULL);
 
+  if (firstTime == 0 &&
+      timeValPrev.tv_sec == timeVal.tv_sec &&
+      timeValPrev.tv_usec >= timeVal.tv_usec)
+    return timeValPrev.tv_sec * 1000000 + timeValPrev.tv_usec;
+
+  firstTime = 0;
+
+  timeValPrev.tv_sec = timeVal.tv_sec;
+  timeValPrev.tv_usec = timeVal.tv_usec;
+
   return timeVal.tv_sec * 1000000 + timeVal.tv_usec;
 }
 
index 4fdbba6..04a8d91 100644 (file)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: os_unix.h,v 1.1 2005/04/12 17:17:26 tlopatic Exp $
+ * $Id: os_unix.h,v 1.2 2005/04/13 22:10:23 tlopatic Exp $
  */
 
 #if defined linux
@@ -66,6 +66,8 @@ struct timeStamp
   unsigned int time;
 };
 
+extern void getRandomBytes(unsigned char *buff, int len);
+
 extern int addrLen(int family);
 
 extern void now(struct timeStamp *timeStamp);
index c3b88d3..033ba77 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.2 2005/04/12 19:57:26 tlopatic Exp $
+ * $Id: plugin.c,v 1.3 2005/04/13 22:10:23 tlopatic Exp $
  */
 
 #include <string.h>
@@ -157,16 +157,49 @@ void iterLinkTabInit(void)
 
 int iterNeighTabNext(char *buff, int len)
 {
+  int res;
+  int i;
+  struct neighbor_2_list_entry *neigh2;
+  
   if (iterNeighTab == NULL)
     return -1;
 
-  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",
-           lookupMprs(&iterNeighTab->neighbor_main_addr) != NULL ?
-           "true" : "false",
-           iterNeighTab->willingness);
+  res = snprintf(buff, len,
+                 "main~%s~symmetric~%s~mpr~%s~mprs~%s~willingness~%d~[~neighbors2~",
+                 rawIpAddrToString(&iterNeighTab->neighbor_main_addr, ipAddrLen),
+                 iterNeighTab->status == SYM ? "true" : "false",
+                 iterNeighTab->is_mpr != 0 ? "true" : "false",
+                 lookupMprs(&iterNeighTab->neighbor_main_addr) != NULL ?
+                 "true" : "false",
+                 iterNeighTab->willingness);
+
+  i = 0;
+
+  len -= res;
+  buff += res;
+
+  len -= 2;
+
+  for (neigh2 = iterNeighTab->neighbor_2_list.next;
+       neigh2 != &iterNeighTab->neighbor_2_list;
+       neigh2 = neigh2->next)
+  {
+    res = snprintf(buff, len, "%d~%s~", i,
+                   rawIpAddrToString(&neigh2->neighbor_2->neighbor_2_addr,
+                                     ipAddrLen));
+
+    if (res < len)
+      buff += res;
+
+    len -= res;
+
+    if (len <= 0)
+      break;
+
+    i++;
+  }
+
+  strcpy(buff, "]~");
 
   iterNeighTab = iterNeighTab->next;