@@ -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