Skip to content

Commit 1185625

Browse files
author
Nick Briggs
committed
Refs #100672 Decode the Exclude filter on an interest.
1 parent 9b4f2ab commit 1185625

File tree

1 file changed

+49
-1
lines changed

1 file changed

+49
-1
lines changed

apps/wireshark/ccn/packet-ccn.c

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,10 @@ dissect_ccn_interest(const unsigned char *ccnb, size_t ccnb_size, tvbuff_t *tvb,
353353
proto_item *titem;
354354
struct ccn_parsed_interest interest;
355355
struct ccn_parsed_interest *pi = &interest;
356+
struct ccn_buf_decoder decoder;
357+
struct ccn_buf_decoder *d;
358+
const unsigned char *bloom;
359+
size_t bloom_size = 0;
356360
struct ccn_charbuf *c;
357361
struct ccn_indexbuf *comps;
358362
const unsigned char *comp;
@@ -402,9 +406,53 @@ dissect_ccn_interest(const unsigned char *ccnb, size_t ccnb_size, tvbuff_t *tvb,
402406
/* Exclude */
403407
l = pi->offset[CCN_PI_E_Exclude] - pi->offset[CCN_PI_B_Exclude];
404408
if (l > 0) {
409+
c = ccn_charbuf_create();
410+
d = ccn_buf_decoder_start(&decoder, ccnb + pi->offset[CCN_PI_B_Exclude], l);
411+
if (!ccn_buf_match_dtag(d, CCN_DTAG_Exclude)) {
412+
ccn_charbuf_destroy(&c);
413+
return(-1);
414+
}
415+
ccn_charbuf_append_string(c, "Exclude: ");
416+
ccn_buf_advance(d);
417+
if (ccn_buf_match_dtag(d, CCN_DTAG_Any)) {
418+
ccn_buf_advance(d);
419+
ccn_charbuf_append_string(c, "* ");
420+
ccn_buf_check_close(d);
421+
}
422+
else if (ccn_buf_match_dtag(d, CCN_DTAG_Bloom)) {
423+
ccn_buf_advance(d);
424+
if (ccn_buf_match_blob(d, &bloom, &bloom_size))
425+
ccn_buf_advance(d);
426+
ccn_charbuf_append_string(c, "? ");
427+
ccn_buf_check_close(d);
428+
}
429+
while (ccn_buf_match_dtag(d, CCN_DTAG_Component)) {
430+
ccn_buf_advance(d);
431+
comp_size = 0;
432+
if (ccn_buf_match_blob(d, &comp, &comp_size))
433+
ccn_buf_advance(d);
434+
ccn_uri_append_percentescaped(c, comp, comp_size);
435+
ccn_charbuf_append_string(c, " ");
436+
ccn_buf_check_close(d);
437+
if (ccn_buf_match_dtag(d, CCN_DTAG_Any)) {
438+
ccn_buf_advance(d);
439+
ccn_charbuf_append_string(c, "* ");
440+
ccn_buf_check_close(d);
441+
}
442+
else if (ccn_buf_match_dtag(d, CCN_DTAG_Bloom)) {
443+
ccn_buf_advance(d);
444+
if (ccn_buf_match_blob(d, &bloom, &bloom_size))
445+
ccn_buf_advance(d);
446+
ccn_charbuf_append_string(c, "? ");
447+
ccn_buf_check_close(d);
448+
}
449+
}
450+
405451
titem = proto_tree_add_text(tree, tvb, pi->offset[CCN_PI_B_Exclude], l,
406-
"Exclude");
452+
"%s", ccn_charbuf_as_string(c));
407453
exclude_tree = proto_item_add_subtree(titem, ett_exclude);
454+
ccn_charbuf_destroy(&c);
455+
408456
}
409457
/* ChildSelector */
410458
l = pi->offset[CCN_PI_E_ChildSelector] - pi->offset[CCN_PI_B_ChildSelector];

0 commit comments

Comments
 (0)