2013-04-11 18:14:53 +00:00
/* Do not modify this file. Changes will be overwritten. */
/* Generated automatically by the ASN.1 to Wireshark dissector compiler */
2007-11-12 17:02:46 +00:00
/* packet-ansi_tcap.c */
2016-03-09 03:17:51 +00:00
/* asn2wrs.py -b -p ansi_tcap -c ./ansi_tcap.cnf -s ./packet-ansi_tcap-template -D . -O ../.. TCAP-Remote-Operations-Information-Objects.asn TCAPPackage.asn */
2007-08-14 22:10:55 +00:00
/* Input file: packet-ansi_tcap-template.c */
2016-03-09 03:17:51 +00:00
# line 1 ". / asn1 / ansi_tcap / packet-ansi_tcap-template.c"
2007-08-14 22:10:55 +00:00
/* packet-ansi_tcap-template.c
* Routines for ANSI TCAP
* Copyright 2007 Anders Broman < anders . broman @ ericsson . com >
* Built from the gsm - map dissector Copyright 2004 - 2005 , Anders Broman < anders . broman @ ericsson . com >
*
* Wireshark - Network traffic analyzer
* By Gerald Combs < gerald @ wireshark . org >
* Copyright 1998 Gerald Combs
*
2018-02-12 11:23:27 +00:00
* SPDX - License - Identifier : GPL - 2.0 - or - later
2007-08-14 22:10:55 +00:00
* References : T1 .114
*/
2012-09-20 02:03:38 +00:00
# include "config.h"
2007-08-14 22:10:55 +00:00
# include <epan/packet.h>
2011-02-04 16:12:59 +00:00
# include <epan/prefs.h>
2014-08-08 13:19:29 +00:00
# include <epan/expert.h>
2007-08-25 01:14:24 +00:00
# include <epan/oids.h>
2007-08-14 22:10:55 +00:00
# include <epan/asn1.h>
2008-03-01 17:23:39 +00:00
# include <epan/strutil.h>
2007-08-14 22:10:55 +00:00
# include "packet-ber.h"
# include "packet-tcap.h"
# include "packet-ansi_tcap.h"
# define PNAME "ANSI Transaction Capabilities Application Part"
# define PSNAME "ANSI_TCAP"
# define PFNAME "ansi_tcap"
2013-03-20 06:50:56 +00:00
void proto_register_ansi_tcap ( void ) ;
void proto_reg_handoff_ansi_tcap ( void ) ;
2011-02-04 16:12:59 +00:00
2016-01-01 05:15:19 +00:00
/* Preference settings */
# define ANSI_TCAP_TID_ONLY 0
# define ANSI_TCAP_TID_AND_SOURCE 1
# define ANSI_TCAP_TID_SOURCE_AND_DEST 2
static gint ansi_tcap_response_matching_type = ANSI_TCAP_TID_ONLY ;
2011-02-04 16:12:59 +00:00
2007-08-14 22:10:55 +00:00
/* Initialize the protocol and registered fields */
2009-10-11 16:24:29 +00:00
static int proto_ansi_tcap = - 1 ;
2007-08-14 22:10:55 +00:00
2009-10-11 17:14:19 +00:00
static int hf_ansi_tcapsrt_SessionId = - 1 ;
static int hf_ansi_tcapsrt_Duplicate = - 1 ;
static int hf_ansi_tcapsrt_BeginSession = - 1 ;
static int hf_ansi_tcapsrt_EndSession = - 1 ;
static int hf_ansi_tcapsrt_SessionTime = - 1 ;
2011-11-16 19:52:00 +00:00
static int hf_ansi_tcap_bit_h = - 1 ;
static int hf_ansi_tcap_op_family = - 1 ;
static int hf_ansi_tcap_op_specifier = - 1 ;
2007-08-14 22:10:55 +00:00
/*--- Included file: packet-ansi_tcap-hf.c ---*/
2016-03-09 03:17:51 +00:00
# line 1 ". / asn1 / ansi_tcap / packet-ansi_tcap-hf.c"
2007-08-16 19:59:55 +00:00
static int hf_ansi_tcap_national = - 1 ; /* T_national */
static int hf_ansi_tcap_private = - 1 ; /* T_private */
2007-08-14 22:10:55 +00:00
static int hf_ansi_tcap_national_01 = - 1 ; /* INTEGER_M128_127 */
2015-01-15 15:01:40 +00:00
static int hf_ansi_tcap_private_01 = - 1 ; /* ANSIMAPPrivateErrorcode */
2007-08-17 23:23:36 +00:00
static int hf_ansi_tcap_unidirectional = - 1 ; /* T_unidirectional */
static int hf_ansi_tcap_queryWithPerm = - 1 ; /* T_queryWithPerm */
static int hf_ansi_tcap_queryWithoutPerm = - 1 ; /* T_queryWithoutPerm */
static int hf_ansi_tcap_response = - 1 ; /* T_response */
static int hf_ansi_tcap_conversationWithPerm = - 1 ; /* T_conversationWithPerm */
static int hf_ansi_tcap_conversationWithoutPerm = - 1 ; /* T_conversationWithoutPerm */
static int hf_ansi_tcap_abort = - 1 ; /* T_abort */
2007-08-14 22:10:55 +00:00
static int hf_ansi_tcap_identifier = - 1 ; /* TransactionID */
static int hf_ansi_tcap_dialoguePortion = - 1 ; /* DialoguePortion */
static int hf_ansi_tcap_componentPortion = - 1 ; /* ComponentSequence */
static int hf_ansi_tcap_dialogPortion = - 1 ; /* DialoguePortion */
static int hf_ansi_tcap_causeInformation = - 1 ; /* T_causeInformation */
static int hf_ansi_tcap_abortCause = - 1 ; /* P_Abort_cause */
static int hf_ansi_tcap_userInformation = - 1 ; /* UserAbortInformation */
static int hf_ansi_tcap_version = - 1 ; /* ProtocolVersion */
static int hf_ansi_tcap_applicationContext = - 1 ; /* T_applicationContext */
static int hf_ansi_tcap_integerApplicationId = - 1 ; /* IntegerApplicationContext */
static int hf_ansi_tcap_objectApplicationId = - 1 ; /* ObjectIDApplicationContext */
static int hf_ansi_tcap_userInformation_01 = - 1 ; /* UserInformation */
static int hf_ansi_tcap_securityContext = - 1 ; /* T_securityContext */
static int hf_ansi_tcap_integerSecurityId = - 1 ; /* INTEGER */
static int hf_ansi_tcap_objectSecurityId = - 1 ; /* OBJECT_IDENTIFIER */
static int hf_ansi_tcap_confidentiality = - 1 ; /* Confidentiality */
2007-12-10 08:35:41 +00:00
static int hf_ansi_tcap__untag_item = - 1 ; /* EXTERNAL */
2007-08-14 22:10:55 +00:00
static int hf_ansi_tcap_confidentialityId = - 1 ; /* T_confidentialityId */
static int hf_ansi_tcap_integerConfidentialityId = - 1 ; /* INTEGER */
static int hf_ansi_tcap_objectConfidentialityId = - 1 ; /* OBJECT_IDENTIFIER */
2007-12-10 08:35:41 +00:00
static int hf_ansi_tcap__untag_item_01 = - 1 ; /* ComponentPDU */
2007-08-14 22:10:55 +00:00
static int hf_ansi_tcap_invokeLast = - 1 ; /* Invoke */
static int hf_ansi_tcap_returnResultLast = - 1 ; /* ReturnResult */
static int hf_ansi_tcap_returnError = - 1 ; /* ReturnError */
static int hf_ansi_tcap_reject = - 1 ; /* Reject */
static int hf_ansi_tcap_invokeNotLast = - 1 ; /* Invoke */
static int hf_ansi_tcap_returnResultNotLast = - 1 ; /* ReturnResult */
static int hf_ansi_tcap_componentIDs = - 1 ; /* T_componentIDs */
static int hf_ansi_tcap_operationCode = - 1 ; /* OperationCode */
static int hf_ansi_tcap_parameter = - 1 ; /* T_parameter */
static int hf_ansi_tcap_componentID = - 1 ; /* T_componentID */
static int hf_ansi_tcap_parameter_01 = - 1 ; /* T_parameter_01 */
static int hf_ansi_tcap_componentID_01 = - 1 ; /* T_componentID_01 */
static int hf_ansi_tcap_errorCode = - 1 ; /* ErrorCode */
static int hf_ansi_tcap_parameter_02 = - 1 ; /* T_parameter_02 */
static int hf_ansi_tcap_componentID_02 = - 1 ; /* OCTET_STRING_SIZE_0_1 */
static int hf_ansi_tcap_rejectProblem = - 1 ; /* Problem */
static int hf_ansi_tcap_parameter_03 = - 1 ; /* T_parameter_03 */
static int hf_ansi_tcap_paramSequence = - 1 ; /* T_paramSequence */
static int hf_ansi_tcap_paramSet = - 1 ; /* T_paramSet */
/*--- End of included file: packet-ansi_tcap-hf.c ---*/
2018-02-18 14:19:48 +00:00
# line 53 ". / asn1 / ansi_tcap / packet-ansi_tcap-template.c"
2007-08-14 22:10:55 +00:00
/* Initialize the subtree pointers */
static gint ett_tcap = - 1 ;
static gint ett_param = - 1 ;
2011-11-16 19:52:00 +00:00
static gint ett_ansi_tcap_op_code_nat = - 1 ;
2007-08-14 22:10:55 +00:00
static gint ett_otid = - 1 ;
static gint ett_dtid = - 1 ;
2009-10-11 17:14:19 +00:00
static gint ett_ansi_tcap_stat = - 1 ;
2007-08-14 22:10:55 +00:00
2014-08-08 13:19:29 +00:00
static expert_field ei_ansi_tcap_dissector_not_implemented = EI_INIT ;
2007-08-14 22:10:55 +00:00
static struct tcapsrt_info_t * gp_tcapsrt_info ;
static gboolean tcap_subdissector_used = FALSE ;
static struct tcaphash_context_t * gp_tcap_context = NULL ;
2011-11-17 20:05:03 +00:00
/* Note the high bit should be masked off when registering in this table (0x7fff)*/
2012-11-29 20:15:37 +00:00
static dissector_table_t ansi_tcap_national_opcode_table ; /* National Operation Codes */
2011-11-17 20:05:03 +00:00
2007-08-14 22:10:55 +00:00
/*--- Included file: packet-ansi_tcap-ett.c ---*/
2016-03-09 03:17:51 +00:00
# line 1 ". / asn1 / ansi_tcap / packet-ansi_tcap-ett.c"
2007-08-14 22:10:55 +00:00
static gint ett_ansi_tcap_OperationCode = - 1 ;
static gint ett_ansi_tcap_ErrorCode = - 1 ;
static gint ett_ansi_tcap_PackageType = - 1 ;
static gint ett_ansi_tcap_UniTransactionPDU = - 1 ;
static gint ett_ansi_tcap_TransactionPDU = - 1 ;
static gint ett_ansi_tcap_Abort = - 1 ;
static gint ett_ansi_tcap_T_causeInformation = - 1 ;
2007-12-10 08:35:41 +00:00
static gint ett_ansi_tcap_DialoguePortion_U = - 1 ;
2007-08-14 22:10:55 +00:00
static gint ett_ansi_tcap_T_applicationContext = - 1 ;
static gint ett_ansi_tcap_T_securityContext = - 1 ;
2007-12-10 08:35:41 +00:00
static gint ett_ansi_tcap_UserInformation_U = - 1 ;
2007-08-14 22:10:55 +00:00
static gint ett_ansi_tcap_Confidentiality = - 1 ;
static gint ett_ansi_tcap_T_confidentialityId = - 1 ;
2007-12-10 08:35:41 +00:00
static gint ett_ansi_tcap_SEQUENCE_OF_ComponentPDU = - 1 ;
2007-08-14 22:10:55 +00:00
static gint ett_ansi_tcap_ComponentPDU = - 1 ;
static gint ett_ansi_tcap_Invoke = - 1 ;
static gint ett_ansi_tcap_ReturnResult = - 1 ;
static gint ett_ansi_tcap_ReturnError = - 1 ;
static gint ett_ansi_tcap_Reject = - 1 ;
static gint ett_ansi_tcap_T_parameter_03 = - 1 ;
static gint ett_ansi_tcap_T_paramSequence = - 1 ;
static gint ett_ansi_tcap_T_paramSet = - 1 ;
/*--- End of included file: packet-ansi_tcap-ett.c ---*/
2018-02-18 14:19:48 +00:00
# line 74 ". / asn1 / ansi_tcap / packet-ansi_tcap-template.c"
2007-08-14 22:10:55 +00:00
# define MAX_SSN 254
extern gboolean gtcap_PersistentSRT ;
extern guint gtcap_RepetitionTimeout ;
extern guint gtcap_LostTimeout ;
2014-01-14 18:34:01 +00:00
/* When several Tcap components are received in a single TCAP message,
we have to use several buffers for the stored parameters
because else this data are erased during TAP dissector call */
# define MAX_TCAP_INSTANCE 10
int tcapsrt_global_current = 0 ;
struct tcapsrt_info_t tcapsrt_global_info [ MAX_TCAP_INSTANCE ] ;
2007-08-14 22:10:55 +00:00
static dissector_table_t ber_oid_dissector_table = NULL ;
static const char * cur_oid ;
static const char * tcapext_oid ;
2007-08-17 23:23:36 +00:00
static dissector_handle_t ansi_map_handle ;
2018-09-06 12:53:09 +00:00
static dissector_handle_t ain_handle ;
2007-08-14 22:10:55 +00:00
2007-08-16 19:59:55 +00:00
struct ansi_tcap_private_t ansi_tcap_private ;
2007-11-12 17:02:46 +00:00
# define MAX_TID_STR_LEN 1024
2007-08-16 19:59:55 +00:00
static void ansi_tcap_ctx_init ( struct ansi_tcap_private_t * a_tcap_ctx ) {
memset ( a_tcap_ctx , ' \0 ' , sizeof ( * a_tcap_ctx ) ) ;
a_tcap_ctx - > signature = ANSI_TCAP_CTX_SIGNATURE ;
2007-09-12 16:45:53 +00:00
a_tcap_ctx - > oid_is_present = FALSE ;
2007-09-13 20:20:11 +00:00
a_tcap_ctx - > TransactionID_str = NULL ;
2007-08-16 19:59:55 +00:00
}
2011-11-16 19:52:00 +00:00
static const value_string ansi_tcap_national_op_code_family_vals [ ] = {
{ 0x0 , " All Families " } ,
{ 0x1 , " Parameter " } ,
{ 0x2 , " Charging " } ,
{ 0x3 , " Provide Instructions " } ,
{ 0x4 , " Connection Control " } ,
{ 0x5 , " Caller Interaction " } ,
{ 0x6 , " Send Notification " } ,
{ 0x7 , " Network Management " } ,
{ 0x8 , " Procedural " } ,
{ 0x9 , " Operation Control " } ,
{ 0xa , " Report Event " } ,
/* Spare */
{ 0x7e , " Miscellaneous " } ,
{ 0x7f , " Reserved " } ,
{ 0 , NULL }
} ;
2007-09-12 16:45:53 +00:00
/* Transaction tracking */
/* Transaction table */
struct ansi_tcap_invokedata_t {
2007-11-12 17:02:46 +00:00
gint OperationCode ;
/*
0 : national ,
1 : private
2007-09-12 16:45:53 +00:00
*/
gint32 OperationCode_private ;
gint32 OperationCode_national ;
} ;
2017-01-29 03:29:32 +00:00
static wmem_map_t * TransactionId_table = NULL ;
2007-09-12 16:45:53 +00:00
/* Store Invoke information needed for the corresponding reply */
static void
save_invoke_data ( packet_info * pinfo , proto_tree * tree _U_ , tvbuff_t * tvb _U_ ) {
struct ansi_tcap_invokedata_t * ansi_tcap_saved_invokedata ;
2013-11-23 22:37:33 +00:00
gchar * src , * dst ;
2007-09-12 16:45:53 +00:00
char * buf ;
2013-11-23 22:37:33 +00:00
src = address_to_str ( wmem_packet_scope ( ) , & ( pinfo - > src ) ) ;
dst = address_to_str ( wmem_packet_scope ( ) , & ( pinfo - > dst ) ) ;
2018-12-27 02:26:24 +00:00
if ( ( ! pinfo - > fd - > visited ) & & ( ansi_tcap_private . TransactionID_str ) ) {
2007-11-12 17:02:46 +00:00
2014-09-09 18:05:52 +00:00
/* Only do this once XXX I hope it's the right thing to do */
2009-03-15 15:40:55 +00:00
/* The hash string needs to contain src and dest to distiguish differnt flows */
2012-11-29 20:15:37 +00:00
switch ( ansi_tcap_response_matching_type ) {
2016-01-01 05:15:19 +00:00
case ANSI_TCAP_TID_ONLY :
2013-06-19 20:43:03 +00:00
buf = wmem_strdup ( wmem_packet_scope ( ) , ansi_tcap_private . TransactionID_str ) ;
2012-11-29 20:15:37 +00:00
break ;
2016-01-01 05:15:19 +00:00
case ANSI_TCAP_TID_AND_SOURCE :
2013-11-23 22:37:33 +00:00
buf = wmem_strdup_printf ( wmem_packet_scope ( ) , " %s%s " , ansi_tcap_private . TransactionID_str , src ) ;
2012-11-29 20:15:37 +00:00
break ;
2016-01-01 05:15:19 +00:00
case ANSI_TCAP_TID_SOURCE_AND_DEST :
2012-11-29 20:15:37 +00:00
default :
2013-11-23 22:37:33 +00:00
buf = wmem_strdup_printf ( wmem_packet_scope ( ) , " %s%s%s " , ansi_tcap_private . TransactionID_str , src , dst ) ;
2012-11-29 20:15:37 +00:00
break ;
}
2009-03-15 15:40:55 +00:00
/* If the entry allready exists don't owervrite it */
2017-01-29 03:29:32 +00:00
ansi_tcap_saved_invokedata = ( struct ansi_tcap_invokedata_t * ) wmem_map_lookup ( TransactionId_table , buf ) ;
2009-03-15 15:40:55 +00:00
if ( ansi_tcap_saved_invokedata )
return ;
2013-06-19 20:43:03 +00:00
ansi_tcap_saved_invokedata = wmem_new ( wmem_file_scope ( ) , struct ansi_tcap_invokedata_t ) ;
2009-03-15 15:40:55 +00:00
ansi_tcap_saved_invokedata - > OperationCode = ansi_tcap_private . d . OperationCode ;
ansi_tcap_saved_invokedata - > OperationCode_national = ansi_tcap_private . d . OperationCode_national ;
ansi_tcap_saved_invokedata - > OperationCode_private = ansi_tcap_private . d . OperationCode_private ;
2017-01-29 03:29:32 +00:00
wmem_map_insert ( TransactionId_table ,
2013-06-19 20:43:03 +00:00
wmem_strdup ( wmem_file_scope ( ) , buf ) ,
2009-03-15 15:40:55 +00:00
ansi_tcap_saved_invokedata ) ;
/*
g_warning ( " Tcap Invoke Hash string %s " , buf ) ;
*/
2007-11-12 17:02:46 +00:00
}
2007-09-12 16:45:53 +00:00
}
static gboolean
find_saved_invokedata ( packet_info * pinfo , proto_tree * tree _U_ , tvbuff_t * tvb _U_ ) {
struct ansi_tcap_invokedata_t * ansi_tcap_saved_invokedata ;
2013-11-23 22:37:33 +00:00
gchar * src , * dst ;
2007-09-12 16:45:53 +00:00
char * buf ;
2007-11-12 17:02:46 +00:00
if ( ! ansi_tcap_private . TransactionID_str ) {
return FALSE ;
}
2007-09-12 16:45:53 +00:00
2013-11-23 22:37:33 +00:00
src = address_to_str ( wmem_packet_scope ( ) , & ( pinfo - > src ) ) ;
dst = address_to_str ( wmem_packet_scope ( ) , & ( pinfo - > dst ) ) ;
2007-09-12 16:45:53 +00:00
/* The hash string needs to contain src and dest to distiguish differnt flows */
2013-06-19 20:43:03 +00:00
buf = ( char * ) wmem_alloc ( wmem_packet_scope ( ) , MAX_TID_STR_LEN ) ;
2007-11-12 17:02:46 +00:00
buf [ 0 ] = ' \0 ' ;
2007-09-12 16:45:53 +00:00
/* Reverse order to invoke */
2011-02-04 16:12:59 +00:00
switch ( ansi_tcap_response_matching_type ) {
2016-01-01 05:15:19 +00:00
case ANSI_TCAP_TID_ONLY :
2012-11-29 20:15:37 +00:00
g_snprintf ( buf , MAX_TID_STR_LEN , " %s " , ansi_tcap_private . TransactionID_str ) ;
break ;
2016-01-01 05:15:19 +00:00
case ANSI_TCAP_TID_AND_SOURCE :
2013-11-23 22:37:33 +00:00
g_snprintf ( buf , MAX_TID_STR_LEN , " %s%s " , ansi_tcap_private . TransactionID_str , dst ) ;
2012-11-29 20:15:37 +00:00
break ;
2016-01-01 05:15:19 +00:00
case ANSI_TCAP_TID_SOURCE_AND_DEST :
2012-11-29 20:15:37 +00:00
default :
2013-11-23 22:37:33 +00:00
g_snprintf ( buf , MAX_TID_STR_LEN , " %s%s%s " , ansi_tcap_private . TransactionID_str , dst , src ) ;
break ;
}
2007-11-12 17:02:46 +00:00
2017-01-29 03:29:32 +00:00
ansi_tcap_saved_invokedata = ( struct ansi_tcap_invokedata_t * ) wmem_map_lookup ( TransactionId_table , buf ) ;
2007-09-12 16:45:53 +00:00
if ( ansi_tcap_saved_invokedata ) {
2009-03-15 15:40:55 +00:00
ansi_tcap_private . d . OperationCode = ansi_tcap_saved_invokedata - > OperationCode ;
ansi_tcap_private . d . OperationCode_national = ansi_tcap_saved_invokedata - > OperationCode_national ;
ansi_tcap_private . d . OperationCode_private = ansi_tcap_saved_invokedata - > OperationCode_private ;
return TRUE ;
2007-09-12 16:45:53 +00:00
}
return FALSE ;
}
2007-08-17 23:23:36 +00:00
/* As currently ANSI MAP is the only possible sub dissector this function
* must be improved to handle general cases .
*
*
2007-11-12 17:02:46 +00:00
*
* TODO :
2007-08-17 23:23:36 +00:00
* 1 ) Handle national codes
* Design option
* - Create a ansi . tcap . national dissector table and have dissectors for
* national codes register there and let ansi tcap call them .
* 2 ) Handle Private codes properly
* Design question
* Unclear how to differentiate between different private " code sets " .
* Use SCCP SSN table as before ? or a ansi . tcap . private dissector table ?
*
*/
static gboolean
2007-11-12 17:02:46 +00:00
find_tcap_subdissector ( tvbuff_t * tvb , asn1_ctx_t * actx , proto_tree * tree ) {
2009-03-15 15:40:55 +00:00
proto_item * item ;
/* If "DialoguePortion objectApplicationId ObjectIDApplicationContext
* points to the subdissector this code can be used .
*
if ( ansi_tcap_private . d . oid_is_present ) {
2013-10-31 00:57:03 +00:00
call_ber_oid_callback ( ansi_tcap_private . objectApplicationId_oid , tvb , 0 , actx - pinfo , tree , NULL ) ;
2009-03-15 15:40:55 +00:00
return TRUE ;
}
*/
if ( ansi_tcap_private . d . pdu = = 1 ) {
/* Save Invoke data for this transaction */
save_invoke_data ( actx - > pinfo , tree , tvb ) ;
} else {
/* Get saved data for this transaction */
if ( find_saved_invokedata ( actx - > pinfo , tree , tvb ) ) {
if ( ansi_tcap_private . d . OperationCode = = 0 ) {
/* national */
item = proto_tree_add_int ( tree , hf_ansi_tcap_national , tvb , 0 , 0 , ansi_tcap_private . d . OperationCode_national ) ;
} else {
item = proto_tree_add_int ( tree , hf_ansi_tcap_private , tvb , 0 , 0 , ansi_tcap_private . d . OperationCode_private ) ;
}
PROTO_ITEM_SET_GENERATED ( item ) ;
ansi_tcap_private . d . OperationCode_item = item ;
}
}
if ( ansi_tcap_private . d . OperationCode = = 0 ) {
/* national */
2012-11-29 20:15:37 +00:00
guint8 family = ( ansi_tcap_private . d . OperationCode_national & 0x7f00 ) > > 8 ;
guint8 specifier = ( guint8 ) ( ansi_tcap_private . d . OperationCode_national & 0xff ) ;
2017-08-29 15:29:20 +00:00
if ( ! dissector_try_uint ( ansi_tcap_national_opcode_table , ansi_tcap_private . d . OperationCode_national , tvb , actx - > pinfo , actx - > subtree . top_tree ) ) {
2014-08-08 13:19:29 +00:00
proto_tree_add_expert_format ( tree , actx - > pinfo , & ei_ansi_tcap_dissector_not_implemented , tvb , 0 , - 1 ,
2012-11-29 20:15:37 +00:00
" Dissector for ANSI TCAP NATIONAL code:0x%x(Family %u, Specifier %u) \n "
" not implemented. Contact Wireshark developers if you want this supported(Spec required) " ,
ansi_tcap_private . d . OperationCode_national , family , specifier ) ;
return FALSE ;
}
return TRUE ;
2009-03-15 15:40:55 +00:00
} else if ( ansi_tcap_private . d . OperationCode = = 1 ) {
/* private */
2018-11-05 13:07:31 +00:00
if ( ( ansi_tcap_private . d . OperationCode_private & 0xff00 ) = = 0x0900 ) {
2018-09-06 12:53:09 +00:00
/* This is abit of a hack as it assumes the private codes with a "family" of 0x09 is ANSI MAP
* See TODO above .
* N . S0005 - 0 v 1.0 TCAP Formats and Procedures 5 - 16 Application Services
* 6.3 .2 Component Portion
* The Operation Code is partitioned into an Operation Family followed by a
* Specifier associated with each Operation Family member . For TIA / EIA - 41 the
* Operation Family is coded as decimal 9. Bit H of the Operation Family is always
* coded as 0.
*/
call_dissector_with_data ( ansi_map_handle , tvb , actx - > pinfo , actx - > subtree . top_tree , & ansi_tcap_private ) ;
return TRUE ;
} else if ( ( ansi_tcap_private . d . OperationCode_private & 0xf000 ) = = 0x6000 ) {
call_dissector_with_data ( ain_handle , tvb , actx - > pinfo , actx - > subtree . top_tree , & ansi_tcap_private ) ;
return TRUE ;
2009-03-15 15:40:55 +00:00
}
}
2018-09-06 12:53:09 +00:00
proto_tree_add_expert_format ( tree , actx - > pinfo , & ei_ansi_tcap_dissector_not_implemented , tvb , 0 , - 1 ,
" Dissector for ANSI TCAP PRIVATE code:%u not implemented. \n "
" Contact Wireshark developers if you want this supported(Spec required) " ,
ansi_tcap_private . d . OperationCode_private ) ;
return FALSE ;
2007-08-17 23:23:36 +00:00
}
2007-08-14 22:10:55 +00:00
/*--- Included file: packet-ansi_tcap-fn.c ---*/
2016-03-09 03:17:51 +00:00
# line 1 ". / asn1 / ansi_tcap / packet-ansi_tcap-fn.c"
2007-08-14 22:10:55 +00:00
static int
2007-08-16 19:59:55 +00:00
dissect_ansi_tcap_T_national ( gboolean implicit_tag _U_ , tvbuff_t * tvb _U_ , int offset _U_ , asn1_ctx_t * actx _U_ , proto_tree * tree _U_ , int hf_index _U_ ) {
2016-03-09 03:17:51 +00:00
# line 22 ". / asn1 / ansi_tcap / ansi_tcap.cnf"
2011-11-16 19:52:00 +00:00
proto_tree * subtree ;
proto_item * spcifier_item ;
int start_offset = offset ;
guint8 family ;
guint8 specifier ;
2014-02-26 19:29:17 +00:00
2011-11-16 19:52:00 +00:00
offset = dissect_ber_integer ( implicit_tag , actx , tree , tvb , offset , hf_index ,
2008-01-16 20:41:23 +00:00
& ansi_tcap_private . d . OperationCode_national ) ;
2007-08-14 22:10:55 +00:00
2011-11-16 19:52:00 +00:00
/* mask off the H bit */
ansi_tcap_private . d . OperationCode_national = ( ansi_tcap_private . d . OperationCode_national & 0x7fff ) ;
2014-02-26 19:29:17 +00:00
2011-11-16 19:52:00 +00:00
subtree = proto_item_add_subtree ( actx - > created_item , ett_ansi_tcap_op_code_nat ) ;
/* Bit H is used to distinguish between Operations that require a reply and those that do not. A value of 1
* indicates that a reply is required ; a value of 0 indicates that a reply is not required .
*/
family = ( ansi_tcap_private . d . OperationCode_national & 0x7f00 ) > > 8 ;
specifier = ( guint8 ) ( ansi_tcap_private . d . OperationCode_national & 0xff ) ;
proto_tree_add_item ( subtree , hf_ansi_tcap_bit_h , tvb , start_offset , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( subtree , hf_ansi_tcap_op_family , tvb , start_offset , 2 , ENC_BIG_ENDIAN ) ;
spcifier_item = proto_tree_add_item ( subtree , hf_ansi_tcap_op_specifier , tvb , start_offset , 2 , ENC_BIG_ENDIAN ) ;
switch ( family ) {
case 0 :
/* All Families ( Not used ) */
break ;
case 1 :
/* Parameter */
if ( specifier = = 1 ) {
proto_item_append_text ( spcifier_item , " Provide Value " ) ;
} else if ( specifier = = 2 ) {
proto_item_append_text ( spcifier_item , " Set Value " ) ;
}
break ;
case 2 :
/* Charging */
if ( specifier = = 1 ) {
proto_item_append_text ( spcifier_item , " Bill Call " ) ;
}
break ;
case 3 :
/* Provide Instructions */
if ( specifier = = 1 ) {
proto_item_append_text ( spcifier_item , " Start " ) ;
} else if ( specifier = = 2 ) {
proto_item_append_text ( spcifier_item , " Assist " ) ;
}
break ;
case 4 :
/* Connection Control */
if ( specifier = = 1 ) {
proto_item_append_text ( spcifier_item , " Connect " ) ;
} else if ( specifier = = 2 ) {
proto_item_append_text ( spcifier_item , " Temporary Connect " ) ;
} else if ( specifier = = 3 ) {
proto_item_append_text ( spcifier_item , " Disconnect " ) ;
} else if ( specifier = = 4 ) {
proto_item_append_text ( spcifier_item , " Forward Disconnect " ) ;
}
break ;
default :
break ;
}
2014-02-26 19:29:17 +00:00
2011-11-16 19:52:00 +00:00
2007-08-14 22:10:55 +00:00
return offset ;
}
static int
2007-08-16 19:59:55 +00:00
dissect_ansi_tcap_T_private ( 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-01-17 09:20:17 +00:00
offset = dissect_ber_integer ( implicit_tag , actx , tree , tvb , offset , hf_index ,
2008-01-16 20:41:23 +00:00
& ansi_tcap_private . d . OperationCode_private ) ;
2007-08-14 22:10:55 +00:00
return offset ;
}
static const value_string ansi_tcap_OperationCode_vals [ ] = {
{ 16 , " national " } ,
{ 17 , " private " } ,
{ 0 , NULL }
} ;
2007-12-10 08:35:41 +00:00
static const ber_choice_t OperationCode_choice [ ] = {
{ 16 , & hf_ansi_tcap_national , BER_CLASS_PRI , 16 , BER_FLAGS_IMPLTAG , dissect_ansi_tcap_T_national } ,
{ 17 , & hf_ansi_tcap_private , BER_CLASS_PRI , 17 , BER_FLAGS_IMPLTAG , dissect_ansi_tcap_T_private } ,
{ 0 , NULL , 0 , 0 , 0 , NULL }
2007-08-14 22:10:55 +00:00
} ;
static int
dissect_ansi_tcap_OperationCode ( 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-12-10 08:35:41 +00:00
offset = dissect_ber_choice ( actx , tree , tvb , offset ,
OperationCode_choice , hf_index , ett_ansi_tcap_OperationCode ,
& ansi_tcap_private . d . OperationCode ) ;
2007-08-16 19:59:55 +00:00
2016-03-09 03:17:51 +00:00
# line 18 ". / asn1 / ansi_tcap / ansi_tcap.cnf"
2007-08-16 19:59:55 +00:00
ansi_tcap_private . d . OperationCode_item = actx - > created_item ;
2007-08-14 22:10:55 +00:00
return offset ;
}
static int
dissect_ansi_tcap_INTEGER_M128_127 ( 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 ,
2008-01-16 20:41:23 +00:00
NULL ) ;
2007-08-14 22:10:55 +00:00
return offset ;
}
2015-01-15 15:01:40 +00:00
static const value_string ansi_tcap_ANSIMAPPrivateErrorcode_vals [ ] = {
{ 129 , " unrecognized-MIN " } ,
{ 130 , " unrecognized-ESN " } ,
{ 131 , " mINorHLR-Mismatch " } ,
{ 132 , " operation-Sequence-Problem " } ,
{ 133 , " resource-Shortage " } ,
{ 134 , " operation-Not-Supported " } ,
{ 135 , " trunk-Unavailable " } ,
{ 136 , " parameter-Error " } ,
{ 137 , " system-Failure " } ,
{ 138 , " unrecognized-Parameter-Value " } ,
{ 139 , " feature-Inactive " } ,
{ 140 , " missing-Parameter " } ,
{ 0 , NULL }
} ;
2007-08-16 19:59:55 +00:00
static int
2015-01-15 15:01:40 +00:00
dissect_ansi_tcap_ANSIMAPPrivateErrorcode ( 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-08-16 19:59:55 +00:00
offset = dissect_ber_integer ( implicit_tag , actx , tree , tvb , offset , hf_index ,
2008-01-16 20:41:23 +00:00
NULL ) ;
2007-08-16 19:59:55 +00:00
return offset ;
}
2007-08-14 22:10:55 +00:00
static const value_string ansi_tcap_ErrorCode_vals [ ] = {
{ 19 , " national " } ,
{ 20 , " private " } ,
{ 0 , NULL }
} ;
2007-12-10 08:35:41 +00:00
static const ber_choice_t ErrorCode_choice [ ] = {
{ 19 , & hf_ansi_tcap_national_01 , BER_CLASS_PRI , 19 , 0 , dissect_ansi_tcap_INTEGER_M128_127 } ,
2015-01-15 15:01:40 +00:00
{ 20 , & hf_ansi_tcap_private_01 , BER_CLASS_PRI , 20 , BER_FLAGS_IMPLTAG , dissect_ansi_tcap_ANSIMAPPrivateErrorcode } ,
2007-12-10 08:35:41 +00:00
{ 0 , NULL , 0 , 0 , 0 , NULL }
2007-08-14 22:10:55 +00:00
} ;
static int
dissect_ansi_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_ ) {
2007-12-10 08:35:41 +00:00
offset = dissect_ber_choice ( actx , tree , tvb , offset ,
ErrorCode_choice , hf_index , ett_ansi_tcap_ErrorCode ,
NULL ) ;
2007-08-14 22:10:55 +00:00
return offset ;
}
static int
2007-12-10 08:35:41 +00:00
dissect_ansi_tcap_TransactionID_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_ ) {
2016-03-09 03:17:51 +00:00
# line 154 ". / asn1 / ansi_tcap / ansi_tcap.cnf"
2007-12-10 08:35:41 +00:00
tvbuff_t * next_tvb ;
guint8 len ;
2007-08-14 22:10:55 +00:00
offset = dissect_ber_octet_string ( implicit_tag , actx , tree , tvb , offset , hf_index ,
2007-12-10 08:35:41 +00:00
& next_tvb ) ;
if ( next_tvb ) {
2015-04-09 11:27:18 +00:00
len = tvb_reported_length_remaining ( next_tvb , 0 ) ;
2009-12-02 20:16:21 +00:00
if ( len ! = 0 ) {
2014-02-26 19:29:17 +00:00
/* 0 octets for the Unidirectional,
2009-12-02 20:16:21 +00:00
* 4 octets for Query , Response & Abort
* 8 octets for Conversation in the order Originating then Responding TID
2014-02-26 19:29:17 +00:00
*
2009-12-02 20:16:21 +00:00
* In order to match this it seems like we should only use the last 4 octets
* in the 8 octets case .
*/
if ( len > 4 ) {
2015-01-07 15:11:22 +00:00
ansi_tcap_private . TransactionID_str = tvb_bytes_to_str ( wmem_packet_scope ( ) , next_tvb , 4 , len - 4 ) ;
2009-12-02 20:16:21 +00:00
} else {
2015-01-07 15:11:22 +00:00
ansi_tcap_private . TransactionID_str = tvb_bytes_to_str ( wmem_packet_scope ( ) , next_tvb , 0 , len ) ;
2009-12-02 20:16:21 +00:00
}
}
2007-12-10 08:35:41 +00:00
switch ( len ) {
case 1 :
gp_tcapsrt_info - > src_tid = tvb_get_guint8 ( next_tvb , 0 ) ;
break ;
case 2 :
gp_tcapsrt_info - > src_tid = tvb_get_ntohs ( next_tvb , 0 ) ;
break ;
case 4 :
gp_tcapsrt_info - > src_tid = tvb_get_ntohl ( next_tvb , 0 ) ;
break ;
default :
gp_tcapsrt_info - > src_tid = 0 ;
break ;
}
}
2007-08-14 22:10:55 +00:00
return offset ;
}
2007-12-10 08:35:41 +00:00
static int
dissect_ansi_tcap_TransactionID ( 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_PRI , 7 , TRUE , dissect_ansi_tcap_TransactionID_U ) ;
return offset ;
2007-08-14 22:10:55 +00:00
}
static int
2007-12-10 08:35:41 +00:00
dissect_ansi_tcap_OCTET_STRING_SIZE_1 ( 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-08-14 22:10:55 +00:00
offset = dissect_ber_octet_string ( implicit_tag , actx , tree , tvb , offset , hf_index ,
NULL ) ;
return offset ;
}
2007-12-10 08:35:41 +00:00
static int
dissect_ansi_tcap_ProtocolVersion ( 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_PRI , 26 , TRUE , dissect_ansi_tcap_OCTET_STRING_SIZE_1 ) ;
return offset ;
2007-08-14 22:10:55 +00:00
}
2015-01-15 15:01:40 +00:00
static int
dissect_ansi_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_ ) {
offset = dissect_ber_integer ( implicit_tag , actx , tree , tvb , offset , hf_index ,
NULL ) ;
return offset ;
}
2007-08-14 22:10:55 +00:00
static int
dissect_ansi_tcap_IntegerApplicationContext ( 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-12-10 08:35:41 +00:00
offset = dissect_ber_tagged_type ( implicit_tag , actx , tree , tvb , offset ,
hf_index , BER_CLASS_PRI , 27 , TRUE , dissect_ansi_tcap_INTEGER ) ;
2007-08-14 22:10:55 +00:00
return offset ;
}
2007-12-10 08:35:41 +00:00
static int
dissect_ansi_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 ) ;
return offset ;
2007-08-14 22:10:55 +00:00
}
static int
dissect_ansi_tcap_ObjectIDApplicationContext ( gboolean implicit_tag _U_ , tvbuff_t * tvb _U_ , int offset _U_ , asn1_ctx_t * actx _U_ , proto_tree * tree _U_ , int hf_index _U_ ) {
2016-03-09 03:17:51 +00:00
# line 118 ". / asn1 / ansi_tcap / ansi_tcap.cnf"
2007-08-17 23:23:36 +00:00
static const char * oid_str ;
2007-12-10 08:35:41 +00:00
offset = dissect_ber_tagged_type ( implicit_tag , actx , tree , tvb , offset ,
hf_index , BER_CLASS_PRI , 28 , TRUE , dissect_ansi_tcap_OBJECT_IDENTIFIER ) ;
2007-08-14 22:10:55 +00:00
2014-01-14 18:35:36 +00:00
ansi_tcap_private . objectApplicationId_oid = ( const void * ) oid_str ;
2007-08-17 23:23:36 +00:00
ansi_tcap_private . oid_is_present = TRUE ;
2007-08-14 22:10:55 +00:00
return offset ;
}
static const value_string ansi_tcap_T_applicationContext_vals [ ] = {
{ 27 , " integerApplicationId " } ,
{ 28 , " objectApplicationId " } ,
{ 0 , NULL }
} ;
2007-12-10 08:35:41 +00:00
static const ber_choice_t T_applicationContext_choice [ ] = {
{ 27 , & hf_ansi_tcap_integerApplicationId , BER_CLASS_PRI , 27 , BER_FLAGS_NOOWNTAG , dissect_ansi_tcap_IntegerApplicationContext } ,
{ 28 , & hf_ansi_tcap_objectApplicationId , BER_CLASS_PRI , 28 , BER_FLAGS_NOOWNTAG , dissect_ansi_tcap_ObjectIDApplicationContext } ,
{ 0 , NULL , 0 , 0 , 0 , NULL }
2007-08-14 22:10:55 +00:00
} ;
static int
dissect_ansi_tcap_T_applicationContext ( 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-12-10 08:35:41 +00:00
offset = dissect_ber_choice ( actx , tree , tvb , offset ,
T_applicationContext_choice , hf_index , ett_ansi_tcap_T_applicationContext ,
NULL ) ;
2007-08-14 22:10:55 +00:00
return offset ;
}
static int
dissect_ansi_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 ) ;
return offset ;
}
2007-12-10 08:35:41 +00:00
static const ber_sequence_t UserInformation_U_sequence_of [ 1 ] = {
{ & hf_ansi_tcap__untag_item , BER_CLASS_UNI , BER_UNI_TAG_EXTERNAL , BER_FLAGS_NOOWNTAG , dissect_ansi_tcap_EXTERNAL } ,
2007-08-14 22:10:55 +00:00
} ;
static int
2007-12-10 08:35:41 +00:00
dissect_ansi_tcap_UserInformation_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_of ( implicit_tag , actx , tree , tvb , offset ,
UserInformation_U_sequence_of , hf_index , ett_ansi_tcap_UserInformation_U ) ;
2007-08-14 22:10:55 +00:00
return offset ;
}
static int
2007-12-10 08:35:41 +00:00
dissect_ansi_tcap_UserInformation ( 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_PRI , 29 , TRUE , dissect_ansi_tcap_UserInformation_U ) ;
2007-08-14 22:10:55 +00:00
return offset ;
}
static const value_string ansi_tcap_T_securityContext_vals [ ] = {
{ 0 , " integerSecurityId " } ,
{ 1 , " objectSecurityId " } ,
{ 0 , NULL }
} ;
2007-12-10 08:35:41 +00:00
static const ber_choice_t T_securityContext_choice [ ] = {
{ 0 , & hf_ansi_tcap_integerSecurityId , BER_CLASS_CON , 0 , BER_FLAGS_IMPLTAG , dissect_ansi_tcap_INTEGER } ,
{ 1 , & hf_ansi_tcap_objectSecurityId , BER_CLASS_CON , 1 , BER_FLAGS_IMPLTAG , dissect_ansi_tcap_OBJECT_IDENTIFIER } ,
{ 0 , NULL , 0 , 0 , 0 , NULL }
2007-08-14 22:10:55 +00:00
} ;
static int
dissect_ansi_tcap_T_securityContext ( 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-12-10 08:35:41 +00:00
offset = dissect_ber_choice ( actx , tree , tvb , offset ,
T_securityContext_choice , hf_index , ett_ansi_tcap_T_securityContext ,
NULL ) ;
2007-08-14 22:10:55 +00:00
return offset ;
}
static const value_string ansi_tcap_T_confidentialityId_vals [ ] = {
{ 0 , " integerConfidentialityId " } ,
{ 1 , " objectConfidentialityId " } ,
{ 0 , NULL }
} ;
2007-12-10 08:35:41 +00:00
static const ber_choice_t T_confidentialityId_choice [ ] = {
{ 0 , & hf_ansi_tcap_integerConfidentialityId , BER_CLASS_CON , 0 , BER_FLAGS_IMPLTAG , dissect_ansi_tcap_INTEGER } ,
{ 1 , & hf_ansi_tcap_objectConfidentialityId , BER_CLASS_CON , 1 , BER_FLAGS_IMPLTAG , dissect_ansi_tcap_OBJECT_IDENTIFIER } ,
{ 0 , NULL , 0 , 0 , 0 , NULL }
2007-08-14 22:10:55 +00:00
} ;
static int
dissect_ansi_tcap_T_confidentialityId ( 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-12-10 08:35:41 +00:00
offset = dissect_ber_choice ( actx , tree , tvb , offset ,
T_confidentialityId_choice , hf_index , ett_ansi_tcap_T_confidentialityId ,
NULL ) ;
2007-08-14 22:10:55 +00:00
return offset ;
}
2007-12-10 08:35:41 +00:00
static const ber_sequence_t Confidentiality_sequence [ ] = {
{ & hf_ansi_tcap_confidentialityId , BER_CLASS_ANY /*choice*/ , - 1 /*choice*/ , BER_FLAGS_OPTIONAL | BER_FLAGS_NOOWNTAG | BER_FLAGS_NOTCHKTAG , dissect_ansi_tcap_T_confidentialityId } ,
{ NULL , 0 , 0 , 0 , NULL }
2007-08-14 22:10:55 +00:00
} ;
static int
dissect_ansi_tcap_Confidentiality ( 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-12-10 08:35:41 +00:00
offset = dissect_ber_sequence ( implicit_tag , actx , tree , tvb , offset ,
Confidentiality_sequence , hf_index , ett_ansi_tcap_Confidentiality ) ;
2007-08-14 22:10:55 +00:00
return offset ;
}
2007-12-10 08:35:41 +00:00
static const ber_sequence_t DialoguePortion_U_sequence [ ] = {
{ & hf_ansi_tcap_version , BER_CLASS_PRI , 26 , BER_FLAGS_OPTIONAL | BER_FLAGS_NOOWNTAG , dissect_ansi_tcap_ProtocolVersion } ,
{ & hf_ansi_tcap_applicationContext , BER_CLASS_ANY /*choice*/ , - 1 /*choice*/ , BER_FLAGS_OPTIONAL | BER_FLAGS_NOOWNTAG | BER_FLAGS_NOTCHKTAG , dissect_ansi_tcap_T_applicationContext } ,
{ & hf_ansi_tcap_userInformation_01 , BER_CLASS_PRI , 29 , BER_FLAGS_OPTIONAL | BER_FLAGS_NOOWNTAG , dissect_ansi_tcap_UserInformation } ,
{ & hf_ansi_tcap_securityContext , BER_CLASS_ANY /*choice*/ , - 1 /*choice*/ , BER_FLAGS_OPTIONAL | BER_FLAGS_NOOWNTAG | BER_FLAGS_NOTCHKTAG , dissect_ansi_tcap_T_securityContext } ,
{ & hf_ansi_tcap_confidentiality , BER_CLASS_CON , 2 , BER_FLAGS_OPTIONAL | BER_FLAGS_IMPLTAG , dissect_ansi_tcap_Confidentiality } ,
{ NULL , 0 , 0 , 0 , NULL }
2007-11-12 17:02:46 +00:00
} ;
2007-08-14 22:10:55 +00:00
static int
2007-12-10 08:35:41 +00:00
dissect_ansi_tcap_DialoguePortion_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 ,
DialoguePortion_U_sequence , hf_index , ett_ansi_tcap_DialoguePortion_U ) ;
2007-08-14 22:10:55 +00:00
return offset ;
}
2007-12-10 08:35:41 +00:00
static int
dissect_ansi_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_PRI , 25 , TRUE , dissect_ansi_tcap_DialoguePortion_U ) ;
return offset ;
2007-11-12 17:02:46 +00:00
}
2007-08-14 22:10:55 +00:00
static int
dissect_ansi_tcap_T_componentIDs ( 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 ) ;
return offset ;
}
static int
dissect_ansi_tcap_T_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_ ) {
2016-03-09 03:17:51 +00:00
# line 87 ". / asn1 / ansi_tcap / ansi_tcap.cnf"
2007-08-14 22:10:55 +00:00
2010-06-29 18:07:33 +00:00
if ( find_tcap_subdissector ( tvb , actx , tree ) )
2015-04-09 11:27:18 +00:00
offset = tvb_reported_length ( tvb ) ;
2014-02-26 19:29:17 +00:00
2007-08-17 23:23:36 +00:00
2007-08-14 22:10:55 +00:00
return offset ;
}
2007-12-10 08:35:41 +00:00
static const ber_sequence_t Invoke_sequence [ ] = {
{ & hf_ansi_tcap_componentIDs , BER_CLASS_PRI , 15 , BER_FLAGS_OPTIONAL | BER_FLAGS_IMPLTAG , dissect_ansi_tcap_T_componentIDs } ,
{ & hf_ansi_tcap_operationCode , BER_CLASS_ANY /*choice*/ , - 1 /*choice*/ , BER_FLAGS_NOOWNTAG | BER_FLAGS_NOTCHKTAG , dissect_ansi_tcap_OperationCode } ,
{ & hf_ansi_tcap_parameter , BER_CLASS_ANY , 0 , BER_FLAGS_OPTIONAL | BER_FLAGS_NOOWNTAG , dissect_ansi_tcap_T_parameter } ,
{ NULL , 0 , 0 , 0 , NULL }
2007-08-14 22:10:55 +00:00
} ;
static int
dissect_ansi_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_ ) {
2016-03-09 03:17:51 +00:00
# line 93 ". / asn1 / ansi_tcap / ansi_tcap.cnf"
2007-08-16 19:59:55 +00:00
ansi_tcap_private . d . pdu = 1 ;
2007-12-10 08:35:41 +00:00
offset = dissect_ber_sequence ( implicit_tag , actx , tree , tvb , offset ,
Invoke_sequence , hf_index , ett_ansi_tcap_Invoke ) ;
2007-09-12 16:45:53 +00:00
2007-08-14 22:10:55 +00:00
return offset ;
}
static int
dissect_ansi_tcap_T_componentID ( 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 ) ;
return offset ;
}
static int
dissect_ansi_tcap_T_parameter_01 ( gboolean implicit_tag _U_ , tvbuff_t * tvb _U_ , int offset _U_ , asn1_ctx_t * actx _U_ , proto_tree * tree _U_ , int hf_index _U_ ) {
2016-03-09 03:17:51 +00:00
# line 100 ". / asn1 / ansi_tcap / ansi_tcap.cnf"
2010-06-29 18:07:33 +00:00
if ( find_tcap_subdissector ( tvb , actx , tree ) )
2015-04-09 11:27:18 +00:00
offset = tvb_reported_length ( tvb ) ;
2007-08-14 22:10:55 +00:00
return offset ;
}
2007-12-10 08:35:41 +00:00
static const ber_sequence_t ReturnResult_sequence [ ] = {
{ & hf_ansi_tcap_componentID , BER_CLASS_PRI , 15 , BER_FLAGS_IMPLTAG , dissect_ansi_tcap_T_componentID } ,
{ & hf_ansi_tcap_parameter_01 , BER_CLASS_ANY , 0 , BER_FLAGS_OPTIONAL | BER_FLAGS_NOOWNTAG , dissect_ansi_tcap_T_parameter_01 } ,
{ NULL , 0 , 0 , 0 , NULL }
2007-08-14 22:10:55 +00:00
} ;
static int
dissect_ansi_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_ ) {
2016-03-09 03:17:51 +00:00
# line 104 ". / asn1 / ansi_tcap / ansi_tcap.cnf"
2007-08-16 19:59:55 +00:00
ansi_tcap_private . d . pdu = 2 ;
2007-12-10 08:35:41 +00:00
offset = dissect_ber_sequence ( implicit_tag , actx , tree , tvb , offset ,
ReturnResult_sequence , hf_index , ett_ansi_tcap_ReturnResult ) ;
2007-09-12 16:45:53 +00:00
2007-08-14 22:10:55 +00:00
return offset ;
}
static int
dissect_ansi_tcap_T_componentID_01 ( 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 ) ;
return offset ;
}
static int
dissect_ansi_tcap_T_parameter_02 ( gboolean implicit_tag _U_ , tvbuff_t * tvb _U_ , int offset _U_ , asn1_ctx_t * actx _U_ , proto_tree * tree _U_ , int hf_index _U_ ) {
2016-03-09 03:17:51 +00:00
# line 110 ". / asn1 / ansi_tcap / ansi_tcap.cnf"
2010-06-29 18:07:33 +00:00
if ( find_tcap_subdissector ( tvb , actx , tree ) )
2015-04-09 11:27:18 +00:00
offset = tvb_reported_length ( tvb ) ;
2007-08-17 23:23:36 +00:00
2007-08-14 22:10:55 +00:00
return offset ;
}
2007-12-10 08:35:41 +00:00
static const ber_sequence_t ReturnError_sequence [ ] = {
{ & hf_ansi_tcap_componentID_01 , BER_CLASS_PRI , 15 , BER_FLAGS_IMPLTAG , dissect_ansi_tcap_T_componentID_01 } ,
{ & hf_ansi_tcap_errorCode , BER_CLASS_ANY /*choice*/ , - 1 /*choice*/ , BER_FLAGS_NOOWNTAG | BER_FLAGS_NOTCHKTAG , dissect_ansi_tcap_ErrorCode } ,
{ & hf_ansi_tcap_parameter_02 , BER_CLASS_ANY , 0 , BER_FLAGS_OPTIONAL | BER_FLAGS_NOOWNTAG , dissect_ansi_tcap_T_parameter_02 } ,
{ NULL , 0 , 0 , 0 , NULL }
2007-08-14 22:10:55 +00:00
} ;
static int
dissect_ansi_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_ ) {
2016-03-09 03:17:51 +00:00
# line 114 ". / asn1 / ansi_tcap / ansi_tcap.cnf"
2007-08-16 19:59:55 +00:00
ansi_tcap_private . d . pdu = 3 ;
2007-08-17 23:23:36 +00:00
2007-12-10 08:35:41 +00:00
offset = dissect_ber_sequence ( implicit_tag , actx , tree , tvb , offset ,
ReturnError_sequence , hf_index , ett_ansi_tcap_ReturnError ) ;
2007-09-12 16:45:53 +00:00
2007-08-14 22:10:55 +00:00
return offset ;
}
static int
dissect_ansi_tcap_OCTET_STRING_SIZE_0_1 ( 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 ) ;
return offset ;
}
static const value_string ansi_tcap_Problem_vals [ ] = {
{ 257 , " general-unrecognisedComponentType " } ,
{ 258 , " general-incorrectComponentPortion " } ,
{ 259 , " general-badlyStructuredCompPortion " } ,
{ 260 , " general-incorrectComponentCoding " } ,
{ 513 , " invoke-duplicateInvocation " } ,
{ 514 , " invoke-unrecognisedOperation " } ,
{ 515 , " invoke-incorrectParameter " } ,
{ 516 , " invoke-unrecognisedCorrelationID " } ,
{ 769 , " returnResult-unrecognisedCorrelationID " } ,
{ 770 , " returnResult-unexpectedReturnResult " } ,
{ 771 , " returnResult-incorrectParameter " } ,
{ 1025 , " returnError-unrecognisedCorrelationID " } ,
{ 1026 , " returnError-unexpectedReturnError " } ,
{ 1027 , " returnError-unrecognisedError " } ,
{ 1028 , " returnError-unexpectedError " } ,
{ 1029 , " returnError-incorrectParameter " } ,
{ 1281 , " transaction-unrecognizedPackageType " } ,
{ 1282 , " transaction-incorrectTransPortion " } ,
{ 1283 , " transaction-badlyStructuredTransPortion " } ,
{ 1284 , " transaction-unassignedRespondingTransID " } ,
{ 1285 , " transaction-permissionToReleaseProblem " } ,
{ 1286 , " transaction-resourceUnavailable " } ,
{ 0 , NULL }
} ;
static int
dissect_ansi_tcap_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_integer ( implicit_tag , actx , tree , tvb , offset , hf_index ,
2008-01-16 20:41:23 +00:00
NULL ) ;
2007-08-14 22:10:55 +00:00
return offset ;
}
2007-12-10 08:35:41 +00:00
static const ber_sequence_t T_paramSequence_sequence [ ] = {
{ NULL , 0 , 0 , 0 , NULL }
2007-08-14 22:10:55 +00:00
} ;
static int
dissect_ansi_tcap_T_paramSequence ( 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-12-10 08:35:41 +00:00
offset = dissect_ber_sequence ( implicit_tag , actx , tree , tvb , offset ,
T_paramSequence_sequence , hf_index , ett_ansi_tcap_T_paramSequence ) ;
2007-08-14 22:10:55 +00:00
return offset ;
}
2007-12-10 08:35:41 +00:00
static const ber_sequence_t T_paramSet_set [ ] = {
{ NULL , 0 , 0 , 0 , NULL }
2007-08-14 22:10:55 +00:00
} ;
static int
dissect_ansi_tcap_T_paramSet ( 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-12-10 08:35:41 +00:00
offset = dissect_ber_set ( implicit_tag , actx , tree , tvb , offset ,
T_paramSet_set , hf_index , ett_ansi_tcap_T_paramSet ) ;
2007-08-14 22:10:55 +00:00
return offset ;
}
static const value_string ansi_tcap_T_parameter_03_vals [ ] = {
{ 16 , " paramSequence " } ,
{ 18 , " paramSet " } ,
{ 0 , NULL }
} ;
2007-12-10 08:35:41 +00:00
static const ber_choice_t T_parameter_03_choice [ ] = {
{ 16 , & hf_ansi_tcap_paramSequence , BER_CLASS_PRI , 16 , BER_FLAGS_IMPLTAG , dissect_ansi_tcap_T_paramSequence } ,
{ 18 , & hf_ansi_tcap_paramSet , BER_CLASS_PRI , 18 , BER_FLAGS_IMPLTAG , dissect_ansi_tcap_T_paramSet } ,
{ 0 , NULL , 0 , 0 , 0 , NULL }
2007-08-14 22:10:55 +00:00
} ;
static int
dissect_ansi_tcap_T_parameter_03 ( 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-12-10 08:35:41 +00:00
offset = dissect_ber_choice ( actx , tree , tvb , offset ,
T_parameter_03_choice , hf_index , ett_ansi_tcap_T_parameter_03 ,
NULL ) ;
2007-08-14 22:10:55 +00:00
return offset ;
}
2007-12-10 08:35:41 +00:00
static const ber_sequence_t Reject_sequence [ ] = {
{ & hf_ansi_tcap_componentID_02 , BER_CLASS_PRI , 15 , BER_FLAGS_IMPLTAG , dissect_ansi_tcap_OCTET_STRING_SIZE_0_1 } ,
{ & hf_ansi_tcap_rejectProblem , BER_CLASS_PRI , 21 , BER_FLAGS_IMPLTAG , dissect_ansi_tcap_Problem } ,
{ & hf_ansi_tcap_parameter_03 , BER_CLASS_ANY /*choice*/ , - 1 /*choice*/ , BER_FLAGS_NOOWNTAG | BER_FLAGS_NOTCHKTAG , dissect_ansi_tcap_T_parameter_03 } ,
{ NULL , 0 , 0 , 0 , NULL }
2007-08-14 22:10:55 +00:00
} ;
static int
dissect_ansi_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_ ) {
2007-12-10 08:35:41 +00:00
offset = dissect_ber_sequence ( implicit_tag , actx , tree , tvb , offset ,
Reject_sequence , hf_index , ett_ansi_tcap_Reject ) ;
2007-08-14 22:10:55 +00:00
return offset ;
}
static const value_string ansi_tcap_ComponentPDU_vals [ ] = {
{ 9 , " invokeLast " } ,
{ 10 , " returnResultLast " } ,
{ 11 , " returnError " } ,
{ 12 , " reject " } ,
{ 13 , " invokeNotLast " } ,
{ 14 , " returnResultNotLast " } ,
{ 0 , NULL }
} ;
2007-12-10 08:35:41 +00:00
static const ber_choice_t ComponentPDU_choice [ ] = {
{ 9 , & hf_ansi_tcap_invokeLast , BER_CLASS_PRI , 9 , BER_FLAGS_IMPLTAG , dissect_ansi_tcap_Invoke } ,
{ 10 , & hf_ansi_tcap_returnResultLast , BER_CLASS_PRI , 10 , BER_FLAGS_IMPLTAG , dissect_ansi_tcap_ReturnResult } ,
{ 11 , & hf_ansi_tcap_returnError , BER_CLASS_PRI , 11 , BER_FLAGS_IMPLTAG , dissect_ansi_tcap_ReturnError } ,
{ 12 , & hf_ansi_tcap_reject , BER_CLASS_PRI , 12 , BER_FLAGS_IMPLTAG , dissect_ansi_tcap_Reject } ,
{ 13 , & hf_ansi_tcap_invokeNotLast , BER_CLASS_PRI , 13 , BER_FLAGS_IMPLTAG , dissect_ansi_tcap_Invoke } ,
{ 14 , & hf_ansi_tcap_returnResultNotLast , BER_CLASS_PRI , 14 , BER_FLAGS_IMPLTAG , dissect_ansi_tcap_ReturnResult } ,
{ 0 , NULL , 0 , 0 , 0 , NULL }
2007-08-14 22:10:55 +00:00
} ;
static int
dissect_ansi_tcap_ComponentPDU ( 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-12-10 08:35:41 +00:00
offset = dissect_ber_choice ( actx , tree , tvb , offset ,
ComponentPDU_choice , hf_index , ett_ansi_tcap_ComponentPDU ,
NULL ) ;
2007-08-14 22:10:55 +00:00
return offset ;
}
2007-12-10 08:35:41 +00:00
static const ber_sequence_t SEQUENCE_OF_ComponentPDU_sequence_of [ 1 ] = {
{ & hf_ansi_tcap__untag_item_01 , BER_CLASS_ANY /*choice*/ , - 1 /*choice*/ , BER_FLAGS_NOOWNTAG | BER_FLAGS_NOTCHKTAG , dissect_ansi_tcap_ComponentPDU } ,
2007-11-12 17:02:46 +00:00
} ;
2007-08-14 22:10:55 +00:00
static int
2007-12-10 08:35:41 +00:00
dissect_ansi_tcap_SEQUENCE_OF_ComponentPDU ( 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_OF_ComponentPDU_sequence_of , hf_index , ett_ansi_tcap_SEQUENCE_OF_ComponentPDU ) ;
2007-08-14 22:10:55 +00:00
return offset ;
}
2007-12-10 08:35:41 +00:00
static int
dissect_ansi_tcap_ComponentSequence ( 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_PRI , 8 , TRUE , dissect_ansi_tcap_SEQUENCE_OF_ComponentPDU ) ;
return offset ;
2007-11-12 17:02:46 +00:00
}
2007-08-14 22:10:55 +00:00
2007-12-10 08:35:41 +00:00
static const ber_sequence_t UniTransactionPDU_sequence [ ] = {
{ & hf_ansi_tcap_identifier , BER_CLASS_PRI , 7 , BER_FLAGS_NOOWNTAG , dissect_ansi_tcap_TransactionID } ,
{ & hf_ansi_tcap_dialoguePortion , BER_CLASS_PRI , 25 , BER_FLAGS_OPTIONAL | BER_FLAGS_NOOWNTAG , dissect_ansi_tcap_DialoguePortion } ,
{ & hf_ansi_tcap_componentPortion , BER_CLASS_PRI , 8 , BER_FLAGS_NOOWNTAG , dissect_ansi_tcap_ComponentSequence } ,
{ NULL , 0 , 0 , 0 , NULL }
2007-08-14 22:10:55 +00:00
} ;
static int
dissect_ansi_tcap_UniTransactionPDU ( 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-12-10 08:35:41 +00:00
offset = dissect_ber_sequence ( implicit_tag , actx , tree , tvb , offset ,
UniTransactionPDU_sequence , hf_index , ett_ansi_tcap_UniTransactionPDU ) ;
2007-08-14 22:10:55 +00:00
return offset ;
}
2007-08-17 23:23:36 +00:00
static int
dissect_ansi_tcap_T_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_ ) {
2016-03-09 03:17:51 +00:00
# line 126 ". / asn1 / ansi_tcap / ansi_tcap.cnf"
2007-08-17 23:23:36 +00:00
gp_tcapsrt_info - > ope = TC_ANSI_ALL ;
2010-01-13 21:41:28 +00:00
col_set_str ( actx - > pinfo - > cinfo , COL_INFO , " unidirectional " ) ;
2007-08-17 23:23:36 +00:00
offset = dissect_ansi_tcap_UniTransactionPDU ( implicit_tag , tvb , offset , actx , tree , hf_index ) ;
return offset ;
}
2007-12-10 08:35:41 +00:00
static const ber_sequence_t TransactionPDU_sequence [ ] = {
{ & hf_ansi_tcap_identifier , BER_CLASS_PRI , 7 , BER_FLAGS_NOOWNTAG , dissect_ansi_tcap_TransactionID } ,
{ & hf_ansi_tcap_dialoguePortion , BER_CLASS_PRI , 25 , BER_FLAGS_OPTIONAL | BER_FLAGS_NOOWNTAG , dissect_ansi_tcap_DialoguePortion } ,
{ & hf_ansi_tcap_componentPortion , BER_CLASS_PRI , 8 , BER_FLAGS_OPTIONAL | BER_FLAGS_NOOWNTAG , dissect_ansi_tcap_ComponentSequence } ,
{ NULL , 0 , 0 , 0 , NULL }
2007-08-14 22:10:55 +00:00
} ;
static int
dissect_ansi_tcap_TransactionPDU ( 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-12-10 08:35:41 +00:00
offset = dissect_ber_sequence ( implicit_tag , actx , tree , tvb , offset ,
TransactionPDU_sequence , hf_index , ett_ansi_tcap_TransactionPDU ) ;
2007-08-14 22:10:55 +00:00
return offset ;
}
2007-08-17 23:23:36 +00:00
static int
dissect_ansi_tcap_T_queryWithPerm ( gboolean implicit_tag _U_ , tvbuff_t * tvb _U_ , int offset _U_ , asn1_ctx_t * actx _U_ , proto_tree * tree _U_ , int hf_index _U_ ) {
2016-03-09 03:17:51 +00:00
# line 130 ". / asn1 / ansi_tcap / ansi_tcap.cnf"
2007-08-17 23:23:36 +00:00
gp_tcapsrt_info - > ope = TC_ANSI_ALL ;
2010-01-13 21:41:28 +00:00
col_set_str ( actx - > pinfo - > cinfo , COL_INFO , " queryWithPerm " ) ;
2007-08-17 23:23:36 +00:00
offset = dissect_ansi_tcap_TransactionPDU ( implicit_tag , tvb , offset , actx , tree , hf_index ) ;
return offset ;
}
static int
dissect_ansi_tcap_T_queryWithoutPerm ( gboolean implicit_tag _U_ , tvbuff_t * tvb _U_ , int offset _U_ , asn1_ctx_t * actx _U_ , proto_tree * tree _U_ , int hf_index _U_ ) {
2016-03-09 03:17:51 +00:00
# line 134 ". / asn1 / ansi_tcap / ansi_tcap.cnf"
2007-08-17 23:23:36 +00:00
gp_tcapsrt_info - > ope = TC_ANSI_ALL ;
2010-01-13 21:41:28 +00:00
col_set_str ( actx - > pinfo - > cinfo , COL_INFO , " queryWithoutPerm " ) ;
2007-08-17 23:23:36 +00:00
offset = dissect_ansi_tcap_TransactionPDU ( implicit_tag , tvb , offset , actx , tree , hf_index ) ;
return offset ;
}
static int
dissect_ansi_tcap_T_response ( gboolean implicit_tag _U_ , tvbuff_t * tvb _U_ , int offset _U_ , asn1_ctx_t * actx _U_ , proto_tree * tree _U_ , int hf_index _U_ ) {
2016-03-09 03:17:51 +00:00
# line 138 ". / asn1 / ansi_tcap / ansi_tcap.cnf"
2007-08-17 23:23:36 +00:00
gp_tcapsrt_info - > ope = TC_ANSI_ALL ;
2010-01-13 21:41:28 +00:00
col_set_str ( actx - > pinfo - > cinfo , COL_INFO , " response " ) ;
2007-08-17 23:23:36 +00:00
offset = dissect_ansi_tcap_TransactionPDU ( implicit_tag , tvb , offset , actx , tree , hf_index ) ;
return offset ;
}
static int
dissect_ansi_tcap_T_conversationWithPerm ( gboolean implicit_tag _U_ , tvbuff_t * tvb _U_ , int offset _U_ , asn1_ctx_t * actx _U_ , proto_tree * tree _U_ , int hf_index _U_ ) {
2016-03-09 03:17:51 +00:00
# line 142 ". / asn1 / ansi_tcap / ansi_tcap.cnf"
2007-08-17 23:23:36 +00:00
gp_tcapsrt_info - > ope = TC_ANSI_ALL ;
2010-01-13 21:41:28 +00:00
col_set_str ( actx - > pinfo - > cinfo , COL_INFO , " conversationWithPerm " ) ;
2007-08-17 23:23:36 +00:00
offset = dissect_ansi_tcap_TransactionPDU ( implicit_tag , tvb , offset , actx , tree , hf_index ) ;
return offset ;
}
static int
dissect_ansi_tcap_T_conversationWithoutPerm ( gboolean implicit_tag _U_ , tvbuff_t * tvb _U_ , int offset _U_ , asn1_ctx_t * actx _U_ , proto_tree * tree _U_ , int hf_index _U_ ) {
2016-03-09 03:17:51 +00:00
# line 146 ". / asn1 / ansi_tcap / ansi_tcap.cnf"
2007-08-17 23:23:36 +00:00
gp_tcapsrt_info - > ope = TC_ANSI_ALL ;
2010-01-13 21:41:28 +00:00
col_set_str ( actx - > pinfo - > cinfo , COL_INFO , " conversationWithoutPerm " ) ;
2007-08-17 23:23:36 +00:00
offset = dissect_ansi_tcap_TransactionPDU ( implicit_tag , tvb , offset , actx , tree , hf_index ) ;
return offset ;
}
2007-12-10 08:35:41 +00:00
static const value_string ansi_tcap_P_Abort_cause_U_vals [ ] = {
2007-08-14 22:10:55 +00:00
{ 1 , " unrecognizedPackageType " } ,
{ 2 , " incorrectTransactionPortion " } ,
{ 3 , " badlyStructuredTransactionPortion " } ,
{ 4 , " unassignedRespondingTransactionID " } ,
{ 5 , " permissionToReleaseProblem " } ,
{ 6 , " resourceUnavailable " } ,
{ 7 , " unrecognizedDialoguePortionID " } ,
{ 8 , " badlyStructuredDialoguePortion " } ,
{ 9 , " missingDialoguePortion " } ,
{ 10 , " inconsistentDialoguePortion " } ,
{ 0 , NULL }
} ;
static int
2007-12-10 08:35:41 +00:00
dissect_ansi_tcap_P_Abort_cause_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-08-14 22:10:55 +00:00
offset = dissect_ber_integer ( implicit_tag , actx , tree , tvb , offset , hf_index ,
2008-01-16 20:41:23 +00:00
NULL ) ;
2007-08-14 22:10:55 +00:00
return offset ;
}
2007-12-10 08:35:41 +00:00
static int
dissect_ansi_tcap_P_Abort_cause ( 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_PRI , 23 , TRUE , dissect_ansi_tcap_P_Abort_cause_U ) ;
return offset ;
2007-08-14 22:10:55 +00:00
}
static int
dissect_ansi_tcap_UserAbortInformation ( 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-12-10 08:35:41 +00:00
offset = dissect_ber_tagged_type ( implicit_tag , actx , tree , tvb , offset ,
hf_index , BER_CLASS_PRI , 24 , FALSE , dissect_ansi_tcap_EXTERNAL ) ;
2007-08-14 22:10:55 +00:00
return offset ;
}
static const value_string ansi_tcap_T_causeInformation_vals [ ] = {
{ 23 , " abortCause " } ,
{ 24 , " userInformation " } ,
{ 0 , NULL }
} ;
2007-12-10 08:35:41 +00:00
static const ber_choice_t T_causeInformation_choice [ ] = {
{ 23 , & hf_ansi_tcap_abortCause , BER_CLASS_PRI , 23 , BER_FLAGS_NOOWNTAG , dissect_ansi_tcap_P_Abort_cause } ,
{ 24 , & hf_ansi_tcap_userInformation , BER_CLASS_PRI , 24 , BER_FLAGS_NOOWNTAG , dissect_ansi_tcap_UserAbortInformation } ,
{ 0 , NULL , 0 , 0 , 0 , NULL }
2007-08-14 22:10:55 +00:00
} ;
static int
dissect_ansi_tcap_T_causeInformation ( 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-12-10 08:35:41 +00:00
offset = dissect_ber_choice ( actx , tree , tvb , offset ,
T_causeInformation_choice , hf_index , ett_ansi_tcap_T_causeInformation ,
NULL ) ;
2007-08-14 22:10:55 +00:00
return offset ;
}
2007-12-10 08:35:41 +00:00
static const ber_sequence_t Abort_sequence [ ] = {
{ & hf_ansi_tcap_identifier , BER_CLASS_PRI , 7 , BER_FLAGS_NOOWNTAG , dissect_ansi_tcap_TransactionID } ,
{ & hf_ansi_tcap_dialogPortion , BER_CLASS_PRI , 25 , BER_FLAGS_OPTIONAL | BER_FLAGS_NOOWNTAG , dissect_ansi_tcap_DialoguePortion } ,
{ & hf_ansi_tcap_causeInformation , BER_CLASS_ANY /*choice*/ , - 1 /*choice*/ , BER_FLAGS_NOOWNTAG | BER_FLAGS_NOTCHKTAG , dissect_ansi_tcap_T_causeInformation } ,
{ NULL , 0 , 0 , 0 , NULL }
2007-08-14 22:10:55 +00:00
} ;
static int
dissect_ansi_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_ ) {
2007-12-10 08:35:41 +00:00
offset = dissect_ber_sequence ( implicit_tag , actx , tree , tvb , offset ,
Abort_sequence , hf_index , ett_ansi_tcap_Abort ) ;
2007-08-14 22:10:55 +00:00
return offset ;
}
2007-08-17 23:23:36 +00:00
static int
dissect_ansi_tcap_T_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_ ) {
2016-03-09 03:17:51 +00:00
# line 150 ". / asn1 / ansi_tcap / ansi_tcap.cnf"
2007-08-17 23:23:36 +00:00
gp_tcapsrt_info - > ope = TC_ANSI_ABORT ;
2010-01-13 21:41:28 +00:00
col_set_str ( actx - > pinfo - > cinfo , COL_INFO , " Abort " ) ;
2007-08-17 23:23:36 +00:00
offset = dissect_ansi_tcap_Abort ( implicit_tag , tvb , offset , actx , tree , hf_index ) ;
return offset ;
}
2007-12-10 08:35:41 +00:00
static const ber_choice_t PackageType_choice [ ] = {
{ 1 , & hf_ansi_tcap_unidirectional , BER_CLASS_PRI , 1 , BER_FLAGS_IMPLTAG , dissect_ansi_tcap_T_unidirectional } ,
{ 2 , & hf_ansi_tcap_queryWithPerm , BER_CLASS_PRI , 2 , BER_FLAGS_IMPLTAG , dissect_ansi_tcap_T_queryWithPerm } ,
{ 3 , & hf_ansi_tcap_queryWithoutPerm , BER_CLASS_PRI , 3 , BER_FLAGS_IMPLTAG , dissect_ansi_tcap_T_queryWithoutPerm } ,
{ 4 , & hf_ansi_tcap_response , BER_CLASS_PRI , 4 , BER_FLAGS_IMPLTAG , dissect_ansi_tcap_T_response } ,
{ 5 , & hf_ansi_tcap_conversationWithPerm , BER_CLASS_PRI , 5 , BER_FLAGS_IMPLTAG , dissect_ansi_tcap_T_conversationWithPerm } ,
{ 6 , & hf_ansi_tcap_conversationWithoutPerm , BER_CLASS_PRI , 6 , BER_FLAGS_IMPLTAG , dissect_ansi_tcap_T_conversationWithoutPerm } ,
{ 22 , & hf_ansi_tcap_abort , BER_CLASS_PRI , 22 , BER_FLAGS_IMPLTAG , dissect_ansi_tcap_T_abort } ,
{ 0 , NULL , 0 , 0 , 0 , NULL }
2007-08-14 22:10:55 +00:00
} ;
static int
dissect_ansi_tcap_PackageType ( 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-12-10 08:35:41 +00:00
offset = dissect_ber_choice ( actx , tree , tvb , offset ,
PackageType_choice , hf_index , ett_ansi_tcap_PackageType ,
NULL ) ;
2007-08-14 22:10:55 +00:00
return offset ;
}
/*--- End of included file: packet-ansi_tcap-fn.c ---*/
2018-09-06 12:53:09 +00:00
# line 307 ". / asn1 / ansi_tcap / packet-ansi_tcap-template.c"
2007-08-14 22:10:55 +00:00
2015-11-22 03:03:26 +00:00
static int
dissect_ansi_tcap ( tvbuff_t * tvb , packet_info * pinfo , proto_tree * parent_tree , void * data _U_ )
2007-08-14 22:10:55 +00:00
{
2009-03-15 15:40:55 +00:00
proto_item * item = NULL ;
proto_tree * tree = NULL ;
2007-09-12 18:12:18 +00:00
#if 0
2009-03-15 15:40:55 +00:00
proto_item * stat_item = NULL ;
proto_tree * stat_tree = NULL ;
gint offset = 0 ;
2007-08-14 22:10:55 +00:00
struct tcaphash_context_t * p_tcap_context ;
dissector_handle_t subdissector_handle ;
2007-09-12 16:45:53 +00:00
# endif
2009-03-15 15:40:55 +00:00
asn1_ctx_t asn1_ctx ;
2007-08-16 19:59:55 +00:00
2009-03-15 15:40:55 +00:00
asn1_ctx_init ( & asn1_ctx , ASN1_ENC_BER , TRUE , pinfo ) ;
ansi_tcap_ctx_init ( & ansi_tcap_private ) ;
2007-08-14 22:10:55 +00:00
2017-08-29 15:29:20 +00:00
asn1_ctx . subtree . top_tree = parent_tree ;
2009-08-09 07:59:51 +00:00
col_set_str ( pinfo - > cinfo , COL_PROTOCOL , " ANSI TCAP " ) ;
2007-08-14 22:10:55 +00:00
/* create display subtree for the protocol */
if ( parent_tree ) {
2011-10-21 02:10:19 +00:00
item = proto_tree_add_item ( parent_tree , proto_ansi_tcap , tvb , 0 , - 1 , ENC_NA ) ;
2007-08-14 22:10:55 +00:00
tree = proto_item_add_subtree ( item , ett_tcap ) ;
}
cur_oid = NULL ;
tcapext_oid = NULL ;
gp_tcapsrt_info = tcapsrt_razinfo ( ) ;
tcap_subdissector_used = FALSE ;
gp_tcap_context = NULL ;
dissect_ansi_tcap_PackageType ( FALSE , tvb , 0 , & asn1_ctx , tree , - 1 ) ;
2009-10-11 17:25:04 +00:00
#if 0 /* Skip this part for now it will be rewritten */
2007-08-14 22:10:55 +00:00
if ( g_ansi_tcap_HandleSRT & & ! tcap_subdissector_used ) {
2009-03-15 15:40:55 +00:00
if ( gtcap_DisplaySRT & & tree ) {
2014-06-21 01:35:40 +00:00
stat_tree = proto_tree_add_subtree ( tree , tvb , 0 , 0 , ett_ansi_tcap_stat , & stat_item , " Stat " ) ;
2009-03-15 15:40:55 +00:00
PROTO_ITEM_SET_GENERATED ( stat_item ) ;
}
p_tcap_context = tcapsrt_call_matching ( tvb , pinfo , stat_tree , gp_tcapsrt_info ) ;
ansi_tcap_private . context = p_tcap_context ;
/* If the current message is TCAP only,
* save the Application contexte name for the next messages
*/
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 ) ) ;
2009-03-15 15:40:55 +00:00
if ( ( subdissector_handle = dissector_get_string_handle ( ber_oid_dissector_table , cur_oid ) ) ) {
p_tcap_context - > subdissector_handle = subdissector_handle ;
p_tcap_context - > oid_present = TRUE ;
}
}
if ( g_ansi_tcap_HandleSRT & & p_tcap_context & & p_tcap_context - > callback ) {
/* Callback fonction for the upper layer */
( p_tcap_context - > callback ) ( tvb , pinfo , stat_tree , p_tcap_context ) ;
}
}
2007-09-12 16:45:53 +00:00
# endif
2015-11-22 03:03:26 +00:00
return tvb_captured_length ( tvb ) ;
2007-08-14 22:10:55 +00:00
}
void
proto_reg_handoff_ansi_tcap ( void )
{
2016-03-16 13:02:52 +00:00
ansi_map_handle = find_dissector_add_dependency ( " ansi_map " , proto_ansi_tcap ) ;
2018-09-06 12:53:09 +00:00
ain_handle = find_dissector_add_dependency ( " ain " , proto_ansi_tcap ) ;
2016-03-16 13:02:52 +00:00
ber_oid_dissector_table = find_dissector_table ( " ber.oid " ) ;
2007-08-14 22:10:55 +00:00
}
void
proto_register_ansi_tcap ( void )
{
2011-02-04 16:12:59 +00:00
module_t * ansi_tcap_module ;
2007-08-14 22:10:55 +00:00
/* Setup list of header fields See Section 1.6.1 for details*/
static hf_register_info hf [ ] = {
2009-03-15 15:40:55 +00:00
/* Tcap Service Response Time */
{ & hf_ansi_tcapsrt_SessionId ,
{ " Session Id " ,
" ansi_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 }
2009-03-15 15:40:55 +00:00
} ,
{ & hf_ansi_tcapsrt_BeginSession ,
{ " Begin Session " ,
" ansi_tcap.srt.begin " ,
FT_FRAMENUM , BASE_NONE , NULL , 0x0 ,
" SRT Begin of Session " , HFILL }
} ,
{ & hf_ansi_tcapsrt_EndSession ,
{ " End Session " ,
" ansi_tcap.srt.end " ,
FT_FRAMENUM , BASE_NONE , NULL , 0x0 ,
" SRT End of Session " , HFILL }
} ,
{ & hf_ansi_tcapsrt_SessionTime ,
{ " Session duration " ,
" ansi_tcap.srt.sessiontime " ,
FT_RELATIVE_TIME , BASE_NONE , NULL , 0x0 ,
" Duration of the TCAP session " , HFILL }
} ,
{ & hf_ansi_tcapsrt_Duplicate ,
{ " Request Duplicate " ,
" ansi_tcap.srt.duplicate " ,
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 }
2009-03-15 15:40:55 +00:00
} ,
2012-11-29 20:15:37 +00:00
{ & hf_ansi_tcap_bit_h ,
2011-11-16 19:52:00 +00:00
{ " Require Reply " , " ansi_tcap.req_rep " ,
FT_BOOLEAN , 16 , NULL , 0x8000 ,
NULL , HFILL }
} ,
2012-11-29 20:15:37 +00:00
{ & hf_ansi_tcap_op_family ,
2011-11-16 19:52:00 +00:00
{ " Family " ,
" ansi_tcap.op_family " ,
FT_UINT16 , BASE_DEC , VALS ( ansi_tcap_national_op_code_family_vals ) , 0x7f00 ,
NULL , HFILL }
} ,
2012-11-29 20:15:37 +00:00
{ & hf_ansi_tcap_op_specifier ,
2011-11-16 19:52:00 +00:00
{ " Specifier " ,
" ansi_tcap.op_specifier " ,
FT_UINT16 , BASE_DEC , NULL , 0x00ff ,
NULL , HFILL }
} ,
2007-08-14 22:10:55 +00:00
/*--- Included file: packet-ansi_tcap-hfarr.c ---*/
2016-03-09 03:17:51 +00:00
# line 1 ". / asn1 / ansi_tcap / packet-ansi_tcap-hfarr.c"
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_national ,
{ " national " , " ansi_tcap.national " ,
FT_INT32 , BASE_DEC , NULL , 0 ,
2010-05-11 03:53:31 +00:00
NULL , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_private ,
{ " private " , " ansi_tcap.private " ,
FT_INT32 , BASE_DEC , NULL , 0 ,
2010-05-11 03:53:31 +00:00
NULL , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_national_01 ,
{ " national " , " ansi_tcap.national " ,
FT_INT32 , BASE_DEC , NULL , 0 ,
2010-05-11 02:13:26 +00:00
" INTEGER_M128_127 " , HFILL } } ,
2007-08-16 19:59:55 +00:00
{ & hf_ansi_tcap_private_01 ,
{ " private " , " ansi_tcap.private " ,
2015-01-15 15:01:40 +00:00
FT_UINT32 , BASE_DEC , VALS ( ansi_tcap_ANSIMAPPrivateErrorcode_vals ) , 0 ,
" ANSIMAPPrivateErrorcode " , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_unidirectional ,
2013-05-27 20:26:49 +00:00
{ " unidirectional " , " ansi_tcap.unidirectional_element " ,
2007-08-14 22:10:55 +00:00
FT_NONE , BASE_NONE , NULL , 0 ,
2010-05-11 03:53:31 +00:00
NULL , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_queryWithPerm ,
2013-05-27 20:26:49 +00:00
{ " queryWithPerm " , " ansi_tcap.queryWithPerm_element " ,
2007-08-14 22:10:55 +00:00
FT_NONE , BASE_NONE , NULL , 0 ,
2010-05-11 03:53:31 +00:00
NULL , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_queryWithoutPerm ,
2013-05-27 20:26:49 +00:00
{ " queryWithoutPerm " , " ansi_tcap.queryWithoutPerm_element " ,
2007-08-14 22:10:55 +00:00
FT_NONE , BASE_NONE , NULL , 0 ,
2010-05-11 03:53:31 +00:00
NULL , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_response ,
2013-05-27 20:26:49 +00:00
{ " response " , " ansi_tcap.response_element " ,
2007-08-14 22:10:55 +00:00
FT_NONE , BASE_NONE , NULL , 0 ,
2010-05-11 03:53:31 +00:00
NULL , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_conversationWithPerm ,
2013-05-27 20:26:49 +00:00
{ " conversationWithPerm " , " ansi_tcap.conversationWithPerm_element " ,
2007-08-14 22:10:55 +00:00
FT_NONE , BASE_NONE , NULL , 0 ,
2010-05-11 03:53:31 +00:00
NULL , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_conversationWithoutPerm ,
2013-05-27 20:26:49 +00:00
{ " conversationWithoutPerm " , " ansi_tcap.conversationWithoutPerm_element " ,
2007-08-14 22:10:55 +00:00
FT_NONE , BASE_NONE , NULL , 0 ,
2010-05-11 03:53:31 +00:00
NULL , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_abort ,
2013-05-27 20:26:49 +00:00
{ " abort " , " ansi_tcap.abort_element " ,
2007-08-14 22:10:55 +00:00
FT_NONE , BASE_NONE , NULL , 0 ,
2010-05-11 03:53:31 +00:00
NULL , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_identifier ,
{ " identifier " , " ansi_tcap.identifier " ,
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:13:26 +00:00
" TransactionID " , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_dialoguePortion ,
2013-05-27 20:26:49 +00:00
{ " dialoguePortion " , " ansi_tcap.dialoguePortion_element " ,
2007-08-14 22:10:55 +00:00
FT_NONE , BASE_NONE , NULL , 0 ,
2010-05-11 02:13:26 +00:00
NULL , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_componentPortion ,
{ " componentPortion " , " ansi_tcap.componentPortion " ,
FT_UINT32 , BASE_DEC , NULL , 0 ,
2010-05-11 02:13:26 +00:00
" ComponentSequence " , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_dialogPortion ,
2013-05-27 20:26:49 +00:00
{ " dialogPortion " , " ansi_tcap.dialogPortion_element " ,
2007-08-14 22:10:55 +00:00
FT_NONE , BASE_NONE , NULL , 0 ,
2010-05-11 02:13:26 +00:00
" DialoguePortion " , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_causeInformation ,
{ " causeInformation " , " ansi_tcap.causeInformation " ,
FT_UINT32 , BASE_DEC , VALS ( ansi_tcap_T_causeInformation_vals ) , 0 ,
2010-05-11 03:53:31 +00:00
NULL , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_abortCause ,
{ " abortCause " , " ansi_tcap.abortCause " ,
2007-12-10 08:35:41 +00:00
FT_INT32 , BASE_DEC , VALS ( ansi_tcap_P_Abort_cause_U_vals ) , 0 ,
2010-05-11 02:13:26 +00:00
" P_Abort_cause " , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_userInformation ,
2013-05-27 20:26:49 +00:00
{ " userInformation " , " ansi_tcap.userInformation_element " ,
2007-08-14 22:10:55 +00:00
FT_NONE , BASE_NONE , NULL , 0 ,
2010-05-11 02:13:26 +00:00
" UserAbortInformation " , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_version ,
{ " version " , " ansi_tcap.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:13:26 +00:00
" ProtocolVersion " , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_applicationContext ,
{ " applicationContext " , " ansi_tcap.applicationContext " ,
FT_UINT32 , BASE_DEC , VALS ( ansi_tcap_T_applicationContext_vals ) , 0 ,
2010-05-11 03:53:31 +00:00
NULL , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_integerApplicationId ,
{ " integerApplicationId " , " ansi_tcap.integerApplicationId " ,
FT_INT32 , BASE_DEC , NULL , 0 ,
2010-05-11 02:13:26 +00:00
" IntegerApplicationContext " , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_objectApplicationId ,
{ " objectApplicationId " , " ansi_tcap.objectApplicationId " ,
FT_OID , BASE_NONE , NULL , 0 ,
2010-05-11 02:13:26 +00:00
" ObjectIDApplicationContext " , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_userInformation_01 ,
{ " userInformation " , " ansi_tcap.userInformation " ,
FT_UINT32 , BASE_DEC , NULL , 0 ,
2010-05-11 02:13:26 +00:00
NULL , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_securityContext ,
{ " securityContext " , " ansi_tcap.securityContext " ,
FT_UINT32 , BASE_DEC , VALS ( ansi_tcap_T_securityContext_vals ) , 0 ,
2010-05-11 03:53:31 +00:00
NULL , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_integerSecurityId ,
{ " integerSecurityId " , " ansi_tcap.integerSecurityId " ,
FT_INT32 , BASE_DEC , NULL , 0 ,
2010-05-11 02:13:26 +00:00
" INTEGER " , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_objectSecurityId ,
{ " objectSecurityId " , " ansi_tcap.objectSecurityId " ,
FT_OID , BASE_NONE , NULL , 0 ,
2010-05-11 02:13:26 +00:00
" OBJECT_IDENTIFIER " , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_confidentiality ,
2013-05-27 20:26:49 +00:00
{ " confidentiality " , " ansi_tcap.confidentiality_element " ,
2007-08-14 22:10:55 +00:00
FT_NONE , BASE_NONE , NULL , 0 ,
2010-05-11 02:13:26 +00:00
NULL , HFILL } } ,
2007-12-10 08:35:41 +00:00
{ & hf_ansi_tcap__untag_item ,
2013-05-27 20:26:49 +00:00
{ " _untag item " , " ansi_tcap._untag_item_element " ,
2007-08-14 22:10:55 +00:00
FT_NONE , BASE_NONE , NULL , 0 ,
2010-05-11 02:13:26 +00:00
" EXTERNAL " , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_confidentialityId ,
{ " confidentialityId " , " ansi_tcap.confidentialityId " ,
FT_UINT32 , BASE_DEC , VALS ( ansi_tcap_T_confidentialityId_vals ) , 0 ,
2010-05-11 03:53:31 +00:00
NULL , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_integerConfidentialityId ,
{ " integerConfidentialityId " , " ansi_tcap.integerConfidentialityId " ,
FT_INT32 , BASE_DEC , NULL , 0 ,
2010-05-11 02:13:26 +00:00
" INTEGER " , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_objectConfidentialityId ,
{ " objectConfidentialityId " , " ansi_tcap.objectConfidentialityId " ,
FT_OID , BASE_NONE , NULL , 0 ,
2010-05-11 02:13:26 +00:00
" OBJECT_IDENTIFIER " , HFILL } } ,
2007-12-10 08:35:41 +00:00
{ & hf_ansi_tcap__untag_item_01 ,
2009-05-16 22:07:03 +00:00
{ " ComponentPDU " , " ansi_tcap.ComponentPDU " ,
2007-08-14 22:10:55 +00:00
FT_UINT32 , BASE_DEC , VALS ( ansi_tcap_ComponentPDU_vals ) , 0 ,
2010-05-11 02:13:26 +00:00
NULL , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_invokeLast ,
2013-05-27 20:26:49 +00:00
{ " invokeLast " , " ansi_tcap.invokeLast_element " ,
2007-08-14 22:10:55 +00:00
FT_NONE , BASE_NONE , NULL , 0 ,
2010-05-11 02:13:26 +00:00
" Invoke " , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_returnResultLast ,
2013-05-27 20:26:49 +00:00
{ " returnResultLast " , " ansi_tcap.returnResultLast_element " ,
2007-08-14 22:10:55 +00:00
FT_NONE , BASE_NONE , NULL , 0 ,
2010-05-11 02:13:26 +00:00
" ReturnResult " , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_returnError ,
2013-05-27 20:26:49 +00:00
{ " returnError " , " ansi_tcap.returnError_element " ,
2007-08-14 22:10:55 +00:00
FT_NONE , BASE_NONE , NULL , 0 ,
2010-05-11 02:13:26 +00:00
NULL , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_reject ,
2013-05-27 20:26:49 +00:00
{ " reject " , " ansi_tcap.reject_element " ,
2007-08-14 22:10:55 +00:00
FT_NONE , BASE_NONE , NULL , 0 ,
2010-05-11 02:13:26 +00:00
NULL , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_invokeNotLast ,
2013-05-27 20:26:49 +00:00
{ " invokeNotLast " , " ansi_tcap.invokeNotLast_element " ,
2007-08-14 22:10:55 +00:00
FT_NONE , BASE_NONE , NULL , 0 ,
2010-05-11 02:13:26 +00:00
" Invoke " , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_returnResultNotLast ,
2013-05-27 20:26:49 +00:00
{ " returnResultNotLast " , " ansi_tcap.returnResultNotLast_element " ,
2007-08-14 22:10:55 +00:00
FT_NONE , BASE_NONE , NULL , 0 ,
2010-05-11 02:13:26 +00:00
" ReturnResult " , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_componentIDs ,
{ " componentIDs " , " ansi_tcap.componentIDs " ,
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 03:53:31 +00:00
NULL , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_operationCode ,
{ " operationCode " , " ansi_tcap.operationCode " ,
FT_UINT32 , BASE_DEC , VALS ( ansi_tcap_OperationCode_vals ) , 0 ,
2010-05-11 02:13:26 +00:00
NULL , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_parameter ,
2013-05-27 20:26:49 +00:00
{ " parameter " , " ansi_tcap.parameter_element " ,
2010-06-29 18:07:33 +00:00
FT_NONE , BASE_NONE , NULL , 0 ,
2010-05-11 03:53:31 +00:00
NULL , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_componentID ,
{ " componentID " , " ansi_tcap.componentID " ,
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 03:53:31 +00:00
NULL , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_parameter_01 ,
2013-05-27 20:26:49 +00:00
{ " parameter " , " ansi_tcap.parameter_element " ,
2010-06-29 18:07:33 +00:00
FT_NONE , BASE_NONE , NULL , 0 ,
2010-05-11 02:13:26 +00:00
" T_parameter_01 " , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_componentID_01 ,
{ " componentID " , " ansi_tcap.componentID " ,
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:13:26 +00:00
" T_componentID_01 " , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_errorCode ,
{ " errorCode " , " ansi_tcap.errorCode " ,
FT_UINT32 , BASE_DEC , VALS ( ansi_tcap_ErrorCode_vals ) , 0 ,
2010-05-11 02:13:26 +00:00
NULL , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_parameter_02 ,
2013-05-27 20:26:49 +00:00
{ " parameter " , " ansi_tcap.parameter_element " ,
2010-06-29 18:07:33 +00:00
FT_NONE , BASE_NONE , NULL , 0 ,
2010-05-11 02:13:26 +00:00
" T_parameter_02 " , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_componentID_02 ,
{ " componentID " , " ansi_tcap.componentID " ,
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:13:26 +00:00
" OCTET_STRING_SIZE_0_1 " , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_rejectProblem ,
{ " rejectProblem " , " ansi_tcap.rejectProblem " ,
FT_INT32 , BASE_DEC , VALS ( ansi_tcap_Problem_vals ) , 0 ,
2010-05-11 02:13:26 +00:00
" Problem " , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_parameter_03 ,
{ " parameter " , " ansi_tcap.parameter " ,
FT_UINT32 , BASE_DEC , VALS ( ansi_tcap_T_parameter_03_vals ) , 0 ,
2010-05-11 02:13:26 +00:00
" T_parameter_03 " , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_paramSequence ,
2013-05-27 20:26:49 +00:00
{ " paramSequence " , " ansi_tcap.paramSequence_element " ,
2007-08-14 22:10:55 +00:00
FT_NONE , BASE_NONE , NULL , 0 ,
2010-05-11 03:53:31 +00:00
NULL , HFILL } } ,
2007-08-14 22:10:55 +00:00
{ & hf_ansi_tcap_paramSet ,
2013-05-27 20:26:49 +00:00
{ " paramSet " , " ansi_tcap.paramSet_element " ,
2007-08-14 22:10:55 +00:00
FT_NONE , BASE_NONE , NULL , 0 ,
2010-05-11 03:53:31 +00:00
NULL , HFILL } } ,
2007-08-14 22:10:55 +00:00
/*--- End of included file: packet-ansi_tcap-hfarr.c ---*/
2018-09-06 12:53:09 +00:00
# line 441 ". / asn1 / ansi_tcap / packet-ansi_tcap-template.c"
2007-08-14 22:10:55 +00:00
} ;
/* Setup protocol subtree array */
static gint * ett [ ] = {
2009-03-15 15:40:55 +00:00
& ett_tcap ,
& ett_param ,
& ett_otid ,
& ett_dtid ,
& ett_ansi_tcap_stat ,
2012-11-29 20:15:37 +00:00
& ett_ansi_tcap_op_code_nat ,
2007-08-14 22:10:55 +00:00
/*--- Included file: packet-ansi_tcap-ettarr.c ---*/
2016-03-09 03:17:51 +00:00
# line 1 ". / asn1 / ansi_tcap / packet-ansi_tcap-ettarr.c"
2007-08-14 22:10:55 +00:00
& ett_ansi_tcap_OperationCode ,
& ett_ansi_tcap_ErrorCode ,
& ett_ansi_tcap_PackageType ,
& ett_ansi_tcap_UniTransactionPDU ,
& ett_ansi_tcap_TransactionPDU ,
& ett_ansi_tcap_Abort ,
& ett_ansi_tcap_T_causeInformation ,
2007-12-10 08:35:41 +00:00
& ett_ansi_tcap_DialoguePortion_U ,
2007-08-14 22:10:55 +00:00
& ett_ansi_tcap_T_applicationContext ,
& ett_ansi_tcap_T_securityContext ,
2007-12-10 08:35:41 +00:00
& ett_ansi_tcap_UserInformation_U ,
2007-08-14 22:10:55 +00:00
& ett_ansi_tcap_Confidentiality ,
& ett_ansi_tcap_T_confidentialityId ,
2007-12-10 08:35:41 +00:00
& ett_ansi_tcap_SEQUENCE_OF_ComponentPDU ,
2007-08-14 22:10:55 +00:00
& ett_ansi_tcap_ComponentPDU ,
& ett_ansi_tcap_Invoke ,
& ett_ansi_tcap_ReturnResult ,
& ett_ansi_tcap_ReturnError ,
& ett_ansi_tcap_Reject ,
& ett_ansi_tcap_T_parameter_03 ,
& ett_ansi_tcap_T_paramSequence ,
& ett_ansi_tcap_T_paramSet ,
/*--- End of included file: packet-ansi_tcap-ettarr.c ---*/
2018-09-06 12:53:09 +00:00
# line 452 ". / asn1 / ansi_tcap / packet-ansi_tcap-template.c"
2007-08-14 22:10:55 +00:00
} ;
2014-08-08 13:19:29 +00:00
static ei_register_info ei [ ] = {
{ & ei_ansi_tcap_dissector_not_implemented , { " ansi_tcap.dissector_not_implemented " , PI_UNDECODED , PI_WARN , " Dissector not implemented " , EXPFILL } } ,
} ;
expert_module_t * expert_ansi_tcap ;
2012-11-29 20:15:37 +00:00
static const enum_val_t ansi_tcap_response_matching_type_values [ ] = {
2016-01-01 05:15:19 +00:00
{ " Only Transaction ID will be used in Invoke/response matching " , " Transaction ID only " , ANSI_TCAP_TID_ONLY } ,
{ " Transaction ID and Source will be used in Invoke/response matching " , " Transaction ID and Source " , ANSI_TCAP_TID_AND_SOURCE } ,
{ " Transaction ID Source and Destination will be used in Invoke/response matching " , " Transaction ID Source and Destination " , ANSI_TCAP_TID_SOURCE_AND_DEST } ,
2012-11-29 20:15:37 +00:00
{ NULL , NULL , - 1 }
} ;
2007-08-14 22:10:55 +00:00
/* Register the protocol name and description */
proto_ansi_tcap = proto_register_protocol ( PNAME , PSNAME , PFNAME ) ;
2015-12-09 02:06:20 +00:00
register_dissector ( " ansi_tcap " , dissect_ansi_tcap , proto_ansi_tcap ) ;
2007-08-14 22:10:55 +00:00
2011-11-17 20:05:03 +00:00
/* Note the high bit should be masked off when registering in this table (0x7fff)*/
2016-08-30 22:51:54 +00:00
ansi_tcap_national_opcode_table = register_dissector_table ( " ansi_tcap.nat.opcode " , " ANSI TCAP National Opcodes " , proto_ansi_tcap , FT_UINT16 , BASE_DEC ) ;
2007-08-14 22:10:55 +00:00
/* Required function calls to register the header fields and subtrees used */
proto_register_field_array ( proto_ansi_tcap , hf , array_length ( hf ) ) ;
proto_register_subtree_array ( ett , array_length ( ett ) ) ;
2014-08-08 13:19:29 +00:00
expert_ansi_tcap = expert_register_protocol ( proto_ansi_tcap ) ;
expert_register_field_array ( expert_ansi_tcap , ei , array_length ( ei ) ) ;
2007-08-14 22:10:55 +00:00
2011-02-04 16:12:59 +00:00
ansi_tcap_module = prefs_register_protocol ( proto_ansi_tcap , proto_reg_handoff_ansi_tcap ) ;
2012-08-18 06:53:39 +00:00
prefs_register_enum_preference ( ansi_tcap_module , " transaction.matchtype " ,
" Type of matching invoke/response " ,
2015-11-18 15:55:07 +00:00
" Type of matching invoke/response, risk of mismatch if loose matching chosen " ,
2012-08-18 06:53:39 +00:00
& ansi_tcap_response_matching_type , ansi_tcap_response_matching_type_values , FALSE ) ;
2007-08-14 22:10:55 +00:00
2017-01-29 03:29:32 +00:00
TransactionId_table = wmem_map_new_autoreset ( wmem_epan_scope ( ) , wmem_file_scope ( ) , wmem_str_hash , g_str_equal ) ;
2007-08-14 22:10:55 +00:00
}