+/*
+ * EXTERNAL::= [UNIVERSAL 8] IMPLICIT SEQUENCE {
+ * direct-reference OBJECT IDENTIFIER OPTIONAL,
+ * indirect-reference INTEGER OPTIONAL,
+ * data-value-descriptor ObjectDescriptor OPTIONAL,
+ * encoding CHOICE {
+ * single-ASN1-type [0] ABSTRACT-SYNTAX.&Type,
+ * octet-aligned [1] IMPLICIT OCTET STRING,
+ * arbitrary [2] IMPLICIT BIT STRING } }
+ */
+static int dissect_single_ASN1_type(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
+ /* hf_ber_single_ASN1_type */
+ tvbuff_t *next_tvb;
+ proto_item *item;
+ gint8 class;
+ gboolean pc;
+ gint tag;
+ guint32 len;
+ gint ind_field;
+
+ offset = dissect_ber_identifier(pinfo, tree, tvb, offset, &class, &pc, &tag);
+ offset = dissect_ber_length(pinfo, tree, tvb, offset, &len, &ind_field);
+
+ next_tvb = tvb_new_subset(tvb, offset, len, len);
+ if (!next_tvb)
+ return offset;
+ g_warning("%s",single_ASN1_type_obj_id);
+ if(single_ASN1_type_obj_id){
+ call_ber_oid_callback(single_ASN1_type_obj_id, next_tvb, 0, pinfo, tree);
+ }else{
+ item = proto_tree_add_text(tree, next_tvb, 0, -1,"dissector is not available");
+ offset = dissect_ber_octet_string(TRUE, pinfo, tree, tvb, offset, -1,NULL);
+ }
+
+ return offset;
+}
+
+
+static int dissect_octet_aligned_impl(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
+ offset = dissect_ber_octet_string(TRUE, pinfo, tree, tvb, offset, hf_ber_octet_aligned,
+ NULL);
+
+ return offset;
+}
+
+static int dissect_arbitrary_impl(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
+ offset = dissect_ber_bitstring(TRUE, pinfo, tree, tvb, offset,
+ NULL, hf_ber_arbitrary, -1,
+ NULL);
+
+ return offset;
+}
+
+static int dissect_indirect_reference(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
+ offset = dissect_ber_integer(FALSE, pinfo, tree, tvb, offset, hf_ber_indirect_reference,
+ NULL);
+ return offset;
+
+}
+
+static int dissect_direct_reference(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
+ offset = dissect_ber_object_identifier_str(FALSE, pinfo, tree, tvb, offset, hf_ber_direct_reference, &single_ASN1_type_obj_id);
+ return offset;
+}
+
+static int dissect_data_value_descriptor(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
+ offset = dissect_ber_restricted_string(FALSE, BER_UNI_TAG_ObjectDescriptor,
+ pinfo, tree, tvb, offset, hf_ber_data_value_descriptor,
+ NULL);