Fresh Rewritten Copy
diff --git a/nlsr_adl.c b/nlsr_adl.c
index 7ebc8af..c04aeda 100644
--- a/nlsr_adl.c
+++ b/nlsr_adl.c
@@ -18,34 +18,31 @@
 #include <ccn/hashtb.h>
 
 #include "nlsr.h"
-#include "nlsr_ndn.h"
-#include "utility.h"
+#include "nlsr_npl.h"
 #include "nlsr_adl.h"
+#include "utility.h"
 
-void
-add_adjacent_to_adl(struct name_prefix *np, int face)
+void 
+add_nbr_to_adl(struct name_prefix *new_nbr,int face)
 {
-	printf("\nadd_adjacent_to_adl called\n");
-	printf("Neighbor: %s Length: %d Face:%d\n",np->name,np->length,face);
-	
-	struct ndn_neighbor *nbr=(struct ndn_neighbor *)malloc(sizeof(struct ndn_neighbor));
+	struct ndn_neighbor *nbr=(struct ndn_neighbor *)malloc(sizeof(struct ndn_neighbor )); //free
 
 	struct hashtb_enumerator ee;
     	struct hashtb_enumerator *e = &ee; 	
     	int res;
 
    	hashtb_start(nlsr->adl, e);
-    	res = hashtb_seek(e, np->name, np->length, 0);
+    	res = hashtb_seek(e, new_nbr->name, new_nbr->length, 0);
 
 	if(res == HT_NEW_ENTRY )
 	{
    
 		nbr = e->data;
 
-		nbr->neighbor=(struct name_prefix *)malloc(sizeof( struct name_prefix ));
-		nbr->neighbor->name=(char *)malloc(np->length);
-		memcpy(nbr->neighbor->name,np->name,np->length);
-		nbr->neighbor->length=np->length;
+		nbr->neighbor=(struct name_prefix *)malloc(sizeof( struct name_prefix )); //free
+		nbr->neighbor->name=(char *)malloc(new_nbr->length);
+		memcpy(nbr->neighbor->name,new_nbr->name,new_nbr->length);
+		nbr->neighbor->length=new_nbr->length;
 		nbr->face=face;
 		nbr->status=NBR_DOWN;
 		nbr->info_interest_timed_out=0;
@@ -53,28 +50,28 @@
 		nbr->metric=10;
 		nbr->is_lsdb_send_interest_scheduled=0;
 		
-		
 
-		char *time_stamp=get_current_timestamp_micro();
-		nbr->last_lsdb_version=(char *)malloc(strlen(time_stamp)+1);
+		char *time_stamp=(char *)malloc(20);
+		get_current_timestamp_micro(time_stamp);
+		nbr->last_lsdb_version=(char *)malloc(strlen(time_stamp)+1); //free
 		memcpy(nbr->last_lsdb_version,time_stamp,strlen(time_stamp)+1);
 		memset(nbr->last_lsdb_version,'0',strlen(time_stamp));
+		nbr->last_info_version=(char *)malloc(strlen(time_stamp)+1); //free
+		memcpy(nbr->last_info_version,time_stamp,strlen(time_stamp)+1);
+		memset(nbr->last_info_version,'0',strlen(time_stamp));
+		free(time_stamp);		
 
 		nbr->last_lsdb_requested=0;
-
-		//nbr->last_lsdb_requested=(char *)malloc(strlen(time_stamp)+1);
-		//memcpy(nbr->last_lsdb_requested,time_stamp,strlen(time_stamp)+1);
-		//memset(nbr->last_lsdb_requested,'0',strlen(time_stamp));
-
 	}
 
     	hashtb_end(e);
 }
 
+
 void 
 print_adjacent(struct ndn_neighbor *nbr)
 {
-	printf("\nprint_adjacent called\n");
+	printf("print_adjacent called\n");
 	printf("--------Neighbor---------------------------\n");
 	printf("	Neighbor: %s \n",nbr->neighbor->name);
 	printf("	Length  : %d \n",nbr->neighbor->length);
@@ -82,9 +79,13 @@
 	printf("	Metric    : %d \n",nbr->metric);
 	printf("	Status  : %d \n",nbr->status);
 	printf("	LSDB Version: %s \n",nbr->last_lsdb_version);
+	printf("	Info Version: %s \n",nbr->last_info_version);
 	printf("	Info Interest Timed Out : %d \n",nbr->info_interest_timed_out);
 	printf("	LSDB Synch Interval     : %ld \n",nbr->lsdb_synch_interval);
 	printf("	Las Time LSDB Requested: %ld \n",nbr->last_lsdb_requested);
+	printf("	IS_lsdb_send_interest_scheduled : %d \n",nbr->is_lsdb_send_interest_scheduled);
+
+	printf("\n");
 
 }
 
@@ -113,11 +114,108 @@
 
 }
 
+int 
+get_adjacent_status(struct name_prefix *nbr)
+{
+	printf("get_adjacent_status called \n");
+
+	int res;
+	int status=-1;
+	struct ndn_neighbor *nnbr;
+
+	struct hashtb_enumerator ee;
+    	struct hashtb_enumerator *e = &ee;
+
+	hashtb_start(nlsr->adl, e);
+	res = hashtb_seek(e, nbr->name, nbr->length, 0);
+
+	if (res == HT_OLD_ENTRY)
+	{
+		nnbr=e->data;
+		status=nnbr->status;
+	}
+	else if(res == HT_NEW_ENTRY)
+	{
+		hashtb_delete(e);
+	}
+
+	hashtb_end(e);
+
+	return status;
+
+}
+
+int 
+get_timed_out_number(struct name_prefix *nbr)
+{
+	printf("get_timed_out_number called \n");
+
+	int res,ret=-1;
+	struct ndn_neighbor *nnbr;
+
+	struct hashtb_enumerator ee;
+    	struct hashtb_enumerator *e = &ee;
+
+	hashtb_start(nlsr->adl, e);
+	res = hashtb_seek(e, nbr->name, nbr->length, 0);
+
+	if( res == HT_OLD_ENTRY )
+	{
+		nnbr=e->data;
+		ret=nnbr->info_interest_timed_out;
+	}
+	else if(res == HT_NEW_ENTRY)
+	{
+		hashtb_delete(e);
+	}
+
+	hashtb_end(e);
+
+	return ret;	
+}
+
+
+void 
+update_adjacent_timed_out_to_adl(struct name_prefix *nbr, int increment)
+{
+	printf("update_adjacent_timed_out_to_adl called \n");
+
+	int res;
+	struct ndn_neighbor *nnbr;
+
+	struct hashtb_enumerator ee;
+    	struct hashtb_enumerator *e = &ee;
+
+	hashtb_start(nlsr->adl, e);
+	res = hashtb_seek(e, nbr->name, nbr->length, 0);
+
+	if( res == HT_OLD_ENTRY )
+	{
+		nnbr=e->data;
+		nnbr->info_interest_timed_out += increment;
+	}
+	else if(res == HT_NEW_ENTRY)
+	{
+		hashtb_delete(e);
+	}
+
+	hashtb_end(e);
+}
+
+void 
+update_adjacent_timed_out_zero_to_adl(struct name_prefix *nbr)
+{
+	printf("update_adjacent_timed_out_zero_to_adl called \n");
+	int time_out_number=get_timed_out_number(nbr);
+	update_adjacent_timed_out_to_adl(nbr,-time_out_number);
+
+}
+
 void 
 update_adjacent_status_to_adl(struct name_prefix *nbr, int status)
 {
 	printf("update_adjacent_status_to_adl called \n");
-	//int ret;
+
 	int res;
 	struct ndn_neighbor *nnbr;
 
@@ -166,7 +264,7 @@
 		if ( nnbr->lsdb_synch_interval!= interval )
 		{
 			nnbr->lsdb_synch_interval=interval;
-			
+
 		}
 	}
 	else if(res == HT_NEW_ENTRY)
@@ -175,108 +273,32 @@
 	}
 
 	hashtb_end(e);
-	
-	
 }
 
 
-void 
-update_adjacent_timed_out_to_adl(struct name_prefix *nbr, int increment)
-{
-	printf("update_adjacent_timed_out_to_adl called \n");
-
-	int res;
-	struct ndn_neighbor *nnbr;
-
-	struct hashtb_enumerator ee;
-    	struct hashtb_enumerator *e = &ee;
-
-	hashtb_start(nlsr->adl, e);
-	res = hashtb_seek(e, nbr->name, nbr->length, 0);
-
-	if( res == HT_OLD_ENTRY )
-	{
-		nnbr=e->data;
-		nnbr->info_interest_timed_out += increment;
-	}
-	else if(res == HT_NEW_ENTRY)
-	{
-		hashtb_delete(e);
-	}
-
-	hashtb_end(e);
-}
-
-void 
-update_adjacent_timed_out_zero_to_adl(struct name_prefix *nbr)
-{
-	printf("update_adjacent_timed_out_zero_to_adl called \n");
-	int time_out_number=get_timed_out_number(nbr);
-	update_adjacent_timed_out_to_adl(nbr,-time_out_number);
-
-}
-
-
-void 
-update_adjacent_lsdb_version_to_adl(struct name_prefix *nbr, char *version)
-{
-	printf("update_adjacent_timed_out_to_adl called \n");
-
-	int res;
-	struct ndn_neighbor *nnbr;
-
-	struct hashtb_enumerator ee;
-    	struct hashtb_enumerator *e = &ee;
-
-	hashtb_start(nlsr->adl, e);
-	res = hashtb_seek(e, nbr->name, nbr->length, 0);
-
-	if( res == HT_OLD_ENTRY )
-	{
-		nnbr=e->data;
-		free(nnbr->last_lsdb_version);
-		nnbr->last_lsdb_version=(char *)malloc(strlen(version)+1);
-		memset(nnbr->last_lsdb_version,0,strlen(version)+1);
-		memcpy(nnbr->last_lsdb_version,version,strlen(version)+1);
-	}
-	else if(res == HT_NEW_ENTRY)
-	{
-		hashtb_delete(e);
-	}
-
-	hashtb_end(e);
-
-}
-
 int 
-get_timed_out_number(struct name_prefix *nbr)
+no_active_nbr(void)
 {
-	printf("get_timed_out_number called \n");
-
-	int res,ret=-1;
-	struct ndn_neighbor *nnbr;
-
+	int i, adl_element;
+	int no_link=0;
+	struct ndn_neighbor *nbr;
 	struct hashtb_enumerator ee;
     	struct hashtb_enumerator *e = &ee;
+    	hashtb_start(nlsr->adl, e);
+	adl_element=hashtb_n(nlsr->adl);
 
-	hashtb_start(nlsr->adl, e);
-	res = hashtb_seek(e, nbr->name, nbr->length, 0);
-
-	if( res == HT_OLD_ENTRY )
+	for(i=0;i<adl_element;i++)
 	{
-		nnbr=e->data;
-		ret=nnbr->info_interest_timed_out;
-	}
-	else if(res == HT_NEW_ENTRY)
-	{
-		hashtb_delete(e);
+		nbr=e->data;
+		if( nbr->status	== 1 )
+			no_link++;
+		hashtb_next(e);		
 	}
 
 	hashtb_end(e);
 
-	return ret;
+	return no_link;
 
-	return 0;	
 }
 
 int
@@ -312,87 +334,10 @@
 	hashtb_end(e);
 	if(nbr_count == adl_element)
 		ret=1;
-	
+
 	return ret;
 }
 
-int 
-no_active_nbr(void)
-{
-	int i, adl_element;
-	int no_link=0;
-	struct ndn_neighbor *nbr;
-	struct hashtb_enumerator ee;
-    	struct hashtb_enumerator *e = &ee;
-    	hashtb_start(nlsr->adl, e);
-	adl_element=hashtb_n(nlsr->adl);
-
-	for(i=0;i<adl_element;i++)
-	{
-		nbr=e->data;
-		if( nbr->status	== 1 )
-			no_link++;
-		hashtb_next(e);		
-	}
-
-	hashtb_end(e);
-
-	return no_link;
-
-}
-
-long int 
-len_active_nbr_data(void)
-{
-	int i, adl_element;
-	int no_link=0;
-	long int len=0;
-	struct ndn_neighbor *nbr;
-	struct hashtb_enumerator ee;
-    	struct hashtb_enumerator *e = &ee;
-    	hashtb_start(nlsr->adl, e);
-	adl_element=hashtb_n(nlsr->adl);
-
-	for(i=0;i<adl_element;i++)
-	{
-		nbr=e->data;
-		if( nbr->status	== 1 )
-		{
-			char *temp_face=(char *)malloc(20);
-			char *temp_metric=(char *)malloc(20);
-			char *temp_length=(char *)malloc(20);
-			
-			len+=strlen(nbr->neighbor->name);
-
-			memset(	temp_face,0,20);
-			sprintf(temp_face,"%d",nbr->face);
-			len+=strlen(temp_face);	
-
-			memset(	temp_metric,0,20);
-			sprintf(temp_face,"%d",nbr->metric);
-			len+=strlen(temp_metric);
-
-			memset(	temp_length,0,20);
-			sprintf(temp_length,"%d",nbr->neighbor->length);
-			len+=strlen(temp_length);
-		
-			no_link++;
-
-			free(temp_face);
-			free(temp_metric);
-			free(temp_length);
-
-		}
-		hashtb_next(e);		
-	}
-
-	hashtb_end(e);
-
-	len=len+ no_link*4+1;
-
-	return len;
-
-}
 
 void 
 get_active_nbr_adj_data(struct ccn_charbuf *c)
@@ -412,7 +357,7 @@
 		{
 			ccn_charbuf_append_string(c,nbr->neighbor->name);
 			ccn_charbuf_append_string(c,"|");
-			
+
 			char *temp_length=(char *)malloc(20);
 			memset(temp_length,0,20);
 			sprintf(temp_length,"%d",nbr->neighbor->length);
@@ -441,6 +386,104 @@
 	hashtb_end(e);
 }
 
+long int
+get_nbr_time_diff_lsdb_req(char *nbr)
+{
+	printf("get_nbr_time_diff_lsdb_req called \n");
+
+	long int time_diff=get_lsdb_synch_interval(nbr)+1;	
+	int res;
+	struct ndn_neighbor *nnbr;
+
+	struct hashtb_enumerator ee;
+    	struct hashtb_enumerator *e = &ee;
+
+	hashtb_start(nlsr->adl, e);
+	res = hashtb_seek(e, nbr, strlen(nbr)+1, 0);
+
+	if (res == HT_OLD_ENTRY)
+	{
+		nnbr=e->data;
+
+		if (nnbr->last_lsdb_requested == 0)
+			time_diff=get_lsdb_synch_interval(nbr)+1;
+		else time_diff=get_current_time_sec() - get_nbr_last_lsdb_requested(nbr);
+
+	}
+	else if(res == HT_NEW_ENTRY)
+	{
+		hashtb_delete(e);
+	}
+
+	hashtb_end(e);
+
+	return time_diff;
+}
+
+long int 
+get_nbr_last_lsdb_requested(char *nbr)
+{
+	printf("get_timed_out_number called \n");
+
+	long int last_lsdb_requested=0;
+
+	int res;
+	struct ndn_neighbor *nnbr;
+
+	struct hashtb_enumerator ee;
+    	struct hashtb_enumerator *e = &ee;
+
+	hashtb_start(nlsr->adl, e);
+	res = hashtb_seek(e, nbr, strlen(nbr)+1, 0);
+
+	if (res == HT_OLD_ENTRY)
+	{
+		nnbr=e->data;
+		last_lsdb_requested=nnbr->last_lsdb_requested;
+	}
+	else if(res == HT_NEW_ENTRY)
+	{
+		hashtb_delete(e);
+	}
+
+	hashtb_end(e);
+
+	return last_lsdb_requested;
+}
+
+long int 
+get_lsdb_synch_interval(char *nbr)
+{
+	printf("get_lsdb_synch_interval called \n");
+
+	long int lsdb_synch_interval=300;	
+
+
+	int res;
+	struct ndn_neighbor *nnbr;
+
+	struct hashtb_enumerator ee;
+    	struct hashtb_enumerator *e = &ee;
+
+	hashtb_start(nlsr->adl, e);
+	res = hashtb_seek(e, nbr, strlen(nbr)+1, 0);
+
+	if (res == HT_OLD_ENTRY)
+	{
+		nnbr=e->data;
+		lsdb_synch_interval=nnbr->lsdb_synch_interval;
+	}
+	else if(res == HT_NEW_ENTRY)
+	{
+		hashtb_delete(e);
+	}
+
+	hashtb_end(e);
+
+	return lsdb_synch_interval;
+
+}
+
 char *
 get_nbr_lsdb_version(char *nbr)
 {
@@ -456,7 +499,7 @@
 
 	hashtb_start(nlsr->adl, e);
 	res = hashtb_seek(e, nbr, strlen(nbr)+1, 0);
-	
+
 	if (res == HT_OLD_ENTRY)
 	{
 		nnbr=e->data;
@@ -492,7 +535,64 @@
 	{
 		nnbr=e->data;
 		nnbr->last_lsdb_requested=timestamp;
-		
+
+	}
+	else if(res == HT_NEW_ENTRY)
+	{
+		hashtb_delete(e);
+	}
+
+	hashtb_end(e);
+}
+
+void 
+set_is_lsdb_send_interest_scheduled_to_zero(char *nbr)
+{
+	printf("set_is_lsdb_send_interest_scheduled_to_zero called \n");
+
+	int res;
+	struct ndn_neighbor *nnbr;
+
+	struct hashtb_enumerator ee;
+    	struct hashtb_enumerator *e = &ee;
+
+	hashtb_start(nlsr->adl, e);
+	res = hashtb_seek(e, nbr, strlen(nbr)+1, 0);
+
+	if (res == HT_OLD_ENTRY)
+	{
+		nnbr=e->data;
+		nnbr->is_lsdb_send_interest_scheduled=0;
+	}
+	else if(res == HT_NEW_ENTRY)
+	{
+		hashtb_delete(e);
+	}
+
+	hashtb_end(e);
+}
+
+void 
+update_adjacent_lsdb_version_to_adl(struct name_prefix *nbr, char *version)
+{
+	printf("update_adjacent_timed_out_to_adl called \n");
+
+	int res;
+	struct ndn_neighbor *nnbr;
+
+	struct hashtb_enumerator ee;
+    	struct hashtb_enumerator *e = &ee;
+
+	hashtb_start(nlsr->adl, e);
+	res = hashtb_seek(e, nbr->name, nbr->length, 0);
+
+	if( res == HT_OLD_ENTRY )
+	{
+		nnbr=e->data;
+		free(nnbr->last_lsdb_version);
+		nnbr->last_lsdb_version=(char *)malloc(strlen(version)+1);
+		memset(nnbr->last_lsdb_version,0,strlen(version)+1);
+		memcpy(nnbr->last_lsdb_version,version,strlen(version)+1);
 	}
 	else if(res == HT_NEW_ENTRY)
 	{
@@ -521,7 +621,7 @@
 	{
 		nnbr=e->data;
 		nnbr->last_lsdb_requested=nnbr->last_lsdb_requested-sec;
-		
+
 	}
 	else if(res == HT_NEW_ENTRY)
 	{
@@ -533,161 +633,3 @@
 }
 
 
-long int 
-get_nbr_last_lsdb_requested(char *nbr)
-{
-	printf("get_timed_out_number called \n");
-
-	long int last_lsdb_requested=0;
-
-	int res;
-	struct ndn_neighbor *nnbr;
-
-	struct hashtb_enumerator ee;
-    	struct hashtb_enumerator *e = &ee;
-
-	hashtb_start(nlsr->adl, e);
-	res = hashtb_seek(e, nbr, strlen(nbr)+1, 0);
-	
-	if (res == HT_OLD_ENTRY)
-	{
-		nnbr=e->data;
-		last_lsdb_requested=nnbr->last_lsdb_requested;
-	}
-	else if(res == HT_NEW_ENTRY)
-	{
-		hashtb_delete(e);
-	}
-
-	hashtb_end(e);
-
-	return last_lsdb_requested;
-}
-
-long int
-get_nbr_time_diff_lsdb_req(char *nbr)
-{
-	printf("get_nbr_time_diff_lsdb_req called \n");
-
-	long int time_diff=get_lsdb_synch_interval(nbr)+1;	
-	int res;
-	struct ndn_neighbor *nnbr;
-
-	struct hashtb_enumerator ee;
-    	struct hashtb_enumerator *e = &ee;
-
-	hashtb_start(nlsr->adl, e);
-	res = hashtb_seek(e, nbr, strlen(nbr)+1, 0);
-	
-	if (res == HT_OLD_ENTRY)
-	{
-		nnbr=e->data;
-		
-		if (nnbr->last_lsdb_requested == 0)
-			time_diff=get_lsdb_synch_interval(nbr)+1;
-		else time_diff=get_current_time_sec() - get_nbr_last_lsdb_requested(nbr);
-		
-	}
-	else if(res == HT_NEW_ENTRY)
-	{
-		hashtb_delete(e);
-	}
-
-	hashtb_end(e);
-
-	return time_diff;
-}
-
-long int 
-get_lsdb_synch_interval(char *nbr)
-{
-	printf("get_lsdb_synch_interval called \n");
-
-	long int lsdb_synch_interval=300;	
-	
-
-	int res;
-	struct ndn_neighbor *nnbr;
-
-	struct hashtb_enumerator ee;
-    	struct hashtb_enumerator *e = &ee;
-
-	hashtb_start(nlsr->adl, e);
-	res = hashtb_seek(e, nbr, strlen(nbr)+1, 0);
-	
-	if (res == HT_OLD_ENTRY)
-	{
-		nnbr=e->data;
-		lsdb_synch_interval=nnbr->lsdb_synch_interval;
-	}
-	else if(res == HT_NEW_ENTRY)
-	{
-		hashtb_delete(e);
-	}
-
-	hashtb_end(e);
-
-	return lsdb_synch_interval;
-
-}
-
-void 
-set_is_lsdb_send_interest_scheduled_to_zero(char *nbr)
-{
-	printf("set_is_lsdb_send_interest_scheduled_to_zero called \n");
-
-	int res;
-	struct ndn_neighbor *nnbr;
-
-	struct hashtb_enumerator ee;
-    	struct hashtb_enumerator *e = &ee;
-
-	hashtb_start(nlsr->adl, e);
-	res = hashtb_seek(e, nbr, strlen(nbr)+1, 0);
-
-	if (res == HT_OLD_ENTRY)
-	{
-		nnbr=e->data;
-		nnbr->is_lsdb_send_interest_scheduled=0;
-	}
-	else if(res == HT_NEW_ENTRY)
-	{
-		hashtb_delete(e);
-	}
-
-	hashtb_end(e);
-
-}
-
-
-int 
-get_adjacent_status(struct name_prefix *nbr)
-{
-	printf("get_adjacent_status called \n");
-
-	int res;
-	int status=-1;
-	struct ndn_neighbor *nnbr;
-
-	struct hashtb_enumerator ee;
-    	struct hashtb_enumerator *e = &ee;
-
-	hashtb_start(nlsr->adl, e);
-	res = hashtb_seek(e, nbr->name, nbr->length, 0);
-
-	if (res == HT_OLD_ENTRY)
-	{
-		nnbr=e->data;
-		status=nnbr->status;
-	}
-	else if(res == HT_NEW_ENTRY)
-	{
-		hashtb_delete(e);
-	}
-
-	hashtb_end(e);
-
-	return status;
-
-}
-