2005-06-07 05:49:06 +00:00
|
|
|
/* Do not modify this file. */
|
2006-05-24 12:24:54 +00:00
|
|
|
/* It is created automatically by the ASN.1 to Wireshark dissector compiler */
|
2007-11-07 21:22:25 +00:00
|
|
|
/* packet-tcap.c */
|
2009-03-09 13:26:47 +00:00
|
|
|
/* ../../tools/asn2wrs.py -b -p tcap -c ./tcap.cnf -s ./packet-tcap-template -D . tcap.asn UnidialoguePDUs.asn DialoguePDUs.asn */
|
2005-06-07 05:49:06 +00:00
|
|
|
|
2007-11-07 21:22:25 +00:00
|
|
|
/* Input file: packet-tcap-template.c */
|
2005-06-07 05:49:06 +00:00
|
|
|
|
2011-05-13 08:12:27 +00:00
|
|
|
#line 1 "../../asn1/tcap/packet-tcap-template.c"
|
2005-06-07 05:49:06 +00:00
|
|
|
/* packet-tcap-template.c
|
|
|
|
* Routines for TCAP
|
|
|
|
* Copyright 2004 - 2005, Tim Endean <endeant@hotmail.com>
|
|
|
|
* Built from the gsm-map dissector Copyright 2004 - 2005, Anders Broman <anders.broman@ericsson.com>
|
2003-10-02 06:13:29 +00:00
|
|
|
*
|
2004-07-18 00:24:25 +00:00
|
|
|
* $Id$
|
2007-07-27 19:24:40 +00:00
|
|
|
*
|
2006-05-21 04:49:01 +00:00
|
|
|
* Wireshark - Network traffic analyzer
|
|
|
|
* By Gerald Combs <gerald@wireshark.org>
|
2003-10-02 06:13:29 +00:00
|
|
|
* Copyright 1998 Gerald Combs
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU General Public License
|
|
|
|
* as published by the Free Software Foundation; either version 2
|
|
|
|
* of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, write to the Free Software
|
2005-06-07 05:49:06 +00:00
|
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
* References: ETSI 300 374
|
2003-10-02 06:13:29 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
# include "config.h"
|
|
|
|
#endif
|
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
#include <glib.h>
|
|
|
|
#include <epan/packet.h>
|
|
|
|
#include <epan/prefs.h>
|
2007-08-25 01:14:24 +00:00
|
|
|
#include <epan/oids.h>
|
2007-05-13 20:58:29 +00:00
|
|
|
#include <epan/asn1.h>
|
2008-03-01 17:23:39 +00:00
|
|
|
#include <epan/strutil.h>
|
2005-06-07 05:49:06 +00:00
|
|
|
|
2003-10-02 06:13:29 +00:00
|
|
|
#include <string.h>
|
2005-06-07 05:49:06 +00:00
|
|
|
#include "packet-ber.h"
|
|
|
|
#include "packet-tcap.h"
|
2009-08-21 20:25:24 +00:00
|
|
|
#include <epan/tcap-persistentdata.h>
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
#define PNAME "Transaction Capabilities Application Part"
|
|
|
|
#define PSNAME "TCAP"
|
|
|
|
#define PFNAME "tcap"
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
/* Initialize the protocol and registered fields */
|
2009-10-11 16:24:29 +00:00
|
|
|
static int proto_tcap = -1;
|
2007-04-23 10:45:00 +00:00
|
|
|
static int hf_tcap_tag = -1;
|
|
|
|
static int hf_tcap_length = -1;
|
2005-06-07 05:49:06 +00:00
|
|
|
static int hf_tcap_data = -1;
|
2005-08-18 21:36:59 +00:00
|
|
|
static int hf_tcap_tid = -1;
|
2005-06-07 05:49:06 +00:00
|
|
|
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
int hf_tcapsrt_SessionId=-1;
|
|
|
|
int hf_tcapsrt_Duplicate=-1;
|
|
|
|
int hf_tcapsrt_BeginSession=-1;
|
|
|
|
int hf_tcapsrt_EndSession=-1;
|
|
|
|
int hf_tcapsrt_SessionTime=-1;
|
|
|
|
|
2005-12-17 16:55:45 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
/*--- Included file: packet-tcap-hf.c ---*/
|
2011-05-13 08:12:27 +00:00
|
|
|
#line 1 "../../asn1/tcap/packet-tcap-hf.c"
|
2007-04-21 20:53:35 +00:00
|
|
|
static int hf_tcap_UniDialoguePDU_PDU = -1; /* UniDialoguePDU */
|
2008-09-14 14:42:39 +00:00
|
|
|
static int hf_tcap_DialoguePDU_PDU = -1; /* DialoguePDU */
|
2005-06-07 05:49:06 +00:00
|
|
|
static int hf_tcap_oid = -1; /* OBJECT_IDENTIFIER */
|
|
|
|
static int hf_tcap_dialog = -1; /* Dialog1 */
|
|
|
|
static int hf_tcap_unidirectional = -1; /* Unidirectional */
|
|
|
|
static int hf_tcap_begin = -1; /* Begin */
|
|
|
|
static int hf_tcap_end = -1; /* End */
|
|
|
|
static int hf_tcap_continue = -1; /* Continue */
|
|
|
|
static int hf_tcap_abort = -1; /* Abort */
|
|
|
|
static int hf_tcap_dialoguePortion = -1; /* DialoguePortion */
|
|
|
|
static int hf_tcap_components = -1; /* ComponentPortion */
|
|
|
|
static int hf_tcap_otid = -1; /* OrigTransactionID */
|
|
|
|
static int hf_tcap_dtid = -1; /* DestTransactionID */
|
|
|
|
static int hf_tcap_reason = -1; /* Reason */
|
|
|
|
static int hf_tcap_p_abortCause = -1; /* P_AbortCause */
|
|
|
|
static int hf_tcap_u_abortCause = -1; /* DialoguePortion */
|
2007-11-07 21:22:25 +00:00
|
|
|
static int hf_tcap__untag_item = -1; /* Component */
|
2005-06-07 05:49:06 +00:00
|
|
|
static int hf_tcap_invoke = -1; /* Invoke */
|
|
|
|
static int hf_tcap_returnResultLast = -1; /* ReturnResult */
|
|
|
|
static int hf_tcap_returnError = -1; /* ReturnError */
|
|
|
|
static int hf_tcap_reject = -1; /* Reject */
|
|
|
|
static int hf_tcap_returnResultNotLast = -1; /* ReturnResult */
|
|
|
|
static int hf_tcap_invokeID = -1; /* InvokeIdType */
|
|
|
|
static int hf_tcap_linkedID = -1; /* InvokeIdType */
|
2005-06-07 20:29:23 +00:00
|
|
|
static int hf_tcap_opCode = -1; /* OPERATION */
|
2005-06-07 05:49:06 +00:00
|
|
|
static int hf_tcap_parameter = -1; /* Parameter */
|
|
|
|
static int hf_tcap_resultretres = -1; /* T_resultretres */
|
|
|
|
static int hf_tcap_errorCode = -1; /* ErrorCode */
|
|
|
|
static int hf_tcap_invokeIDRej = -1; /* T_invokeIDRej */
|
|
|
|
static int hf_tcap_derivable = -1; /* InvokeIdType */
|
|
|
|
static int hf_tcap_not_derivable = -1; /* NULL */
|
|
|
|
static int hf_tcap_problem = -1; /* T_problem */
|
|
|
|
static int hf_tcap_generalProblem = -1; /* GeneralProblem */
|
|
|
|
static int hf_tcap_invokeProblem = -1; /* InvokeProblem */
|
|
|
|
static int hf_tcap_returnResultProblem = -1; /* ReturnResultProblem */
|
|
|
|
static int hf_tcap_returnErrorProblem = -1; /* ReturnErrorProblem */
|
|
|
|
static int hf_tcap_localValue = -1; /* INTEGER */
|
|
|
|
static int hf_tcap_globalValue = -1; /* OBJECT_IDENTIFIER */
|
|
|
|
static int hf_tcap_nationaler = -1; /* INTEGER_M32768_32767 */
|
|
|
|
static int hf_tcap_privateer = -1; /* INTEGER */
|
2008-09-13 15:32:59 +00:00
|
|
|
static int hf_tcap_unidialoguePDU = -1; /* AUDT_apdu */
|
2008-09-14 14:42:39 +00:00
|
|
|
static int hf_tcap_audt_protocol_version = -1; /* AUDT_protocol_version */
|
2008-09-13 15:32:59 +00:00
|
|
|
static int hf_tcap_audt_application_context_name = -1; /* AUDT_application_context_name */
|
|
|
|
static int hf_tcap_audt_user_information = -1; /* AUDT_user_information */
|
|
|
|
static int hf_tcap_audt_user_information_item = -1; /* EXTERNAL */
|
2008-09-14 14:42:39 +00:00
|
|
|
static int hf_tcap_dialogueRequest = -1; /* AARQ_apdu */
|
|
|
|
static int hf_tcap_dialogueResponse = -1; /* AARE_apdu */
|
|
|
|
static int hf_tcap_dialogueAbort = -1; /* ABRT_apdu */
|
|
|
|
static int hf_tcap_aarq_protocol_version = -1; /* AARQ_protocol_version */
|
|
|
|
static int hf_tcap_aarq_application_context_name = -1; /* AARQ_application_context_name */
|
|
|
|
static int hf_tcap_aarq_user_information = -1; /* AARQ_user_information */
|
|
|
|
static int hf_tcap_aarq_user_information_item = -1; /* EXTERNAL */
|
|
|
|
static int hf_tcap_aare_protocol_version = -1; /* AARE_protocol_version */
|
|
|
|
static int hf_tcap_aare_application_context_name = -1; /* AARE_application_context_name */
|
|
|
|
static int hf_tcap_result = -1; /* Associate_result */
|
|
|
|
static int hf_tcap_result_source_diagnostic = -1; /* Associate_source_diagnostic */
|
|
|
|
static int hf_tcap_aare_user_information = -1; /* AARE_user_information */
|
|
|
|
static int hf_tcap_aare_user_information_item = -1; /* EXTERNAL */
|
|
|
|
static int hf_tcap_abort_source = -1; /* ABRT_source */
|
|
|
|
static int hf_tcap_abrt_user_information = -1; /* ABRT_user_information */
|
|
|
|
static int hf_tcap_abrt_user_information_item = -1; /* EXTERNAL */
|
|
|
|
static int hf_tcap_dialogue_service_user = -1; /* T_dialogue_service_user */
|
|
|
|
static int hf_tcap_dialogue_service_provider = -1; /* T_dialogue_service_provider */
|
2005-06-07 05:49:06 +00:00
|
|
|
/* named bits */
|
2008-09-14 14:42:39 +00:00
|
|
|
static int hf_tcap_AUDT_protocol_version_version1 = -1;
|
|
|
|
static int hf_tcap_AARQ_protocol_version_version1 = -1;
|
|
|
|
static int hf_tcap_AARE_protocol_version_version1 = -1;
|
2005-06-07 05:49:06 +00:00
|
|
|
|
|
|
|
/*--- End of included file: packet-tcap-hf.c ---*/
|
2011-05-13 08:12:27 +00:00
|
|
|
#line 62 "../../asn1/tcap/packet-tcap-template.c"
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
/* Initialize the subtree pointers */
|
|
|
|
static gint ett_tcap = -1;
|
|
|
|
static gint ett_param = -1;
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-08-18 21:36:59 +00:00
|
|
|
static gint ett_otid = -1;
|
|
|
|
static gint ett_dtid = -1;
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
gint ett_tcap_stat = -1;
|
2005-08-18 21:36:59 +00:00
|
|
|
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
static struct tcapsrt_info_t * gp_tcapsrt_info;
|
|
|
|
static gboolean tcap_subdissector_used=FALSE;
|
2007-04-03 19:08:00 +00:00
|
|
|
static dissector_handle_t requested_subdissector_handle = NULL;
|
|
|
|
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
static struct tcaphash_context_t * gp_tcap_context=NULL;
|
2005-08-18 21:36:59 +00:00
|
|
|
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
/*--- Included file: packet-tcap-ett.c ---*/
|
2011-05-13 08:12:27 +00:00
|
|
|
#line 1 "../../asn1/tcap/packet-tcap-ett.c"
|
2007-11-07 21:22:25 +00:00
|
|
|
static gint ett_tcap_ExternalPDU_U = -1;
|
2007-04-23 06:24:39 +00:00
|
|
|
static gint ett_tcap_TCMessage = -1;
|
2005-06-07 05:49:06 +00:00
|
|
|
static gint ett_tcap_Unidirectional = -1;
|
|
|
|
static gint ett_tcap_Begin = -1;
|
|
|
|
static gint ett_tcap_End = -1;
|
|
|
|
static gint ett_tcap_Continue = -1;
|
|
|
|
static gint ett_tcap_Abort = -1;
|
|
|
|
static gint ett_tcap_Reason = -1;
|
2007-11-07 21:22:25 +00:00
|
|
|
static gint ett_tcap_SEQUENCE_SIZE_1_MAX_OF_Component = -1;
|
2005-06-07 05:49:06 +00:00
|
|
|
static gint ett_tcap_Component = -1;
|
|
|
|
static gint ett_tcap_Invoke = -1;
|
|
|
|
static gint ett_tcap_ReturnResult = -1;
|
|
|
|
static gint ett_tcap_T_resultretres = -1;
|
|
|
|
static gint ett_tcap_ReturnError = -1;
|
|
|
|
static gint ett_tcap_Reject = -1;
|
|
|
|
static gint ett_tcap_T_invokeIDRej = -1;
|
|
|
|
static gint ett_tcap_T_problem = -1;
|
|
|
|
static gint ett_tcap_OPERATION = -1;
|
|
|
|
static gint ett_tcap_ERROR = -1;
|
|
|
|
static gint ett_tcap_ErrorCode = -1;
|
2008-09-13 15:32:59 +00:00
|
|
|
static gint ett_tcap_UniDialoguePDU = -1;
|
|
|
|
static gint ett_tcap_AUDT_apdu_U = -1;
|
2008-09-14 14:42:39 +00:00
|
|
|
static gint ett_tcap_AUDT_protocol_version = -1;
|
2008-09-13 15:32:59 +00:00
|
|
|
static gint ett_tcap_AUDT_user_information = -1;
|
2008-09-14 14:42:39 +00:00
|
|
|
static gint ett_tcap_DialoguePDU = -1;
|
|
|
|
static gint ett_tcap_AARQ_apdu_U = -1;
|
|
|
|
static gint ett_tcap_AARQ_protocol_version = -1;
|
|
|
|
static gint ett_tcap_AARQ_user_information = -1;
|
|
|
|
static gint ett_tcap_AARE_apdu_U = -1;
|
|
|
|
static gint ett_tcap_AARE_protocol_version = -1;
|
|
|
|
static gint ett_tcap_AARE_user_information = -1;
|
|
|
|
static gint ett_tcap_ABRT_apdu_U = -1;
|
|
|
|
static gint ett_tcap_ABRT_user_information = -1;
|
|
|
|
static gint ett_tcap_Associate_source_diagnostic = -1;
|
2005-06-07 05:49:06 +00:00
|
|
|
|
|
|
|
/*--- End of included file: packet-tcap-ett.c ---*/
|
2011-05-13 08:12:27 +00:00
|
|
|
#line 78 "../../asn1/tcap/packet-tcap-template.c"
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2004-10-14 23:45:09 +00:00
|
|
|
#define MAX_SSN 254
|
2004-10-16 23:32:24 +00:00
|
|
|
static range_t *global_ssn_range;
|
|
|
|
static range_t *ssn_range;
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
struct tcap_private_t tcap_private;
|
|
|
|
|
|
|
|
gboolean gtcap_HandleSRT=FALSE;
|
|
|
|
extern gboolean gtcap_PersistentSRT;
|
|
|
|
extern gboolean gtcap_DisplaySRT;
|
|
|
|
extern guint gtcap_RepetitionTimeout;
|
|
|
|
extern guint gtcap_LostTimeout;
|
2004-10-14 23:45:09 +00:00
|
|
|
|
2006-12-07 20:34:08 +00:00
|
|
|
static dissector_handle_t tcap_handle = NULL;
|
2008-12-15 20:52:40 +00:00
|
|
|
static dissector_table_t ber_oid_dissector_table;
|
2005-11-14 10:02:31 +00:00
|
|
|
static const char * cur_oid;
|
|
|
|
static const char * tcapext_oid;
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
static proto_tree * tcap_top_tree=NULL;
|
|
|
|
static proto_tree * tcap_stat_tree=NULL;
|
|
|
|
|
2003-10-02 06:13:29 +00:00
|
|
|
static dissector_handle_t data_handle;
|
2007-08-14 22:05:36 +00:00
|
|
|
static dissector_handle_t ansi_tcap_handle;
|
2003-10-02 06:13:29 +00:00
|
|
|
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
static void raz_tcap_private(struct tcap_private_t * p_tcap_private);
|
2007-05-15 05:49:43 +00:00
|
|
|
static int dissect_tcap_param(asn1_ctx_t *actx, proto_tree *tree, tvbuff_t *tvb, int offset);
|
2007-07-30 17:10:20 +00:00
|
|
|
static int dissect_tcap_ITU_ComponentPDU(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index _U_);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-12-17 16:55:45 +00:00
|
|
|
static GHashTable* ansi_sub_dissectors = NULL;
|
|
|
|
static GHashTable* itu_sub_dissectors = NULL;
|
|
|
|
|
|
|
|
static void dissect_tcap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree);
|
|
|
|
|
|
|
|
extern void add_ansi_tcap_subdissector(guint32 ssn, dissector_handle_t dissector) {
|
|
|
|
g_hash_table_insert(ansi_sub_dissectors,GUINT_TO_POINTER(ssn),dissector);
|
2010-12-20 05:35:29 +00:00
|
|
|
dissector_add_uint("sccp.ssn",ssn,tcap_handle);
|
2005-12-17 16:55:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
extern void add_itu_tcap_subdissector(guint32 ssn, dissector_handle_t dissector) {
|
|
|
|
g_hash_table_insert(itu_sub_dissectors,GUINT_TO_POINTER(ssn),dissector);
|
2010-12-20 05:35:29 +00:00
|
|
|
dissector_add_uint("sccp.ssn",ssn,tcap_handle);
|
2005-12-17 16:55:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
extern void delete_ansi_tcap_subdissector(guint32 ssn, dissector_handle_t dissector _U_) {
|
|
|
|
g_hash_table_remove(ansi_sub_dissectors,GUINT_TO_POINTER(ssn));
|
2007-07-30 17:10:20 +00:00
|
|
|
if (!get_itu_tcap_subdissector(ssn))
|
2010-12-20 05:35:29 +00:00
|
|
|
dissector_delete_uint("sccp.ssn",ssn,tcap_handle);
|
2005-12-17 16:55:45 +00:00
|
|
|
}
|
|
|
|
extern void delete_itu_tcap_subdissector(guint32 ssn, dissector_handle_t dissector _U_) {
|
|
|
|
g_hash_table_remove(itu_sub_dissectors,GUINT_TO_POINTER(ssn));
|
2007-07-30 17:10:20 +00:00
|
|
|
if (!get_ansi_tcap_subdissector(ssn))
|
2010-12-20 05:35:29 +00:00
|
|
|
dissector_delete_uint("sccp.ssn", ssn,tcap_handle);
|
2005-12-17 16:55:45 +00:00
|
|
|
}
|
|
|
|
|
2006-12-07 20:53:32 +00:00
|
|
|
dissector_handle_t get_ansi_tcap_subdissector(guint32 ssn) {
|
2005-12-17 16:55:45 +00:00
|
|
|
return g_hash_table_lookup(ansi_sub_dissectors,GUINT_TO_POINTER(ssn));
|
|
|
|
}
|
|
|
|
|
2006-12-07 20:53:32 +00:00
|
|
|
dissector_handle_t get_itu_tcap_subdissector(guint32 ssn) {
|
2005-12-17 16:55:45 +00:00
|
|
|
return g_hash_table_lookup(itu_sub_dissectors,GUINT_TO_POINTER(ssn));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2003-10-16 18:15:54 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
/*--- Included file: packet-tcap-fn.c ---*/
|
2011-05-13 08:12:27 +00:00
|
|
|
#line 1 "../../asn1/tcap/packet-tcap-fn.c"
|
2005-08-18 21:36:59 +00:00
|
|
|
|
2005-06-07 20:29:23 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_OBJECT_IDENTIFIER(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_object_identifier(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
|
2005-06-07 05:49:06 +00:00
|
|
|
|
|
|
|
return offset;
|
|
|
|
}
|
2004-03-19 07:54:58 +00:00
|
|
|
|
|
|
|
|
2005-08-18 21:36:59 +00:00
|
|
|
|
2003-10-02 06:13:29 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_Dialog1(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2011-05-13 08:12:27 +00:00
|
|
|
#line 69 "../../asn1/tcap/tcap.cnf"
|
2005-06-07 05:49:06 +00:00
|
|
|
|
2009-03-23 13:03:18 +00:00
|
|
|
offset = dissect_tcap_DialoguePDU(TRUE, tvb, offset, actx, tree, -1);
|
2005-06-07 05:49:06 +00:00
|
|
|
|
2005-12-08 23:29:21 +00:00
|
|
|
|
2007-07-27 19:24:40 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-08-18 21:36:59 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const ber_sequence_t ExternalPDU_U_sequence[] = {
|
|
|
|
{ &hf_tcap_oid , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_tcap_OBJECT_IDENTIFIER },
|
|
|
|
{ &hf_tcap_dialog , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_tcap_Dialog1 },
|
2007-11-07 21:22:25 +00:00
|
|
|
{ NULL, 0, 0, 0, NULL }
|
2005-06-07 05:49:06 +00:00
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_ExternalPDU_U(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2007-11-07 21:22:25 +00:00
|
|
|
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
|
2008-09-14 14:42:39 +00:00
|
|
|
ExternalPDU_U_sequence, hf_index, ett_tcap_ExternalPDU_U);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2007-11-07 21:22:25 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_ExternalPDU(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2011-05-13 08:12:27 +00:00
|
|
|
#line 64 "../../asn1/tcap/tcap.cnf"
|
2007-11-07 21:22:25 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
offset = dissect_ber_tagged_type(implicit_tag, actx, tree, tvb, offset,
|
|
|
|
hf_index, BER_CLASS_UNI, 8, TRUE, dissect_tcap_ExternalPDU_U);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-08-18 21:36:59 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2003-10-02 06:13:29 +00:00
|
|
|
|
|
|
|
|
2008-09-13 15:32:59 +00:00
|
|
|
|
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_DialogueOC(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2011-05-13 08:12:27 +00:00
|
|
|
#line 59 "../../asn1/tcap/tcap.cnf"
|
2008-09-14 14:42:39 +00:00
|
|
|
|
2009-03-23 13:03:18 +00:00
|
|
|
offset = dissect_tcap_ExternalPDU(FALSE /*implicit_tag*/, tvb, offset, actx, tree, -1);
|
2008-09-13 15:32:59 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return offset;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_DialoguePortion(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_tagged_type(implicit_tag, actx, tree, tvb, offset,
|
|
|
|
hf_index, BER_CLASS_APP, 11, TRUE, dissect_tcap_DialogueOC);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
2003-10-02 06:13:29 +00:00
|
|
|
}
|
2005-06-07 05:49:06 +00:00
|
|
|
|
|
|
|
|
2003-10-02 06:13:29 +00:00
|
|
|
|
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_InvokeIdType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2007-05-15 05:49:43 +00:00
|
|
|
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
|
2008-03-01 17:23:39 +00:00
|
|
|
NULL);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
|
|
|
|
|
2003-10-02 06:13:29 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_INTEGER(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2007-05-15 05:49:43 +00:00
|
|
|
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
|
2008-03-01 17:23:39 +00:00
|
|
|
NULL);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
2003-10-02 06:13:29 +00:00
|
|
|
}
|
2005-06-07 05:49:06 +00:00
|
|
|
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const value_string tcap_OPERATION_vals[] = {
|
|
|
|
{ 0, "localValue" },
|
|
|
|
{ 1, "globalValue" },
|
2005-06-07 05:49:06 +00:00
|
|
|
{ 0, NULL }
|
|
|
|
};
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const ber_choice_t OPERATION_choice[] = {
|
|
|
|
{ 0, &hf_tcap_localValue , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_tcap_INTEGER },
|
|
|
|
{ 1, &hf_tcap_globalValue , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_tcap_OBJECT_IDENTIFIER },
|
2007-11-07 21:22:25 +00:00
|
|
|
{ 0, NULL, 0, 0, 0, NULL }
|
2005-06-07 05:49:06 +00:00
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_OPERATION(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2007-11-07 21:22:25 +00:00
|
|
|
offset = dissect_ber_choice(actx, tree, tvb, offset,
|
2008-09-14 14:42:39 +00:00
|
|
|
OPERATION_choice, hf_index, ett_tcap_OPERATION,
|
2007-11-07 21:22:25 +00:00
|
|
|
NULL);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
2003-10-02 06:13:29 +00:00
|
|
|
}
|
2005-06-07 05:49:06 +00:00
|
|
|
|
2005-08-18 21:36:59 +00:00
|
|
|
|
2008-09-13 15:32:59 +00:00
|
|
|
|
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_Parameter(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2011-05-13 08:12:27 +00:00
|
|
|
#line 74 "../../asn1/tcap/tcap.cnf"
|
2008-09-14 14:42:39 +00:00
|
|
|
|
2009-03-23 13:03:18 +00:00
|
|
|
offset = dissect_tcap_param(actx,tree,tvb,offset);
|
2008-09-14 14:42:39 +00:00
|
|
|
|
|
|
|
|
2008-09-13 15:32:59 +00:00
|
|
|
|
|
|
|
return offset;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const ber_sequence_t Invoke_sequence[] = {
|
|
|
|
{ &hf_tcap_invokeID , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_tcap_InvokeIdType },
|
|
|
|
{ &hf_tcap_linkedID , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tcap_InvokeIdType },
|
|
|
|
{ &hf_tcap_opCode , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_tcap_OPERATION },
|
|
|
|
{ &hf_tcap_parameter , BER_CLASS_ANY, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_tcap_Parameter },
|
2007-11-07 21:22:25 +00:00
|
|
|
{ NULL, 0, 0, 0, NULL }
|
2005-06-07 05:49:06 +00:00
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_Invoke(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2007-11-07 21:22:25 +00:00
|
|
|
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
|
2008-09-14 14:42:39 +00:00
|
|
|
Invoke_sequence, hf_index, ett_tcap_Invoke);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2007-11-07 21:22:25 +00:00
|
|
|
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const ber_sequence_t T_resultretres_sequence[] = {
|
|
|
|
{ &hf_tcap_opCode , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_tcap_OPERATION },
|
|
|
|
{ &hf_tcap_parameter , BER_CLASS_ANY, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_tcap_Parameter },
|
|
|
|
{ NULL, 0, 0, 0, NULL }
|
|
|
|
};
|
2007-11-07 21:22:25 +00:00
|
|
|
|
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_T_resultretres(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
|
|
|
|
T_resultretres_sequence, hf_index, ett_tcap_T_resultretres);
|
2007-11-07 21:22:25 +00:00
|
|
|
|
|
|
|
return offset;
|
2005-06-07 05:49:06 +00:00
|
|
|
}
|
2003-10-02 06:13:29 +00:00
|
|
|
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const ber_sequence_t ReturnResult_sequence[] = {
|
|
|
|
{ &hf_tcap_invokeID , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_tcap_InvokeIdType },
|
|
|
|
{ &hf_tcap_resultretres , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_tcap_T_resultretres },
|
|
|
|
{ NULL, 0, 0, 0, NULL }
|
2005-06-07 05:49:06 +00:00
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static int
|
|
|
|
dissect_tcap_ReturnResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
|
|
|
|
ReturnResult_sequence, hf_index, ett_tcap_ReturnResult);
|
|
|
|
|
|
|
|
return offset;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_INTEGER_M32768_32767(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2007-05-15 05:49:43 +00:00
|
|
|
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
|
2008-03-01 17:23:39 +00:00
|
|
|
NULL);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2004-03-20 07:26:41 +00:00
|
|
|
|
2005-08-18 21:36:59 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const value_string tcap_ErrorCode_vals[] = {
|
|
|
|
{ 19, "nationaler" },
|
|
|
|
{ 20, "privateer" },
|
|
|
|
{ 0, NULL }
|
|
|
|
};
|
|
|
|
|
|
|
|
static const ber_choice_t ErrorCode_choice[] = {
|
|
|
|
{ 19, &hf_tcap_nationaler , BER_CLASS_PRI, 19, BER_FLAGS_IMPLTAG, dissect_tcap_INTEGER_M32768_32767 },
|
|
|
|
{ 20, &hf_tcap_privateer , BER_CLASS_PRI, 20, BER_FLAGS_IMPLTAG, dissect_tcap_INTEGER },
|
|
|
|
{ 0, NULL, 0, 0, 0, NULL }
|
2008-09-14 14:33:01 +00:00
|
|
|
};
|
2008-09-13 15:32:59 +00:00
|
|
|
|
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_ErrorCode(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_choice(actx, tree, tvb, offset,
|
|
|
|
ErrorCode_choice, hf_index, ett_tcap_ErrorCode,
|
|
|
|
NULL);
|
2008-09-13 15:32:59 +00:00
|
|
|
|
|
|
|
return offset;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const ber_sequence_t ReturnError_sequence[] = {
|
|
|
|
{ &hf_tcap_invokeID , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_tcap_InvokeIdType },
|
|
|
|
{ &hf_tcap_errorCode , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_tcap_ErrorCode },
|
|
|
|
{ &hf_tcap_parameter , BER_CLASS_ANY, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_tcap_Parameter },
|
2007-11-07 21:22:25 +00:00
|
|
|
{ NULL, 0, 0, 0, NULL }
|
2005-06-07 05:49:06 +00:00
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_ReturnError(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2007-11-07 21:22:25 +00:00
|
|
|
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
|
2008-09-14 14:42:39 +00:00
|
|
|
ReturnError_sequence, hf_index, ett_tcap_ReturnError);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2007-11-07 21:22:25 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_NULL(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_null(implicit_tag, actx, tree, tvb, offset, hf_index);
|
2007-11-07 21:22:25 +00:00
|
|
|
|
|
|
|
return offset;
|
2005-06-07 05:49:06 +00:00
|
|
|
}
|
2003-10-02 06:13:29 +00:00
|
|
|
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const value_string tcap_T_invokeIDRej_vals[] = {
|
|
|
|
{ 0, "derivable" },
|
|
|
|
{ 1, "not-derivable" },
|
2005-06-07 05:49:06 +00:00
|
|
|
{ 0, NULL }
|
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const ber_choice_t T_invokeIDRej_choice[] = {
|
|
|
|
{ 0, &hf_tcap_derivable , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_tcap_InvokeIdType },
|
|
|
|
{ 1, &hf_tcap_not_derivable , BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_tcap_NULL },
|
2007-11-07 21:22:25 +00:00
|
|
|
{ 0, NULL, 0, 0, 0, NULL }
|
2005-06-07 05:49:06 +00:00
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static int
|
|
|
|
dissect_tcap_T_invokeIDRej(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2007-11-07 21:22:25 +00:00
|
|
|
offset = dissect_ber_choice(actx, tree, tvb, offset,
|
2008-09-14 14:42:39 +00:00
|
|
|
T_invokeIDRej_choice, hf_index, ett_tcap_T_invokeIDRej,
|
2007-11-07 21:22:25 +00:00
|
|
|
NULL);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
2003-10-02 06:13:29 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const value_string tcap_GeneralProblem_vals[] = {
|
|
|
|
{ 0, "unrecognizedComponent" },
|
|
|
|
{ 1, "mistypedComponent" },
|
|
|
|
{ 2, "badlyStructuredComponent" },
|
|
|
|
{ 0, NULL }
|
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-08-18 21:36:59 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_GeneralProblem(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
|
|
|
|
NULL);
|
2005-12-08 23:29:21 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
|
|
|
|
2005-08-18 21:36:59 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const value_string tcap_InvokeProblem_vals[] = {
|
|
|
|
{ 0, "duplicateInvokeID" },
|
|
|
|
{ 1, "unrecognizedOperation" },
|
|
|
|
{ 2, "mistypedParameter" },
|
|
|
|
{ 3, "resourceLimitation" },
|
|
|
|
{ 4, "initiatingRelease" },
|
|
|
|
{ 5, "unrecognizedLinkedID" },
|
|
|
|
{ 6, "linkedResponseUnexpected" },
|
|
|
|
{ 7, "unexpectedLinkedOperation" },
|
|
|
|
{ 0, NULL }
|
2005-06-07 05:49:06 +00:00
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2007-11-07 21:22:25 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_InvokeProblem(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
|
|
|
|
NULL);
|
2007-04-21 20:27:05 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
2003-10-02 06:13:29 +00:00
|
|
|
}
|
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const value_string tcap_ReturnResultProblem_vals[] = {
|
|
|
|
{ 0, "unrecognizedInvokeID" },
|
|
|
|
{ 1, "returnResultUnexpected" },
|
|
|
|
{ 2, "mistypedParameter" },
|
|
|
|
{ 0, NULL }
|
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-08-18 21:36:59 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_ReturnResultProblem(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
|
|
|
|
NULL);
|
2005-12-08 23:29:21 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
2003-10-02 06:13:29 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const value_string tcap_ReturnErrorProblem_vals[] = {
|
|
|
|
{ 0, "unrecognizedInvokeID" },
|
|
|
|
{ 1, "returnErrorUnexpected" },
|
|
|
|
{ 2, "unrecognizedError" },
|
|
|
|
{ 3, "unexpectedError" },
|
|
|
|
{ 4, "mistypedParameter" },
|
|
|
|
{ 0, NULL }
|
|
|
|
};
|
|
|
|
|
2005-08-18 21:36:59 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_ReturnErrorProblem(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
|
|
|
|
NULL);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
2003-10-02 06:13:29 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const value_string tcap_T_problem_vals[] = {
|
|
|
|
{ 0, "generalProblem" },
|
|
|
|
{ 1, "invokeProblem" },
|
|
|
|
{ 2, "returnResultProblem" },
|
|
|
|
{ 3, "returnErrorProblem" },
|
|
|
|
{ 0, NULL }
|
|
|
|
};
|
|
|
|
|
|
|
|
static const ber_choice_t T_problem_choice[] = {
|
|
|
|
{ 0, &hf_tcap_generalProblem , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_tcap_GeneralProblem },
|
|
|
|
{ 1, &hf_tcap_invokeProblem , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_tcap_InvokeProblem },
|
|
|
|
{ 2, &hf_tcap_returnResultProblem, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_tcap_ReturnResultProblem },
|
|
|
|
{ 3, &hf_tcap_returnErrorProblem, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_tcap_ReturnErrorProblem },
|
|
|
|
{ 0, NULL, 0, 0, 0, NULL }
|
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_T_problem(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_choice(actx, tree, tvb, offset,
|
|
|
|
T_problem_choice, hf_index, ett_tcap_T_problem,
|
|
|
|
NULL);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
2003-10-02 06:13:29 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const ber_sequence_t Reject_sequence[] = {
|
|
|
|
{ &hf_tcap_invokeIDRej , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_tcap_T_invokeIDRej },
|
|
|
|
{ &hf_tcap_problem , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_tcap_T_problem },
|
|
|
|
{ NULL, 0, 0, 0, NULL }
|
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_Reject(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
|
|
|
|
Reject_sequence, hf_index, ett_tcap_Reject);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
2003-10-02 06:13:29 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const value_string tcap_Component_vals[] = {
|
|
|
|
{ 1, "invoke" },
|
|
|
|
{ 2, "returnResultLast" },
|
|
|
|
{ 3, "returnError" },
|
|
|
|
{ 4, "reject" },
|
|
|
|
{ 7, "returnResultNotLast" },
|
2005-06-07 05:49:06 +00:00
|
|
|
{ 0, NULL }
|
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const ber_choice_t Component_choice[] = {
|
|
|
|
{ 1, &hf_tcap_invoke , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_tcap_Invoke },
|
|
|
|
{ 2, &hf_tcap_returnResultLast, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_tcap_ReturnResult },
|
|
|
|
{ 3, &hf_tcap_returnError , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_tcap_ReturnError },
|
|
|
|
{ 4, &hf_tcap_reject , BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_tcap_Reject },
|
|
|
|
{ 7, &hf_tcap_returnResultNotLast, BER_CLASS_CON, 7, BER_FLAGS_IMPLTAG, dissect_tcap_ReturnResult },
|
2007-11-07 21:22:25 +00:00
|
|
|
{ 0, NULL, 0, 0, 0, NULL }
|
2005-06-07 05:49:06 +00:00
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_Component(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2011-05-13 08:12:27 +00:00
|
|
|
#line 79 "../../asn1/tcap/tcap.cnf"
|
2008-09-14 14:42:39 +00:00
|
|
|
tvbuff_t *next_tvb;
|
|
|
|
gint8 class;
|
|
|
|
gboolean pc;
|
|
|
|
gint tag;
|
|
|
|
guint32 len, comp_offset;
|
|
|
|
gint ind_field;
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
comp_offset = dissect_ber_identifier(actx->pinfo, tree, tvb, offset, &class, &pc, &tag);
|
|
|
|
comp_offset = dissect_ber_length(actx->pinfo, tree, tvb, comp_offset, &len, &ind_field);
|
|
|
|
/* we can believe the length now */
|
|
|
|
next_tvb = tvb_new_subset(tvb, offset, len+comp_offset-offset, len+comp_offset-offset);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
if (!next_tvb)
|
|
|
|
return comp_offset;
|
|
|
|
|
|
|
|
offset = dissect_ber_choice(actx, tree, tvb, offset,
|
|
|
|
Component_choice, hf_index, ett_tcap_Component,
|
|
|
|
NULL);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 20:29:23 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_ITU_ComponentPDU(implicit_tag, next_tvb, 0, actx, tcap_top_tree, hf_index);
|
2005-08-18 21:36:59 +00:00
|
|
|
|
2009-03-23 13:03:18 +00:00
|
|
|
/* return comp_offset+len; or return offset (will be automatically added) */
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 20:29:23 +00:00
|
|
|
|
2005-12-08 23:29:21 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-08-18 21:36:59 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const ber_sequence_t SEQUENCE_SIZE_1_MAX_OF_Component_sequence_of[1] = {
|
|
|
|
{ &hf_tcap__untag_item , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_tcap_Component },
|
2005-06-07 05:49:06 +00:00
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_SEQUENCE_SIZE_1_MAX_OF_Component(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
|
|
|
|
SEQUENCE_SIZE_1_MAX_OF_Component_sequence_of, hf_index, ett_tcap_SEQUENCE_SIZE_1_MAX_OF_Component);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-08-18 21:36:59 +00:00
|
|
|
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_ComponentPortion(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_tagged_type(implicit_tag, actx, tree, tvb, offset,
|
|
|
|
hf_index, BER_CLASS_APP, 12, TRUE, dissect_tcap_SEQUENCE_SIZE_1_MAX_OF_Component);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2004-10-27 20:04:56 +00:00
|
|
|
|
2005-08-18 21:36:59 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const ber_sequence_t Unidirectional_sequence[] = {
|
|
|
|
{ &hf_tcap_dialoguePortion, BER_CLASS_APP, 11, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_tcap_DialoguePortion },
|
|
|
|
{ &hf_tcap_components , BER_CLASS_APP, 12, BER_FLAGS_NOOWNTAG, dissect_tcap_ComponentPortion },
|
2007-11-07 21:22:25 +00:00
|
|
|
{ NULL, 0, 0, 0, NULL }
|
2005-06-07 05:49:06 +00:00
|
|
|
};
|
2004-10-27 20:04:56 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_Unidirectional(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2007-11-07 21:22:25 +00:00
|
|
|
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
|
2008-09-14 14:42:39 +00:00
|
|
|
Unidirectional_sequence, hf_index, ett_tcap_Unidirectional);
|
2004-10-27 20:04:56 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2004-10-27 20:04:56 +00:00
|
|
|
|
|
|
|
|
2005-06-07 20:29:23 +00:00
|
|
|
|
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_OCTET_STRING_SIZE_1_4(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
|
|
|
|
NULL);
|
2005-06-07 20:29:23 +00:00
|
|
|
|
|
|
|
return offset;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_OrigTransactionID(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2011-05-13 08:12:27 +00:00
|
|
|
#line 117 "../../asn1/tcap/tcap.cnf"
|
2008-09-14 14:42:39 +00:00
|
|
|
tvbuff_t *parameter_tvb;
|
|
|
|
guint8 len, i;
|
|
|
|
proto_item *tid_item;
|
|
|
|
proto_tree *subtree;
|
|
|
|
tid_item = proto_tree_add_text(tree, tvb, offset, -1, "Source Transaction ID");
|
|
|
|
subtree = proto_item_add_subtree(tid_item, ett_otid);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
offset = dissect_ber_octet_string(implicit_tag, actx, subtree, tvb, offset, hf_tcap_tid,
|
|
|
|
¶meter_tvb);
|
2005-08-18 21:36:59 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
if (parameter_tvb){
|
|
|
|
len = tvb_length_remaining(parameter_tvb, 0);
|
|
|
|
switch(len) {
|
|
|
|
case 1:
|
|
|
|
gp_tcapsrt_info->src_tid=tvb_get_guint8(parameter_tvb, 0);
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
gp_tcapsrt_info->src_tid=tvb_get_ntohs(parameter_tvb, 0);
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
gp_tcapsrt_info->src_tid=tvb_get_ntohl(parameter_tvb, 0);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
gp_tcapsrt_info->src_tid=0;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ((len)&&(check_col(actx->pinfo->cinfo, COL_INFO))){
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "otid(");
|
|
|
|
for(i=0;i<len;i++)
|
|
|
|
col_append_fstr(actx->pinfo->cinfo, COL_INFO, "%02x",tvb_get_guint8(parameter_tvb,i));
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, ") ");
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return offset;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static const ber_sequence_t Begin_sequence[] = {
|
|
|
|
{ &hf_tcap_otid , BER_CLASS_APP, 8, BER_FLAGS_NOOWNTAG, dissect_tcap_OrigTransactionID },
|
|
|
|
{ &hf_tcap_dialoguePortion, BER_CLASS_APP, 11, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_tcap_DialoguePortion },
|
|
|
|
{ &hf_tcap_components , BER_CLASS_APP, 12, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_tcap_ComponentPortion },
|
|
|
|
{ NULL, 0, 0, 0, NULL }
|
2005-06-07 05:49:06 +00:00
|
|
|
};
|
|
|
|
|
2003-10-02 06:13:29 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_Begin(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2011-05-13 08:12:27 +00:00
|
|
|
#line 191 "../../asn1/tcap/tcap.cnf"
|
2008-09-14 14:42:39 +00:00
|
|
|
gp_tcapsrt_info->ope=TC_BEGIN;
|
|
|
|
|
|
|
|
/* Do not change col_add_str() to col_append_str() here: we _want_ this call
|
|
|
|
* to overwrite whatever's currently in the INFO column (e.g., "UDT" from
|
|
|
|
* the SCCP dissector).
|
|
|
|
*
|
|
|
|
* If there's something there that should not be overwritten, whoever
|
|
|
|
* put that info there should call col_set_fence() to protect it.
|
|
|
|
*/
|
|
|
|
if (check_col(actx->pinfo->cinfo, COL_INFO))
|
|
|
|
col_set_str(actx->pinfo->cinfo, COL_INFO, "Begin ");
|
|
|
|
|
2007-11-07 21:22:25 +00:00
|
|
|
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
|
2008-09-14 14:42:39 +00:00
|
|
|
Begin_sequence, hf_index, ett_tcap_Begin);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2003-10-02 06:13:29 +00:00
|
|
|
|
|
|
|
|
2005-06-07 20:29:23 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_DestTransactionID(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2011-05-13 08:12:27 +00:00
|
|
|
#line 156 "../../asn1/tcap/tcap.cnf"
|
2008-09-14 14:42:39 +00:00
|
|
|
tvbuff_t *parameter_tvb;
|
|
|
|
guint8 len , i;
|
|
|
|
proto_item *tid_item;
|
|
|
|
proto_tree *subtree;
|
|
|
|
tid_item = proto_tree_add_text(tree, tvb, offset, -1, "Destination Transaction ID");
|
|
|
|
subtree = proto_item_add_subtree(tid_item, ett_otid);
|
|
|
|
|
|
|
|
offset = dissect_ber_octet_string(implicit_tag, actx, subtree, tvb, offset, hf_tcap_tid,
|
|
|
|
¶meter_tvb);
|
|
|
|
|
|
|
|
if (parameter_tvb){
|
|
|
|
len = tvb_length_remaining(parameter_tvb, 0);
|
|
|
|
switch(len) {
|
|
|
|
case 1:
|
|
|
|
gp_tcapsrt_info->dst_tid=tvb_get_guint8(parameter_tvb, 0);
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
gp_tcapsrt_info->dst_tid=tvb_get_ntohs(parameter_tvb, 0);
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
gp_tcapsrt_info->dst_tid=tvb_get_ntohl(parameter_tvb, 0);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
gp_tcapsrt_info->dst_tid=0;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ((len)&&(check_col(actx->pinfo->cinfo, COL_INFO))){
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "dtid(");
|
|
|
|
for(i=0;i<len;i++)
|
|
|
|
col_append_fstr(actx->pinfo->cinfo, COL_INFO, "%02x",tvb_get_guint8(parameter_tvb,i));
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, ") ");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2003-10-02 06:13:29 +00:00
|
|
|
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const ber_sequence_t End_sequence[] = {
|
|
|
|
{ &hf_tcap_dtid , BER_CLASS_APP, 9, BER_FLAGS_NOOWNTAG, dissect_tcap_DestTransactionID },
|
|
|
|
{ &hf_tcap_dialoguePortion, BER_CLASS_APP, 11, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_tcap_DialoguePortion },
|
|
|
|
{ &hf_tcap_components , BER_CLASS_APP, 12, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_tcap_ComponentPortion },
|
|
|
|
{ NULL, 0, 0, 0, NULL }
|
2005-06-07 05:49:06 +00:00
|
|
|
};
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static int
|
|
|
|
dissect_tcap_End(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2011-05-13 08:12:27 +00:00
|
|
|
#line 206 "../../asn1/tcap/tcap.cnf"
|
2008-09-14 14:42:39 +00:00
|
|
|
gp_tcapsrt_info->ope=TC_END;
|
|
|
|
|
|
|
|
if (check_col(actx->pinfo->cinfo, COL_INFO))
|
|
|
|
col_set_str(actx->pinfo->cinfo, COL_INFO, "End ");
|
|
|
|
|
|
|
|
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
|
|
|
|
End_sequence, hf_index, ett_tcap_End);
|
|
|
|
|
|
|
|
return offset;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static const ber_sequence_t Continue_sequence[] = {
|
|
|
|
{ &hf_tcap_otid , BER_CLASS_APP, 8, BER_FLAGS_NOOWNTAG, dissect_tcap_OrigTransactionID },
|
|
|
|
{ &hf_tcap_dtid , BER_CLASS_APP, 9, BER_FLAGS_NOOWNTAG, dissect_tcap_DestTransactionID },
|
|
|
|
{ &hf_tcap_dialoguePortion, BER_CLASS_APP, 11, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_tcap_DialoguePortion },
|
|
|
|
{ &hf_tcap_components , BER_CLASS_APP, 12, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_tcap_ComponentPortion },
|
|
|
|
{ NULL, 0, 0, 0, NULL }
|
2005-06-07 05:49:06 +00:00
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_Continue(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2011-05-13 08:12:27 +00:00
|
|
|
#line 214 "../../asn1/tcap/tcap.cnf"
|
2008-09-14 14:42:39 +00:00
|
|
|
gp_tcapsrt_info->ope=TC_CONT;
|
|
|
|
|
|
|
|
if (check_col(actx->pinfo->cinfo, COL_INFO))
|
|
|
|
col_set_str(actx->pinfo->cinfo, COL_INFO, "Continue ");
|
|
|
|
|
|
|
|
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
|
|
|
|
Continue_sequence, hf_index, ett_tcap_Continue);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2003-10-02 06:13:29 +00:00
|
|
|
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const value_string tcap_P_AbortCause_U_vals[] = {
|
|
|
|
{ 0, "unrecognizedMessageType" },
|
|
|
|
{ 1, "unrecognizedTransactionID" },
|
|
|
|
{ 2, "badlyFormattedTransactionPortion" },
|
|
|
|
{ 3, "incorrectTransactionPortion" },
|
|
|
|
{ 4, "resourceLimitation" },
|
2005-06-07 05:49:06 +00:00
|
|
|
{ 0, NULL }
|
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_P_AbortCause_U(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2007-05-15 05:49:43 +00:00
|
|
|
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
|
2008-03-01 17:23:39 +00:00
|
|
|
NULL);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2003-10-02 06:13:29 +00:00
|
|
|
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
|
|
|
|
static int
|
|
|
|
dissect_tcap_P_AbortCause(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_tagged_type(implicit_tag, actx, tree, tvb, offset,
|
|
|
|
hf_index, BER_CLASS_APP, 10, TRUE, dissect_tcap_P_AbortCause_U);
|
|
|
|
|
|
|
|
return offset;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static const value_string tcap_Reason_vals[] = {
|
|
|
|
{ 10, "p-abortCause" },
|
|
|
|
{ 11, "u-abortCause" },
|
2005-06-07 05:49:06 +00:00
|
|
|
{ 0, NULL }
|
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const ber_choice_t Reason_choice[] = {
|
|
|
|
{ 10, &hf_tcap_p_abortCause , BER_CLASS_APP, 10, BER_FLAGS_NOOWNTAG, dissect_tcap_P_AbortCause },
|
|
|
|
{ 11, &hf_tcap_u_abortCause , BER_CLASS_APP, 11, BER_FLAGS_NOOWNTAG, dissect_tcap_DialoguePortion },
|
|
|
|
{ 0, NULL, 0, 0, 0, NULL }
|
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_Reason(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_choice(actx, tree, tvb, offset,
|
|
|
|
Reason_choice, hf_index, ett_tcap_Reason,
|
|
|
|
NULL);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2003-10-02 06:13:29 +00:00
|
|
|
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const ber_sequence_t Abort_sequence[] = {
|
|
|
|
{ &hf_tcap_dtid , BER_CLASS_APP, 9, BER_FLAGS_NOOWNTAG, dissect_tcap_DestTransactionID },
|
|
|
|
{ &hf_tcap_reason , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_tcap_Reason },
|
|
|
|
{ NULL, 0, 0, 0, NULL }
|
2005-06-07 05:49:06 +00:00
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_Abort(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2011-05-13 08:12:27 +00:00
|
|
|
#line 222 "../../asn1/tcap/tcap.cnf"
|
2008-09-14 14:42:39 +00:00
|
|
|
gp_tcapsrt_info->ope=TC_ABORT;
|
|
|
|
|
|
|
|
if (check_col(actx->pinfo->cinfo, COL_INFO))
|
|
|
|
col_set_str(actx->pinfo->cinfo, COL_INFO, "Abort ");
|
|
|
|
|
|
|
|
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
|
|
|
|
Abort_sequence, hf_index, ett_tcap_Abort);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2003-10-02 06:13:29 +00:00
|
|
|
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const value_string tcap_TCMessage_vals[] = {
|
|
|
|
{ 1, "unidirectional" },
|
|
|
|
{ 2, "begin" },
|
|
|
|
{ 4, "end" },
|
|
|
|
{ 5, "continue" },
|
|
|
|
{ 7, "abort" },
|
2005-06-07 05:49:06 +00:00
|
|
|
{ 0, NULL }
|
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const ber_choice_t TCMessage_choice[] = {
|
|
|
|
{ 1, &hf_tcap_unidirectional , BER_CLASS_APP, 1, BER_FLAGS_IMPLTAG, dissect_tcap_Unidirectional },
|
|
|
|
{ 2, &hf_tcap_begin , BER_CLASS_APP, 2, BER_FLAGS_IMPLTAG, dissect_tcap_Begin },
|
|
|
|
{ 4, &hf_tcap_end , BER_CLASS_APP, 4, BER_FLAGS_IMPLTAG, dissect_tcap_End },
|
|
|
|
{ 5, &hf_tcap_continue , BER_CLASS_APP, 5, BER_FLAGS_IMPLTAG, dissect_tcap_Continue },
|
|
|
|
{ 7, &hf_tcap_abort , BER_CLASS_APP, 7, BER_FLAGS_IMPLTAG, dissect_tcap_Abort },
|
|
|
|
{ 0, NULL, 0, 0, 0, NULL }
|
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_TCMessage(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_choice(actx, tree, tvb, offset,
|
|
|
|
TCMessage_choice, hf_index, ett_tcap_TCMessage,
|
|
|
|
NULL);
|
2005-06-07 05:49:06 +00:00
|
|
|
|
|
|
|
return offset;
|
|
|
|
}
|
2003-10-02 06:13:29 +00:00
|
|
|
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const value_string tcap_ERROR_vals[] = {
|
|
|
|
{ 0, "localValue" },
|
|
|
|
{ 1, "globalValue" },
|
2005-06-07 05:49:06 +00:00
|
|
|
{ 0, NULL }
|
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const ber_choice_t ERROR_choice[] = {
|
|
|
|
{ 0, &hf_tcap_localValue , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_tcap_INTEGER },
|
|
|
|
{ 1, &hf_tcap_globalValue , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_tcap_OBJECT_IDENTIFIER },
|
2007-11-07 21:22:25 +00:00
|
|
|
{ 0, NULL, 0, 0, 0, NULL }
|
2005-06-07 05:49:06 +00:00
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_ERROR(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2007-11-07 21:22:25 +00:00
|
|
|
offset = dissect_ber_choice(actx, tree, tvb, offset,
|
2008-09-14 14:42:39 +00:00
|
|
|
ERROR_choice, hf_index, ett_tcap_ERROR,
|
2007-11-07 21:22:25 +00:00
|
|
|
NULL);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-08-18 21:36:59 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const asn_namedbit AUDT_protocol_version_bits[] = {
|
|
|
|
{ 0, &hf_tcap_AUDT_protocol_version_version1, -1, -1, "version1", NULL },
|
|
|
|
{ 0, NULL, 0, 0, NULL, NULL }
|
2005-06-07 05:49:06 +00:00
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_AUDT_protocol_version(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
|
|
|
|
AUDT_protocol_version_bits, hf_index, ett_tcap_AUDT_protocol_version,
|
|
|
|
NULL);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2003-10-02 06:13:29 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_AUDT_application_context_name(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2011-05-13 08:12:27 +00:00
|
|
|
#line 102 "../../asn1/tcap/tcap.cnf"
|
2008-09-14 14:42:39 +00:00
|
|
|
offset = dissect_ber_object_identifier_str(implicit_tag, actx, tree, tvb, offset, hf_index, &cur_oid);
|
2007-07-27 19:24:40 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
tcap_private.oid= (void*) cur_oid;
|
|
|
|
tcap_private.acv=TRUE;
|
2007-07-27 19:24:40 +00:00
|
|
|
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2007-07-27 19:24:40 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static int
|
|
|
|
dissect_tcap_EXTERNAL(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_external_type(implicit_tag, tree, tvb, offset, actx, hf_index, NULL);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-12-08 23:29:21 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const ber_sequence_t AUDT_user_information_sequence_of[1] = {
|
|
|
|
{ &hf_tcap_audt_user_information_item, BER_CLASS_UNI, BER_UNI_TAG_EXTERNAL, BER_FLAGS_NOOWNTAG, dissect_tcap_EXTERNAL },
|
|
|
|
};
|
|
|
|
|
|
|
|
static int
|
|
|
|
dissect_tcap_AUDT_user_information(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
|
|
|
|
AUDT_user_information_sequence_of, hf_index, ett_tcap_AUDT_user_information);
|
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-08-18 21:36:59 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const ber_sequence_t AUDT_apdu_U_sequence[] = {
|
|
|
|
{ &hf_tcap_audt_protocol_version, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tcap_AUDT_protocol_version },
|
|
|
|
{ &hf_tcap_audt_application_context_name, BER_CLASS_CON, 1, 0, dissect_tcap_AUDT_application_context_name },
|
|
|
|
{ &hf_tcap_audt_user_information, BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tcap_AUDT_user_information },
|
|
|
|
{ NULL, 0, 0, 0, NULL }
|
2005-06-07 05:49:06 +00:00
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_AUDT_apdu_U(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
|
|
|
|
AUDT_apdu_U_sequence, hf_index, ett_tcap_AUDT_apdu_U);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2007-11-07 21:22:25 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_AUDT_apdu(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2007-11-07 21:22:25 +00:00
|
|
|
offset = dissect_ber_tagged_type(implicit_tag, actx, tree, tvb, offset,
|
2008-09-14 14:42:39 +00:00
|
|
|
hf_index, BER_CLASS_APP, 0, TRUE, dissect_tcap_AUDT_apdu_U);
|
2007-11-07 21:22:25 +00:00
|
|
|
|
|
|
|
return offset;
|
2005-06-07 05:49:06 +00:00
|
|
|
}
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-08-18 21:36:59 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
const value_string tcap_UniDialoguePDU_vals[] = {
|
|
|
|
{ 0, "unidialoguePDU" },
|
|
|
|
{ 0, NULL }
|
2005-06-07 05:49:06 +00:00
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const ber_choice_t UniDialoguePDU_choice[] = {
|
|
|
|
{ 0, &hf_tcap_unidialoguePDU , BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_tcap_AUDT_apdu },
|
|
|
|
{ 0, NULL, 0, 0, 0, NULL }
|
|
|
|
};
|
|
|
|
|
|
|
|
int
|
|
|
|
dissect_tcap_UniDialoguePDU(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_choice(actx, tree, tvb, offset,
|
|
|
|
UniDialoguePDU_choice, hf_index, ett_tcap_UniDialoguePDU,
|
|
|
|
NULL);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2007-11-07 21:22:25 +00:00
|
|
|
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const asn_namedbit AARQ_protocol_version_bits[] = {
|
|
|
|
{ 0, &hf_tcap_AARQ_protocol_version_version1, -1, -1, "version1", NULL },
|
|
|
|
{ 0, NULL, 0, 0, NULL, NULL }
|
|
|
|
};
|
2007-11-07 21:22:25 +00:00
|
|
|
|
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_AARQ_protocol_version(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
|
|
|
|
AARQ_protocol_version_bits, hf_index, ett_tcap_AARQ_protocol_version,
|
|
|
|
NULL);
|
2007-11-07 21:22:25 +00:00
|
|
|
|
|
|
|
return offset;
|
2005-06-07 05:49:06 +00:00
|
|
|
}
|
2003-10-02 06:13:29 +00:00
|
|
|
|
|
|
|
|
2005-08-18 21:36:59 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_AARQ_application_context_name(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2011-05-13 08:12:27 +00:00
|
|
|
#line 107 "../../asn1/tcap/tcap.cnf"
|
2008-09-14 14:42:39 +00:00
|
|
|
offset = dissect_ber_object_identifier_str(implicit_tag, actx, tree, tvb, offset, hf_index, &cur_oid);
|
2005-06-08 18:52:34 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
tcap_private.oid= (void*) cur_oid;
|
|
|
|
tcap_private.acv=TRUE;
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
return offset;
|
2007-07-26 20:05:54 +00:00
|
|
|
}
|
2005-08-18 21:36:59 +00:00
|
|
|
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const ber_sequence_t AARQ_user_information_sequence_of[1] = {
|
|
|
|
{ &hf_tcap_aarq_user_information_item, BER_CLASS_UNI, BER_UNI_TAG_EXTERNAL, BER_FLAGS_NOOWNTAG, dissect_tcap_EXTERNAL },
|
|
|
|
};
|
2005-06-07 05:49:06 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static int
|
|
|
|
dissect_tcap_AARQ_user_information(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
|
|
|
|
AARQ_user_information_sequence_of, hf_index, ett_tcap_AARQ_user_information);
|
2005-12-08 23:29:21 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-08-18 21:36:59 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const ber_sequence_t AARQ_apdu_U_sequence[] = {
|
|
|
|
{ &hf_tcap_aarq_protocol_version, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tcap_AARQ_protocol_version },
|
|
|
|
{ &hf_tcap_aarq_application_context_name, BER_CLASS_CON, 1, 0, dissect_tcap_AARQ_application_context_name },
|
|
|
|
{ &hf_tcap_aarq_user_information, BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tcap_AARQ_user_information },
|
2007-11-07 21:22:25 +00:00
|
|
|
{ NULL, 0, 0, 0, NULL }
|
2005-06-07 05:49:06 +00:00
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_AARQ_apdu_U(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2007-11-07 21:22:25 +00:00
|
|
|
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
|
2008-09-14 14:42:39 +00:00
|
|
|
AARQ_apdu_U_sequence, hf_index, ett_tcap_AARQ_apdu_U);
|
2007-04-23 20:20:46 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2003-10-02 06:13:29 +00:00
|
|
|
|
|
|
|
|
2005-08-18 21:36:59 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_AARQ_apdu(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_tagged_type(implicit_tag, actx, tree, tvb, offset,
|
|
|
|
hf_index, BER_CLASS_APP, 0, TRUE, dissect_tcap_AARQ_apdu_U);
|
2005-12-08 23:29:21 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-08-18 21:36:59 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const asn_namedbit AARE_protocol_version_bits[] = {
|
|
|
|
{ 0, &hf_tcap_AARE_protocol_version_version1, -1, -1, "version1", NULL },
|
|
|
|
{ 0, NULL, 0, 0, NULL, NULL }
|
2005-06-07 05:49:06 +00:00
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_AARE_protocol_version(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
|
|
|
|
AARE_protocol_version_bits, hf_index, ett_tcap_AARE_protocol_version,
|
|
|
|
NULL);
|
2007-04-23 06:24:39 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-08-18 21:36:59 +00:00
|
|
|
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_AARE_application_context_name(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2011-05-13 08:12:27 +00:00
|
|
|
#line 112 "../../asn1/tcap/tcap.cnf"
|
2008-09-14 14:42:39 +00:00
|
|
|
offset = dissect_ber_object_identifier_str(implicit_tag, actx, tree, tvb, offset, hf_index, &cur_oid);
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
tcap_private.oid= (void*) cur_oid;
|
|
|
|
tcap_private.acv=TRUE;
|
2007-04-23 06:24:39 +00:00
|
|
|
|
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2003-10-02 06:13:29 +00:00
|
|
|
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const value_string tcap_Associate_result_vals[] = {
|
|
|
|
{ 0, "accepted" },
|
|
|
|
{ 1, "reject-permanent" },
|
2005-06-07 05:49:06 +00:00
|
|
|
{ 0, NULL }
|
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_Associate_result(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2007-05-15 05:49:43 +00:00
|
|
|
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
|
2008-03-01 17:23:39 +00:00
|
|
|
NULL);
|
2005-06-07 05:49:06 +00:00
|
|
|
|
|
|
|
return offset;
|
|
|
|
}
|
2007-11-07 21:22:25 +00:00
|
|
|
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const value_string tcap_T_dialogue_service_user_vals[] = {
|
|
|
|
{ 0, "null" },
|
|
|
|
{ 1, "no-reason-given" },
|
|
|
|
{ 2, "application-context-name-not-supported" },
|
2005-06-07 05:49:06 +00:00
|
|
|
{ 0, NULL }
|
|
|
|
};
|
|
|
|
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_T_dialogue_service_user(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
|
|
|
|
NULL);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-08-18 21:36:59 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const value_string tcap_T_dialogue_service_provider_vals[] = {
|
|
|
|
{ 0, "null" },
|
|
|
|
{ 1, "no-reason-given" },
|
|
|
|
{ 2, "no-common-dialogue-portion" },
|
|
|
|
{ 0, NULL }
|
2005-06-07 05:49:06 +00:00
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2007-07-26 20:05:54 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static int
|
|
|
|
dissect_tcap_T_dialogue_service_provider(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
|
|
|
|
NULL);
|
2007-04-23 06:24:39 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2003-10-02 06:13:29 +00:00
|
|
|
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const value_string tcap_Associate_source_diagnostic_vals[] = {
|
|
|
|
{ 1, "dialogue-service-user" },
|
|
|
|
{ 2, "dialogue-service-provider" },
|
2005-06-07 05:49:06 +00:00
|
|
|
{ 0, NULL }
|
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const ber_choice_t Associate_source_diagnostic_choice[] = {
|
|
|
|
{ 1, &hf_tcap_dialogue_service_user, BER_CLASS_CON, 1, 0, dissect_tcap_T_dialogue_service_user },
|
|
|
|
{ 2, &hf_tcap_dialogue_service_provider, BER_CLASS_CON, 2, 0, dissect_tcap_T_dialogue_service_provider },
|
2007-11-07 21:22:25 +00:00
|
|
|
{ 0, NULL, 0, 0, 0, NULL }
|
2005-06-07 05:49:06 +00:00
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_Associate_source_diagnostic(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2007-11-07 21:22:25 +00:00
|
|
|
offset = dissect_ber_choice(actx, tree, tvb, offset,
|
2008-09-14 14:42:39 +00:00
|
|
|
Associate_source_diagnostic_choice, hf_index, ett_tcap_Associate_source_diagnostic,
|
2007-11-07 21:22:25 +00:00
|
|
|
NULL);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2003-10-02 06:13:29 +00:00
|
|
|
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const ber_sequence_t AARE_user_information_sequence_of[1] = {
|
|
|
|
{ &hf_tcap_aare_user_information_item, BER_CLASS_UNI, BER_UNI_TAG_EXTERNAL, BER_FLAGS_NOOWNTAG, dissect_tcap_EXTERNAL },
|
2005-06-07 05:49:06 +00:00
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_AARE_user_information(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
|
|
|
|
AARE_user_information_sequence_of, hf_index, ett_tcap_AARE_user_information);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
return offset;
|
|
|
|
}
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2008-09-13 15:32:59 +00:00
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const ber_sequence_t AARE_apdu_U_sequence[] = {
|
|
|
|
{ &hf_tcap_aare_protocol_version, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tcap_AARE_protocol_version },
|
|
|
|
{ &hf_tcap_aare_application_context_name, BER_CLASS_CON, 1, 0, dissect_tcap_AARE_application_context_name },
|
|
|
|
{ &hf_tcap_result , BER_CLASS_CON, 2, 0, dissect_tcap_Associate_result },
|
|
|
|
{ &hf_tcap_result_source_diagnostic, BER_CLASS_CON, 3, BER_FLAGS_NOTCHKTAG, dissect_tcap_Associate_source_diagnostic },
|
|
|
|
{ &hf_tcap_aare_user_information, BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tcap_AARE_user_information },
|
|
|
|
{ NULL, 0, 0, 0, NULL }
|
2008-09-13 15:32:59 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_AARE_apdu_U(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
|
|
|
|
AARE_apdu_U_sequence, hf_index, ett_tcap_AARE_apdu_U);
|
2008-09-13 15:32:59 +00:00
|
|
|
|
|
|
|
return offset;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_AARE_apdu(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_tagged_type(implicit_tag, actx, tree, tvb, offset,
|
|
|
|
hf_index, BER_CLASS_APP, 1, TRUE, dissect_tcap_AARE_apdu_U);
|
|
|
|
|
|
|
|
return offset;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static const value_string tcap_ABRT_source_vals[] = {
|
|
|
|
{ 0, "dialogue-service-user" },
|
|
|
|
{ 1, "dialogue-service-provider" },
|
|
|
|
{ 0, NULL }
|
|
|
|
};
|
2008-09-13 15:32:59 +00:00
|
|
|
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static int
|
|
|
|
dissect_tcap_ABRT_source(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
|
|
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
|
|
|
|
NULL);
|
2008-09-13 15:32:59 +00:00
|
|
|
|
|
|
|
return offset;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const ber_sequence_t ABRT_user_information_sequence_of[1] = {
|
|
|
|
{ &hf_tcap_abrt_user_information_item, BER_CLASS_UNI, BER_UNI_TAG_EXTERNAL, BER_FLAGS_NOOWNTAG, dissect_tcap_EXTERNAL },
|
2008-09-13 15:32:59 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_ABRT_user_information(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2008-09-13 15:32:59 +00:00
|
|
|
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
|
2008-09-14 14:42:39 +00:00
|
|
|
ABRT_user_information_sequence_of, hf_index, ett_tcap_ABRT_user_information);
|
2008-09-13 15:32:59 +00:00
|
|
|
|
|
|
|
return offset;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const ber_sequence_t ABRT_apdu_U_sequence[] = {
|
|
|
|
{ &hf_tcap_abort_source , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_tcap_ABRT_source },
|
|
|
|
{ &hf_tcap_abrt_user_information, BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tcap_ABRT_user_information },
|
2008-09-13 15:32:59 +00:00
|
|
|
{ NULL, 0, 0, 0, NULL }
|
|
|
|
};
|
|
|
|
|
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_ABRT_apdu_U(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2008-09-13 15:32:59 +00:00
|
|
|
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
|
2008-09-14 14:42:39 +00:00
|
|
|
ABRT_apdu_U_sequence, hf_index, ett_tcap_ABRT_apdu_U);
|
2008-09-13 15:32:59 +00:00
|
|
|
|
|
|
|
return offset;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_ABRT_apdu(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2008-09-13 15:32:59 +00:00
|
|
|
offset = dissect_ber_tagged_type(implicit_tag, actx, tree, tvb, offset,
|
2008-09-14 14:42:39 +00:00
|
|
|
hf_index, BER_CLASS_APP, 4, TRUE, dissect_tcap_ABRT_apdu_U);
|
2008-09-13 15:32:59 +00:00
|
|
|
|
|
|
|
return offset;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
const value_string tcap_DialoguePDU_vals[] = {
|
|
|
|
{ 0, "dialogueRequest" },
|
|
|
|
{ 1, "dialogueResponse" },
|
|
|
|
{ 4, "dialogueAbort" },
|
2008-09-13 15:32:59 +00:00
|
|
|
{ 0, NULL }
|
|
|
|
};
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static const ber_choice_t DialoguePDU_choice[] = {
|
|
|
|
{ 0, &hf_tcap_dialogueRequest, BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_tcap_AARQ_apdu },
|
|
|
|
{ 1, &hf_tcap_dialogueResponse, BER_CLASS_APP, 1, BER_FLAGS_NOOWNTAG, dissect_tcap_AARE_apdu },
|
|
|
|
{ 4, &hf_tcap_dialogueAbort , BER_CLASS_APP, 4, BER_FLAGS_NOOWNTAG, dissect_tcap_ABRT_apdu },
|
2008-09-13 15:32:59 +00:00
|
|
|
{ 0, NULL, 0, 0, 0, NULL }
|
|
|
|
};
|
|
|
|
|
|
|
|
int
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_DialoguePDU(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
2008-09-13 15:32:59 +00:00
|
|
|
offset = dissect_ber_choice(actx, tree, tvb, offset,
|
2008-09-14 14:42:39 +00:00
|
|
|
DialoguePDU_choice, hf_index, ett_tcap_DialoguePDU,
|
2008-09-13 15:32:59 +00:00
|
|
|
NULL);
|
|
|
|
|
|
|
|
return offset;
|
|
|
|
}
|
|
|
|
|
2007-04-21 20:53:35 +00:00
|
|
|
/*--- PDUs ---*/
|
|
|
|
|
2008-09-14 14:42:39 +00:00
|
|
|
static void dissect_UniDialoguePDU_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
|
2007-05-13 20:58:29 +00:00
|
|
|
asn1_ctx_t asn1_ctx;
|
|
|
|
asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_UniDialoguePDU(FALSE, tvb, 0, &asn1_ctx, tree, hf_tcap_UniDialoguePDU_PDU);
|
2007-04-21 20:53:35 +00:00
|
|
|
}
|
2008-09-14 14:42:39 +00:00
|
|
|
static void dissect_DialoguePDU_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
|
2007-05-13 20:58:29 +00:00
|
|
|
asn1_ctx_t asn1_ctx;
|
|
|
|
asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
|
2008-09-14 14:42:39 +00:00
|
|
|
dissect_tcap_DialoguePDU(FALSE, tvb, 0, &asn1_ctx, tree, hf_tcap_DialoguePDU_PDU);
|
2007-04-21 20:53:35 +00:00
|
|
|
}
|
|
|
|
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
/*--- End of included file: packet-tcap-fn.c ---*/
|
2011-05-13 08:12:27 +00:00
|
|
|
#line 141 "../../asn1/tcap/packet-tcap-template.c"
|
2003-10-02 06:13:29 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
const value_string tcap_component_type_str[] = {
|
|
|
|
{ TCAP_COMP_INVOKE, "Invoke" },
|
|
|
|
{ TCAP_COMP_RRL, "Return Result(L)" },
|
|
|
|
{ TCAP_COMP_RE, "Return Error" },
|
|
|
|
{ TCAP_COMP_REJECT, "Reject" },
|
|
|
|
{ TCAP_COMP_RRN, "Return Result(NL)" },
|
|
|
|
{ 0, NULL } };
|
|
|
|
|
2003-10-02 06:13:29 +00:00
|
|
|
|
|
|
|
static void
|
2005-06-07 05:49:06 +00:00
|
|
|
dissect_tcap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
|
2003-10-02 06:13:29 +00:00
|
|
|
{
|
2005-06-07 05:49:06 +00:00
|
|
|
proto_item *item=NULL;
|
|
|
|
proto_tree *tree=NULL;
|
2007-07-27 19:24:40 +00:00
|
|
|
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
struct tcaphash_context_t * p_tcap_context;
|
2006-10-03 19:24:22 +00:00
|
|
|
dissector_handle_t subdissector_handle;
|
2007-05-13 20:58:29 +00:00
|
|
|
asn1_ctx_t asn1_ctx;
|
2007-08-14 22:05:36 +00:00
|
|
|
gint8 class;
|
|
|
|
gboolean pc;
|
|
|
|
gint tag;
|
|
|
|
|
2010-06-04 19:28:39 +00:00
|
|
|
/* Check if ANSI TCAP and call the ANSI TCAP dissector if that's the case
|
2007-08-14 22:05:36 +00:00
|
|
|
* 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,
|
2010-06-04 19:28:39 +00:00
|
|
|
* abort [PRIVATE 22] IMPLICIT Abort
|
2007-08-14 22:05:36 +00:00
|
|
|
* }
|
2010-06-04 19:28:39 +00:00
|
|
|
*
|
|
|
|
*
|
2007-08-14 22:05:36 +00:00
|
|
|
*/
|
|
|
|
get_ber_identifier(tvb, 0, &class, &pc, &tag);
|
2007-09-12 16:45:53 +00:00
|
|
|
|
2007-08-14 22:05:36 +00:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
}
|
2007-09-12 16:45:53 +00:00
|
|
|
|
2007-08-14 22:05:36 +00:00
|
|
|
/* ITU TCAP */
|
2007-05-13 20:58:29 +00:00
|
|
|
asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-16 07:46:03 +00:00
|
|
|
tcap_top_tree = parent_tree;
|
2007-07-27 19:24:40 +00:00
|
|
|
tcap_stat_tree = NULL;
|
|
|
|
|
2009-08-09 07:59:51 +00:00
|
|
|
col_set_str(pinfo->cinfo, COL_PROTOCOL, "TCAP");
|
2005-06-07 05:49:06 +00:00
|
|
|
|
|
|
|
/* create display subtree for the protocol */
|
|
|
|
if(parent_tree){
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
item = proto_tree_add_item(parent_tree, proto_tcap, tvb, 0, -1, FALSE);
|
|
|
|
tree = proto_item_add_subtree(item, ett_tcap);
|
|
|
|
tcap_stat_tree=tree;
|
2003-10-02 06:13:29 +00:00
|
|
|
}
|
2005-06-16 07:46:03 +00:00
|
|
|
cur_oid = NULL;
|
|
|
|
tcapext_oid = NULL;
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
raz_tcap_private(&tcap_private);
|
|
|
|
|
|
|
|
pinfo->private_data = &tcap_private;
|
|
|
|
gp_tcapsrt_info=tcapsrt_razinfo();
|
|
|
|
tcap_subdissector_used=FALSE;
|
|
|
|
gp_tcap_context=NULL;
|
2007-05-13 20:58:29 +00:00
|
|
|
dissect_tcap_TCMessage(FALSE, tvb, 0, &asn1_ctx, tree, -1);
|
2007-04-23 10:45:00 +00:00
|
|
|
|
2007-05-13 20:58:29 +00:00
|
|
|
if (gtcap_HandleSRT && !tcap_subdissector_used ) {
|
2007-07-27 19:24:40 +00:00
|
|
|
p_tcap_context=tcapsrt_call_matching(tvb, pinfo, tcap_stat_tree, gp_tcapsrt_info);
|
|
|
|
tcap_private.context=p_tcap_context;
|
2007-05-13 20:58:29 +00:00
|
|
|
|
|
|
|
/* If the current message is TCAP only,
|
2007-07-27 19:24:40 +00:00
|
|
|
* save the Application Context Name for the next messages
|
2007-05-13 20:58:29 +00:00
|
|
|
*/
|
|
|
|
if ( p_tcap_context && cur_oid && !p_tcap_context->oid_present ) {
|
|
|
|
/* Save the application context and the sub dissector */
|
2010-06-04 19:28:39 +00:00
|
|
|
g_strlcpy(p_tcap_context->oid, cur_oid, sizeof(p_tcap_context->oid));
|
2007-07-27 19:24:40 +00:00
|
|
|
p_tcap_context->oid_present=TRUE;
|
2007-05-13 20:58:29 +00:00
|
|
|
if ( (subdissector_handle = dissector_get_string_handle(ber_oid_dissector_table, cur_oid)) ) {
|
|
|
|
p_tcap_context->subdissector_handle=subdissector_handle;
|
2007-07-27 19:24:40 +00:00
|
|
|
p_tcap_context->subdissector_present=TRUE;
|
2007-05-13 20:58:29 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
if (gtcap_HandleSRT && p_tcap_context && p_tcap_context->callback) {
|
|
|
|
/* Callback fonction for the upper layer */
|
2007-07-27 19:24:40 +00:00
|
|
|
(p_tcap_context->callback)(tvb, pinfo, tcap_stat_tree, p_tcap_context);
|
2007-05-13 20:58:29 +00:00
|
|
|
}
|
|
|
|
}
|
2003-10-02 06:13:29 +00:00
|
|
|
}
|
|
|
|
|
2005-12-17 16:55:45 +00:00
|
|
|
void
|
|
|
|
proto_reg_handoff_tcap(void)
|
|
|
|
{
|
2007-04-23 10:45:00 +00:00
|
|
|
|
2007-04-21 20:53:35 +00:00
|
|
|
data_handle = find_dissector("data");
|
2008-04-16 14:28:22 +00:00
|
|
|
ansi_tcap_handle = find_dissector("ansi_tcap");
|
2008-12-15 20:52:40 +00:00
|
|
|
ber_oid_dissector_table = find_dissector_table("ber.oid");
|
2007-08-14 22:05:36 +00:00
|
|
|
|
2007-04-21 20:53:35 +00:00
|
|
|
|
|
|
|
/*--- Included file: packet-tcap-dis-tab.c ---*/
|
2011-05-13 08:12:27 +00:00
|
|
|
#line 1 "../../asn1/tcap/packet-tcap-dis-tab.c"
|
2009-03-09 13:26:47 +00:00
|
|
|
register_ber_oid_dissector("0.0.17.773.1.1.1", dissect_DialoguePDU_PDU, proto_tcap, "id-as-dialogue");
|
|
|
|
register_ber_oid_dissector("0.0.17.773.1.2.1", dissect_UniDialoguePDU_PDU, proto_tcap, "id-as-uniDialogue");
|
2007-04-21 20:53:35 +00:00
|
|
|
|
2005-12-18 11:19:25 +00:00
|
|
|
|
2007-04-21 20:53:35 +00:00
|
|
|
/*--- End of included file: packet-tcap-dis-tab.c ---*/
|
2011-05-13 08:12:27 +00:00
|
|
|
#line 253 "../../asn1/tcap/packet-tcap-template.c"
|
2005-12-17 16:55:45 +00:00
|
|
|
}
|
2005-06-07 05:49:06 +00:00
|
|
|
|
2005-12-17 16:55:45 +00:00
|
|
|
static void init_tcap(void);
|
2005-08-18 21:36:59 +00:00
|
|
|
|
2003-10-02 06:13:29 +00:00
|
|
|
void
|
|
|
|
proto_register_tcap(void)
|
|
|
|
{
|
|
|
|
|
|
|
|
/* Setup list of header fields See Section 1.6.1 for details*/
|
2003-10-16 18:15:54 +00:00
|
|
|
static hf_register_info hf[] = {
|
|
|
|
{ &hf_tcap_tag,
|
|
|
|
{ "Tag", "tcap.msgtype",
|
|
|
|
FT_UINT8, BASE_HEX, NULL, 0,
|
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
|
|
|
NULL, HFILL }
|
2003-10-16 18:15:54 +00:00
|
|
|
},
|
|
|
|
{ &hf_tcap_length,
|
|
|
|
{ "Length", "tcap.len",
|
2007-10-11 22:49:52 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0,
|
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
|
|
|
NULL, HFILL }
|
2003-10-16 18:15:54 +00:00
|
|
|
},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_data,
|
|
|
|
{ "Data", "tcap.data",
|
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
|
|
|
FT_BYTES, BASE_NONE, NULL, 0,
|
|
|
|
NULL, HFILL }
|
2004-10-27 20:04:56 +00:00
|
|
|
},
|
2005-08-18 21:36:59 +00:00
|
|
|
{ &hf_tcap_tid,
|
|
|
|
{ "Transaction Id", "tcap.tid",
|
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
|
|
|
FT_BYTES, BASE_NONE, NULL, 0,
|
|
|
|
NULL, HFILL }
|
2007-04-23 10:45:00 +00:00
|
|
|
},
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
/* Tcap Service Response Time */
|
|
|
|
{ &hf_tcapsrt_SessionId,
|
|
|
|
{ "Session Id",
|
|
|
|
"tcap.srt.session_id",
|
|
|
|
FT_UINT32, BASE_DEC, NULL, 0x0,
|
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
|
|
|
NULL, HFILL }
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
},
|
|
|
|
{ &hf_tcapsrt_BeginSession,
|
|
|
|
{ "Begin Session",
|
|
|
|
"tcap.srt.begin",
|
|
|
|
FT_FRAMENUM, BASE_NONE, NULL, 0x0,
|
|
|
|
"SRT Begin of Session", HFILL }
|
|
|
|
},
|
|
|
|
{ &hf_tcapsrt_EndSession,
|
|
|
|
{ "End Session",
|
|
|
|
"tcap.srt.end",
|
|
|
|
FT_FRAMENUM, BASE_NONE, NULL, 0x0,
|
|
|
|
"SRT End of Session", HFILL }
|
|
|
|
},
|
|
|
|
{ &hf_tcapsrt_SessionTime,
|
|
|
|
{ "Session duration",
|
|
|
|
"tcap.srt.sessiontime",
|
|
|
|
FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0,
|
|
|
|
"Duration of the TCAP session", HFILL }
|
|
|
|
},
|
|
|
|
{ &hf_tcapsrt_Duplicate,
|
2007-07-27 19:24:40 +00:00
|
|
|
{ "Session Duplicate",
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
"tcap.srt.duplicate",
|
2007-07-27 19:24:40 +00:00
|
|
|
FT_FRAMENUM, BASE_NONE, NULL, 0x0,
|
|
|
|
"SRT Duplicated with Session", HFILL }
|
2005-08-18 21:36:59 +00:00
|
|
|
},
|
2005-06-07 05:49:06 +00:00
|
|
|
|
|
|
|
/*--- Included file: packet-tcap-hfarr.c ---*/
|
2011-05-13 08:12:27 +00:00
|
|
|
#line 1 "../../asn1/tcap/packet-tcap-hfarr.c"
|
2007-04-21 20:53:35 +00:00
|
|
|
{ &hf_tcap_UniDialoguePDU_PDU,
|
|
|
|
{ "UniDialoguePDU", "tcap.UniDialoguePDU",
|
|
|
|
FT_UINT32, BASE_DEC, VALS(tcap_UniDialoguePDU_vals), 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
NULL, HFILL }},
|
2008-09-14 14:42:39 +00:00
|
|
|
{ &hf_tcap_DialoguePDU_PDU,
|
|
|
|
{ "DialoguePDU", "tcap.DialoguePDU",
|
|
|
|
FT_UINT32, BASE_DEC, VALS(tcap_DialoguePDU_vals), 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
NULL, HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_oid,
|
|
|
|
{ "oid", "tcap.oid",
|
2005-12-08 23:29:21 +00:00
|
|
|
FT_OID, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"OBJECT_IDENTIFIER", HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_dialog,
|
|
|
|
{ "dialog", "tcap.dialog",
|
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
|
|
|
FT_BYTES, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"Dialog1", HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_unidirectional,
|
|
|
|
{ "unidirectional", "tcap.unidirectional",
|
|
|
|
FT_NONE, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
NULL, HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_begin,
|
|
|
|
{ "begin", "tcap.begin",
|
|
|
|
FT_NONE, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
NULL, HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_end,
|
|
|
|
{ "end", "tcap.end",
|
|
|
|
FT_NONE, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
NULL, HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_continue,
|
|
|
|
{ "continue", "tcap.continue",
|
|
|
|
FT_NONE, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
NULL, HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_abort,
|
|
|
|
{ "abort", "tcap.abort",
|
|
|
|
FT_NONE, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
NULL, HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_dialoguePortion,
|
|
|
|
{ "dialoguePortion", "tcap.dialoguePortion",
|
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
|
|
|
FT_BYTES, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
NULL, HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_components,
|
|
|
|
{ "components", "tcap.components",
|
2005-08-18 21:36:59 +00:00
|
|
|
FT_UINT32, BASE_DEC, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"ComponentPortion", HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_otid,
|
|
|
|
{ "otid", "tcap.otid",
|
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
|
|
|
FT_BYTES, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"OrigTransactionID", HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_dtid,
|
|
|
|
{ "dtid", "tcap.dtid",
|
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
|
|
|
FT_BYTES, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"DestTransactionID", HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_reason,
|
|
|
|
{ "reason", "tcap.reason",
|
|
|
|
FT_UINT32, BASE_DEC, VALS(tcap_Reason_vals), 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
NULL, HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_p_abortCause,
|
|
|
|
{ "p-abortCause", "tcap.p_abortCause",
|
2007-12-06 11:23:35 +00:00
|
|
|
FT_UINT32, BASE_DEC, VALS(tcap_P_AbortCause_U_vals), 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
NULL, HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_u_abortCause,
|
|
|
|
{ "u-abortCause", "tcap.u_abortCause",
|
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
|
|
|
FT_BYTES, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"DialoguePortion", HFILL }},
|
2007-11-07 21:22:25 +00:00
|
|
|
{ &hf_tcap__untag_item,
|
2009-05-16 22:07:03 +00:00
|
|
|
{ "Component", "tcap.Component",
|
2005-06-07 05:49:06 +00:00
|
|
|
FT_UINT32, BASE_DEC, VALS(tcap_Component_vals), 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
NULL, HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_invoke,
|
|
|
|
{ "invoke", "tcap.invoke",
|
|
|
|
FT_NONE, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
NULL, HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_returnResultLast,
|
|
|
|
{ "returnResultLast", "tcap.returnResultLast",
|
|
|
|
FT_NONE, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"ReturnResult", HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_returnError,
|
|
|
|
{ "returnError", "tcap.returnError",
|
|
|
|
FT_NONE, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
NULL, HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_reject,
|
|
|
|
{ "reject", "tcap.reject",
|
|
|
|
FT_NONE, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
NULL, HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_returnResultNotLast,
|
|
|
|
{ "returnResultNotLast", "tcap.returnResultNotLast",
|
|
|
|
FT_NONE, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"ReturnResult", HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_invokeID,
|
|
|
|
{ "invokeID", "tcap.invokeID",
|
2005-11-26 03:09:40 +00:00
|
|
|
FT_INT32, BASE_DEC, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"InvokeIdType", HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_linkedID,
|
|
|
|
{ "linkedID", "tcap.linkedID",
|
2005-11-26 03:09:40 +00:00
|
|
|
FT_INT32, BASE_DEC, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"InvokeIdType", HFILL }},
|
2005-06-07 20:29:23 +00:00
|
|
|
{ &hf_tcap_opCode,
|
|
|
|
{ "opCode", "tcap.opCode",
|
|
|
|
FT_UINT32, BASE_DEC, VALS(tcap_OPERATION_vals), 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"OPERATION", HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_parameter,
|
|
|
|
{ "parameter", "tcap.parameter",
|
2005-06-07 20:29:23 +00:00
|
|
|
FT_NONE, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
NULL, HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_resultretres,
|
|
|
|
{ "resultretres", "tcap.resultretres",
|
|
|
|
FT_NONE, BASE_NONE, NULL, 0,
|
2010-05-11 03:53:31 +00:00
|
|
|
NULL, HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_errorCode,
|
|
|
|
{ "errorCode", "tcap.errorCode",
|
|
|
|
FT_UINT32, BASE_DEC, VALS(tcap_ErrorCode_vals), 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
NULL, HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_invokeIDRej,
|
|
|
|
{ "invokeIDRej", "tcap.invokeIDRej",
|
|
|
|
FT_UINT32, BASE_DEC, VALS(tcap_T_invokeIDRej_vals), 0,
|
2010-05-11 03:53:31 +00:00
|
|
|
NULL, HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_derivable,
|
|
|
|
{ "derivable", "tcap.derivable",
|
2005-11-26 03:09:40 +00:00
|
|
|
FT_INT32, BASE_DEC, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"InvokeIdType", HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_not_derivable,
|
|
|
|
{ "not-derivable", "tcap.not_derivable",
|
|
|
|
FT_NONE, BASE_NONE, NULL, 0,
|
2010-05-11 03:53:31 +00:00
|
|
|
NULL, HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_problem,
|
|
|
|
{ "problem", "tcap.problem",
|
|
|
|
FT_UINT32, BASE_DEC, VALS(tcap_T_problem_vals), 0,
|
2010-05-11 03:53:31 +00:00
|
|
|
NULL, HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_generalProblem,
|
|
|
|
{ "generalProblem", "tcap.generalProblem",
|
|
|
|
FT_INT32, BASE_DEC, VALS(tcap_GeneralProblem_vals), 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
NULL, HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_invokeProblem,
|
|
|
|
{ "invokeProblem", "tcap.invokeProblem",
|
|
|
|
FT_INT32, BASE_DEC, VALS(tcap_InvokeProblem_vals), 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
NULL, HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_returnResultProblem,
|
|
|
|
{ "returnResultProblem", "tcap.returnResultProblem",
|
|
|
|
FT_INT32, BASE_DEC, VALS(tcap_ReturnResultProblem_vals), 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
NULL, HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_returnErrorProblem,
|
|
|
|
{ "returnErrorProblem", "tcap.returnErrorProblem",
|
|
|
|
FT_INT32, BASE_DEC, VALS(tcap_ReturnErrorProblem_vals), 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
NULL, HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_localValue,
|
|
|
|
{ "localValue", "tcap.localValue",
|
|
|
|
FT_INT32, BASE_DEC, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"INTEGER", HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_globalValue,
|
|
|
|
{ "globalValue", "tcap.globalValue",
|
2005-12-08 23:29:21 +00:00
|
|
|
FT_OID, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"OBJECT_IDENTIFIER", HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_nationaler,
|
|
|
|
{ "nationaler", "tcap.nationaler",
|
2005-11-26 03:09:40 +00:00
|
|
|
FT_INT32, BASE_DEC, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"INTEGER_M32768_32767", HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
{ &hf_tcap_privateer,
|
|
|
|
{ "privateer", "tcap.privateer",
|
|
|
|
FT_INT32, BASE_DEC, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"INTEGER", HFILL }},
|
2008-09-13 15:32:59 +00:00
|
|
|
{ &hf_tcap_unidialoguePDU,
|
|
|
|
{ "unidialoguePDU", "tcap.unidialoguePDU",
|
|
|
|
FT_NONE, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"AUDT_apdu", HFILL }},
|
2008-09-14 14:42:39 +00:00
|
|
|
{ &hf_tcap_audt_protocol_version,
|
2008-09-13 15:32:59 +00:00
|
|
|
{ "protocol-version", "tcap.protocol_version",
|
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
|
|
|
FT_BYTES, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"AUDT_protocol_version", HFILL }},
|
2008-09-13 15:32:59 +00:00
|
|
|
{ &hf_tcap_audt_application_context_name,
|
|
|
|
{ "application-context-name", "tcap.application_context_name",
|
|
|
|
FT_OID, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"AUDT_application_context_name", HFILL }},
|
2008-09-13 15:32:59 +00:00
|
|
|
{ &hf_tcap_audt_user_information,
|
|
|
|
{ "user-information", "tcap.user_information",
|
|
|
|
FT_UINT32, BASE_DEC, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"AUDT_user_information", HFILL }},
|
2008-09-13 15:32:59 +00:00
|
|
|
{ &hf_tcap_audt_user_information_item,
|
2009-05-16 22:07:03 +00:00
|
|
|
{ "user-information item", "tcap.user_information_item",
|
2008-09-13 15:32:59 +00:00
|
|
|
FT_NONE, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"EXTERNAL", HFILL }},
|
2008-09-14 14:42:39 +00:00
|
|
|
{ &hf_tcap_dialogueRequest,
|
|
|
|
{ "dialogueRequest", "tcap.dialogueRequest",
|
|
|
|
FT_NONE, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"AARQ_apdu", HFILL }},
|
2008-09-14 14:42:39 +00:00
|
|
|
{ &hf_tcap_dialogueResponse,
|
|
|
|
{ "dialogueResponse", "tcap.dialogueResponse",
|
|
|
|
FT_NONE, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"AARE_apdu", HFILL }},
|
2008-09-14 14:42:39 +00:00
|
|
|
{ &hf_tcap_dialogueAbort,
|
|
|
|
{ "dialogueAbort", "tcap.dialogueAbort",
|
|
|
|
FT_NONE, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"ABRT_apdu", HFILL }},
|
2008-09-14 14:42:39 +00:00
|
|
|
{ &hf_tcap_aarq_protocol_version,
|
|
|
|
{ "protocol-version", "tcap.protocol_version",
|
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
|
|
|
FT_BYTES, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"AARQ_protocol_version", HFILL }},
|
2008-09-14 14:42:39 +00:00
|
|
|
{ &hf_tcap_aarq_application_context_name,
|
|
|
|
{ "application-context-name", "tcap.application_context_name",
|
|
|
|
FT_OID, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"AARQ_application_context_name", HFILL }},
|
2008-09-14 14:42:39 +00:00
|
|
|
{ &hf_tcap_aarq_user_information,
|
|
|
|
{ "user-information", "tcap.user_information",
|
|
|
|
FT_UINT32, BASE_DEC, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"AARQ_user_information", HFILL }},
|
2008-09-14 14:42:39 +00:00
|
|
|
{ &hf_tcap_aarq_user_information_item,
|
2009-05-16 22:07:03 +00:00
|
|
|
{ "user-information item", "tcap.user_information_item",
|
2008-09-14 14:42:39 +00:00
|
|
|
FT_NONE, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"EXTERNAL", HFILL }},
|
2008-09-14 14:42:39 +00:00
|
|
|
{ &hf_tcap_aare_protocol_version,
|
|
|
|
{ "protocol-version", "tcap.protocol_version",
|
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
|
|
|
FT_BYTES, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"AARE_protocol_version", HFILL }},
|
2008-09-14 14:42:39 +00:00
|
|
|
{ &hf_tcap_aare_application_context_name,
|
|
|
|
{ "application-context-name", "tcap.application_context_name",
|
|
|
|
FT_OID, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"AARE_application_context_name", HFILL }},
|
2008-09-14 14:42:39 +00:00
|
|
|
{ &hf_tcap_result,
|
|
|
|
{ "result", "tcap.result",
|
|
|
|
FT_INT32, BASE_DEC, VALS(tcap_Associate_result_vals), 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"Associate_result", HFILL }},
|
2008-09-14 14:42:39 +00:00
|
|
|
{ &hf_tcap_result_source_diagnostic,
|
|
|
|
{ "result-source-diagnostic", "tcap.result_source_diagnostic",
|
|
|
|
FT_UINT32, BASE_DEC, VALS(tcap_Associate_source_diagnostic_vals), 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"Associate_source_diagnostic", HFILL }},
|
2008-09-14 14:42:39 +00:00
|
|
|
{ &hf_tcap_aare_user_information,
|
|
|
|
{ "user-information", "tcap.user_information",
|
|
|
|
FT_UINT32, BASE_DEC, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"AARE_user_information", HFILL }},
|
2008-09-14 14:42:39 +00:00
|
|
|
{ &hf_tcap_aare_user_information_item,
|
2009-05-16 22:07:03 +00:00
|
|
|
{ "user-information item", "tcap.user_information_item",
|
2008-09-14 14:42:39 +00:00
|
|
|
FT_NONE, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"EXTERNAL", HFILL }},
|
2008-09-14 14:42:39 +00:00
|
|
|
{ &hf_tcap_abort_source,
|
|
|
|
{ "abort-source", "tcap.abort_source",
|
|
|
|
FT_INT32, BASE_DEC, VALS(tcap_ABRT_source_vals), 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"ABRT_source", HFILL }},
|
2008-09-14 14:42:39 +00:00
|
|
|
{ &hf_tcap_abrt_user_information,
|
|
|
|
{ "user-information", "tcap.user_information",
|
|
|
|
FT_UINT32, BASE_DEC, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"ABRT_user_information", HFILL }},
|
2008-09-14 14:42:39 +00:00
|
|
|
{ &hf_tcap_abrt_user_information_item,
|
2009-05-16 22:07:03 +00:00
|
|
|
{ "user-information item", "tcap.user_information_item",
|
2008-09-14 14:42:39 +00:00
|
|
|
FT_NONE, BASE_NONE, NULL, 0,
|
2010-05-11 02:58:27 +00:00
|
|
|
"EXTERNAL", HFILL }},
|
2008-09-14 14:42:39 +00:00
|
|
|
{ &hf_tcap_dialogue_service_user,
|
|
|
|
{ "dialogue-service-user", "tcap.dialogue_service_user",
|
|
|
|
FT_INT32, BASE_DEC, VALS(tcap_T_dialogue_service_user_vals), 0,
|
2010-05-11 03:53:31 +00:00
|
|
|
NULL, HFILL }},
|
2008-09-14 14:42:39 +00:00
|
|
|
{ &hf_tcap_dialogue_service_provider,
|
|
|
|
{ "dialogue-service-provider", "tcap.dialogue_service_provider",
|
|
|
|
FT_INT32, BASE_DEC, VALS(tcap_T_dialogue_service_provider_vals), 0,
|
2010-05-11 03:53:31 +00:00
|
|
|
NULL, HFILL }},
|
2008-09-14 14:42:39 +00:00
|
|
|
{ &hf_tcap_AUDT_protocol_version_version1,
|
2005-06-07 05:49:06 +00:00
|
|
|
{ "version1", "tcap.version1",
|
|
|
|
FT_BOOLEAN, 8, NULL, 0x80,
|
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
|
|
|
NULL, HFILL }},
|
2008-09-14 14:42:39 +00:00
|
|
|
{ &hf_tcap_AARQ_protocol_version_version1,
|
2005-06-07 05:49:06 +00:00
|
|
|
{ "version1", "tcap.version1",
|
|
|
|
FT_BOOLEAN, 8, NULL, 0x80,
|
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
|
|
|
NULL, HFILL }},
|
2008-09-14 14:42:39 +00:00
|
|
|
{ &hf_tcap_AARE_protocol_version_version1,
|
2005-06-07 05:49:06 +00:00
|
|
|
{ "version1", "tcap.version1",
|
|
|
|
FT_BOOLEAN, 8, NULL, 0x80,
|
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
|
|
|
NULL, HFILL }},
|
2005-06-07 05:49:06 +00:00
|
|
|
|
|
|
|
/*--- End of included file: packet-tcap-hfarr.c ---*/
|
2011-05-13 08:12:27 +00:00
|
|
|
#line 315 "../../asn1/tcap/packet-tcap-template.c"
|
2003-10-16 18:15:54 +00:00
|
|
|
};
|
2003-10-02 06:13:29 +00:00
|
|
|
|
|
|
|
/* Setup protocol subtree array */
|
2003-10-16 18:15:54 +00:00
|
|
|
static gint *ett[] = {
|
|
|
|
&ett_tcap,
|
|
|
|
&ett_param,
|
2005-08-18 21:36:59 +00:00
|
|
|
&ett_otid,
|
|
|
|
&ett_dtid,
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
&ett_tcap_stat,
|
2005-06-07 05:49:06 +00:00
|
|
|
|
|
|
|
/*--- Included file: packet-tcap-ettarr.c ---*/
|
2011-05-13 08:12:27 +00:00
|
|
|
#line 1 "../../asn1/tcap/packet-tcap-ettarr.c"
|
2007-11-07 21:22:25 +00:00
|
|
|
&ett_tcap_ExternalPDU_U,
|
2007-04-23 06:24:39 +00:00
|
|
|
&ett_tcap_TCMessage,
|
2005-06-07 05:49:06 +00:00
|
|
|
&ett_tcap_Unidirectional,
|
|
|
|
&ett_tcap_Begin,
|
|
|
|
&ett_tcap_End,
|
|
|
|
&ett_tcap_Continue,
|
|
|
|
&ett_tcap_Abort,
|
|
|
|
&ett_tcap_Reason,
|
2007-11-07 21:22:25 +00:00
|
|
|
&ett_tcap_SEQUENCE_SIZE_1_MAX_OF_Component,
|
2005-06-07 05:49:06 +00:00
|
|
|
&ett_tcap_Component,
|
|
|
|
&ett_tcap_Invoke,
|
|
|
|
&ett_tcap_ReturnResult,
|
|
|
|
&ett_tcap_T_resultretres,
|
|
|
|
&ett_tcap_ReturnError,
|
|
|
|
&ett_tcap_Reject,
|
|
|
|
&ett_tcap_T_invokeIDRej,
|
|
|
|
&ett_tcap_T_problem,
|
|
|
|
&ett_tcap_OPERATION,
|
|
|
|
&ett_tcap_ERROR,
|
|
|
|
&ett_tcap_ErrorCode,
|
2008-09-13 15:32:59 +00:00
|
|
|
&ett_tcap_UniDialoguePDU,
|
|
|
|
&ett_tcap_AUDT_apdu_U,
|
2008-09-14 14:42:39 +00:00
|
|
|
&ett_tcap_AUDT_protocol_version,
|
2008-09-13 15:32:59 +00:00
|
|
|
&ett_tcap_AUDT_user_information,
|
2008-09-14 14:42:39 +00:00
|
|
|
&ett_tcap_DialoguePDU,
|
|
|
|
&ett_tcap_AARQ_apdu_U,
|
|
|
|
&ett_tcap_AARQ_protocol_version,
|
|
|
|
&ett_tcap_AARQ_user_information,
|
|
|
|
&ett_tcap_AARE_apdu_U,
|
|
|
|
&ett_tcap_AARE_protocol_version,
|
|
|
|
&ett_tcap_AARE_user_information,
|
|
|
|
&ett_tcap_ABRT_apdu_U,
|
|
|
|
&ett_tcap_ABRT_user_information,
|
|
|
|
&ett_tcap_Associate_source_diagnostic,
|
2005-06-07 05:49:06 +00:00
|
|
|
|
|
|
|
/*--- End of included file: packet-tcap-ettarr.c ---*/
|
2011-05-13 08:12:27 +00:00
|
|
|
#line 325 "../../asn1/tcap/packet-tcap-template.c"
|
2003-10-16 18:15:54 +00:00
|
|
|
};
|
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
/*static enum_val_t tcap_options[] = {
|
2004-05-24 02:25:21 +00:00
|
|
|
{ "itu", "ITU", ITU_TCAP_STANDARD },
|
|
|
|
{ "ansi", "ANSI", ANSI_TCAP_STANDARD },
|
|
|
|
{ NULL, NULL, 0 }
|
2005-06-07 05:49:06 +00:00
|
|
|
};*/
|
2003-10-16 18:15:54 +00:00
|
|
|
|
|
|
|
module_t *tcap_module;
|
2003-10-02 06:13:29 +00:00
|
|
|
|
|
|
|
/* Register the protocol name and description */
|
2005-06-07 05:49:06 +00:00
|
|
|
proto_tcap = proto_register_protocol(PNAME, PSNAME, PFNAME);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
|
|
|
/* Required function calls to register the header fields and subtrees used */
|
2003-10-16 18:15:54 +00:00
|
|
|
proto_register_field_array(proto_tcap, hf, array_length(hf));
|
|
|
|
proto_register_subtree_array(ett, array_length(ett));
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2008-04-16 14:28:22 +00:00
|
|
|
tcap_module = prefs_register_protocol(proto_tcap, NULL);
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-16 07:46:03 +00:00
|
|
|
#if 0
|
|
|
|
prefs_register_enum_preference(tcap_module, "standard", "ITU TCAP standard",
|
2005-06-07 05:49:06 +00:00
|
|
|
"The SS7 standard used in ITU TCAP packets",
|
2005-06-16 07:46:03 +00:00
|
|
|
&tcap_standard, tcap_options, FALSE);
|
|
|
|
#else
|
|
|
|
prefs_register_obsolete_preference(tcap_module, "standard");
|
|
|
|
#endif
|
2003-10-02 06:13:29 +00:00
|
|
|
|
2005-06-16 07:46:03 +00:00
|
|
|
#if 0
|
|
|
|
prefs_register_bool_preference(tcap_module, "lock_info_col", "Lock Info column",
|
2003-10-16 18:15:54 +00:00
|
|
|
"Always show TCAP in Info column",
|
|
|
|
&lock_info_col);
|
2005-06-16 07:46:03 +00:00
|
|
|
#else
|
|
|
|
prefs_register_obsolete_preference(tcap_module, "lock_info_col");
|
|
|
|
#endif
|
|
|
|
|
2004-10-14 23:45:09 +00:00
|
|
|
/* Set default SSNs */
|
2005-12-17 16:55:45 +00:00
|
|
|
range_convert_str(&global_ssn_range, "", MAX_SSN);
|
2004-10-16 23:32:24 +00:00
|
|
|
ssn_range = range_empty();
|
2004-10-14 23:45:09 +00:00
|
|
|
|
|
|
|
prefs_register_range_preference(tcap_module, "ssn", "SCCP SSNs",
|
|
|
|
"SCCP (and SUA) SSNs to decode as TCAP",
|
|
|
|
&global_ssn_range, MAX_SSN);
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
|
|
|
|
prefs_register_bool_preference(tcap_module, "srt",
|
|
|
|
"Service Response Time Analyse",
|
|
|
|
"Activate the analyse for Response Time",
|
|
|
|
>cap_HandleSRT);
|
|
|
|
|
|
|
|
prefs_register_bool_preference(tcap_module, "persistentsrt",
|
|
|
|
"Persistent stats for SRT",
|
|
|
|
"Statistics for Response Time",
|
|
|
|
>cap_PersistentSRT);
|
2007-04-23 10:45:00 +00:00
|
|
|
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
prefs_register_uint_preference(tcap_module, "repetitiontimeout",
|
|
|
|
"Repetition timeout",
|
|
|
|
"Maximal delay for message repetion",
|
|
|
|
10, >cap_RepetitionTimeout);
|
|
|
|
|
|
|
|
prefs_register_uint_preference(tcap_module, "losttimeout",
|
|
|
|
"lost timeout",
|
|
|
|
"Maximal delay for message lost",
|
|
|
|
10, >cap_LostTimeout);
|
2007-04-23 10:45:00 +00:00
|
|
|
|
2005-12-17 16:55:45 +00:00
|
|
|
ansi_sub_dissectors = g_hash_table_new(g_direct_hash,g_direct_equal);
|
|
|
|
itu_sub_dissectors = g_hash_table_new(g_direct_hash,g_direct_equal);
|
2005-06-23 22:17:03 +00:00
|
|
|
|
|
|
|
/* 'globally' register dissector */
|
|
|
|
register_dissector("tcap", dissect_tcap, proto_tcap);
|
|
|
|
|
2005-12-17 16:55:45 +00:00
|
|
|
tcap_handle = create_dissector_handle(dissect_tcap, proto_tcap);
|
2005-06-07 05:49:06 +00:00
|
|
|
|
2005-12-17 16:55:45 +00:00
|
|
|
register_init_routine(&init_tcap);
|
|
|
|
}
|
2005-06-07 05:49:06 +00:00
|
|
|
|
2004-10-15 05:54:33 +00:00
|
|
|
|
|
|
|
static void range_delete_callback(guint32 ssn)
|
|
|
|
{
|
2005-12-17 16:55:45 +00:00
|
|
|
if ( ssn && !get_ansi_tcap_subdissector(ssn) && !get_itu_tcap_subdissector(ssn) ) {
|
2010-12-20 05:35:29 +00:00
|
|
|
dissector_delete_uint("sccp.ssn", ssn, tcap_handle);
|
2004-10-15 05:54:33 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void range_add_callback(guint32 ssn)
|
|
|
|
{
|
2005-12-17 16:55:45 +00:00
|
|
|
if (ssn && !get_ansi_tcap_subdissector(ssn) && !get_itu_tcap_subdissector(ssn) ) {
|
2010-12-20 05:35:29 +00:00
|
|
|
dissector_add_uint("sccp.ssn", ssn, tcap_handle);
|
2004-10-15 05:54:33 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-10-14 23:45:09 +00:00
|
|
|
|
2005-12-17 16:55:45 +00:00
|
|
|
static void init_tcap(void) {
|
|
|
|
if (ssn_range) {
|
|
|
|
range_foreach(ssn_range, range_delete_callback);
|
|
|
|
g_free(ssn_range);
|
2004-10-14 23:45:09 +00:00
|
|
|
}
|
2007-04-23 10:45:00 +00:00
|
|
|
|
2004-10-17 00:48:37 +00:00
|
|
|
ssn_range = range_copy(global_ssn_range);
|
2004-10-16 23:32:24 +00:00
|
|
|
range_foreach(ssn_range, range_add_callback);
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
tcapsrt_init_routine();
|
2003-10-02 06:13:29 +00:00
|
|
|
}
|
2005-06-07 05:49:06 +00:00
|
|
|
|
|
|
|
static int
|
2007-05-15 05:49:43 +00:00
|
|
|
dissect_tcap_param(asn1_ctx_t *actx, proto_tree *tree, tvbuff_t *tvb, int offset)
|
2005-06-07 05:49:06 +00:00
|
|
|
{
|
2005-06-16 07:46:03 +00:00
|
|
|
gint tag_offset, saved_offset, len_offset;
|
2005-06-07 05:49:06 +00:00
|
|
|
tvbuff_t *next_tvb;
|
|
|
|
proto_tree *subtree;
|
2005-06-16 07:46:03 +00:00
|
|
|
proto_item *pi;
|
2005-07-12 01:01:19 +00:00
|
|
|
gint8 class;
|
2005-06-16 07:46:03 +00:00
|
|
|
gboolean pc;
|
2005-07-12 01:01:19 +00:00
|
|
|
gint32 tag;
|
2005-06-16 07:46:03 +00:00
|
|
|
guint32 len;
|
2007-10-11 22:49:52 +00:00
|
|
|
guint32 tag_length;
|
|
|
|
guint32 len_length;
|
2005-07-12 01:01:19 +00:00
|
|
|
gboolean ind_field;
|
2007-04-23 10:45:00 +00:00
|
|
|
|
2005-06-16 07:46:03 +00:00
|
|
|
while (tvb_reported_length_remaining(tvb, offset) > 0)
|
2005-06-07 05:49:06 +00:00
|
|
|
{
|
2005-06-16 07:46:03 +00:00
|
|
|
saved_offset = offset;
|
2007-04-23 10:45:00 +00:00
|
|
|
|
2005-06-16 07:46:03 +00:00
|
|
|
offset = get_ber_identifier(tvb, offset, &class, &pc, &tag);
|
|
|
|
tag_offset = offset;
|
2007-08-24 07:12:04 +00:00
|
|
|
offset = get_ber_length(tvb, offset, &len, &ind_field);
|
2005-06-07 05:49:06 +00:00
|
|
|
len_offset = offset;
|
|
|
|
|
2007-10-11 22:49:52 +00:00
|
|
|
tag_length = tag_offset - saved_offset;
|
|
|
|
len_length = len_offset - tag_offset;
|
|
|
|
|
2005-06-07 05:49:06 +00:00
|
|
|
if (pc)
|
|
|
|
{
|
2007-10-11 22:49:52 +00:00
|
|
|
pi = proto_tree_add_text(tree, tvb, saved_offset,
|
|
|
|
len + (len_offset - saved_offset),
|
|
|
|
"CONSTRUCTOR");
|
2005-06-07 05:49:06 +00:00
|
|
|
subtree = proto_item_add_subtree(pi, ett_param);
|
|
|
|
proto_tree_add_uint_format(subtree, hf_tcap_tag, tvb,
|
2007-10-11 22:49:52 +00:00
|
|
|
saved_offset, tag_length, tag,
|
|
|
|
"CONSTRUCTOR Tag");
|
|
|
|
proto_tree_add_uint(subtree, hf_tcap_tag, tvb, saved_offset,
|
|
|
|
tag_length, class);
|
|
|
|
|
|
|
|
proto_tree_add_uint(subtree, hf_tcap_length, tvb, tag_offset,
|
|
|
|
len_length, len);
|
|
|
|
|
|
|
|
if (len-(2*ind_field)) /*should always be positive unless we get an empty contructor pointless? */
|
|
|
|
{
|
|
|
|
next_tvb = tvb_new_subset(tvb, offset, len-(2*ind_field),
|
|
|
|
len-(2*ind_field));
|
|
|
|
dissect_tcap_param(actx, subtree,next_tvb,0);
|
2007-04-23 10:45:00 +00:00
|
|
|
}
|
2007-10-11 22:49:52 +00:00
|
|
|
|
|
|
|
if (ind_field)
|
|
|
|
proto_tree_add_text(subtree, tvb, offset+len-2, 2, "CONSTRUCTOR EOC");
|
|
|
|
|
2005-06-16 07:46:03 +00:00
|
|
|
offset += len;
|
2005-06-07 05:49:06 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2007-10-11 22:49:52 +00:00
|
|
|
pi = proto_tree_add_text(tree, tvb, saved_offset,
|
|
|
|
len + (len_offset - saved_offset),
|
|
|
|
"Parameter (0x%.2x)", tag);
|
2005-06-07 05:49:06 +00:00
|
|
|
|
2005-06-16 07:46:03 +00:00
|
|
|
subtree = proto_item_add_subtree(pi, ett_param);
|
2005-06-07 05:49:06 +00:00
|
|
|
|
2007-10-11 22:49:52 +00:00
|
|
|
proto_tree_add_uint(subtree, hf_tcap_tag, tvb, saved_offset,
|
|
|
|
tag_length, tag);
|
2005-06-07 05:49:06 +00:00
|
|
|
|
2005-06-16 07:46:03 +00:00
|
|
|
proto_tree_add_uint(subtree, hf_tcap_length, tvb,
|
2007-10-11 22:49:52 +00:00
|
|
|
saved_offset+tag_length, len_length, len);
|
|
|
|
|
|
|
|
if (len) /* check for NULLS */
|
|
|
|
{
|
|
|
|
next_tvb = tvb_new_subset(tvb, offset, len, len);
|
|
|
|
dissect_ber_octet_string(TRUE, actx, tree, next_tvb, 0,
|
|
|
|
hf_tcap_data, NULL);
|
|
|
|
}
|
|
|
|
|
2005-06-16 07:46:03 +00:00
|
|
|
offset += len;
|
2005-06-07 05:49:06 +00:00
|
|
|
}
|
|
|
|
}
|
2005-06-16 07:46:03 +00:00
|
|
|
return offset;
|
|
|
|
}
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
|
|
|
|
static void raz_tcap_private(struct tcap_private_t * p_tcap_private)
|
2007-04-23 10:45:00 +00:00
|
|
|
{
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
memset(p_tcap_private,0,sizeof(struct tcap_private_t) );
|
|
|
|
}
|
|
|
|
|
2007-07-27 19:24:40 +00:00
|
|
|
/*
|
|
|
|
* Call ITU Subdissector to decode the Tcap Component
|
|
|
|
*/
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
static int
|
2007-07-30 17:10:20 +00:00
|
|
|
dissect_tcap_ITU_ComponentPDU(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index _U_)
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
{
|
2007-07-27 19:24:40 +00:00
|
|
|
dissector_handle_t subdissector_handle=NULL;
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
gboolean is_subdissector=FALSE;
|
|
|
|
struct tcaphash_context_t * p_tcap_context=NULL;
|
|
|
|
|
2007-04-23 10:45:00 +00:00
|
|
|
/*
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
* ok lets look at the oid and ssn and try and find a dissector, otherwise lets decode it.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Handle The TCAP Service Response Time
|
|
|
|
*/
|
|
|
|
if ( gtcap_HandleSRT ) {
|
2007-04-23 20:20:46 +00:00
|
|
|
if (!tcap_subdissector_used) {
|
2007-07-27 19:24:40 +00:00
|
|
|
p_tcap_context=tcapsrt_call_matching(tvb, actx->pinfo, tcap_stat_tree, gp_tcapsrt_info);
|
|
|
|
tcap_subdissector_used=TRUE;
|
|
|
|
gp_tcap_context=p_tcap_context;
|
|
|
|
tcap_private.context=p_tcap_context;
|
2007-04-23 20:20:46 +00:00
|
|
|
}else{
|
|
|
|
/* Take the last TCAP context */
|
|
|
|
p_tcap_context = gp_tcap_context;
|
|
|
|
tcap_private.context=p_tcap_context;
|
|
|
|
}
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
}
|
|
|
|
if (p_tcap_context) {
|
2007-04-23 20:20:46 +00:00
|
|
|
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 */
|
2010-06-04 19:28:39 +00:00
|
|
|
if ( strncmp(p_tcap_context->oid, cur_oid, sizeof(p_tcap_context->oid))!=0) {
|
2007-07-27 19:24:40 +00:00
|
|
|
/* ACN, changed, Fallback to lower version
|
|
|
|
* and update the subdissector (purely formal)
|
2007-04-23 20:20:46 +00:00
|
|
|
*/
|
2010-06-04 19:28:39 +00:00
|
|
|
g_strlcpy(p_tcap_context->oid,cur_oid, sizeof(p_tcap_context->oid));
|
2007-04-23 20:20:46 +00:00
|
|
|
if ( (subdissector_handle = dissector_get_string_handle(ber_oid_dissector_table, cur_oid)) ) {
|
|
|
|
p_tcap_context->subdissector_handle=subdissector_handle;
|
2007-07-27 19:24:40 +00:00
|
|
|
p_tcap_context->subdissector_present=TRUE;
|
2007-04-23 20:20:46 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
/* We do not have the OID in the TCAP context, so store it */
|
2010-06-04 19:28:39 +00:00
|
|
|
g_strlcpy(p_tcap_context->oid, cur_oid, sizeof(p_tcap_context->oid));
|
2007-07-27 19:24:40 +00:00
|
|
|
p_tcap_context->oid_present=TRUE;
|
|
|
|
/* Try to find a subdissector according to OID */
|
2007-04-23 20:20:46 +00:00
|
|
|
if ( (subdissector_handle
|
|
|
|
= dissector_get_string_handle(ber_oid_dissector_table, cur_oid)) ) {
|
|
|
|
p_tcap_context->subdissector_handle=subdissector_handle;
|
2007-07-27 19:24:40 +00:00
|
|
|
p_tcap_context->subdissector_present=TRUE;
|
|
|
|
} else {
|
|
|
|
/* Not found, so try to find a subdissector according to SSN */
|
2010-12-20 05:35:29 +00:00
|
|
|
if ( (subdissector_handle = get_itu_tcap_subdissector(actx->pinfo->match_uint))) {
|
2007-07-27 19:24:40 +00:00
|
|
|
/* Found according to SSN */
|
|
|
|
p_tcap_context->subdissector_handle=subdissector_handle;
|
|
|
|
p_tcap_context->subdissector_present=TRUE;
|
|
|
|
}
|
2007-04-23 20:20:46 +00:00
|
|
|
}
|
|
|
|
} /* 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 */
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
} /* no TCAP context */
|
2007-04-23 10:45:00 +00:00
|
|
|
|
2007-04-23 20:20:46 +00:00
|
|
|
|
2007-04-23 10:45:00 +00:00
|
|
|
if ( p_tcap_context
|
2007-07-27 19:24:40 +00:00
|
|
|
&& p_tcap_context->subdissector_present) {
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
/* Take the subdissector from the context */
|
|
|
|
subdissector_handle=p_tcap_context->subdissector_handle;
|
|
|
|
is_subdissector=TRUE;
|
|
|
|
}
|
2007-04-03 19:08:00 +00:00
|
|
|
|
|
|
|
/* Have SccpUsersTable protocol taking precedence over sccp.ssn table */
|
|
|
|
if (!is_subdissector && requested_subdissector_handle) {
|
|
|
|
is_subdissector = TRUE;
|
|
|
|
subdissector_handle = requested_subdissector_handle;
|
|
|
|
}
|
|
|
|
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
if (!is_subdissector) {
|
|
|
|
/*
|
|
|
|
* If we do not currently know the subdissector, we have to find it
|
|
|
|
* - first, according to the OID
|
|
|
|
* - then according to the SSN
|
2007-04-23 10:45:00 +00:00
|
|
|
* - and at least, take the default Data handler
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
*/
|
|
|
|
if (ber_oid_dissector_table && cur_oid) {
|
|
|
|
/* Search if we can find the sub protocol according to the A.C.N */
|
2007-04-23 10:45:00 +00:00
|
|
|
if ( (subdissector_handle
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
= dissector_get_string_handle(ber_oid_dissector_table, cur_oid)) ) {
|
2007-04-23 20:20:46 +00:00
|
|
|
/* found */
|
|
|
|
is_subdissector=TRUE;
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
} else {
|
2007-04-23 20:20:46 +00:00
|
|
|
/* Search if we can found the sub protocol according to the SSN table */
|
|
|
|
if ( (subdissector_handle
|
2010-12-20 05:35:29 +00:00
|
|
|
= get_itu_tcap_subdissector(actx->pinfo->match_uint))) {
|
2007-04-23 20:20:46 +00:00
|
|
|
/* Found according to SSN */
|
|
|
|
is_subdissector=TRUE;
|
|
|
|
} else {
|
|
|
|
/* Nothing found, take the Data handler */
|
|
|
|
subdissector_handle = data_handle;
|
|
|
|
is_subdissector=TRUE;
|
|
|
|
} /* SSN */
|
|
|
|
} /* ACN */
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
} else {
|
2007-04-23 20:20:46 +00:00
|
|
|
/* There is no A.C.N for this transaction, so search in the SSN table */
|
2010-12-20 05:35:29 +00:00
|
|
|
if ( (subdissector_handle = get_itu_tcap_subdissector(actx->pinfo->match_uint))) {
|
2007-04-23 20:20:46 +00:00
|
|
|
/* Found according to SSN */
|
|
|
|
is_subdissector=TRUE;
|
|
|
|
} else {
|
|
|
|
subdissector_handle = data_handle;
|
|
|
|
is_subdissector=TRUE;
|
|
|
|
}
|
|
|
|
} /* OID */
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
} else {
|
2007-04-23 20:20:46 +00:00
|
|
|
/* We have it already */
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
}
|
2007-04-23 10:45:00 +00:00
|
|
|
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
/* Call the sub dissector if present, and not already called */
|
|
|
|
if (is_subdissector)
|
2007-07-27 19:24:40 +00:00
|
|
|
call_dissector(subdissector_handle, tvb, actx->pinfo, tree);
|
2007-04-23 10:45:00 +00:00
|
|
|
|
2007-07-27 19:24:40 +00:00
|
|
|
return offset;
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
}
|
|
|
|
|
2007-04-03 19:08:00 +00:00
|
|
|
void call_tcap_dissector(dissector_handle_t handle, tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree) {
|
|
|
|
|
|
|
|
requested_subdissector_handle = handle;
|
|
|
|
|
|
|
|
TRY {
|
|
|
|
dissect_tcap(tvb, pinfo, tree);
|
|
|
|
} CATCH_ALL {
|
|
|
|
requested_subdissector_handle = NULL;
|
|
|
|
RETHROW;
|
|
|
|
} ENDTRY;
|
2007-04-23 10:45:00 +00:00
|
|
|
|
2007-04-03 19:08:00 +00:00
|
|
|
requested_subdissector_handle = NULL;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|