diff options
-rw-r--r-- | asn1/gsmmap/GSMMAP.asn | 6 | ||||
-rw-r--r-- | asn1/gsmmap/gsm_map-exp.cnf | 2 | ||||
-rw-r--r-- | asn1/gsmmap/packet-gsm_map-template.h | 1 | ||||
-rw-r--r-- | asn1/tcap/packet-tcap-template.c | 138 | ||||
-rw-r--r-- | asn1/tcap/tcap.asn | 19 | ||||
-rw-r--r-- | asn1/tcap/tcap.cnf | 5 | ||||
-rw-r--r-- | epan/dissectors/packet-tcap.c | 155 |
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 */ |