Added link deletion upon client disconnect. Not finished
authorAndreas Tonnesen <andreto@olsr.org>
Fri, 3 Jun 2005 06:12:23 +0000 (06:12 +0000)
committerAndreas Tonnesen <andreto@olsr.org>
Fri, 3 Jun 2005 06:12:23 +0000 (06:12 +0000)
src/olsr_switch/link_rules.c
src/olsr_switch/link_rules.h
src/olsr_switch/main.c

index 626f06a..83ba577 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: link_rules.c,v 1.5 2005/06/01 18:53:29 kattemat Exp $
+ * $Id: link_rules.c,v 1.6 2005/06/03 06:12:23 kattemat Exp $
  */
 
 #include "link_rules.h"
@@ -88,6 +88,27 @@ ohs_check_link(struct ohs_connection *oc, union olsr_ip_addr *dst)
   return 1;
 }
 
+int
+ohs_delete_all_related_links(struct ohs_connection *oc)
+{
+  struct ohs_ip_link *links = oc->links;
+  int cnt = 0;
+
+  /* Delete links from this node*/
+  while(links)
+    {
+      struct ohs_ip_link *tmp_link = links;
+      links = links->next;
+      free(tmp_link);
+      cnt++;
+    }
+
+  /* Delete links to this node */
+
+  // XXX - ToDo
+
+  return cnt;
+}
 
 struct ohs_ip_link *
 add_link(struct ohs_connection *src, struct ohs_connection *dst)
index e0970c4..9a24035 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: link_rules.h,v 1.3 2005/06/01 18:53:29 kattemat Exp $
+ * $Id: link_rules.h,v 1.4 2005/06/03 06:12:23 kattemat Exp $
  */
 
 
@@ -58,4 +58,7 @@ add_link(struct ohs_connection *, struct ohs_connection *);
 int
 remove_link(struct ohs_connection *, struct ohs_ip_link *);
 
+int
+ohs_delete_all_related_links(struct ohs_connection *);
+
 #endif
index c1a6543..8b2e0e6 100644 (file)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: main.c,v 1.13 2005/06/02 18:38:56 kattemat Exp $
+ * $Id: main.c,v 1.14 2005/06/03 06:12:23 kattemat Exp $
  */
 
 /* olsrd host-switch daemon */
@@ -83,7 +83,7 @@ olsr_u32_t logbits;
 static int
 ohs_init_new_connection(int);
 
-static int
+inline static int
 ohs_route_data(struct ohs_connection *);
 
 static int
@@ -205,6 +205,9 @@ static int
 ohs_delete_connection(struct ohs_connection *oc)
 {
 
+  if(!oc)
+    return -1;
+
   /* Close the socket */
   close(oc->socket);
 
@@ -232,13 +235,15 @@ ohs_delete_connection(struct ohs_connection *oc)
          curr_entry = curr_entry->next;
        }
     }
+
+  ohs_delete_all_related_links(oc);
   /* Free */
   free(oc);
 
   return 0;
 }
 
-static int
+inline static int
 ohs_route_data(struct ohs_connection *oc)
 {
   struct ohs_connection *ohs_cs;