Merge branch 'master' of github.com:NDN-Routing/NLSR0.0
diff --git a/macbook.conf b/macbook.conf
index 52e84f7..6923325 100644
--- a/macbook.conf
+++ b/macbook.conf
@@ -20,6 +20,6 @@
 tunnel-type udp
 
 topo-prefix /ndn/routing/nlsr/
-slice-prefix /ndn/routing/nlsr/LSA
+slice-prefix /ndn/routing/nlsr/test
 
 logdir /Users/akmhoque/NLSR2.0
diff --git a/nlsr.c b/nlsr.c
index a498264..2efd619 100644
--- a/nlsr.c
+++ b/nlsr.c
@@ -714,10 +714,6 @@
 	{
 		process_command_ccnname(remainder);
 	}
-	/*else if(!strcmp(cmd_type,"lsdb-synch-interval") )
-	{
-		process_command_lsdb_synch_interval(remainder);
-	}*/
 	else if(!strcmp(cmd_type,"interest-retry") )
 	{
 		process_command_interest_retry(remainder);
diff --git a/nlsr_ndn.c b/nlsr_ndn.c
index 258c954..c0e5db8 100644
--- a/nlsr_ndn.c
+++ b/nlsr_ndn.c
@@ -158,9 +158,6 @@
 	if ( nlsr->detailed_logging )
 		writeLogg(__FILE__,__FUNCTION__,__LINE__,"LSA Identifier: %s Length: %d\n",lsaId->name,lsaId->length-1);
 
-	//printf("LSA Identifier: %s Length: %d\n",lsaId->name,lsaId->length-1);
-
-
 }
 
 int 
@@ -301,23 +298,47 @@
 	int res;
 	struct ccn_charbuf *data=ccn_charbuf_create();
     	struct ccn_charbuf *name=ccn_charbuf_create();
-    	struct ccn_signing_params sp=CCN_SIGNING_PARAMS_INIT;
+    	
 
 	res=ccn_charbuf_append(name, info->interest_ccnb + info->pi->offset[CCN_PI_B_Name],info->pi->offset[CCN_PI_E_Name] - info->pi->offset[CCN_PI_B_Name]);
 	if (res >= 0)
 	{
-		sp.template_ccnb=ccn_charbuf_create();
-		ccn_charbuf_append_tt(sp.template_ccnb,CCN_DTAG_SignedInfo, CCN_DTAG);
-		ccnb_tagged_putf(sp.template_ccnb, CCN_DTAG_FreshnessSeconds, "%ld", 10);
-       	 	sp.sp_flags |= CCN_SP_TEMPL_FRESHNESS;
+		
+
+		struct ccn_charbuf *pubid = ccn_charbuf_create();
+		struct ccn_charbuf *pubkey = ccn_charbuf_create();
+
+		//pubid is the digest_result pubkey is result
+		ccn_get_public_key(nlsr->ccn, NULL, pubid, pubkey);
+
+		
+
+		struct ccn_signing_params sp=CCN_SIGNING_PARAMS_INIT;
+		sp.template_ccnb=ccn_charbuf_create();		
+		ccn_charbuf_append_tt(sp.template_ccnb, CCN_DTAG_SignedInfo, CCN_DTAG);
+		ccn_charbuf_append_tt(sp.template_ccnb, CCN_DTAG_KeyLocator, CCN_DTAG);
+		ccn_charbuf_append_tt(sp.template_ccnb, CCN_DTAG_KeyName, CCN_DTAG);
+		ccn_charbuf_append_charbuf(sp.template_ccnb, name);
 		ccn_charbuf_append_closer(sp.template_ccnb);
+		ccn_charbuf_append_closer(sp.template_ccnb);
+		ccn_charbuf_append_closer(sp.template_ccnb);
+
+		sp.sp_flags |= CCN_SP_TEMPL_KEY_LOCATOR;
+		sp.sp_flags |= CCN_SP_FINAL_BLOCK;
+		sp.type = CCN_CONTENT_KEY;
+		sp.freshness = 10;
+		
+		//ccn_charbuf_append_tt(sp.template_ccnb,CCN_DTAG_SignedInfo, CCN_DTAG);
+		//ccnb_tagged_putf(sp.template_ccnb, CCN_DTAG_FreshnessSeconds, "%ld", 10);
+       	 	//sp.sp_flags |= CCN_SP_TEMPL_FRESHNESS;
+		//ccn_charbuf_append_closer(sp.template_ccnb);
 
 
 		char *raw_data=(char *)malloc(20);
 		memset(raw_data,0,20);
 		sprintf(raw_data,"%s", nlsr->lsdb->lsdb_version);	
 
-		res= ccn_sign_content(nlsr->ccn, data, name, &sp, raw_data,strlen(raw_data)); 
+		res= ccn_sign_content(nlsr->ccn, data, name, &sp, pubkey->buf,pubkey->length); 
 		if(res >= 0)
 		{
 			if ( nlsr->debugging )
@@ -357,6 +378,8 @@
 		free(nbr);
 		free(raw_data);
 		ccn_charbuf_destroy(&sp.template_ccnb);
+		ccn_charbuf_destroy(&pubid);
+		ccn_charbuf_destroy(&pubkey);
 	}
 
 	ccn_charbuf_destroy(&data);
@@ -405,15 +428,14 @@
 		struct ccn_charbuf*ito;
 		ito=ccn_charbuf_create();
 		ccn_uri_append(ito,info->interest_ccnb,info->pi->offset[CCN_PI_E],0);
-
 		if ( nlsr->debugging )
 			printf("%s\n",ccn_charbuf_as_string(ito));
 		if ( nlsr->detailed_logging )
 			writeLogg(__FILE__,__FUNCTION__,__LINE__,"%s\n",ccn_charbuf_as_string(ito));
-
-		//printf("%s\n",ccn_charbuf_as_string(ito));
 		ccn_charbuf_destroy(&ito);
 
+		
+
 		process_incoming_timed_out_interest(selfp,info);
 
 	    break;
@@ -484,17 +506,23 @@
 		writeLogg(__FILE__,__FUNCTION__,__LINE__,"Info Content Received For Neighbor: %s Length:%d\n",nbr->name,nbr->length);
 
 
-	//const unsigned char *ptr;
-	//size_t length;
-	//ccn_content_get_value(info->content_ccnb, info->pco->offset[CCN_PCO_E_Content]-info->pco->offset[CCN_PCO_B_Content], info->pco, &ptr, &length);
+	if ( contain_key_name(info->content_ccnb, info->pco) == 1)
+	{
+		struct ccn_charbuf *key_name=get_key_name(info->content_ccnb, info->pco);
+		struct ccn_charbuf *key_uri = ccn_charbuf_create();
+		ccn_uri_append(key_uri, key_name->buf, key_name->length, 1);
 
-	//long int interval=atoi((char *)ptr);
+		if(nlsr->debugging)
+			printf("Key Name: %s\n",ccn_charbuf_as_string(key_uri));
+
+		ccn_charbuf_destroy(&key_uri);
+		ccn_charbuf_destroy(&key_name);
 
 
+	}
 
 	update_adjacent_timed_out_zero_to_adl(nbr);	
 	update_adjacent_status_to_adl(nbr,NBR_ACTIVE);
-	//update_lsdb_synch_interval_to_adl(nbr,interval);
 	print_adjacent_from_adl();
 
 
@@ -722,5 +750,28 @@
 	}
 	ccn_charbuf_destroy(&name);
 	free(int_name);
+}
 
+int
+contain_key_name(const unsigned char *ccnb, struct ccn_parsed_ContentObject *pco) 
+{
+	if (pco->offset[CCN_PCO_B_KeyLocator] == pco->offset[CCN_PCO_E_KeyLocator])
+		return -1;
+
+	struct ccn_buf_decoder decoder;
+	struct ccn_buf_decoder *d;
+	d = ccn_buf_decoder_start(&decoder, ccnb + pco->offset[CCN_PCO_B_Key_Certificate_KeyName], pco->offset[CCN_PCO_E_Key_Certificate_KeyName] - pco->offset[CCN_PCO_B_Key_Certificate_KeyName]);
+	if (ccn_buf_match_dtag(d, CCN_DTAG_KeyName))
+		return 1;
+
+	return -1;
+}
+
+struct ccn_charbuf *
+get_key_name(const unsigned char *ccnb, struct ccn_parsed_ContentObject *pco) 
+{
+	struct ccn_charbuf *key_name = ccn_charbuf_create();
+	ccn_charbuf_append(key_name, ccnb + pco->offset[CCN_PCO_B_KeyName_Name], pco->offset[CCN_PCO_E_KeyName_Name] - pco->offset[CCN_PCO_B_KeyName_Name]);
+
+	return key_name;
 }
diff --git a/nlsr_ndn.h b/nlsr_ndn.h
index 1e34284..b084b8c 100644
--- a/nlsr_ndn.h
+++ b/nlsr_ndn.h
@@ -21,5 +21,8 @@
 int send_info_interest(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags);
 void send_info_interest_to_neighbor(struct name_prefix *nbr);
 
+struct ccn_charbuf * get_key_name(const unsigned char *ccnb, struct ccn_parsed_ContentObject *pco);
+int contain_key_name(const unsigned char *ccnb, struct ccn_parsed_ContentObject *pco);
+
 
 #endif
diff --git a/nlsr_sync.c b/nlsr_sync.c
index 7ae108a..789a0c5 100644
--- a/nlsr_sync.c
+++ b/nlsr_sync.c
@@ -138,30 +138,6 @@
 }
 
 
-int 
-get_lsa_position(struct ccn_charbuf * ccnb, struct ccn_indexbuf *comps)
-{
-
-	
-	
-	int res,i;
-	int lsa_position=0; 	 	
-	int name_comps=(int)comps->n;
-
-	for(i=0;i<name_comps;i++)
-	{
-		res=ccn_name_comp_strcmp(ccnb->buf,comps,i,"LSA");
-		if( res == 0)
-		{
-			lsa_position=i;
-			break;
-		}	
-	}
-
-	return lsa_position;
-
-}
-
 void 
 get_name_part(struct name_prefix *name_part,struct ccn_charbuf * interest_ccnb, struct ccn_indexbuf *interest_comps, int offset)
 {
@@ -460,8 +436,6 @@
 void
 process_content_from_sync(struct ccn_charbuf *content_name, struct ccn_indexbuf *components)
 {
-	//int lsa_position;
-	//int res;
 	size_t comp_size;
 	char *lst;
 	char *lsid;
@@ -487,18 +461,8 @@
 	struct name_prefix *orig_router=(struct name_prefix *)malloc(sizeof(struct name_prefix));
 	
 
-	struct ccn_indexbuf cid={0};
-    	struct ccn_indexbuf *temp_components=&cid;
-	struct ccn_charbuf *name=ccn_charbuf_create();
-	ccn_name_from_uri(name,nlsr->slice_prefix);
-    	ccn_name_split (name, temp_components);
-	//lsa_position=temp_components->n-2;
-    	ccn_charbuf_destroy(&name);
 
-
-	//res=ccn_name_comp_get(content_name->buf, components,lsa_position+1,&lst, &comp_size);
-	ccn_name_comp_get(content_name->buf, components,components->n-2-1,&second_last_comp, &comp_size);	
-	//ls_type=atoi((char *)lst);
+	ccn_name_comp_get(content_name->buf, components,components->n-1-2,&second_last_comp, &comp_size);
 	if (nlsr->debugging)
 		printf("2nd Last Component: %s \n",second_last_comp);
 	
@@ -520,7 +484,7 @@
 
 		int lsa_life_time=get_time_diff(time_stamp,(char *)origtime);
 
-		if ( (strcmp((char *)orig_router,nlsr->router_name) == 0 && lsa_life_time < nlsr->lsa_refresh_time) || (strcmp((char *)orig_router,nlsr->router_name) != 0 && lsa_life_time < nlsr->router_dead_interval) )
+		if ( (strcmp(orig_router->name,nlsr->router_name) == 0 && lsa_life_time < nlsr->lsa_refresh_time) || (strcmp(orig_router->name,nlsr->router_name) != 0 && lsa_life_time < nlsr->router_dead_interval) )
 		{
 			int is_new_name_lsa=check_is_new_name_lsa(orig_router->name,(char *)lst,(char *)lsid,(char *)origtime);
 			if ( is_new_name_lsa == 1 )
@@ -562,7 +526,7 @@
 				printf("Orig Router: %s Ls Type: %d Orig Time: %s\n",orig_router->name,ls_type,origtime);		
 
 			int lsa_life_time=get_time_diff(time_stamp,(char *)origtime);
-			if ( (strcmp((char *)orig_router,nlsr->router_name) == 0 && lsa_life_time < nlsr->lsa_refresh_time) || (strcmp((char *)orig_router,nlsr->router_name) != 0 && lsa_life_time < nlsr->router_dead_interval) )	
+			if ( (strcmp(orig_router->name,nlsr->router_name) == 0 && lsa_life_time < nlsr->lsa_refresh_time) || (strcmp(orig_router->name,nlsr->router_name) != 0 && lsa_life_time < nlsr->router_dead_interval) )	
 			{
 				int is_new_adj_lsa=check_is_new_adj_lsa(orig_router->name,(char *)lst,(char *)origtime);
 				if ( is_new_adj_lsa == 1 )
@@ -600,7 +564,7 @@
 				printf("Orig Router: %s Ls Type: %d Orig Time: %s\n",orig_router->name,ls_type,origtime);
 
 			int lsa_life_time=get_time_diff(time_stamp,(char *)origtime);
-			if ( (strcmp((char *)orig_router,nlsr->router_name) == 0 && lsa_life_time < nlsr->lsa_refresh_time) || (strcmp((char *)orig_router,nlsr->router_name) != 0 && lsa_life_time < nlsr->router_dead_interval) )	
+			if ( (strcmp(orig_router->name,nlsr->router_name) == 0 && lsa_life_time < nlsr->lsa_refresh_time) || (strcmp(orig_router->name,nlsr->router_name) != 0 && lsa_life_time < nlsr->router_dead_interval) )	
 			{
 				int is_new_cor_lsa=check_is_new_cor_lsa(orig_router->name,(char *)lst,(char *)origtime);
 				if ( is_new_cor_lsa == 1 )
@@ -631,8 +595,8 @@
 		}
 	}
 
-	//if (content_data != NULL)
-		//free(content_data);
+	free(orig_router->name);
+	free(orig_router);
 	ccn_charbuf_destroy(&uri);
 	//01/31/2013	
 	free(time_stamp);