diff options
-rw-r--r-- | epan/asn1.h | 12 | ||||
-rw-r--r-- | epan/dissectors/packet-per.c | 32 |
2 files changed, 29 insertions, 15 deletions
diff --git a/epan/asn1.h b/epan/asn1.h index 33a93cd89f..0b9ca717c4 100644 --- a/epan/asn1.h +++ b/epan/asn1.h @@ -43,6 +43,12 @@ typedef struct _asn1_ctx_t { struct { tvbuff_t *data_value_descriptor; int hf_index; + tvbuff_t *direct_reference; + gint32 indirect_reference; + guint32 encoding; + tvbuff_t *single_asn1_type; + tvbuff_t *octet_aligned; + tvbuff_t *arbitrary; union { struct { int (*ber_callback)(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, struct _asn1_ctx_t*); @@ -55,12 +61,6 @@ typedef struct _asn1_ctx_t { } ber; struct { int (*type_cb)(tvbuff_t*, int, struct _asn1_ctx_t*, proto_tree*, int); - tvbuff_t *direct_reference; - gint32 indirect_reference; - guint32 encoding; - tvbuff_t *single_asn1_type; - tvbuff_t *octet_aligned; - tvbuff_t *arbitrary; } per; }; } external; diff --git a/epan/dissectors/packet-per.c b/epan/dissectors/packet-per.c index 470aef7b53..af96db9494 100644 --- a/epan/dissectors/packet-per.c +++ b/epan/dissectors/packet-per.c @@ -1791,9 +1791,23 @@ DEBUG_ENTRY("dissect_per_octet_string"); /* 26 Encoding of a value of the external type */ /* code generated from definition in 26.1 */ +/* +[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 + } +} +*/ +/* NOTE – This sequence type differs from that in ITU-T Rec. X.680 | ISO/IEC 8824-1 for historical reasons. */ + static int dissect_per_T_direct_reference(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { - offset = dissect_per_object_identifier(tvb, offset, actx, tree, hf_index, &actx->external.per.direct_reference); + offset = dissect_per_object_identifier(tvb, offset, actx, tree, hf_index, &actx->external.direct_reference); return offset; } @@ -1802,7 +1816,7 @@ dissect_per_T_direct_reference(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *ac static int dissect_per_T_indirect_reference(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { - offset = dissect_per_integer(tvb, offset, actx, tree, hf_index, &actx->external.per.indirect_reference); + offset = dissect_per_integer(tvb, offset, actx, tree, hf_index, &actx->external.indirect_reference); return offset; } @@ -1830,12 +1844,12 @@ dissect_per_T_single_ASN1_type(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *ac static int dissect_per_T_octet_aligned(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, - NO_BOUND, NO_BOUND, &actx->external.per.octet_aligned); + NO_BOUND, NO_BOUND, &actx->external.octet_aligned); if (actx->external.per.type_cb) { - actx->external.per.type_cb(actx->external.per.octet_aligned, 0, actx, tree, actx->external.hf_index); + actx->external.per.type_cb(actx->external.octet_aligned, 0, actx, tree, actx->external.hf_index); } else { - actx->created_item = proto_tree_add_text(tree, actx->external.per.octet_aligned, 0, -1, "Unknown EXTERNAL Type"); + actx->created_item = proto_tree_add_text(tree, actx->external.octet_aligned, 0, -1, "Unknown EXTERNAL Type"); } return offset; } @@ -1845,12 +1859,12 @@ dissect_per_T_octet_aligned(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx static int dissect_per_T_arbitrary(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index, - NO_BOUND, NO_BOUND, FALSE, &actx->external.per.arbitrary); + NO_BOUND, NO_BOUND, FALSE, &actx->external.arbitrary); if (actx->external.per.type_cb) { - actx->external.per.type_cb(actx->external.per.arbitrary, 0, actx, tree, actx->external.hf_index); + actx->external.per.type_cb(actx->external.arbitrary, 0, actx, tree, actx->external.hf_index); } else { - actx->created_item = proto_tree_add_text(tree, actx->external.per.arbitrary, 0, -1, "Unknown EXTERNAL Type"); + actx->created_item = proto_tree_add_text(tree, actx->external.arbitrary, 0, -1, "Unknown EXTERNAL Type"); } return offset; } @@ -1874,7 +1888,7 @@ static int dissect_per_External_encoding(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, ett_per_External_encoding, External_encoding_choice, - &actx->external.per.encoding); + &actx->external.encoding); return offset; } |