aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--asn1/tcap/packet-tcap-template.c39
-rw-r--r--epan/dissectors/Makefile.common2
-rw-r--r--epan/dissectors/packet-tcap.c49
-rw-r--r--epan/dissectors/packet-tcap.h2
4 files changed, 86 insertions, 6 deletions
diff --git a/asn1/tcap/packet-tcap-template.c b/asn1/tcap/packet-tcap-template.c
index 960ce6c747..025d233138 100644
--- a/asn1/tcap/packet-tcap-template.c
+++ b/asn1/tcap/packet-tcap-template.c
@@ -97,6 +97,7 @@ static proto_tree * tcap_top_tree=NULL;
static proto_tree * tcap_stat_tree=NULL;
static dissector_handle_t data_handle;
+static dissector_handle_t ansi_tcap_handle;
static dissector_table_t sccp_ssn_table;
@@ -165,6 +166,42 @@ dissect_tcap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
struct tcaphash_context_t * p_tcap_context;
dissector_handle_t subdissector_handle;
asn1_ctx_t asn1_ctx;
+ gint8 class;
+ gboolean pc;
+ gint tag;
+
+ /* Check if ANSI TCAP and call the ANSI TCAP dissector if that's the case
+ * PackageType ::= CHOICE { unidirectional [PRIVATE 1] IMPLICIT UniTransactionPDU,
+ * queryWithPerm [PRIVATE 2] IMPLICIT TransactionPDU,
+ * queryWithoutPerm [PRIVATE 3] IMPLICIT TransactionPDU,
+ * response [PRIVATE 4] IMPLICIT TransactionPDU,
+ * conversationWithPerm [PRIVATE 5] IMPLICIT TransactionPDU,
+ * conversationWithoutPerm [PRIVATE 6] IMPLICIT TransactionPDU,
+ * abort [PRIVATE 22] IMPLICIT Abort
+ * }
+ *
+ *
+ */
+ get_ber_identifier(tvb, 0, &class, &pc, &tag);
+#if 0
+ if(class == BER_CLASS_PRI){
+ switch(tag){
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ case 22:
+ call_dissector(ansi_tcap_handle, tvb, pinfo, parent_tree);
+ return;
+ break;
+ default:
+ return;
+ }
+ }
+#endif
+ /* ITU TCAP */
asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
tcap_top_tree = parent_tree;
@@ -227,6 +264,8 @@ proto_reg_handoff_tcap(void)
}
data_handle = find_dissector("data");
+ ansi_tcap_handle = find_dissector("ansi_tcap");
+
#include "packet-tcap-dis-tab.c"
}
diff --git a/epan/dissectors/Makefile.common b/epan/dissectors/Makefile.common
index 299b927a64..3133de7d2d 100644
--- a/epan/dissectors/Makefile.common
+++ b/epan/dissectors/Makefile.common
@@ -81,6 +81,7 @@ ASN_DISSECTOR_SRC = \
packet-acp133.c \
packet-acse.c \
packet-ansi_map.c \
+ packet-ansi_tcap.c \
packet-camel.c \
packet-cdt.c \
packet-cmip.c \
@@ -771,6 +772,7 @@ DISSECTOR_INCLUDES = \
packet-alcap.h \
packet-ansi_a.h \
packet-ansi_map.h \
+ packet-ansi_tcap.h \
packet-ap1394.h \
packet-arcnet.h \
packet-arp.h \
diff --git a/epan/dissectors/packet-tcap.c b/epan/dissectors/packet-tcap.c
index 8978098cd6..ddd751fffa 100644
--- a/epan/dissectors/packet-tcap.c
+++ b/epan/dissectors/packet-tcap.c
@@ -1,6 +1,6 @@
/* Do not modify this file. */
/* It is created automatically by the ASN.1 to Wireshark dissector compiler */
-/* ./packet-tcap.c */
+/* .\packet-tcap.c */
/* ../../tools/asn2wrs.py -b -e -p tcap -c tcap.cnf -s packet-tcap-template tcap.asn */
/* Input file: packet-tcap-template.c */
@@ -290,6 +290,7 @@ static proto_tree * tcap_top_tree=NULL;
static proto_tree * tcap_stat_tree=NULL;
static dissector_handle_t data_handle;
+static dissector_handle_t ansi_tcap_handle;
static dissector_table_t sccp_ssn_table;
@@ -2478,7 +2479,7 @@ static void dissect_UniDialoguePDU_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_
/*--- End of included file: packet-tcap-fn.c ---*/
-#line 147 "packet-tcap-template.c"
+#line 148 "packet-tcap-template.c"
@@ -2500,6 +2501,42 @@ dissect_tcap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
struct tcaphash_context_t * p_tcap_context;
dissector_handle_t subdissector_handle;
asn1_ctx_t asn1_ctx;
+ gint8 class;
+ gboolean pc;
+ gint tag;
+
+ /* Check if ANSI TCAP and call the ANSI TCAP dissector if that's the case
+ * PackageType ::= CHOICE { unidirectional [PRIVATE 1] IMPLICIT UniTransactionPDU,
+ * queryWithPerm [PRIVATE 2] IMPLICIT TransactionPDU,
+ * queryWithoutPerm [PRIVATE 3] IMPLICIT TransactionPDU,
+ * response [PRIVATE 4] IMPLICIT TransactionPDU,
+ * conversationWithPerm [PRIVATE 5] IMPLICIT TransactionPDU,
+ * conversationWithoutPerm [PRIVATE 6] IMPLICIT TransactionPDU,
+ * abort [PRIVATE 22] IMPLICIT Abort
+ * }
+ *
+ *
+ */
+ get_ber_identifier(tvb, 0, &class, &pc, &tag);
+#if 0
+ if(class == BER_CLASS_PRI){
+ switch(tag){
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ case 22:
+ call_dissector(ansi_tcap_handle, tvb, pinfo, parent_tree);
+ return;
+ break;
+ default:
+ return;
+ }
+ }
+#endif
+ /* ITU TCAP */
asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
tcap_top_tree = parent_tree;
@@ -2562,6 +2599,8 @@ proto_reg_handoff_tcap(void)
}
data_handle = find_dissector("data");
+ ansi_tcap_handle = find_dissector("ansi_tcap");
+
/*--- Included file: packet-tcap-dis-tab.c ---*/
#line 1 "packet-tcap-dis-tab.c"
@@ -2570,7 +2609,7 @@ proto_reg_handoff_tcap(void)
/*--- End of included file: packet-tcap-dis-tab.c ---*/
-#line 231 "packet-tcap-template.c"
+#line 270 "packet-tcap-template.c"
}
static void init_tcap(void);
@@ -3133,7 +3172,7 @@ proto_register_tcap(void)
"", HFILL }},
/*--- End of included file: packet-tcap-hfarr.c ---*/
-#line 293 "packet-tcap-template.c"
+#line 332 "packet-tcap-template.c"
};
/* Setup protocol subtree array */
@@ -3198,7 +3237,7 @@ proto_register_tcap(void)
&ett_tcap_ErrorCode,
/*--- End of included file: packet-tcap-ettarr.c ---*/
-#line 303 "packet-tcap-template.c"
+#line 342 "packet-tcap-template.c"
};
/*static enum_val_t tcap_options[] = {
diff --git a/epan/dissectors/packet-tcap.h b/epan/dissectors/packet-tcap.h
index a4dda65705..8927490b18 100644
--- a/epan/dissectors/packet-tcap.h
+++ b/epan/dissectors/packet-tcap.h
@@ -1,6 +1,6 @@
/* Do not modify this file. */
/* It is created automatically by the ASN.1 to Wireshark dissector compiler */
-/* ./packet-tcap.h */
+/* .\packet-tcap.h */
/* ../../tools/asn2wrs.py -b -e -p tcap -c tcap.cnf -s packet-tcap-template tcap.asn */
/* Input file: packet-tcap-template.h */