static int dissect_object_id(tvbuff_t *tvb, proto_tree *tree, int offset, guint8 flags, enum OID_USAGE oid_usage) { guint8 n_subid; guint8 prefix; guint8 include; proto_item* item; proto_tree* subtree; guint32 oid[2048]; char str_oid[2048]; int i; memset(oid, '\0', sizeof(oid)); memset(str_oid, '\0', sizeof(str_oid)); n_subid = tvb_get_guint8(tvb, offset); prefix = tvb_get_guint8(tvb, offset + 1); include = tvb_get_guint8(tvb, offset + 2); tvb_get_guint8(tvb, offset + 3); for(i=0; i<n_subid; i++) { NORLEL(flags, oid[i], tvb, (offset+4) + (i*4)); } if(!convert_oid_to_str(&oid[0], n_subid, &str_oid[0], 2048, prefix)) g_snprintf(&str_oid[0], 2048, "(null)"); if(tree) { const char *range = ""; const char *inclusion = (include) ? " (Inclusive)" : " (Exclusive)"; switch (oid_usage) { case OID_START_RANGE: range = "(Range Start) "; break; case OID_END_RANGE: range = " (Range End) "; break; default: inclusion = ""; break; } item = proto_tree_add_text(tree, tvb, offset, 4 + (n_subid * 4) , "Object Identifier: %s%s%s", range, str_oid, inclusion); subtree = proto_item_add_subtree(item, ett_obj_ident); } else return offset; proto_tree_add_uint(subtree, hf_oid_sub, tvb, offset, 1, n_subid); proto_tree_add_uint(subtree, hf_oid_prefix, tvb, offset + 1, 1, prefix); proto_tree_add_boolean(subtree, hf_oid_include, tvb, offset + 2, 1, include); proto_tree_add_string(subtree, hf_oid_str, tvb, offset + 4, (n_subid * 4), str_oid); return 4 + (n_subid * 4); }
static int dissect_object_id(tvbuff_t *tvb, proto_tree *tree, int offset, char flags) { guint8 n_subid; guint8 prefix; guint8 include; proto_item* item; proto_tree* subtree; guint32 oid[2048]; char str_oid[2048]; int i, slen; memset(oid, '\0', sizeof(oid)); memset(str_oid, '\0', sizeof(str_oid)); n_subid = tvb_get_guint8(tvb, offset); prefix = tvb_get_guint8(tvb, offset + 1); include = tvb_get_guint8(tvb,offset + 2); tvb_get_guint8(tvb, offset + 3); for(i=0; i<n_subid; i++) { NORLEL(flags, oid[i], tvb, (offset+4) + (i*4)); } if(!(slen = convert_oid_to_str(&oid[0], n_subid, &str_oid[0], 2048, prefix))) return offset; if(tree) { item = proto_tree_add_text(tree,tvb,offset,n_subid + 4 , "Object Identifier: (%s) %s",(include) ? "Start" : "End" , str_oid); subtree = proto_item_add_subtree(item, ett_obj_ident); } else return offset; proto_tree_add_uint(subtree, hf_oid_sub, tvb, offset, 1, n_subid); proto_tree_add_uint(subtree, hf_oid_prefix, tvb, offset + 1, 1, prefix); proto_tree_add_uint(subtree, hf_oid_include, tvb, offset + 2, 1, include); proto_tree_add_string(subtree,hf_oid_str, tvb, offset + 4, slen, str_oid); return 4 + (n_subid * 4); }