Commit af86d863 authored by garciay's avatar garciay
Browse files

Add assurance level flags support

parent f71c0368
Loading
Loading
Loading
Loading
+47 −3
Original line number Original line Diff line number Diff line
@@ -117,6 +117,7 @@ static gint ett_st = -1;
static gint ett_secdata = -1;
static gint ett_secdata = -1;
static gint ett_2dlocation = -1;
static gint ett_2dlocation = -1;
static gint ett_3dlocation = -1;
static gint ett_3dlocation = -1;
static gint ett_assurance_level_flags = -1;


/* Basic Header fields */
/* Basic Header fields */
static int hf_gn_basicheader = -1;
static int hf_gn_basicheader = -1;
@@ -236,6 +237,9 @@ static int hf_gn_sh_field_subject_type = -1;
static int hf_gn_sh_field_subjectattr_type = -1;
static int hf_gn_sh_field_subjectattr_type = -1;
static int hf_gn_sh_field_validityrestr_type = -1;
static int hf_gn_sh_field_validityrestr_type = -1;
static int hf_gn_st_field_assurelev = -1;
static int hf_gn_st_field_assurelev = -1;
static int hf_gn_st_field_assurelev_flags_levels_bits = -1;
static int hf_gn_st_field_assurelev_flags_reserved_bits = -1;
static int hf_gn_st_field_assurelev_flags_confidence_bits = -1;
static int hf_gn_sh_field_geo_region_type = -1;
static int hf_gn_sh_field_geo_region_type = -1;
static int hf_gn_sh_field_geo_circle_radius = -1;
static int hf_gn_sh_field_geo_circle_radius = -1;
static int hf_gn_sh_field_geo_region_dict = -1;
static int hf_gn_sh_field_geo_region_dict = -1;
@@ -1103,6 +1107,10 @@ static int tree_gn_cert(tvbuff_t *tvb, proto_tree *ext_tree, int offset)
	hdrlen -= extraoffset;
	hdrlen -= extraoffset;
	
	
	if (attrlen) {
	if (attrlen) {
      proto_tree *tree_assurance_level = NULL;
      proto_item *ti_assurance_level = NULL;
      guint8 assurance_level_flags = -1;
      
	  while (attrlen > 0) {
	  while (attrlen > 0) {
	    subjattr_type = tvb_get_guint8(tvb, offset);
	    subjattr_type = tvb_get_guint8(tvb, offset);
	    proto_tree_add_item(shfc_tree, hf_gn_sh_field_subjectattr_type, tvb, offset, 1, FALSE);
	    proto_tree_add_item(shfc_tree, hf_gn_sh_field_subjectattr_type, tvb, offset, 1, FALSE);
@@ -1126,7 +1134,18 @@ static int tree_gn_cert(tvbuff_t *tvb, proto_tree *ext_tree, int offset)
	      break;
	      break;
	    case 2:
	    case 2:
	      // assurance level
	      // assurance level
	      proto_tree_add_item(shfc_tree, hf_gn_st_field_assurelev, tvb, offset, 1, FALSE);     
	      ti_assurance_level = proto_tree_add_item(shfc_tree, hf_gn_st_field_assurelev, tvb, offset, 1, FALSE); 
          tree_assurance_level = proto_item_add_subtree(ti_assurance_level, ett_assurance_level_flags);
          assurance_level_flags = tvb_get_guint8(tvb, offset);
          if ((assurance_level_flags & 0xe0) != 0x00) {
            proto_tree_add_item(tree_assurance_level, hf_gn_st_field_assurelev_flags_levels_bits, tvb, offset, 1, FALSE);
          }
          if ((assurance_level_flags & 0x1c) != 0x00) {
            proto_tree_add_item(tree_assurance_level, hf_gn_st_field_assurelev_flags_reserved_bits, tvb, offset, 1, FALSE);
          }
          if ((assurance_level_flags & 0x03) != 0x00) {
            proto_tree_add_item(tree_assurance_level, hf_gn_st_field_assurelev_flags_confidence_bits, tvb, offset, 1, FALSE);
          }
	      offset += 1;
	      offset += 1;
	      hdrlen -= 1;
	      hdrlen -= 1;
	      attrlen -= 1;
	      attrlen -= 1;
@@ -1988,6 +2007,10 @@ dissect_secured_packet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int
	  hdrlen -= extraoffset;
	  hdrlen -= extraoffset;
	
	
	  if (attrlen) {
	  if (attrlen) {
        proto_tree *tree_assurance_level = NULL;
        proto_item *ti_assurance_level = NULL;
        guint8 assurance_level_flags = -1;
        
	    while (attrlen > 0) {
	    while (attrlen > 0) {
	      subjattr_type = tvb_get_guint8(tvb, offset);
	      subjattr_type = tvb_get_guint8(tvb, offset);
	      proto_tree_add_item(shfc_tree, hf_gn_sh_field_subjectattr_type, tvb, offset, 1, FALSE);
	      proto_tree_add_item(shfc_tree, hf_gn_sh_field_subjectattr_type, tvb, offset, 1, FALSE);
@@ -2011,7 +2034,18 @@ dissect_secured_packet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int
		break;
		break;
	      case 2:
	      case 2:
		// assurance level
		// assurance level
		proto_tree_add_item(shfc_tree, hf_gn_st_field_assurelev, tvb, offset, 1, FALSE);     
	      ti_assurance_level = proto_tree_add_item(shfc_tree, hf_gn_st_field_assurelev, tvb, offset, 1, FALSE); 
          tree_assurance_level = proto_item_add_subtree(ti_assurance_level, ett_assurance_level_flags);
          assurance_level_flags = tvb_get_guint8(tvb, offset);
          if ((assurance_level_flags & 0xe0) != 0x00) {
            proto_tree_add_item(tree_assurance_level, hf_gn_st_field_assurelev_flags_levels_bits, tvb, offset, 1, FALSE);
          }
          if ((assurance_level_flags & 0x1c) != 0x00) {
            proto_tree_add_item(tree_assurance_level, hf_gn_st_field_assurelev_flags_reserved_bits, tvb, offset, 1, FALSE);
          }
          if ((assurance_level_flags & 0x03) != 0x00) {
            proto_tree_add_item(tree_assurance_level, hf_gn_st_field_assurelev_flags_confidence_bits, tvb, offset, 1, FALSE);
          }
		offset += 1;
		offset += 1;
		hdrlen -= 1;
		hdrlen -= 1;
		attrlen -= 1;
		attrlen -= 1;
@@ -2557,6 +2591,15 @@ proto_register_gn(void)
    { &hf_gn_st_field_assurelev,
    { &hf_gn_st_field_assurelev,
      {"Assurance Level", "gn.sh.assurelev", FT_UINT8, BASE_HEX, NULL, 0x00, NULL, HFILL}
      {"Assurance Level", "gn.sh.assurelev", FT_UINT8, BASE_HEX, NULL, 0x00, NULL, HFILL}
    },
    },
    { &hf_gn_st_field_assurelev_flags_levels_bits,
      {"Levels bits", "gn.sh.assurelev.flags.lbits", FT_UINT8, BASE_HEX, NULL, 0xe0, NULL, HFILL}
    },
    { &hf_gn_st_field_assurelev_flags_reserved_bits,
      {"Reserved bits", "gn.sh.assurelev.flags.rbits", FT_UINT8, BASE_HEX, NULL, 0x1c, NULL, HFILL}
    },
    { &hf_gn_st_field_assurelev_flags_confidence_bits,
      {"Confidence bits", "gn.sh.assurelev.flags.cbits", FT_UINT8, BASE_HEX, NULL, 0x03, NULL, HFILL}
    },
    { &hf_gn_sh_field_geo_region_type,
    { &hf_gn_sh_field_geo_region_type,
      {"Geographic Region", "gn.sh.georegion", FT_UINT8, BASE_DEC, VALS(sh_georegiontype_names), 0x00, NULL, HFILL}
      {"Geographic Region", "gn.sh.georegion", FT_UINT8, BASE_DEC, VALS(sh_georegiontype_names), 0x00, NULL, HFILL}
    },
    },
@@ -2860,7 +2903,8 @@ proto_register_gn(void)
    &ett_depv_addr,
    &ett_depv_addr,
    &ett_secdata,
    &ett_secdata,
    &ett_2dlocation,
    &ett_2dlocation,
    &ett_3dlocation
    &ett_3dlocation,
    &ett_assurance_level_flags
  };
  };


  /* Register the protocol name and description */
  /* Register the protocol name and description */