blob: 43ca77bcd002b485aaf188870a24201e1ea97b97 [file] [log] [blame]
akmhoque59980a52012-08-09 12:36:09 -05001#include<stdio.h>
2#include<string.h>
3#include<stdlib.h>
4#include <unistd.h>
5#include <getopt.h>
6#include <sys/time.h>
7#include <assert.h>
8#ifdef HAVE_CONFIG_H
9#include <config.h>
10#endif
11
12
13#include <ccn/ccn.h>
14#include <ccn/uri.h>
15#include <ccn/keystore.h>
16#include <ccn/signing.h>
17#include <ccn/schedule.h>
18#include <ccn/hashtb.h>
akmhoque7f337272012-08-14 15:16:30 -050019#include <ccn/bloom.h>
akmhoque59980a52012-08-09 12:36:09 -050020
21#include "nlsr.h"
22#include "nlsr_ndn.h"
23#include "utility.h"
akmhoque8a5babe2012-08-16 17:39:33 -050024#include "nlsr_adl.h"
akmhoque59980a52012-08-09 12:36:09 -050025
26enum ccn_upcall_res
27incoming_interest(struct ccn_closure *selfp,
28 enum ccn_upcall_kind kind, struct ccn_upcall_info *info)
29{
30
31 switch (kind) {
32 case CCN_UPCALL_FINAL:
33 break;
34 case CCN_UPCALL_INTEREST:
35 // printing the name prefix for which it received interest
36 printf("Interest Received for name: ");
37 struct ccn_charbuf*c;
38 c=ccn_charbuf_create();
39 ccn_uri_append(c,info->interest_ccnb,info->pi->offset[CCN_PI_E_Name]-info->pi->offset[CCN_PI_B_Name],0);
40 //ccn_name_chop(c,NULL,-1);
41 printf("%s\n",ccn_charbuf_as_string(c));
42 ccn_charbuf_destroy(&c);
43
akmhoque1c9b92f2012-08-13 10:57:50 -050044 process_incoming_interest(selfp, info);
akmhoque59980a52012-08-09 12:36:09 -050045
46 /*
47 struct ccn_charbuf *data=ccn_charbuf_create();
48 struct ccn_charbuf *name=ccn_charbuf_create();
49 struct ccn_signing_params sp=CCN_SIGNING_PARAMS_INIT;
50
51 ccn_charbuf_append(name, info->interest_ccnb + info->pi->offset[CCN_PI_B_Name],
52 info->pi->offset[CCN_PI_E_Name] - info->pi->offset[CCN_PI_B_Name]);
53
54 sp.template_ccnb=ccn_charbuf_create();
55 ccn_charbuf_append_tt(sp.template_ccnb,CCN_DTAG_SignedInfo, CCN_DTAG);
56 ccnb_tagged_putf(sp.template_ccnb, CCN_DTAG_FreshnessSeconds, "%ld", 1010);
57 sp.sp_flags |= CCN_SP_TEMPL_FRESHNESS;
58 ccn_charbuf_append_closer(sp.template_ccnb);
59
60 res= ccn_sign_content(ospfndn->ccn, data, name, &sp, "hello", strlen("hello"));
61 res=ccn_put(ospfndn->ccn,data->buf,data->length);
62 ccn_charbuf_destroy(&data);
63
64 */
65 break;
66
67 default:
68 break;
69 }
70
71 return CCN_UPCALL_RESULT_OK;
72}
73
74
75enum ccn_upcall_res incoming_content(struct ccn_closure* selfp,
76 enum ccn_upcall_kind kind, struct ccn_upcall_info* info)
77{
78
79
80 switch(kind) {
81 case CCN_UPCALL_FINAL:
82 break;
83 case CCN_UPCALL_CONTENT:
84 printf("Content Received for name: ");
85 struct ccn_charbuf*c;
86 c=ccn_charbuf_create();
87 ccn_uri_append(c,info->interest_ccnb,info->pi->offset[CCN_PI_E],0);
88 printf("%s\n",ccn_charbuf_as_string(c));
89 ccn_charbuf_destroy(&c);
akmhoquecb017752012-08-16 11:03:45 -050090
91 process_incoming_content(selfp, info);
92
akmhoque59980a52012-08-09 12:36:09 -050093 break;
94 case CCN_UPCALL_INTEREST_TIMED_OUT:
akmhoquecb017752012-08-16 11:03:45 -050095 printf("Interest timed out \n");
96 struct ccn_charbuf*ic;
97 ic=ccn_charbuf_create();
98 ccn_uri_append(ic,info->interest_ccnb,info->pi->offset[CCN_PI_E_Name],0);
99 printf("%s\n",ccn_charbuf_as_string(ic));
100 ccn_charbuf_destroy(&ic);
101 process_incoming_timed_out_interest(selfp,info);
akmhoque59980a52012-08-09 12:36:09 -0500102
akmhoque59980a52012-08-09 12:36:09 -0500103 break;
104 default:
105 fprintf(stderr, "Unexpected response of kind %d\n", kind);
106 return CCN_UPCALL_RESULT_ERR;
107 }
108
109 return CCN_UPCALL_RESULT_OK;
110}
akmhoque61fe4472012-08-10 10:13:34 -0500111
akmhoquecb017752012-08-16 11:03:45 -0500112
113void
114process_incoming_content(struct ccn_closure* selfp, struct ccn_upcall_info* info)
115{
116 printf("process_incoming_content called \n");
117
akmhoque638c20a2012-08-16 11:57:48 -0500118 struct ccn_charbuf*c;
119 c=ccn_charbuf_create();
akmhoquedde7e322012-08-16 13:57:06 -0500120 //ccn_uri_append(c,info->interest_ccnb,info->pi->offset[CCN_PI_E_Name]-info->pi->offset[CCN_PI_B_Name],0);
121 ccn_uri_append(c,info->interest_ccnb,info->pi->offset[CCN_PI_E_Name],0);
akmhoque638c20a2012-08-16 11:57:48 -0500122 printf("%s\n",ccn_charbuf_as_string(c));
123 ccn_charbuf_destroy(&c);
124
125 const unsigned char *comp_ptr1;
126 size_t comp_size;
127 int res,i;
128 int nlsr_position=0;
129 int name_comps=(int)info->interest_comps->n;
130
131 for(i=0;i<name_comps;i++)
132 {
133 res=ccn_name_comp_strcmp(info->interest_ccnb,info->interest_comps,i,"nlsr");
134 if( res == 0)
135 {
136 nlsr_position=i;
137 break;
138 }
139 }
140
141 res=ccn_name_comp_get(info->interest_ccnb, info->interest_comps,nlsr_position+1,&comp_ptr1, &comp_size);
142
143
144 printf("Det= %s \n",comp_ptr1);
145
146 if(!strcmp((char *)comp_ptr1,"lsdb"))
147 {
148 process_incoming_content_lsdb(selfp,info);
149 }
150
151}
152
153
154void
155process_incoming_content_lsdb(struct ccn_closure* selfp, struct ccn_upcall_info* info)
156{
157 printf("process_incoming_content_lsdb called \n");
158
159 const unsigned char *content_data;
160 size_t length;
161 ccn_content_get_value(info->content_ccnb, info->pco->offset[CCN_PCO_E_Content]-info->pco->offset[CCN_PCO_B_Content], info->pco, &content_data, &length);
162
akmhoquedde7e322012-08-16 13:57:06 -0500163
164 if ( !strcmp((char *)content_data,"NACK"))
165 {
166 printf("NACK received for LSDB request. Do nothing \n");
167 }
168 else
169 {
170 // Do the LSDB processing here
171
akmhoque8a5babe2012-08-16 17:39:33 -0500172 const unsigned char *comp_ptr1;
173 size_t comp_size;
174 int res;
175
176 res=ccn_name_comp_get(info->content_ccnb, info->content_comps,info->interest_comps->n-1,&comp_ptr1, &comp_size);
akmhoque2852a222012-08-21 12:09:00 -0400177 if ( res >=0)
akmhoque8a5babe2012-08-16 17:39:33 -0500178 printf("Received Database Version: %s \n",(char *)comp_ptr1);
179
akmhoquedde7e322012-08-16 13:57:06 -0500180 }
akmhoque638c20a2012-08-16 11:57:48 -0500181
akmhoque8a5babe2012-08-16 17:39:33 -0500182
akmhoque638c20a2012-08-16 11:57:48 -0500183
akmhoquecb017752012-08-16 11:03:45 -0500184}
185
186
187void
188process_incoming_timed_out_interest(struct ccn_closure* selfp, struct ccn_upcall_info* info)
189{
190 printf("process_incoming_timed_out_interest called \n");
191
akmhoquedde7e322012-08-16 13:57:06 -0500192 struct ccn_charbuf*c;
193 c=ccn_charbuf_create();
194 //ccn_uri_append(c,info->interest_ccnb,info->pi->offset[CCN_PI_E_Name]-info->pi->offset[CCN_PI_B_Name],0);
195 ccn_uri_append(c,info->interest_ccnb,info->pi->offset[CCN_PI_E_Name],0);
196 printf("%s\n",ccn_charbuf_as_string(c));
197 ccn_charbuf_destroy(&c);
198
akmhoqueb2e3a332012-08-21 12:17:20 -0400199 //const unsigned char *comp_ptr1;
200 //size_t comp_size;
akmhoquedde7e322012-08-16 13:57:06 -0500201 int res,i;
202 int nlsr_position=0;
203 int name_comps=(int)info->interest_comps->n;
204
205 for(i=0;i<name_comps;i++)
206 {
207 res=ccn_name_comp_strcmp(info->interest_ccnb,info->interest_comps,i,"nlsr");
208 if( res == 0)
209 {
210 nlsr_position=i;
211 break;
212 }
213 }
214
akmhoqueb2e3a332012-08-21 12:17:20 -0400215 //res=ccn_name_comp_get(info->interest_ccnb, info->interest_comps,nlsr_position+1,&comp_ptr1, &comp_size);
akmhoquedde7e322012-08-16 13:57:06 -0500216
217
akmhoqueb2e3a332012-08-21 12:17:20 -0400218 //printf("Det= %s \n",comp_ptr1);
akmhoquedde7e322012-08-16 13:57:06 -0500219
akmhoqueb2e3a332012-08-21 12:17:20 -0400220 //if(!strcmp((char *)comp_ptr1,"lsdb"))
221 if(ccn_name_comp_strcmp(info->interest_ccnb,info->interest_comps,nlsr_position+1,"lsdb") == 0)
akmhoquedde7e322012-08-16 13:57:06 -0500222 {
223 process_incoming_timed_out_interest_lsdb(selfp,info);
224 }
akmhoquecb017752012-08-16 11:03:45 -0500225}
226
227
akmhoque1c9b92f2012-08-13 10:57:50 -0500228void
akmhoquedde7e322012-08-16 13:57:06 -0500229process_incoming_timed_out_interest_lsdb(struct ccn_closure* selfp, struct ccn_upcall_info* info)
230{
231 printf("process_incoming_timed_out_interest_lsdb called \n");
232
233
234 int res,i;
235 int nlsr_position=0;
236 int name_comps=(int)info->interest_comps->n;
237
238 //const unsigned char *comp_ptr1;
239 //size_t comp_size;
240
241 for(i=0;i<name_comps;i++)
242 {
243 res=ccn_name_comp_strcmp(info->interest_ccnb,info->interest_comps,i,"nlsr");
244 if( res == 0)
245 {
246 nlsr_position=i;
247 break;
248 }
249 }
250
251
akmhoque8a5babe2012-08-16 17:39:33 -0500252 struct ccn_charbuf *nbr;
253 nbr=ccn_charbuf_create();
254
akmhoquedde7e322012-08-16 13:57:06 -0500255
akmhoque8a5babe2012-08-16 17:39:33 -0500256 const unsigned char *comp_ptr1;
257 size_t comp_size;
258 for(i=0;i<nlsr_position;i++)
259 {
260 res=ccn_name_comp_get(info->interest_ccnb, info->interest_comps,i,&comp_ptr1, &comp_size);
akmhoque6dc9a242012-08-21 11:23:57 -0400261 //printf("%s \n",comp_ptr1);
akmhoque8a5babe2012-08-16 17:39:33 -0500262 ccn_charbuf_append_string(nbr,"/");
263 ccn_charbuf_append_string(nbr,(const char *)comp_ptr1);
264 }
265
akmhoque71b552d2012-08-21 11:44:34 -0400266 ccn_charbuf_append_string(nbr,"\0");
akmhoque8a5babe2012-08-16 17:39:33 -0500267 printf("Interest Timed out for Neighbor: %s\n",ccn_charbuf_as_string(nbr));
268
269 update_adjacent_status_to_adl(nbr,1);
270
271 ccn_charbuf_destroy(&nbr);
akmhoquedde7e322012-08-16 13:57:06 -0500272}
273
274void
akmhoque1c9b92f2012-08-13 10:57:50 -0500275process_incoming_interest(struct ccn_closure *selfp, struct ccn_upcall_info *info)
276{
277 printf("process_incoming_interest called \n");
278
279
280 struct ccn_charbuf*c;
281 c=ccn_charbuf_create();
282 ccn_uri_append(c,info->interest_ccnb,info->pi->offset[CCN_PI_E_Name]-info->pi->offset[CCN_PI_B_Name],0);
283 printf("%s\n",ccn_charbuf_as_string(c));
284 ccn_charbuf_destroy(&c);
285
286 const unsigned char *comp_ptr1;
287 size_t comp_size;
288 int res,i;
289 int nlsr_position=0;
290 int name_comps=(int)info->interest_comps->n;
291
292 for(i=0;i<name_comps;i++)
293 {
294 res=ccn_name_comp_strcmp(info->interest_ccnb,info->interest_comps,i,"nlsr");
295 if( res == 0)
296 {
akmhoqueea3603e2012-08-13 11:24:09 -0500297 nlsr_position=i;
akmhoque1c9b92f2012-08-13 10:57:50 -0500298 break;
299 }
300 }
301
302 res=ccn_name_comp_get(info->interest_ccnb, info->interest_comps,nlsr_position+1,&comp_ptr1, &comp_size);
akmhoquee0789862012-08-16 14:23:32 -0500303
akmhoque1c9b92f2012-08-13 10:57:50 -0500304 printf("Det= %s \n",comp_ptr1);
305
306 if(!strcmp((char *)comp_ptr1,"lsdb"))
307 {
akmhoquebf1aa832012-08-13 13:26:59 -0500308 process_incoming_interest_lsdb(selfp,info);
akmhoque1c9b92f2012-08-13 10:57:50 -0500309 }
akmhoquebf1aa832012-08-13 13:26:59 -0500310
311
312}
313
314
315void
316process_incoming_interest_lsdb(struct ccn_closure *selfp, struct ccn_upcall_info *info)
317{
318 printf("process_incoming_interest_lsdb called \n");
319
akmhoquecb017752012-08-16 11:03:45 -0500320 int l, res;
akmhoquefce8cfc2012-08-14 14:00:33 -0500321 const unsigned char *exclbase;
akmhoque6d49e4d2012-08-14 13:49:30 -0500322 size_t size;
akmhoquefce8cfc2012-08-14 14:00:33 -0500323 struct ccn_buf_decoder decoder;
324 struct ccn_buf_decoder *d;
325 const unsigned char *comp;
326
akmhoque6d49e4d2012-08-14 13:49:30 -0500327
328 l = info->pi->offset[CCN_PI_E_Exclude] - info->pi->offset[CCN_PI_B_Exclude];
329 if (l > 0)
330 {
331 comp = NULL;
332 size = 0;
333 exclbase = info->interest_ccnb + info->pi->offset[CCN_PI_B_Exclude];
334 d = ccn_buf_decoder_start(&decoder, exclbase, l);
335 if (ccn_buf_match_dtag(d, CCN_DTAG_Exclude))
336 {
337 ccn_buf_advance(d);
338 if (ccn_buf_match_dtag(d, CCN_DTAG_Any))
339 ccn_buf_advance_past_element(d);
340 if (ccn_buf_match_dtag(d, CCN_DTAG_Component))
341 {
342 ccn_buf_advance(d);
343 ccn_buf_match_blob(d, &comp, &size);
akmhoquec9286692012-08-16 09:57:58 -0500344 ccn_buf_check_close(d);
345
346
akmhoque6d49e4d2012-08-14 13:49:30 -0500347 }
348 ccn_buf_check_close(d);
349 }
akmhoque07dd8cc2012-08-16 10:23:01 -0500350 //if (d->decoder.state < 0)
351 //printf("Parse Failed\n");
akmhoque6d49e4d2012-08-14 13:49:30 -0500352 if (comp != NULL)
akmhoque37e3adf2012-08-14 15:52:50 -0500353 printf("Number in Exclusion Filter is %s\n",comp);
akmhoque6d49e4d2012-08-14 13:49:30 -0500354
355 /* Now comp points to the start of your potential number, and size is its length */
356 }
357
akmhoque6dc9a242012-08-21 11:23:57 -0400358 int dbcmp=strncmp(nlsr->lsdb->version,(char *)comp,16);
akmhoque898d4aa2012-08-16 10:26:15 -0500359
akmhoque6dc9a242012-08-21 11:23:57 -0400360 printf (" dbcmp = %d \n",dbcmp);
akmhoque898d4aa2012-08-16 10:26:15 -0500361
akmhoque07dd8cc2012-08-16 10:23:01 -0500362 if(dbcmp > 0)
akmhoquecb017752012-08-16 11:03:45 -0500363 {
akmhoque6dc9a242012-08-21 11:23:57 -0400364 printf("Has Updated database (Older: %s New: %s)\n",comp,nlsr->lsdb->version);
akmhoquecb017752012-08-16 11:03:45 -0500365 }
akmhoque07dd8cc2012-08-16 10:23:01 -0500366 else
akmhoquecb017752012-08-16 11:03:45 -0500367 {
akmhoque6dc9a242012-08-21 11:23:57 -0400368 printf("Data base is not updated than the older one (Older: %s New: %s)\n",comp,nlsr->lsdb->version);
akmhoquecb017752012-08-16 11:03:45 -0500369 printf("Sending NACK Content back.....\n");
akmhoque07dd8cc2012-08-16 10:23:01 -0500370
akmhoquecb017752012-08-16 11:03:45 -0500371 struct ccn_charbuf *data=ccn_charbuf_create();
372 struct ccn_charbuf *name=ccn_charbuf_create();
373 struct ccn_signing_params sp=CCN_SIGNING_PARAMS_INIT;
374
akmhoque638c20a2012-08-16 11:57:48 -0500375 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]);
akmhoque8a5babe2012-08-16 17:39:33 -0500376 //ccn_name_append_str(name,"0000000000000001");
akmhoquecb017752012-08-16 11:03:45 -0500377
378 sp.template_ccnb=ccn_charbuf_create();
379 ccn_charbuf_append_tt(sp.template_ccnb,CCN_DTAG_SignedInfo, CCN_DTAG);
380 ccnb_tagged_putf(sp.template_ccnb, CCN_DTAG_FreshnessSeconds, "%ld", 10);
381 sp.sp_flags |= CCN_SP_TEMPL_FRESHNESS;
382 ccn_charbuf_append_closer(sp.template_ccnb);
383
384 res= ccn_sign_content(nlsr->ccn, data, name, &sp, "NACK", strlen("NACK"));
akmhoquedde7e322012-08-16 13:57:06 -0500385 if(res >= 0)
386 printf("Signing Content is successful \n");
387
akmhoquecb017752012-08-16 11:03:45 -0500388 res=ccn_put(nlsr->ccn,data->buf,data->length);
akmhoquebf11b1d2012-08-16 11:11:17 -0500389
390 if(res >= 0)
391 printf("Sending NACK Content is successful \n");
392
akmhoquecb017752012-08-16 11:03:45 -0500393 ccn_charbuf_destroy(&data);
394 ccn_charbuf_destroy(&sp.template_ccnb);
395
396 }
397
akmhoque1c9b92f2012-08-13 10:57:50 -0500398}
399
400int
401send_lsdb_interest(struct ccn_schedule *sched, void *clienth,
402 struct ccn_scheduled_event *ev, int flags)
403{
404
405 struct ccn_charbuf *name;
406 long int rnum;
407 char rnumstr[20];
akmhoqueea3603e2012-08-13 11:24:09 -0500408 char lsdb_str[5];
409 char nlsr_str[5];
akmhoque1c9b92f2012-08-13 10:57:50 -0500410
411 int res,i;
412 int adl_element;
413
414 rnum=random();
415 memset(&rnumstr,0,20);
416 sprintf(rnumstr,"%ld",rnum);
akmhoqueea3603e2012-08-13 11:24:09 -0500417 memset(&nlsr_str,0,5);
418 sprintf(nlsr_str,"nlsr");
419 memset(&lsdb_str,0,5);
420 sprintf(lsdb_str,"lsdb");
421
akmhoque1c9b92f2012-08-13 10:57:50 -0500422
423 struct ndn_neighbor *nbr;
424
425 struct hashtb_enumerator ee;
426 struct hashtb_enumerator *e = &ee;
427
428 hashtb_start(nlsr->adl, e);
429 adl_element=hashtb_n(nlsr->adl);
akmhoque07dd8cc2012-08-16 10:23:01 -0500430 //int mynumber=15;
akmhoque1c9b92f2012-08-13 10:57:50 -0500431
432 for(i=0;i<adl_element;i++)
433 {
434 nbr=e->data;
akmhoque6dc9a242012-08-21 11:23:57 -0400435 printf("Sending interest for name prefix:%s/%s/%s/%s\n",nbr->neighbor->name,nlsr_str,lsdb_str,rnumstr);
akmhoque1c9b92f2012-08-13 10:57:50 -0500436 name=ccn_charbuf_create();
akmhoque1d7343f2012-08-21 10:46:35 -0400437 res=ccn_name_from_uri(name,nbr->neighbor->name);
akmhoqueea3603e2012-08-13 11:24:09 -0500438 ccn_name_append_str(name,nlsr_str);
439 ccn_name_append_str(name,lsdb_str);
akmhoque6dc9a242012-08-21 11:23:57 -0400440 ccn_name_append_str(name,rnumstr);
akmhoque1c9b92f2012-08-13 10:57:50 -0500441
akmhoque6d49e4d2012-08-14 13:49:30 -0500442 /* adding Exclusion filter */
akmhoquebf1aa832012-08-13 13:26:59 -0500443
akmhoque6d49e4d2012-08-14 13:49:30 -0500444 struct ccn_charbuf *templ;
445 templ = ccn_charbuf_create();
akmhoque7f337272012-08-14 15:16:30 -0500446
akmhoque6d49e4d2012-08-14 13:49:30 -0500447 struct ccn_charbuf *c;
448 c = ccn_charbuf_create();
akmhoque7f337272012-08-14 15:16:30 -0500449
450
451 ccn_charbuf_append_tt(templ, CCN_DTAG_Interest, CCN_DTAG);
452 ccn_charbuf_append_tt(templ, CCN_DTAG_Name, CCN_DTAG);
453 ccn_charbuf_append_closer(templ); /* </Name> */
akmhoque6d49e4d2012-08-14 13:49:30 -0500454 ccn_charbuf_append_tt(templ, CCN_DTAG_Exclude, CCN_DTAG);
455 ccnb_tagged_putf(templ, CCN_DTAG_Any, "");
456 ccn_charbuf_reset(c);
akmhoque07dd8cc2012-08-16 10:23:01 -0500457 //ccn_charbuf_putf(c, "%u", (unsigned)mynumber);
akmhoque6dc9a242012-08-21 11:23:57 -0400458 ccn_charbuf_putf(c, "%s", nbr->last_lsdb_version);
akmhoque6d49e4d2012-08-14 13:49:30 -0500459 ccnb_append_tagged_blob(templ, CCN_DTAG_Component, c->buf, c->length);
460 ccn_charbuf_append_closer(templ); /* </Exclude> */
akmhoque7f337272012-08-14 15:16:30 -0500461 ccn_charbuf_append_closer(templ); /* </Interest> */
akmhoque37e3adf2012-08-14 15:52:50 -0500462
akmhoque6d49e4d2012-08-14 13:49:30 -0500463
464 /* Adding Exclusion filter done */
465
akmhoque7f337272012-08-14 15:16:30 -0500466 res=ccn_express_interest(nlsr->ccn,name,&(nlsr->in_content),templ);
467
akmhoque1c9b92f2012-08-13 10:57:50 -0500468 if ( res >= 0 )
469 printf("Interest sending Successfull .... \n");
akmhoque37e3adf2012-08-14 15:52:50 -0500470 ccn_charbuf_destroy(&c);
akmhoque7f337272012-08-14 15:16:30 -0500471 ccn_charbuf_destroy(&templ);
akmhoque1c9b92f2012-08-13 10:57:50 -0500472 ccn_charbuf_destroy(&name);
473
akmhoque1d7343f2012-08-21 10:46:35 -0400474 hashtb_next(e);
akmhoque1c9b92f2012-08-13 10:57:50 -0500475 }
476
477 hashtb_end(e);
478
akmhoquebf11b1d2012-08-16 11:11:17 -0500479 nlsr->event_send_lsdb_interest = ccn_schedule_event(nlsr->sched, 60000000, &send_lsdb_interest, NULL, 0);
akmhoque1c9b92f2012-08-13 10:57:50 -0500480
481 return 0;
482
483}
484