changes in external structure of asn1_ctx_t

svn path=/trunk/; revision=21714
This commit is contained in:
Tomas Kukosa 2007-05-07 11:25:21 +00:00
parent 0eae1cc0bd
commit a8c10b431f
2 changed files with 29 additions and 15 deletions

View File

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

View File

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