summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asn1/gsmmap/GSMMAP.asn6
-rw-r--r--asn1/gsmmap/gsm_map-exp.cnf2
-rw-r--r--asn1/gsmmap/packet-gsm_map-template.h1
-rw-r--r--asn1/tcap/packet-tcap-template.c138
-rw-r--r--asn1/tcap/tcap.asn19
-rw-r--r--asn1/tcap/tcap.cnf5
-rw-r--r--epan/dissectors/packet-tcap.c155
7 files changed, 168 insertions, 158 deletions
diff --git a/asn1/gsmmap/GSMMAP.asn b/asn1/gsmmap/GSMMAP.asn
index 7dc8110dc7..606a6a0438 100644
--- a/asn1/gsmmap/GSMMAP.asn
+++ b/asn1/gsmmap/GSMMAP.asn
@@ -2,7 +2,7 @@
--SIEMENS ASN.1 Compiler R5.70 (Production_5.70)
-- Date: 2003-09-04 Time: 14:14:00
-- Updated to version 3GPP TS 29.002 V7.5.0 (2006-09) Release 7
--- $Id:$
+-- $Id$
MAP-Protocol{ 0 identified-organization (4) etsi (0) mobileDomain (0) gsm-Network (1) modules (3) map-Protocol (4) version5 (5) }
@@ -20,7 +20,9 @@ Component ::= CHOICE {
invoke [1] IMPLICIT Invoke,
returnResultLast [2] IMPLICIT ReturnResult,
returnError [3] IMPLICIT ReturnError,
- reject [4] IMPLICIT Reject
+ reject [4] IMPLICIT Reject,
+-- TCAP adds returnResultNotLast to allow for the segmentation of a result.
+ returnResultNotLast [7] IMPLICIT ReturnResult
}
Invoke ::= SEQUENCE {
diff --git a/asn1/gsmmap/gsm_map-exp.cnf b/asn1/gsmmap/gsm_map-exp.cnf
index fd51c09fd7..8659c9e92b 100644
--- a/asn1/gsmmap/gsm_map-exp.cnf
+++ b/asn1/gsmmap/gsm_map-exp.cnf
@@ -1,6 +1,6 @@
# Do not modify this file.
# It is created automatically by the ASN.1 to Wireshark dissector compiler
-# ./gsm_map-exp.cnf
+# .\gsm_map-exp.cnf
# ../../tools/asn2wrs.py -b -e -p gsm_map -c gsmmap.cnf -s packet-gsm_map-template GSMMAP.asn
#.MODULE
diff --git a/asn1/gsmmap/packet-gsm_map-template.h b/asn1/gsmmap/packet-gsm_map-template.h
index bd095fa92c..be32326055 100644
--- a/asn1/gsmmap/packet-gsm_map-template.h
+++ b/asn1/gsmmap/packet-gsm_map-template.h
@@ -26,6 +26,7 @@
#ifndef PACKET_GSM_MAP_H
#define PACKET_GSM_MAP_H
+#include "packet-ber.h"
/* Defines for the GSM MAP taps */
#define GSM_MAP_MAX_NUM_OPR_CODES 256
diff --git a/asn1/tcap/packet-tcap-template.c b/asn1/tcap/packet-tcap-template.c
index e6e72b3bb2..e3829e73d5 100644
--- a/asn1/tcap/packet-tcap-template.c
+++ b/asn1/tcap/packet-tcap-template.c
@@ -514,56 +514,56 @@ dissect_tcap_TheComponent(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,
* Handle The TCAP Service Response Time
*/
if ( gtcap_HandleSRT ) {
- if (!tcap_subdissector_used) {
- /* Create TCAP context and tree for display */
- if (gtcap_DisplaySRT && tree) {
- stat_item = proto_tree_add_text(tcap_stat_tree, tvb, offset, -1, "Stat");
- PROTO_ITEM_SET_GENERATED(stat_item);
- stat_tree = proto_item_add_subtree(stat_item, ett_tcap_stat);
- }
- p_tcap_context=tcapsrt_call_matching(tvb, pinfo, stat_tree, gp_tcapsrt_info);
- tcap_subdissector_used=TRUE;
- gp_tcap_context=p_tcap_context;
- tcap_private.context=p_tcap_context;
- } else {
- /* Take the last TCAP context */
- p_tcap_context = gp_tcap_context;
- tcap_private.context=p_tcap_context;
- }
+ if (!tcap_subdissector_used) {
+ /* Create TCAP context and tree for display */
+ if (gtcap_DisplaySRT && tree) {
+ stat_item = proto_tree_add_text(tcap_stat_tree, tvb, offset, -1, "Stat");
+ PROTO_ITEM_SET_GENERATED(stat_item);
+ stat_tree = proto_item_add_subtree(stat_item, ett_tcap_stat);
+ }
+ p_tcap_context=tcapsrt_call_matching(tvb, pinfo, stat_tree, gp_tcapsrt_info);
+ tcap_subdissector_used=TRUE;
+ gp_tcap_context=p_tcap_context;
+ tcap_private.context=p_tcap_context;
+ }else{
+ /* Take the last TCAP context */
+ p_tcap_context = gp_tcap_context;
+ tcap_private.context=p_tcap_context;
+ }
}
-
if (p_tcap_context) {
- if (cur_oid) {
- if (p_tcap_context->oid_present) {
- /* We have already an Application Context, check if we have
- to fallback to a lower version */
- if ( strncmp(p_tcap_context->oid,cur_oid, LENGTH_OID)!=0) {
- /* ACN, changed, Fallback to lower version */
- /* and update the subdissector (purely formal) */
- strncpy(p_tcap_context->oid,cur_oid, LENGTH_OID);
- if ( (subdissector_handle
- = dissector_get_string_handle(ber_oid_dissector_table, cur_oid)) ) {
- p_tcap_context->subdissector_handle=subdissector_handle;
- }
- }
- } else {
- /* We do not have the OID in the TCAP context, so store it */
- strncpy(p_tcap_context->oid,cur_oid, LENGTH_OID);
- if ( (subdissector_handle
- = dissector_get_string_handle(ber_oid_dissector_table, cur_oid)) ) {
- p_tcap_context->subdissector_handle=subdissector_handle;
- p_tcap_context->oid_present=TRUE;
- }
- } /* context OID */
- } else {
- /* Copy the OID from the TCAP context to the current oid */
- if (p_tcap_context->oid_present) {
- tcap_private.oid= (void*) p_tcap_context->oid;
- tcap_private.acv=TRUE;
- }
- } /* no OID */
+ if (cur_oid) {
+ if (p_tcap_context->oid_present) {
+ /* We have already an Application Context, check if we have
+ to fallback to a lower version */
+ if ( strncmp(p_tcap_context->oid,cur_oid, LENGTH_OID)!=0) {
+ /* ACN, changed, Fallback to lower version
+ * and update the subdissector (purely formal)
+ */
+ strncpy(p_tcap_context->oid,cur_oid, LENGTH_OID);
+ if ( (subdissector_handle = dissector_get_string_handle(ber_oid_dissector_table, cur_oid)) ) {
+ p_tcap_context->subdissector_handle=subdissector_handle;
+ }
+ }
+ } else {
+ /* We do not have the OID in the TCAP context, so store it */
+ strncpy(p_tcap_context->oid,cur_oid, LENGTH_OID);
+ if ( (subdissector_handle
+ = dissector_get_string_handle(ber_oid_dissector_table, cur_oid)) ) {
+ p_tcap_context->subdissector_handle=subdissector_handle;
+ p_tcap_context->oid_present=TRUE;
+ }
+ } /* context OID */
+ } else {
+ /* Copy the OID from the TCAP context to the current oid */
+ if (p_tcap_context->oid_present) {
+ tcap_private.oid= (void*) p_tcap_context->oid;
+ tcap_private.acv=TRUE;
+ }
+ } /* no OID */
} /* no TCAP context */
+
if ( p_tcap_context
&& p_tcap_context->oid_present) {
/* Take the subdissector from the context */
@@ -588,32 +588,32 @@ dissect_tcap_TheComponent(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,
/* Search if we can find the sub protocol according to the A.C.N */
if ( (subdissector_handle
= dissector_get_string_handle(ber_oid_dissector_table, cur_oid)) ) {
- /* found */
- is_subdissector=TRUE;
+ /* found */
+ is_subdissector=TRUE;
} else {
- /* Search if we can found the sub protocol according to the SSN table */
- if ( (subdissector_handle
- = get_itu_tcap_subdissector(pinfo->match_port))) {
- /* Found according to SSN */
- is_subdissector=TRUE;
+ /* Search if we can found the sub protocol according to the SSN table */
+ if ( (subdissector_handle
+ = get_itu_tcap_subdissector(pinfo->match_port))) {
+ /* Found according to SSN */
+ is_subdissector=TRUE;
+ } else {
+ /* Nothing found, take the Data handler */
+ subdissector_handle = data_handle;
+ is_subdissector=TRUE;
+ } /* SSN */
+ } /* ACN */
} else {
- /* Nothing found, take the Data handler */
- subdissector_handle = data_handle;
- is_subdissector=TRUE;
- } /* SSN */
- } /* ACN */
- } else {
- /* There is no A.C.N for this transaction, so search in the SSN table */
- if ( (subdissector_handle = get_itu_tcap_subdissector(pinfo->match_port))) {
- /* Found according to SSN */
- is_subdissector=TRUE;
- } else {
- subdissector_handle = data_handle;
- is_subdissector=TRUE;
- }
- } /* OID */
+ /* There is no A.C.N for this transaction, so search in the SSN table */
+ if ( (subdissector_handle = get_itu_tcap_subdissector(pinfo->match_port))) {
+ /* Found according to SSN */
+ is_subdissector=TRUE;
+ } else {
+ subdissector_handle = data_handle;
+ is_subdissector=TRUE;
+ }
+ } /* OID */
} else {
- /* We have it already */
+ /* We have it already */
}
/* Call the sub dissector if present, and not already called */
diff --git a/asn1/tcap/tcap.asn b/asn1/tcap/tcap.asn
index 10ce17b15d..1afb819d1c 100644
--- a/asn1/tcap/tcap.asn
+++ b/asn1/tcap/tcap.asn
@@ -35,8 +35,11 @@ UserInformation ::= [UNIVERSAL 8] IMPLICIT SEQUENCE
ExternUserInfo ::= OCTET STRING
Dialog1 ::= OCTET STRING
+
UserInfoOID ::= OBJECT IDENTIFIER
+
Applicationcontext ::= OBJECT IDENTIFIER
+
AARQ-apdu ::= [APPLICATION 0] IMPLICIT SEQUENCE {
protocol-versionrq [0] IMPLICIT BIT STRING { version1 (0) }
DEFAULT { version1 },
@@ -462,18 +465,18 @@ ComponentSequence ::= [ PRIVATE 8 ] IMPLICIT SEQUENCE OF ComponentPDU
ComponentPDU ::=
CHOICE {
- invokeLastansi [ PRIVATE 9 ] IMPLICIT InvokePDU ,
- returnResultLastansi [ PRIVATE 10 ] IMPLICIT ReturnResultPDU,
- returnErroransi [ PRIVATE 11 ] IMPLICIT ReturnErrorPDU ,
- rejectansi [ PRIVATE 12 ] IMPLICIT RejectPDU ,
- invokeNotLastansi [ PRIVATE 13 ] IMPLICIT InvokePDU ,
+ invokeLastansi [ PRIVATE 9 ] IMPLICIT InvokePDU ,
+ returnResultLastansi [ PRIVATE 10 ] IMPLICIT ReturnResultPDU,
+ returnErroransi [ PRIVATE 11 ] IMPLICIT ReturnErrorPDU ,
+ rejectansi [ PRIVATE 12 ] IMPLICIT RejectPDU ,
+ invokeNotLastansi [ PRIVATE 13 ] IMPLICIT InvokePDU ,
returnResultNotLastansi [ PRIVATE 14 ] IMPLICIT ReturnResultPDU
}
InvokePDU ::= SEQUENCE {
- componentIDs [ PRIVATE 15 ] IMPLICIT OCTET STRING (SIZE(0..2)) OPTIONAL ,
- operationCode OperationCode OPTIONAL,
- parameterinv ANSIparamch
+ componentIDs [ PRIVATE 15 ] IMPLICIT OCTET STRING (SIZE(0..2)) OPTIONAL ,
+ operationCode OperationCode OPTIONAL,
+ parameterinv ANSIparamch
}
ANSIParameters ::= ANY
diff --git a/asn1/tcap/tcap.cnf b/asn1/tcap/tcap.cnf
index a18b9e04b0..b8d717ab56 100644
--- a/asn1/tcap/tcap.cnf
+++ b/asn1/tcap/tcap.cnf
@@ -231,8 +231,9 @@ gp_tcapsrt_info->ope=TC_BEGIN;
if (check_col(pinfo->cinfo, COL_INFO))
col_append_fstr(pinfo->cinfo, COL_INFO, " Begin ");
- offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
- Begin_sequence, hf_index, ett_tcap_Begin);
+
+%(DEFAULT_BODY)s
+
#.FN_BODY End
gp_tcapsrt_info->ope=TC_END;
diff --git a/epan/dissectors/packet-tcap.c b/epan/dissectors/packet-tcap.c
index 5bb58d505d..6b5de322a5 100644
--- a/epan/dissectors/packet-tcap.c
+++ b/epan/dissectors/packet-tcap.c
@@ -1428,8 +1428,11 @@ gp_tcapsrt_info->ope=TC_BEGIN;
if (check_col(pinfo->cinfo, COL_INFO))
col_append_fstr(pinfo->cinfo, COL_INFO, " Begin ");
+
offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
- Begin_sequence, hf_index, ett_tcap_Begin);
+ Begin_sequence, hf_index, ett_tcap_Begin);
+
+
return offset;
@@ -1495,7 +1498,7 @@ static const ber_sequence_t End_sequence[] = {
static int
dissect_tcap_End(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 237 "tcap.cnf"
+#line 238 "tcap.cnf"
gp_tcapsrt_info->ope=TC_END;
if (check_col(pinfo->cinfo, COL_INFO))
@@ -1524,7 +1527,7 @@ static const ber_sequence_t Continue_sequence[] = {
static int
dissect_tcap_Continue(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 245 "tcap.cnf"
+#line 246 "tcap.cnf"
gp_tcapsrt_info->ope=TC_CONT;
if (check_col(pinfo->cinfo, COL_INFO))
@@ -1598,7 +1601,7 @@ static const ber_sequence_t Abort_sequence[] = {
static int
dissect_tcap_Abort(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 253 "tcap.cnf"
+#line 254 "tcap.cnf"
gp_tcapsrt_info->ope=TC_ABORT;
if (check_col(pinfo->cinfo, COL_INFO))
@@ -1620,7 +1623,7 @@ static int dissect_abort_impl(packet_info *pinfo _U_, proto_tree *tree _U_, tvbu
static int
dissect_tcap_TransactionID(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 285 "tcap.cnf"
+#line 286 "tcap.cnf"
tvbuff_t *next_tvb;
@@ -2168,7 +2171,7 @@ static const ber_sequence_t TransactionPDU_sequence[] = {
static int
dissect_tcap_TransactionPDU(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 267 "tcap.cnf"
+#line 268 "tcap.cnf"
if ((hf_index == hf_tcap_ansiqueryWithPerm)&&(check_col(pinfo->cinfo, COL_INFO)))
col_append_fstr(pinfo->cinfo, COL_INFO, " QueryWithPerm");
@@ -2270,7 +2273,7 @@ static const ber_sequence_t AbortPDU_sequence[] = {
static int
dissect_tcap_AbortPDU(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 261 "tcap.cnf"
+#line 262 "tcap.cnf"
if (check_col(pinfo->cinfo, COL_INFO))
col_append_fstr(pinfo->cinfo, COL_INFO, " Abort ");
@@ -3300,56 +3303,56 @@ dissect_tcap_TheComponent(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,
* Handle The TCAP Service Response Time
*/
if ( gtcap_HandleSRT ) {
- if (!tcap_subdissector_used) {
- /* Create TCAP context and tree for display */
- if (gtcap_DisplaySRT && tree) {
- stat_item = proto_tree_add_text(tcap_stat_tree, tvb, offset, -1, "Stat");
- PROTO_ITEM_SET_GENERATED(stat_item);
- stat_tree = proto_item_add_subtree(stat_item, ett_tcap_stat);
- }
- p_tcap_context=tcapsrt_call_matching(tvb, pinfo, stat_tree, gp_tcapsrt_info);
- tcap_subdissector_used=TRUE;
- gp_tcap_context=p_tcap_context;
- tcap_private.context=p_tcap_context;
- } else {
- /* Take the last TCAP context */
- p_tcap_context = gp_tcap_context;
- tcap_private.context=p_tcap_context;
- }
+ if (!tcap_subdissector_used) {
+ /* Create TCAP context and tree for display */
+ if (gtcap_DisplaySRT && tree) {
+ stat_item = proto_tree_add_text(tcap_stat_tree, tvb, offset, -1, "Stat");
+ PROTO_ITEM_SET_GENERATED(stat_item);
+ stat_tree = proto_item_add_subtree(stat_item, ett_tcap_stat);
+ }
+ p_tcap_context=tcapsrt_call_matching(tvb, pinfo, stat_tree, gp_tcapsrt_info);
+ tcap_subdissector_used=TRUE;
+ gp_tcap_context=p_tcap_context;
+ tcap_private.context=p_tcap_context;
+ }else{
+ /* Take the last TCAP context */
+ p_tcap_context = gp_tcap_context;
+ tcap_private.context=p_tcap_context;
+ }
}
-
if (p_tcap_context) {
- if (cur_oid) {
- if (p_tcap_context->oid_present) {
- /* We have already an Application Context, check if we have
- to fallback to a lower version */
- if ( strncmp(p_tcap_context->oid,cur_oid, LENGTH_OID)!=0) {
- /* ACN, changed, Fallback to lower version */
- /* and update the subdissector (purely formal) */
- strncpy(p_tcap_context->oid,cur_oid, LENGTH_OID);
- if ( (subdissector_handle
- = dissector_get_string_handle(ber_oid_dissector_table, cur_oid)) ) {
- p_tcap_context->subdissector_handle=subdissector_handle;
- }
- }
- } else {
- /* We do not have the OID in the TCAP context, so store it */
- strncpy(p_tcap_context->oid,cur_oid, LENGTH_OID);
- if ( (subdissector_handle
- = dissector_get_string_handle(ber_oid_dissector_table, cur_oid)) ) {
- p_tcap_context->subdissector_handle=subdissector_handle;
- p_tcap_context->oid_present=TRUE;
- }
- } /* context OID */
- } else {
- /* Copy the OID from the TCAP context to the current oid */
- if (p_tcap_context->oid_present) {
- tcap_private.oid= (void*) p_tcap_context->oid;
- tcap_private.acv=TRUE;
- }
- } /* no OID */
+ if (cur_oid) {
+ if (p_tcap_context->oid_present) {
+ /* We have already an Application Context, check if we have
+ to fallback to a lower version */
+ if ( strncmp(p_tcap_context->oid,cur_oid, LENGTH_OID)!=0) {
+ /* ACN, changed, Fallback to lower version
+ * and update the subdissector (purely formal)
+ */
+ strncpy(p_tcap_context->oid,cur_oid, LENGTH_OID);
+ if ( (subdissector_handle = dissector_get_string_handle(ber_oid_dissector_table, cur_oid)) ) {
+ p_tcap_context->subdissector_handle=subdissector_handle;
+ }
+ }
+ } else {
+ /* We do not have the OID in the TCAP context, so store it */
+ strncpy(p_tcap_context->oid,cur_oid, LENGTH_OID);
+ if ( (subdissector_handle
+ = dissector_get_string_handle(ber_oid_dissector_table, cur_oid)) ) {
+ p_tcap_context->subdissector_handle=subdissector_handle;
+ p_tcap_context->oid_present=TRUE;
+ }
+ } /* context OID */
+ } else {
+ /* Copy the OID from the TCAP context to the current oid */
+ if (p_tcap_context->oid_present) {
+ tcap_private.oid= (void*) p_tcap_context->oid;
+ tcap_private.acv=TRUE;
+ }
+ } /* no OID */
} /* no TCAP context */
+
if ( p_tcap_context
&& p_tcap_context->oid_present) {
/* Take the subdissector from the context */
@@ -3374,32 +3377,32 @@ dissect_tcap_TheComponent(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,
/* Search if we can find the sub protocol according to the A.C.N */
if ( (subdissector_handle
= dissector_get_string_handle(ber_oid_dissector_table, cur_oid)) ) {
- /* found */
- is_subdissector=TRUE;
+ /* found */
+ is_subdissector=TRUE;
} else {
- /* Search if we can found the sub protocol according to the SSN table */
- if ( (subdissector_handle
- = get_itu_tcap_subdissector(pinfo->match_port))) {
- /* Found according to SSN */
- is_subdissector=TRUE;
+ /* Search if we can found the sub protocol according to the SSN table */
+ if ( (subdissector_handle
+ = get_itu_tcap_subdissector(pinfo->match_port))) {
+ /* Found according to SSN */
+ is_subdissector=TRUE;
+ } else {
+ /* Nothing found, take the Data handler */
+ subdissector_handle = data_handle;
+ is_subdissector=TRUE;
+ } /* SSN */
+ } /* ACN */
} else {
- /* Nothing found, take the Data handler */
- subdissector_handle = data_handle;
- is_subdissector=TRUE;
- } /* SSN */
- } /* ACN */
- } else {
- /* There is no A.C.N for this transaction, so search in the SSN table */
- if ( (subdissector_handle = get_itu_tcap_subdissector(pinfo->match_port))) {
- /* Found according to SSN */
- is_subdissector=TRUE;
- } else {
- subdissector_handle = data_handle;
- is_subdissector=TRUE;
- }
- } /* OID */
+ /* There is no A.C.N for this transaction, so search in the SSN table */
+ if ( (subdissector_handle = get_itu_tcap_subdissector(pinfo->match_port))) {
+ /* Found according to SSN */
+ is_subdissector=TRUE;
+ } else {
+ subdissector_handle = data_handle;
+ is_subdissector=TRUE;
+ }
+ } /* OID */
} else {
- /* We have it already */
+ /* We have it already */
}
/* Call the sub dissector if present, and not already called */