aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomas Kukosa <tomas.kukosa@siemens.com>2007-07-13 11:25:53 +0000
committerTomas Kukosa <tomas.kukosa@siemens.com>2007-07-13 11:25:53 +0000
commit6659588f60dfff4b58c23f2b27bf1309c3baf2bb (patch)
tree1a3309269d9ab4681859e99d1c680fdf26150203
parentb989e08afd3412df954db6f1ba9a3a19f9762780 (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.c4
-rw-r--r--asn1/q932/packet-q932-ros-template.h12
-rw-r--r--asn1/q932/packet-q932-template.c2
-rw-r--r--epan/asn1.h68
-rw-r--r--epan/dissectors/packet-ber.c4
-rw-r--r--epan/dissectors/packet-per.c21
-rw-r--r--epan/dissectors/packet-q932-ros.c4
-rw-r--r--epan/dissectors/packet-q932-ros.h12
-rw-r--r--epan/dissectors/packet-q932.c2
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;