diff options
author | Tomas Kukosa <tomas.kukosa@siemens.com> | 2007-07-13 11:25:53 +0000 |
---|---|---|
committer | Tomas Kukosa <tomas.kukosa@siemens.com> | 2007-07-13 11:25:53 +0000 |
commit | 6659588f60dfff4b58c23f2b27bf1309c3baf2bb (patch) | |
tree | 1a3309269d9ab4681859e99d1c680fdf26150203 | |
parent | b989e08afd3412df954db6f1ba9a3a19f9762780 (diff) |
- get rid of anonymous unions
- move some structures from packet-per and packet-q932-ros to asn1.h
svn path=/trunk/; revision=22295
-rw-r--r-- | asn1/q932/packet-q932-ros-template.c | 4 | ||||
-rw-r--r-- | asn1/q932/packet-q932-ros-template.h | 12 | ||||
-rw-r--r-- | asn1/q932/packet-q932-template.c | 2 | ||||
-rw-r--r-- | epan/asn1.h | 68 | ||||
-rw-r--r-- | epan/dissectors/packet-ber.c | 4 | ||||
-rw-r--r-- | epan/dissectors/packet-per.c | 21 | ||||
-rw-r--r-- | epan/dissectors/packet-q932-ros.c | 4 | ||||
-rw-r--r-- | epan/dissectors/packet-q932-ros.h | 12 | ||||
-rw-r--r-- | epan/dissectors/packet-q932.c | 2 |
9 files changed, 79 insertions, 50 deletions
diff --git a/asn1/q932/packet-q932-ros-template.c b/asn1/q932/packet-q932-ros-template.c index 944b97fdc0..ff1e6746f6 100644 --- a/asn1/q932/packet-q932-ros-template.c +++ b/asn1/q932/packet-q932-ros-template.c @@ -55,7 +55,7 @@ int proto_rose = -1; static dissector_handle_t data_handle = NULL; /* Gloabl variables */ -static rose_context *rose_ctx; +static rose_ctx_t *rose_ctx; static gint32 code_choice; static guint32 code_local; @@ -68,7 +68,7 @@ static tvbuff_t *arg_next_tvb, *res_next_tvb, *err_next_tvb; #include "packet-q932-ros-fn.c" /*--- dissect_rose_apdu -----------------------------------------------------*/ -int dissect_rose_apdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, rose_context *rctx) { +int dissect_rose_apdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, rose_ctx_t *rctx) { if (rctx) rose_ctx = rctx; return dissect_ROS_PDU(tvb, pinfo, tree); diff --git a/asn1/q932/packet-q932-ros-template.h b/asn1/q932/packet-q932-ros-template.h index f6bb01c553..585ca58d9f 100644 --- a/asn1/q932/packet-q932-ros-template.h +++ b/asn1/q932/packet-q932-ros-template.h @@ -26,17 +26,9 @@ #ifndef PACKET_ROSE_H #define PACKET_ROSE_H -#include "epan/packet.h" +#include "epan/asn1.h" -typedef struct _rose_context { - int apdu_depth; - dissector_table_t arg_global_dissector_table; - dissector_table_t arg_local_dissector_table; - dissector_table_t res_global_dissector_table; - dissector_table_t res_local_dissector_table; -} rose_context; - -int dissect_rose_apdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, rose_context *rctx); +int dissect_rose_apdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, rose_ctx_t *rctx); #endif /* PACKET_ROSE_H */ diff --git a/asn1/q932/packet-q932-template.c b/asn1/q932/packet-q932-template.c index 1c7ffe08a1..32b1b5174e 100644 --- a/asn1/q932/packet-q932-template.c +++ b/asn1/q932/packet-q932-template.c @@ -58,7 +58,7 @@ static gint ett_q932_ie = -1; /* Preferences */ /* ROSE context */ -static rose_context q932_rose_ctx; +static rose_ctx_t q932_rose_ctx; /* Subdissectors */ static dissector_handle_t data_handle = NULL; diff --git a/epan/asn1.h b/epan/asn1.h index a173575bf5..d426013ac9 100644 --- a/epan/asn1.h +++ b/epan/asn1.h @@ -33,6 +33,13 @@ typedef enum { ASN1_ENC_XER /* X.693 - XER */ } asn1_enc_e; +typedef enum { + CB_ASN1_ENC, + CB_DISSECTOR, + CB_NEW_DISSECTOR, + CB_DISSECTOR_HANDLE +} asn1_cb_variant; + #define ASN1_CTX_SIGNATURE 0x41435458 /* "ACTX" */ typedef struct _asn1_ctx_t { @@ -48,27 +55,72 @@ typedef struct _asn1_ctx_t { int hf_index; const char *direct_reference; gint32 indirect_reference; - guint32 encoding; + guint32 encoding; + /* + 0 : single-ASN1-type, + 1 : octet-aligned, + 2 : arbitrary + */ tvbuff_t *single_asn1_type; tvbuff_t *octet_aligned; tvbuff_t *arbitrary; union { struct { int (*ber_callback)(gboolean imp_tag, tvbuff_t *tvb, int offset, struct _asn1_ctx_t* ,proto_tree *tree, int hf_index ); - tvbuff_t *direct_reference; - gint32 indirect_reference; - guint32 encoding; - tvbuff_t *single_asn1_type; - tvbuff_t *octet_aligned; - tvbuff_t *arbitrary; } ber; struct { int (*type_cb)(tvbuff_t*, int, struct _asn1_ctx_t*, proto_tree*, int); } per; - }; + } u; } external; + struct { + tvbuff_t *data_value_descriptor; + int hf_index; + guint32 identification; + /* + 0 : syntaxes, + 1 : syntax, + 2 : presentation-context-id, + 3 : context-negotiation, + 4 : transfer-syntax, + 5 : fixed + */ + gint32 presentation_context_id; + const char *abstract_syntax; + const char *transfer_syntax; + tvbuff_t *data_value; + union { + struct { + int (*ber_callback)(gboolean imp_tag, tvbuff_t *tvb, int offset, struct _asn1_ctx_t* ,proto_tree *tree, int hf_index ); + } ber; + struct { + int (*type_cb)(tvbuff_t*, int, struct _asn1_ctx_t*, proto_tree*, int); + } per; + } u; + } embedded_pdv; + struct _rose_ctx_t *rose_ctx; } asn1_ctx_t; +#define ROSE_CTX_SIGNATURE 0x524F5345 /* "ROSE" */ + +typedef struct _rose_ctx_t { + guint32 signature; + dissector_table_t arg_global_dissector_table; + dissector_table_t arg_local_dissector_table; + dissector_table_t res_global_dissector_table; + dissector_table_t res_local_dissector_table; + int apdu_depth; + guint32 code; + /* + 0 : local, + 1 : global + */ + gint32 local; + const char *global; + proto_item *code_item; + void *private_data; +} rose_ctx_t; + extern void asn1_ctx_init(asn1_ctx_t *actx, asn1_enc_e encoding, gboolean aligned, packet_info *pinfo); extern gboolean asn1_ctx_check_signature(asn1_ctx_t *actx); extern void asn1_ctx_clean_external(asn1_ctx_t *actx); diff --git a/epan/dissectors/packet-ber.c b/epan/dissectors/packet-ber.c index fb6c941f11..9e6091f106 100644 --- a/epan/dissectors/packet-ber.c +++ b/epan/dissectors/packet-ber.c @@ -3845,7 +3845,7 @@ dissect_ber_ObjectDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int o static int dissect_ber_T_single_ASN1_type(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { - if(!actx->external.ber.ber_callback){ + if(!actx->external.u.ber.ber_callback){ offset=call_ber_oid_callback(actx->external.direct_reference, tvb, offset, actx->pinfo, tree); }else{ /* FIX ME */ @@ -3905,7 +3905,7 @@ dissect_ber_external_U(gboolean implicit_tag, tvbuff_t *tvb, int offset, asn1_ct int dissect_ber_external_type(gboolean implicit_tag, proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ctx_t *actx, gint hf_id, ber_callback func){ - actx->external.ber.ber_callback = func; + actx->external.u.ber.ber_callback = func; offset = dissect_ber_tagged_type(implicit_tag, actx, tree, tvb, offset, hf_id, BER_CLASS_UNI, BER_UNI_TAG_EXTERNAL, TRUE, dissect_ber_external_U); diff --git a/epan/dissectors/packet-per.c b/epan/dissectors/packet-per.c index b34e2ec880..6ea3f10210 100644 --- a/epan/dissectors/packet-per.c +++ b/epan/dissectors/packet-per.c @@ -79,13 +79,6 @@ static gint ett_per_sequence_of_item = -1; static gint ett_per_External = -1; static gint ett_per_External_encoding = -1; -typedef enum { - CB_ASN1_ENC, - CB_DISSECTOR, - CB_NEW_DISSECTOR, - CB_DISSECTOR_HANDLE -} type_cb_variant; - /* #define DEBUG_ENTRY(x) \ printf("#%u %s tvb:0x%08x\n",actx->pinfo->fd->num,x,(int)tvb); @@ -151,7 +144,7 @@ static tvbuff_t *new_octet_aligned_subset(tvbuff_t *tvb, guint32 offset, guint32 /* 10.2 Open type fields --------------------------------------------------- */ static guint32 -dissect_per_open_type_internal(tvbuff_t *tvb, guint32 offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index, void* type_cb, type_cb_variant variant) +dissect_per_open_type_internal(tvbuff_t *tvb, guint32 offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index, void* type_cb, asn1_cb_variant variant) { guint32 type_length, end_offset; tvbuff_t *val_tvb = NULL; @@ -1942,7 +1935,7 @@ dissect_per_T_data_value_descriptor(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_ static int dissect_per_T_single_ASN1_type(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { - offset = dissect_per_open_type(tvb, offset, actx, tree, actx->external.hf_index, actx->external.per.type_cb); + offset = dissect_per_open_type(tvb, offset, actx, tree, actx->external.hf_index, actx->external.u.per.type_cb); return offset; } @@ -1954,8 +1947,8 @@ dissect_per_T_octet_aligned(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, NO_BOUND, NO_BOUND, &actx->external.octet_aligned); - if (actx->external.per.type_cb) { - actx->external.per.type_cb(actx->external.octet_aligned, 0, actx, tree, actx->external.hf_index); + if (actx->external.u.per.type_cb) { + actx->external.u.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.octet_aligned, 0, -1, "Unknown EXTERNAL Type"); } @@ -1969,8 +1962,8 @@ dissect_per_T_arbitrary(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index, NO_BOUND, NO_BOUND, FALSE, &actx->external.arbitrary); - if (actx->external.per.type_cb) { - actx->external.per.type_cb(actx->external.arbitrary, 0, actx, tree, actx->external.hf_index); + if (actx->external.u.per.type_cb) { + actx->external.u.per.type_cb(actx->external.arbitrary, 0, actx, tree, actx->external.hf_index); } else { actx->created_item = proto_tree_add_text(tree, actx->external.arbitrary, 0, -1, "Unknown EXTERNAL Type"); } @@ -2022,7 +2015,7 @@ guint32 dissect_per_external_type(tvbuff_t *tvb _U_, guint32 offset, asn1_ctx_t *actx, proto_tree *tree _U_, int hf_index _U_, per_type_fn type_cb) { asn1_ctx_clean_external(actx); - actx->external.per.type_cb = type_cb; + actx->external.u.per.type_cb = type_cb; offset = dissect_per_External(tvb, offset, actx, tree, hf_index); asn1_ctx_clean_external(actx); diff --git a/epan/dissectors/packet-q932-ros.c b/epan/dissectors/packet-q932-ros.c index 00ba963346..89dd2509c2 100644 --- a/epan/dissectors/packet-q932-ros.c +++ b/epan/dissectors/packet-q932-ros.c @@ -109,7 +109,7 @@ static gint ett_q932_ros_Components = -1; static dissector_handle_t data_handle = NULL; /* Gloabl variables */ -static rose_context *rose_ctx; +static rose_ctx_t *rose_ctx; static gint32 code_choice; static guint32 code_local; @@ -705,7 +705,7 @@ static int dissect_ROS_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree #line 69 "packet-q932-ros-template.c" /*--- dissect_rose_apdu -----------------------------------------------------*/ -int dissect_rose_apdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, rose_context *rctx) { +int dissect_rose_apdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, rose_ctx_t *rctx) { if (rctx) rose_ctx = rctx; return dissect_ROS_PDU(tvb, pinfo, tree); diff --git a/epan/dissectors/packet-q932-ros.h b/epan/dissectors/packet-q932-ros.h index 7a1f6df1b7..00651820b5 100644 --- a/epan/dissectors/packet-q932-ros.h +++ b/epan/dissectors/packet-q932-ros.h @@ -34,17 +34,9 @@ #ifndef PACKET_ROSE_H #define PACKET_ROSE_H -#include "epan/packet.h" +#include "epan/asn1.h" -typedef struct _rose_context { - int apdu_depth; - dissector_table_t arg_global_dissector_table; - dissector_table_t arg_local_dissector_table; - dissector_table_t res_global_dissector_table; - dissector_table_t res_local_dissector_table; -} rose_context; - -int dissect_rose_apdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, rose_context *rctx); +int dissect_rose_apdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, rose_ctx_t *rctx); #endif /* PACKET_ROSE_H */ diff --git a/epan/dissectors/packet-q932.c b/epan/dissectors/packet-q932.c index c313625c7c..5bf558ad56 100644 --- a/epan/dissectors/packet-q932.c +++ b/epan/dissectors/packet-q932.c @@ -126,7 +126,7 @@ static gint ett_q932_NetworkFacilityExtension_U = -1; /* Preferences */ /* ROSE context */ -static rose_context q932_rose_ctx; +static rose_ctx_t q932_rose_ctx; /* Subdissectors */ static dissector_handle_t data_handle = NULL; |